shop.balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

moment-with-locales.js (465720B)


      1 ;(function (global, factory) {
      2     typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
      3     typeof define === 'function' && define.amd ? define(factory) :
      4     global.moment = factory()
      5 }(this, (function () { 'use strict';
      6 
      7 var hookCallback;
      8 
      9 function hooks () {
     10     return hookCallback.apply(null, arguments);
     11 }
     12 
     13 // This is done to register the method called with moment()
     14 // without creating circular dependencies.
     15 function setHookCallback (callback) {
     16     hookCallback = callback;
     17 }
     18 
     19 function isArray(input) {
     20     return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
     21 }
     22 
     23 function isObject(input) {
     24     // IE8 will treat undefined and null as object if it wasn't for
     25     // input != null
     26     return input != null && Object.prototype.toString.call(input) === '[object Object]';
     27 }
     28 
     29 function isObjectEmpty(obj) {
     30     var k;
     31     for (k in obj) {
     32         // even if its not own property I'd still call it non-empty
     33         return false;
     34     }
     35     return true;
     36 }
     37 
     38 function isUndefined(input) {
     39     return input === void 0;
     40 }
     41 
     42 function isNumber(input) {
     43     return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';
     44 }
     45 
     46 function isDate(input) {
     47     return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';
     48 }
     49 
     50 function map(arr, fn) {
     51     var res = [], i;
     52     for (i = 0; i < arr.length; ++i) {
     53         res.push(fn(arr[i], i));
     54     }
     55     return res;
     56 }
     57 
     58 function hasOwnProp(a, b) {
     59     return Object.prototype.hasOwnProperty.call(a, b);
     60 }
     61 
     62 function extend(a, b) {
     63     for (var i in b) {
     64         if (hasOwnProp(b, i)) {
     65             a[i] = b[i];
     66         }
     67     }
     68 
     69     if (hasOwnProp(b, 'toString')) {
     70         a.toString = b.toString;
     71     }
     72 
     73     if (hasOwnProp(b, 'valueOf')) {
     74         a.valueOf = b.valueOf;
     75     }
     76 
     77     return a;
     78 }
     79 
     80 function createUTC (input, format, locale, strict) {
     81     return createLocalOrUTC(input, format, locale, strict, true).utc();
     82 }
     83 
     84 function defaultParsingFlags() {
     85     // We need to deep clone this object.
     86     return {
     87         empty           : false,
     88         unusedTokens    : [],
     89         unusedInput     : [],
     90         overflow        : -2,
     91         charsLeftOver   : 0,
     92         nullInput       : false,
     93         invalidMonth    : null,
     94         invalidFormat   : false,
     95         userInvalidated : false,
     96         iso             : false,
     97         parsedDateParts : [],
     98         meridiem        : null,
     99         rfc2822         : false,
    100         weekdayMismatch : false
    101     };
    102 }
    103 
    104 function getParsingFlags(m) {
    105     if (m._pf == null) {
    106         m._pf = defaultParsingFlags();
    107     }
    108     return m._pf;
    109 }
    110 
    111 var some;
    112 if (Array.prototype.some) {
    113     some = Array.prototype.some;
    114 } else {
    115     some = function (fun) {
    116         var t = Object(this);
    117         var len = t.length >>> 0;
    118 
    119         for (var i = 0; i < len; i++) {
    120             if (i in t && fun.call(this, t[i], i, t)) {
    121                 return true;
    122             }
    123         }
    124 
    125         return false;
    126     };
    127 }
    128 
    129 var some$1 = some;
    130 
    131 function isValid(m) {
    132     if (m._isValid == null) {
    133         var flags = getParsingFlags(m);
    134         var parsedParts = some$1.call(flags.parsedDateParts, function (i) {
    135             return i != null;
    136         });
    137         var isNowValid = !isNaN(m._d.getTime()) &&
    138             flags.overflow < 0 &&
    139             !flags.empty &&
    140             !flags.invalidMonth &&
    141             !flags.invalidWeekday &&
    142             !flags.nullInput &&
    143             !flags.invalidFormat &&
    144             !flags.userInvalidated &&
    145             (!flags.meridiem || (flags.meridiem && parsedParts));
    146 
    147         if (m._strict) {
    148             isNowValid = isNowValid &&
    149                 flags.charsLeftOver === 0 &&
    150                 flags.unusedTokens.length === 0 &&
    151                 flags.bigHour === undefined;
    152         }
    153 
    154         if (Object.isFrozen == null || !Object.isFrozen(m)) {
    155             m._isValid = isNowValid;
    156         }
    157         else {
    158             return isNowValid;
    159         }
    160     }
    161     return m._isValid;
    162 }
    163 
    164 function createInvalid (flags) {
    165     var m = createUTC(NaN);
    166     if (flags != null) {
    167         extend(getParsingFlags(m), flags);
    168     }
    169     else {
    170         getParsingFlags(m).userInvalidated = true;
    171     }
    172 
    173     return m;
    174 }
    175 
    176 // Plugins that add properties should also add the key here (null value),
    177 // so we can properly clone ourselves.
    178 var momentProperties = hooks.momentProperties = [];
    179 
    180 function copyConfig(to, from) {
    181     var i, prop, val;
    182 
    183     if (!isUndefined(from._isAMomentObject)) {
    184         to._isAMomentObject = from._isAMomentObject;
    185     }
    186     if (!isUndefined(from._i)) {
    187         to._i = from._i;
    188     }
    189     if (!isUndefined(from._f)) {
    190         to._f = from._f;
    191     }
    192     if (!isUndefined(from._l)) {
    193         to._l = from._l;
    194     }
    195     if (!isUndefined(from._strict)) {
    196         to._strict = from._strict;
    197     }
    198     if (!isUndefined(from._tzm)) {
    199         to._tzm = from._tzm;
    200     }
    201     if (!isUndefined(from._isUTC)) {
    202         to._isUTC = from._isUTC;
    203     }
    204     if (!isUndefined(from._offset)) {
    205         to._offset = from._offset;
    206     }
    207     if (!isUndefined(from._pf)) {
    208         to._pf = getParsingFlags(from);
    209     }
    210     if (!isUndefined(from._locale)) {
    211         to._locale = from._locale;
    212     }
    213 
    214     if (momentProperties.length > 0) {
    215         for (i = 0; i < momentProperties.length; i++) {
    216             prop = momentProperties[i];
    217             val = from[prop];
    218             if (!isUndefined(val)) {
    219                 to[prop] = val;
    220             }
    221         }
    222     }
    223 
    224     return to;
    225 }
    226 
    227 var updateInProgress = false;
    228 
    229 // Moment prototype object
    230 function Moment(config) {
    231     copyConfig(this, config);
    232     this._d = new Date(config._d != null ? config._d.getTime() : NaN);
    233     if (!this.isValid()) {
    234         this._d = new Date(NaN);
    235     }
    236     // Prevent infinite loop in case updateOffset creates new moment
    237     // objects.
    238     if (updateInProgress === false) {
    239         updateInProgress = true;
    240         hooks.updateOffset(this);
    241         updateInProgress = false;
    242     }
    243 }
    244 
    245 function isMoment (obj) {
    246     return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);
    247 }
    248 
    249 function absFloor (number) {
    250     if (number < 0) {
    251         // -0 -> 0
    252         return Math.ceil(number) || 0;
    253     } else {
    254         return Math.floor(number);
    255     }
    256 }
    257 
    258 function toInt(argumentForCoercion) {
    259     var coercedNumber = +argumentForCoercion,
    260         value = 0;
    261 
    262     if (coercedNumber !== 0 && isFinite(coercedNumber)) {
    263         value = absFloor(coercedNumber);
    264     }
    265 
    266     return value;
    267 }
    268 
    269 // compare two arrays, return the number of differences
    270 function compareArrays(array1, array2, dontConvert) {
    271     var len = Math.min(array1.length, array2.length),
    272         lengthDiff = Math.abs(array1.length - array2.length),
    273         diffs = 0,
    274         i;
    275     for (i = 0; i < len; i++) {
    276         if ((dontConvert && array1[i] !== array2[i]) ||
    277             (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {
    278             diffs++;
    279         }
    280     }
    281     return diffs + lengthDiff;
    282 }
    283 
    284 function warn(msg) {
    285     if (hooks.suppressDeprecationWarnings === false &&
    286             (typeof console !==  'undefined') && console.warn) {
    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             var arg;
    301             for (var i = 0; i < arguments.length; i++) {
    302                 arg = '';
    303                 if (typeof arguments[i] === 'object') {
    304                     arg += '\n[' + i + '] ';
    305                     for (var key in arguments[0]) {
    306                         arg += key + ': ' + arguments[0][key] + ', ';
    307                     }
    308                     arg = arg.slice(0, -2); // Remove trailing comma and space
    309                 } else {
    310                     arg = arguments[i];
    311                 }
    312                 args.push(arg);
    313             }
    314             warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack);
    315             firstTime = false;
    316         }
    317         return fn.apply(this, arguments);
    318     }, fn);
    319 }
    320 
    321 var deprecations = {};
    322 
    323 function deprecateSimple(name, msg) {
    324     if (hooks.deprecationHandler != null) {
    325         hooks.deprecationHandler(name, msg);
    326     }
    327     if (!deprecations[name]) {
    328         warn(msg);
    329         deprecations[name] = true;
    330     }
    331 }
    332 
    333 hooks.suppressDeprecationWarnings = false;
    334 hooks.deprecationHandler = null;
    335 
    336 function isFunction(input) {
    337     return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
    338 }
    339 
    340 function set (config) {
    341     var prop, i;
    342     for (i in config) {
    343         prop = config[i];
    344         if (isFunction(prop)) {
    345             this[i] = prop;
    346         } else {
    347             this['_' + i] = prop;
    348         }
    349     }
    350     this._config = config;
    351     // Lenient ordinal parsing accepts just a number in addition to
    352     // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
    353     // TODO: Remove "ordinalParse" fallback in next major release.
    354     this._dayOfMonthOrdinalParseLenient = new RegExp(
    355         (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
    356             '|' + (/\d{1,2}/).source);
    357 }
    358 
    359 function mergeConfigs(parentConfig, childConfig) {
    360     var res = extend({}, parentConfig), prop;
    361     for (prop in childConfig) {
    362         if (hasOwnProp(childConfig, prop)) {
    363             if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
    364                 res[prop] = {};
    365                 extend(res[prop], parentConfig[prop]);
    366                 extend(res[prop], childConfig[prop]);
    367             } else if (childConfig[prop] != null) {
    368                 res[prop] = childConfig[prop];
    369             } else {
    370                 delete res[prop];
    371             }
    372         }
    373     }
    374     for (prop in parentConfig) {
    375         if (hasOwnProp(parentConfig, prop) &&
    376                 !hasOwnProp(childConfig, prop) &&
    377                 isObject(parentConfig[prop])) {
    378             // make sure changes to properties don't modify parent config
    379             res[prop] = extend({}, res[prop]);
    380         }
    381     }
    382     return res;
    383 }
    384 
    385 function Locale(config) {
    386     if (config != null) {
    387         this.set(config);
    388     }
    389 }
    390 
    391 var keys;
    392 
    393 if (Object.keys) {
    394     keys = Object.keys;
    395 } else {
    396     keys = function (obj) {
    397         var i, res = [];
    398         for (i in obj) {
    399             if (hasOwnProp(obj, i)) {
    400                 res.push(i);
    401             }
    402         }
    403         return res;
    404     };
    405 }
    406 
    407 var keys$1 = keys;
    408 
    409 var defaultCalendar = {
    410     sameDay : '[Today at] LT',
    411     nextDay : '[Tomorrow at] LT',
    412     nextWeek : 'dddd [at] LT',
    413     lastDay : '[Yesterday at] LT',
    414     lastWeek : '[Last] dddd [at] LT',
    415     sameElse : 'L'
    416 };
    417 
    418 function calendar (key, mom, now) {
    419     var output = this._calendar[key] || this._calendar['sameElse'];
    420     return isFunction(output) ? output.call(mom, now) : output;
    421 }
    422 
    423 var defaultLongDateFormat = {
    424     LTS  : 'h:mm:ss A',
    425     LT   : 'h:mm A',
    426     L    : 'MM/DD/YYYY',
    427     LL   : 'MMMM D, YYYY',
    428     LLL  : 'MMMM D, YYYY h:mm A',
    429     LLLL : 'dddd, MMMM D, YYYY h:mm A'
    430 };
    431 
    432 function longDateFormat (key) {
    433     var format = this._longDateFormat[key],
    434         formatUpper = this._longDateFormat[key.toUpperCase()];
    435 
    436     if (format || !formatUpper) {
    437         return format;
    438     }
    439 
    440     this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
    441         return val.slice(1);
    442     });
    443 
    444     return this._longDateFormat[key];
    445 }
    446 
    447 var defaultInvalidDate = 'Invalid date';
    448 
    449 function invalidDate () {
    450     return this._invalidDate;
    451 }
    452 
    453 var defaultOrdinal = '%d';
    454 var defaultDayOfMonthOrdinalParse = /\d{1,2}/;
    455 
    456 function ordinal (number) {
    457     return this._ordinal.replace('%d', number);
    458 }
    459 
    460 var defaultRelativeTime = {
    461     future : 'in %s',
    462     past   : '%s ago',
    463     s  : 'a few seconds',
    464     ss : '%d seconds',
    465     m  : 'a minute',
    466     mm : '%d minutes',
    467     h  : 'an hour',
    468     hh : '%d hours',
    469     d  : 'a day',
    470     dd : '%d days',
    471     M  : 'a month',
    472     MM : '%d months',
    473     y  : 'a year',
    474     yy : '%d years'
    475 };
    476 
    477 function relativeTime (number, withoutSuffix, string, isFuture) {
    478     var output = this._relativeTime[string];
    479     return (isFunction(output)) ?
    480         output(number, withoutSuffix, string, isFuture) :
    481         output.replace(/%d/i, number);
    482 }
    483 
    484 function pastFuture (diff, output) {
    485     var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
    486     return isFunction(format) ? format(output) : format.replace(/%s/i, output);
    487 }
    488 
    489 var aliases = {};
    490 
    491 function addUnitAlias (unit, shorthand) {
    492     var lowerCase = unit.toLowerCase();
    493     aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
    494 }
    495 
    496 function normalizeUnits(units) {
    497     return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;
    498 }
    499 
    500 function normalizeObjectUnits(inputObject) {
    501     var normalizedInput = {},
    502         normalizedProp,
    503         prop;
    504 
    505     for (prop in inputObject) {
    506         if (hasOwnProp(inputObject, prop)) {
    507             normalizedProp = normalizeUnits(prop);
    508             if (normalizedProp) {
    509                 normalizedInput[normalizedProp] = inputObject[prop];
    510             }
    511         }
    512     }
    513 
    514     return normalizedInput;
    515 }
    516 
    517 var priorities = {};
    518 
    519 function addUnitPriority(unit, priority) {
    520     priorities[unit] = priority;
    521 }
    522 
    523 function getPrioritizedUnits(unitsObj) {
    524     var units = [];
    525     for (var u in unitsObj) {
    526         units.push({unit: u, priority: priorities[u]});
    527     }
    528     units.sort(function (a, b) {
    529         return a.priority - b.priority;
    530     });
    531     return units;
    532 }
    533 
    534 function makeGetSet (unit, keepTime) {
    535     return function (value) {
    536         if (value != null) {
    537             set$1(this, unit, value);
    538             hooks.updateOffset(this, keepTime);
    539             return this;
    540         } else {
    541             return get(this, unit);
    542         }
    543     };
    544 }
    545 
    546 function get (mom, unit) {
    547     return mom.isValid() ?
    548         mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;
    549 }
    550 
    551 function set$1 (mom, unit, value) {
    552     if (mom.isValid()) {
    553         mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
    554     }
    555 }
    556 
    557 // MOMENTS
    558 
    559 function stringGet (units) {
    560     units = normalizeUnits(units);
    561     if (isFunction(this[units])) {
    562         return this[units]();
    563     }
    564     return this;
    565 }
    566 
    567 
    568 function stringSet (units, value) {
    569     if (typeof units === 'object') {
    570         units = normalizeObjectUnits(units);
    571         var prioritized = getPrioritizedUnits(units);
    572         for (var i = 0; i < prioritized.length; i++) {
    573             this[prioritized[i].unit](units[prioritized[i].unit]);
    574         }
    575     } else {
    576         units = normalizeUnits(units);
    577         if (isFunction(this[units])) {
    578             return this[units](value);
    579         }
    580     }
    581     return this;
    582 }
    583 
    584 function zeroFill(number, targetLength, forceSign) {
    585     var absNumber = '' + Math.abs(number),
    586         zerosToFill = targetLength - absNumber.length,
    587         sign = number >= 0;
    588     return (sign ? (forceSign ? '+' : '') : '-') +
    589         Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
    590 }
    591 
    592 var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;
    593 
    594 var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
    595 
    596 var formatFunctions = {};
    597 
    598 var formatTokenFunctions = {};
    599 
    600 // token:    'M'
    601 // padded:   ['MM', 2]
    602 // ordinal:  'Mo'
    603 // callback: function () { this.month() + 1 }
    604 function addFormatToken (token, padded, ordinal, callback) {
    605     var func = callback;
    606     if (typeof callback === 'string') {
    607         func = function () {
    608             return this[callback]();
    609         };
    610     }
    611     if (token) {
    612         formatTokenFunctions[token] = func;
    613     }
    614     if (padded) {
    615         formatTokenFunctions[padded[0]] = function () {
    616             return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
    617         };
    618     }
    619     if (ordinal) {
    620         formatTokenFunctions[ordinal] = function () {
    621             return this.localeData().ordinal(func.apply(this, arguments), token);
    622         };
    623     }
    624 }
    625 
    626 function removeFormattingTokens(input) {
    627     if (input.match(/\[[\s\S]/)) {
    628         return input.replace(/^\[|\]$/g, '');
    629     }
    630     return input.replace(/\\/g, '');
    631 }
    632 
    633 function makeFormatFunction(format) {
    634     var array = format.match(formattingTokens), i, length;
    635 
    636     for (i = 0, length = array.length; i < length; i++) {
    637         if (formatTokenFunctions[array[i]]) {
    638             array[i] = formatTokenFunctions[array[i]];
    639         } else {
    640             array[i] = removeFormattingTokens(array[i]);
    641         }
    642     }
    643 
    644     return function (mom) {
    645         var output = '', i;
    646         for (i = 0; i < length; i++) {
    647             output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];
    648         }
    649         return output;
    650     };
    651 }
    652 
    653 // format date using native date object
    654 function formatMoment(m, format) {
    655     if (!m.isValid()) {
    656         return m.localeData().invalidDate();
    657     }
    658 
    659     format = expandFormat(format, m.localeData());
    660     formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
    661 
    662     return formatFunctions[format](m);
    663 }
    664 
    665 function expandFormat(format, locale) {
    666     var i = 5;
    667 
    668     function replaceLongDateFormatTokens(input) {
    669         return locale.longDateFormat(input) || input;
    670     }
    671 
    672     localFormattingTokens.lastIndex = 0;
    673     while (i >= 0 && localFormattingTokens.test(format)) {
    674         format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
    675         localFormattingTokens.lastIndex = 0;
    676         i -= 1;
    677     }
    678 
    679     return format;
    680 }
    681 
    682 var match1         = /\d/;            //       0 - 9
    683 var match2         = /\d\d/;          //      00 - 99
    684 var match3         = /\d{3}/;         //     000 - 999
    685 var match4         = /\d{4}/;         //    0000 - 9999
    686 var match6         = /[+-]?\d{6}/;    // -999999 - 999999
    687 var match1to2      = /\d\d?/;         //       0 - 99
    688 var match3to4      = /\d\d\d\d?/;     //     999 - 9999
    689 var match5to6      = /\d\d\d\d\d\d?/; //   99999 - 999999
    690 var match1to3      = /\d{1,3}/;       //       0 - 999
    691 var match1to4      = /\d{1,4}/;       //       0 - 9999
    692 var match1to6      = /[+-]?\d{1,6}/;  // -999999 - 999999
    693 
    694 var matchUnsigned  = /\d+/;           //       0 - inf
    695 var matchSigned    = /[+-]?\d+/;      //    -inf - inf
    696 
    697 var matchOffset    = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z
    698 var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z
    699 
    700 var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123
    701 
    702 // any word (or two) characters or numbers including two/three word month in arabic.
    703 // includes scottish gaelic two word and hyphenated months
    704 var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;
    705 
    706 
    707 var regexes = {};
    708 
    709 function addRegexToken (token, regex, strictRegex) {
    710     regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {
    711         return (isStrict && strictRegex) ? strictRegex : regex;
    712     };
    713 }
    714 
    715 function getParseRegexForToken (token, config) {
    716     if (!hasOwnProp(regexes, token)) {
    717         return new RegExp(unescapeFormat(token));
    718     }
    719 
    720     return regexes[token](config._strict, config._locale);
    721 }
    722 
    723 // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
    724 function unescapeFormat(s) {
    725     return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
    726         return p1 || p2 || p3 || p4;
    727     }));
    728 }
    729 
    730 function regexEscape(s) {
    731     return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
    732 }
    733 
    734 var tokens = {};
    735 
    736 function addParseToken (token, callback) {
    737     var i, func = callback;
    738     if (typeof token === 'string') {
    739         token = [token];
    740     }
    741     if (isNumber(callback)) {
    742         func = function (input, array) {
    743             array[callback] = toInt(input);
    744         };
    745     }
    746     for (i = 0; i < token.length; i++) {
    747         tokens[token[i]] = func;
    748     }
    749 }
    750 
    751 function addWeekParseToken (token, callback) {
    752     addParseToken(token, function (input, array, config, token) {
    753         config._w = config._w || {};
    754         callback(input, config._w, config, token);
    755     });
    756 }
    757 
    758 function addTimeToArrayFromToken(token, input, config) {
    759     if (input != null && hasOwnProp(tokens, token)) {
    760         tokens[token](input, config._a, config, token);
    761     }
    762 }
    763 
    764 var YEAR = 0;
    765 var MONTH = 1;
    766 var DATE = 2;
    767 var HOUR = 3;
    768 var MINUTE = 4;
    769 var SECOND = 5;
    770 var MILLISECOND = 6;
    771 var WEEK = 7;
    772 var WEEKDAY = 8;
    773 
    774 var indexOf;
    775 
    776 if (Array.prototype.indexOf) {
    777     indexOf = Array.prototype.indexOf;
    778 } else {
    779     indexOf = function (o) {
    780         // I know
    781         var i;
    782         for (i = 0; i < this.length; ++i) {
    783             if (this[i] === o) {
    784                 return i;
    785             }
    786         }
    787         return -1;
    788     };
    789 }
    790 
    791 var indexOf$1 = indexOf;
    792 
    793 function daysInMonth(year, month) {
    794     return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();
    795 }
    796 
    797 // FORMATTING
    798 
    799 addFormatToken('M', ['MM', 2], 'Mo', function () {
    800     return this.month() + 1;
    801 });
    802 
    803 addFormatToken('MMM', 0, 0, function (format) {
    804     return this.localeData().monthsShort(this, format);
    805 });
    806 
    807 addFormatToken('MMMM', 0, 0, function (format) {
    808     return this.localeData().months(this, format);
    809 });
    810 
    811 // ALIASES
    812 
    813 addUnitAlias('month', 'M');
    814 
    815 // PRIORITY
    816 
    817 addUnitPriority('month', 8);
    818 
    819 // PARSING
    820 
    821 addRegexToken('M',    match1to2);
    822 addRegexToken('MM',   match1to2, match2);
    823 addRegexToken('MMM',  function (isStrict, locale) {
    824     return locale.monthsShortRegex(isStrict);
    825 });
    826 addRegexToken('MMMM', function (isStrict, locale) {
    827     return locale.monthsRegex(isStrict);
    828 });
    829 
    830 addParseToken(['M', 'MM'], function (input, array) {
    831     array[MONTH] = toInt(input) - 1;
    832 });
    833 
    834 addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
    835     var month = config._locale.monthsParse(input, token, config._strict);
    836     // if we didn't find a month name, mark the date as invalid.
    837     if (month != null) {
    838         array[MONTH] = month;
    839     } else {
    840         getParsingFlags(config).invalidMonth = input;
    841     }
    842 });
    843 
    844 // LOCALES
    845 
    846 var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/;
    847 var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');
    848 function localeMonths (m, format) {
    849     if (!m) {
    850         return isArray(this._months) ? this._months :
    851             this._months['standalone'];
    852     }
    853     return isArray(this._months) ? this._months[m.month()] :
    854         this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];
    855 }
    856 
    857 var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
    858 function localeMonthsShort (m, format) {
    859     if (!m) {
    860         return isArray(this._monthsShort) ? this._monthsShort :
    861             this._monthsShort['standalone'];
    862     }
    863     return isArray(this._monthsShort) ? this._monthsShort[m.month()] :
    864         this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
    865 }
    866 
    867 function handleStrictParse(monthName, format, strict) {
    868     var i, ii, mom, llc = monthName.toLocaleLowerCase();
    869     if (!this._monthsParse) {
    870         // this is not used
    871         this._monthsParse = [];
    872         this._longMonthsParse = [];
    873         this._shortMonthsParse = [];
    874         for (i = 0; i < 12; ++i) {
    875             mom = createUTC([2000, i]);
    876             this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
    877             this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
    878         }
    879     }
    880 
    881     if (strict) {
    882         if (format === 'MMM') {
    883             ii = indexOf$1.call(this._shortMonthsParse, llc);
    884             return ii !== -1 ? ii : null;
    885         } else {
    886             ii = indexOf$1.call(this._longMonthsParse, llc);
    887             return ii !== -1 ? ii : null;
    888         }
    889     } else {
    890         if (format === 'MMM') {
    891             ii = indexOf$1.call(this._shortMonthsParse, llc);
    892             if (ii !== -1) {
    893                 return ii;
    894             }
    895             ii = indexOf$1.call(this._longMonthsParse, llc);
    896             return ii !== -1 ? ii : null;
    897         } else {
    898             ii = indexOf$1.call(this._longMonthsParse, llc);
    899             if (ii !== -1) {
    900                 return ii;
    901             }
    902             ii = indexOf$1.call(this._shortMonthsParse, llc);
    903             return ii !== -1 ? ii : null;
    904         }
    905     }
    906 }
    907 
    908 function localeMonthsParse (monthName, format, strict) {
    909     var i, mom, regex;
    910 
    911     if (this._monthsParseExact) {
    912         return handleStrictParse.call(this, monthName, format, strict);
    913     }
    914 
    915     if (!this._monthsParse) {
    916         this._monthsParse = [];
    917         this._longMonthsParse = [];
    918         this._shortMonthsParse = [];
    919     }
    920 
    921     // TODO: add sorting
    922     // Sorting makes sure if one month (or abbr) is a prefix of another
    923     // see sorting in computeMonthsParse
    924     for (i = 0; i < 12; i++) {
    925         // make the regex if we don't have it already
    926         mom = createUTC([2000, i]);
    927         if (strict && !this._longMonthsParse[i]) {
    928             this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
    929             this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
    930         }
    931         if (!strict && !this._monthsParse[i]) {
    932             regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
    933             this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
    934         }
    935         // test the regex
    936         if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
    937             return i;
    938         } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
    939             return i;
    940         } else if (!strict && this._monthsParse[i].test(monthName)) {
    941             return i;
    942         }
    943     }
    944 }
    945 
    946 // MOMENTS
    947 
    948 function setMonth (mom, value) {
    949     var dayOfMonth;
    950 
    951     if (!mom.isValid()) {
    952         // No op
    953         return mom;
    954     }
    955 
    956     if (typeof value === 'string') {
    957         if (/^\d+$/.test(value)) {
    958             value = toInt(value);
    959         } else {
    960             value = mom.localeData().monthsParse(value);
    961             // TODO: Another silent failure?
    962             if (!isNumber(value)) {
    963                 return mom;
    964             }
    965         }
    966     }
    967 
    968     dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
    969     mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
    970     return mom;
    971 }
    972 
    973 function getSetMonth (value) {
    974     if (value != null) {
    975         setMonth(this, value);
    976         hooks.updateOffset(this, true);
    977         return this;
    978     } else {
    979         return get(this, 'Month');
    980     }
    981 }
    982 
    983 function getDaysInMonth () {
    984     return daysInMonth(this.year(), this.month());
    985 }
    986 
    987 var defaultMonthsShortRegex = matchWord;
    988 function monthsShortRegex (isStrict) {
    989     if (this._monthsParseExact) {
    990         if (!hasOwnProp(this, '_monthsRegex')) {
    991             computeMonthsParse.call(this);
    992         }
    993         if (isStrict) {
    994             return this._monthsShortStrictRegex;
    995         } else {
    996             return this._monthsShortRegex;
    997         }
    998     } else {
    999         if (!hasOwnProp(this, '_monthsShortRegex')) {
   1000             this._monthsShortRegex = defaultMonthsShortRegex;
   1001         }
   1002         return this._monthsShortStrictRegex && isStrict ?
   1003             this._monthsShortStrictRegex : this._monthsShortRegex;
   1004     }
   1005 }
   1006 
   1007 var defaultMonthsRegex = matchWord;
   1008 function monthsRegex (isStrict) {
   1009     if (this._monthsParseExact) {
   1010         if (!hasOwnProp(this, '_monthsRegex')) {
   1011             computeMonthsParse.call(this);
   1012         }
   1013         if (isStrict) {
   1014             return this._monthsStrictRegex;
   1015         } else {
   1016             return this._monthsRegex;
   1017         }
   1018     } else {
   1019         if (!hasOwnProp(this, '_monthsRegex')) {
   1020             this._monthsRegex = defaultMonthsRegex;
   1021         }
   1022         return this._monthsStrictRegex && isStrict ?
   1023             this._monthsStrictRegex : this._monthsRegex;
   1024     }
   1025 }
   1026 
   1027 function computeMonthsParse () {
   1028     function cmpLenRev(a, b) {
   1029         return b.length - a.length;
   1030     }
   1031 
   1032     var shortPieces = [], longPieces = [], mixedPieces = [],
   1033         i, mom;
   1034     for (i = 0; i < 12; i++) {
   1035         // make the regex if we don't have it already
   1036         mom = createUTC([2000, i]);
   1037         shortPieces.push(this.monthsShort(mom, ''));
   1038         longPieces.push(this.months(mom, ''));
   1039         mixedPieces.push(this.months(mom, ''));
   1040         mixedPieces.push(this.monthsShort(mom, ''));
   1041     }
   1042     // Sorting makes sure if one month (or abbr) is a prefix of another it
   1043     // will match the longer piece.
   1044     shortPieces.sort(cmpLenRev);
   1045     longPieces.sort(cmpLenRev);
   1046     mixedPieces.sort(cmpLenRev);
   1047     for (i = 0; i < 12; i++) {
   1048         shortPieces[i] = regexEscape(shortPieces[i]);
   1049         longPieces[i] = regexEscape(longPieces[i]);
   1050     }
   1051     for (i = 0; i < 24; i++) {
   1052         mixedPieces[i] = regexEscape(mixedPieces[i]);
   1053     }
   1054 
   1055     this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
   1056     this._monthsShortRegex = this._monthsRegex;
   1057     this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
   1058     this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
   1059 }
   1060 
   1061 // FORMATTING
   1062 
   1063 addFormatToken('Y', 0, 0, function () {
   1064     var y = this.year();
   1065     return y <= 9999 ? '' + y : '+' + y;
   1066 });
   1067 
   1068 addFormatToken(0, ['YY', 2], 0, function () {
   1069     return this.year() % 100;
   1070 });
   1071 
   1072 addFormatToken(0, ['YYYY',   4],       0, 'year');
   1073 addFormatToken(0, ['YYYYY',  5],       0, 'year');
   1074 addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
   1075 
   1076 // ALIASES
   1077 
   1078 addUnitAlias('year', 'y');
   1079 
   1080 // PRIORITIES
   1081 
   1082 addUnitPriority('year', 1);
   1083 
   1084 // PARSING
   1085 
   1086 addRegexToken('Y',      matchSigned);
   1087 addRegexToken('YY',     match1to2, match2);
   1088 addRegexToken('YYYY',   match1to4, match4);
   1089 addRegexToken('YYYYY',  match1to6, match6);
   1090 addRegexToken('YYYYYY', match1to6, match6);
   1091 
   1092 addParseToken(['YYYYY', 'YYYYYY'], YEAR);
   1093 addParseToken('YYYY', function (input, array) {
   1094     array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
   1095 });
   1096 addParseToken('YY', function (input, array) {
   1097     array[YEAR] = hooks.parseTwoDigitYear(input);
   1098 });
   1099 addParseToken('Y', function (input, array) {
   1100     array[YEAR] = parseInt(input, 10);
   1101 });
   1102 
   1103 // HELPERS
   1104 
   1105 function daysInYear(year) {
   1106     return isLeapYear(year) ? 366 : 365;
   1107 }
   1108 
   1109 function isLeapYear(year) {
   1110     return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
   1111 }
   1112 
   1113 // HOOKS
   1114 
   1115 hooks.parseTwoDigitYear = function (input) {
   1116     return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
   1117 };
   1118 
   1119 // MOMENTS
   1120 
   1121 var getSetYear = makeGetSet('FullYear', true);
   1122 
   1123 function getIsLeapYear () {
   1124     return isLeapYear(this.year());
   1125 }
   1126 
   1127 function createDate (y, m, d, h, M, s, ms) {
   1128     // can't just apply() to create a date:
   1129     // https://stackoverflow.com/q/181348
   1130     var date = new Date(y, m, d, h, M, s, ms);
   1131 
   1132     // the date constructor remaps years 0-99 to 1900-1999
   1133     if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {
   1134         date.setFullYear(y);
   1135     }
   1136     return date;
   1137 }
   1138 
   1139 function createUTCDate (y) {
   1140     var date = new Date(Date.UTC.apply(null, arguments));
   1141 
   1142     // the Date.UTC function remaps years 0-99 to 1900-1999
   1143     if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {
   1144         date.setUTCFullYear(y);
   1145     }
   1146     return date;
   1147 }
   1148 
   1149 // start-of-first-week - start-of-year
   1150 function firstWeekOffset(year, dow, doy) {
   1151     var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
   1152         fwd = 7 + dow - doy,
   1153         // first-week day local weekday -- which local weekday is fwd
   1154         fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
   1155 
   1156     return -fwdlw + fwd - 1;
   1157 }
   1158 
   1159 // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
   1160 function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
   1161     var localWeekday = (7 + weekday - dow) % 7,
   1162         weekOffset = firstWeekOffset(year, dow, doy),
   1163         dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
   1164         resYear, resDayOfYear;
   1165 
   1166     if (dayOfYear <= 0) {
   1167         resYear = year - 1;
   1168         resDayOfYear = daysInYear(resYear) + dayOfYear;
   1169     } else if (dayOfYear > daysInYear(year)) {
   1170         resYear = year + 1;
   1171         resDayOfYear = dayOfYear - daysInYear(year);
   1172     } else {
   1173         resYear = year;
   1174         resDayOfYear = dayOfYear;
   1175     }
   1176 
   1177     return {
   1178         year: resYear,
   1179         dayOfYear: resDayOfYear
   1180     };
   1181 }
   1182 
   1183 function weekOfYear(mom, dow, doy) {
   1184     var weekOffset = firstWeekOffset(mom.year(), dow, doy),
   1185         week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
   1186         resWeek, resYear;
   1187 
   1188     if (week < 1) {
   1189         resYear = mom.year() - 1;
   1190         resWeek = week + weeksInYear(resYear, dow, doy);
   1191     } else if (week > weeksInYear(mom.year(), dow, doy)) {
   1192         resWeek = week - weeksInYear(mom.year(), dow, doy);
   1193         resYear = mom.year() + 1;
   1194     } else {
   1195         resYear = mom.year();
   1196         resWeek = week;
   1197     }
   1198 
   1199     return {
   1200         week: resWeek,
   1201         year: resYear
   1202     };
   1203 }
   1204 
   1205 function weeksInYear(year, dow, doy) {
   1206     var weekOffset = firstWeekOffset(year, dow, doy),
   1207         weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
   1208     return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
   1209 }
   1210 
   1211 // FORMATTING
   1212 
   1213 addFormatToken('w', ['ww', 2], 'wo', 'week');
   1214 addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
   1215 
   1216 // ALIASES
   1217 
   1218 addUnitAlias('week', 'w');
   1219 addUnitAlias('isoWeek', 'W');
   1220 
   1221 // PRIORITIES
   1222 
   1223 addUnitPriority('week', 5);
   1224 addUnitPriority('isoWeek', 5);
   1225 
   1226 // PARSING
   1227 
   1228 addRegexToken('w',  match1to2);
   1229 addRegexToken('ww', match1to2, match2);
   1230 addRegexToken('W',  match1to2);
   1231 addRegexToken('WW', match1to2, match2);
   1232 
   1233 addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {
   1234     week[token.substr(0, 1)] = toInt(input);
   1235 });
   1236 
   1237 // HELPERS
   1238 
   1239 // LOCALES
   1240 
   1241 function localeWeek (mom) {
   1242     return weekOfYear(mom, this._week.dow, this._week.doy).week;
   1243 }
   1244 
   1245 var defaultLocaleWeek = {
   1246     dow : 0, // Sunday is the first day of the week.
   1247     doy : 6  // The week that contains Jan 1st is the first week of the year.
   1248 };
   1249 
   1250 function localeFirstDayOfWeek () {
   1251     return this._week.dow;
   1252 }
   1253 
   1254 function localeFirstDayOfYear () {
   1255     return this._week.doy;
   1256 }
   1257 
   1258 // MOMENTS
   1259 
   1260 function getSetWeek (input) {
   1261     var week = this.localeData().week(this);
   1262     return input == null ? week : this.add((input - week) * 7, 'd');
   1263 }
   1264 
   1265 function getSetISOWeek (input) {
   1266     var week = weekOfYear(this, 1, 4).week;
   1267     return input == null ? week : this.add((input - week) * 7, 'd');
   1268 }
   1269 
   1270 // FORMATTING
   1271 
   1272 addFormatToken('d', 0, 'do', 'day');
   1273 
   1274 addFormatToken('dd', 0, 0, function (format) {
   1275     return this.localeData().weekdaysMin(this, format);
   1276 });
   1277 
   1278 addFormatToken('ddd', 0, 0, function (format) {
   1279     return this.localeData().weekdaysShort(this, format);
   1280 });
   1281 
   1282 addFormatToken('dddd', 0, 0, function (format) {
   1283     return this.localeData().weekdays(this, format);
   1284 });
   1285 
   1286 addFormatToken('e', 0, 0, 'weekday');
   1287 addFormatToken('E', 0, 0, 'isoWeekday');
   1288 
   1289 // ALIASES
   1290 
   1291 addUnitAlias('day', 'd');
   1292 addUnitAlias('weekday', 'e');
   1293 addUnitAlias('isoWeekday', 'E');
   1294 
   1295 // PRIORITY
   1296 addUnitPriority('day', 11);
   1297 addUnitPriority('weekday', 11);
   1298 addUnitPriority('isoWeekday', 11);
   1299 
   1300 // PARSING
   1301 
   1302 addRegexToken('d',    match1to2);
   1303 addRegexToken('e',    match1to2);
   1304 addRegexToken('E',    match1to2);
   1305 addRegexToken('dd',   function (isStrict, locale) {
   1306     return locale.weekdaysMinRegex(isStrict);
   1307 });
   1308 addRegexToken('ddd',   function (isStrict, locale) {
   1309     return locale.weekdaysShortRegex(isStrict);
   1310 });
   1311 addRegexToken('dddd',   function (isStrict, locale) {
   1312     return locale.weekdaysRegex(isStrict);
   1313 });
   1314 
   1315 addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
   1316     var weekday = config._locale.weekdaysParse(input, token, config._strict);
   1317     // if we didn't get a weekday name, mark the date as invalid
   1318     if (weekday != null) {
   1319         week.d = weekday;
   1320     } else {
   1321         getParsingFlags(config).invalidWeekday = input;
   1322     }
   1323 });
   1324 
   1325 addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
   1326     week[token] = toInt(input);
   1327 });
   1328 
   1329 // HELPERS
   1330 
   1331 function parseWeekday(input, locale) {
   1332     if (typeof input !== 'string') {
   1333         return input;
   1334     }
   1335 
   1336     if (!isNaN(input)) {
   1337         return parseInt(input, 10);
   1338     }
   1339 
   1340     input = locale.weekdaysParse(input);
   1341     if (typeof input === 'number') {
   1342         return input;
   1343     }
   1344 
   1345     return null;
   1346 }
   1347 
   1348 function parseIsoWeekday(input, locale) {
   1349     if (typeof input === 'string') {
   1350         return locale.weekdaysParse(input) % 7 || 7;
   1351     }
   1352     return isNaN(input) ? null : input;
   1353 }
   1354 
   1355 // LOCALES
   1356 
   1357 var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
   1358 function localeWeekdays (m, format) {
   1359     if (!m) {
   1360         return isArray(this._weekdays) ? this._weekdays :
   1361             this._weekdays['standalone'];
   1362     }
   1363     return isArray(this._weekdays) ? this._weekdays[m.day()] :
   1364         this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];
   1365 }
   1366 
   1367 var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
   1368 function localeWeekdaysShort (m) {
   1369     return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;
   1370 }
   1371 
   1372 var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
   1373 function localeWeekdaysMin (m) {
   1374     return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;
   1375 }
   1376 
   1377 function handleStrictParse$1(weekdayName, format, strict) {
   1378     var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
   1379     if (!this._weekdaysParse) {
   1380         this._weekdaysParse = [];
   1381         this._shortWeekdaysParse = [];
   1382         this._minWeekdaysParse = [];
   1383 
   1384         for (i = 0; i < 7; ++i) {
   1385             mom = createUTC([2000, 1]).day(i);
   1386             this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();
   1387             this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();
   1388             this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
   1389         }
   1390     }
   1391 
   1392     if (strict) {
   1393         if (format === 'dddd') {
   1394             ii = indexOf$1.call(this._weekdaysParse, llc);
   1395             return ii !== -1 ? ii : null;
   1396         } else if (format === 'ddd') {
   1397             ii = indexOf$1.call(this._shortWeekdaysParse, llc);
   1398             return ii !== -1 ? ii : null;
   1399         } else {
   1400             ii = indexOf$1.call(this._minWeekdaysParse, llc);
   1401             return ii !== -1 ? ii : null;
   1402         }
   1403     } else {
   1404         if (format === 'dddd') {
   1405             ii = indexOf$1.call(this._weekdaysParse, llc);
   1406             if (ii !== -1) {
   1407                 return ii;
   1408             }
   1409             ii = indexOf$1.call(this._shortWeekdaysParse, llc);
   1410             if (ii !== -1) {
   1411                 return ii;
   1412             }
   1413             ii = indexOf$1.call(this._minWeekdaysParse, llc);
   1414             return ii !== -1 ? ii : null;
   1415         } else if (format === 'ddd') {
   1416             ii = indexOf$1.call(this._shortWeekdaysParse, llc);
   1417             if (ii !== -1) {
   1418                 return ii;
   1419             }
   1420             ii = indexOf$1.call(this._weekdaysParse, llc);
   1421             if (ii !== -1) {
   1422                 return ii;
   1423             }
   1424             ii = indexOf$1.call(this._minWeekdaysParse, llc);
   1425             return ii !== -1 ? ii : null;
   1426         } else {
   1427             ii = indexOf$1.call(this._minWeekdaysParse, llc);
   1428             if (ii !== -1) {
   1429                 return ii;
   1430             }
   1431             ii = indexOf$1.call(this._weekdaysParse, llc);
   1432             if (ii !== -1) {
   1433                 return ii;
   1434             }
   1435             ii = indexOf$1.call(this._shortWeekdaysParse, llc);
   1436             return ii !== -1 ? ii : null;
   1437         }
   1438     }
   1439 }
   1440 
   1441 function localeWeekdaysParse (weekdayName, format, strict) {
   1442     var i, mom, regex;
   1443 
   1444     if (this._weekdaysParseExact) {
   1445         return handleStrictParse$1.call(this, weekdayName, format, strict);
   1446     }
   1447 
   1448     if (!this._weekdaysParse) {
   1449         this._weekdaysParse = [];
   1450         this._minWeekdaysParse = [];
   1451         this._shortWeekdaysParse = [];
   1452         this._fullWeekdaysParse = [];
   1453     }
   1454 
   1455     for (i = 0; i < 7; i++) {
   1456         // make the regex if we don't have it already
   1457 
   1458         mom = createUTC([2000, 1]).day(i);
   1459         if (strict && !this._fullWeekdaysParse[i]) {
   1460             this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i');
   1461             this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i');
   1462             this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i');
   1463         }
   1464         if (!this._weekdaysParse[i]) {
   1465             regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
   1466             this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
   1467         }
   1468         // test the regex
   1469         if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {
   1470             return i;
   1471         } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {
   1472             return i;
   1473         } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {
   1474             return i;
   1475         } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
   1476             return i;
   1477         }
   1478     }
   1479 }
   1480 
   1481 // MOMENTS
   1482 
   1483 function getSetDayOfWeek (input) {
   1484     if (!this.isValid()) {
   1485         return input != null ? this : NaN;
   1486     }
   1487     var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
   1488     if (input != null) {
   1489         input = parseWeekday(input, this.localeData());
   1490         return this.add(input - day, 'd');
   1491     } else {
   1492         return day;
   1493     }
   1494 }
   1495 
   1496 function getSetLocaleDayOfWeek (input) {
   1497     if (!this.isValid()) {
   1498         return input != null ? this : NaN;
   1499     }
   1500     var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
   1501     return input == null ? weekday : this.add(input - weekday, 'd');
   1502 }
   1503 
   1504 function getSetISODayOfWeek (input) {
   1505     if (!this.isValid()) {
   1506         return input != null ? this : NaN;
   1507     }
   1508 
   1509     // behaves the same as moment#day except
   1510     // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
   1511     // as a setter, sunday should belong to the previous week.
   1512 
   1513     if (input != null) {
   1514         var weekday = parseIsoWeekday(input, this.localeData());
   1515         return this.day(this.day() % 7 ? weekday : weekday - 7);
   1516     } else {
   1517         return this.day() || 7;
   1518     }
   1519 }
   1520 
   1521 var defaultWeekdaysRegex = matchWord;
   1522 function weekdaysRegex (isStrict) {
   1523     if (this._weekdaysParseExact) {
   1524         if (!hasOwnProp(this, '_weekdaysRegex')) {
   1525             computeWeekdaysParse.call(this);
   1526         }
   1527         if (isStrict) {
   1528             return this._weekdaysStrictRegex;
   1529         } else {
   1530             return this._weekdaysRegex;
   1531         }
   1532     } else {
   1533         if (!hasOwnProp(this, '_weekdaysRegex')) {
   1534             this._weekdaysRegex = defaultWeekdaysRegex;
   1535         }
   1536         return this._weekdaysStrictRegex && isStrict ?
   1537             this._weekdaysStrictRegex : this._weekdaysRegex;
   1538     }
   1539 }
   1540 
   1541 var defaultWeekdaysShortRegex = matchWord;
   1542 function weekdaysShortRegex (isStrict) {
   1543     if (this._weekdaysParseExact) {
   1544         if (!hasOwnProp(this, '_weekdaysRegex')) {
   1545             computeWeekdaysParse.call(this);
   1546         }
   1547         if (isStrict) {
   1548             return this._weekdaysShortStrictRegex;
   1549         } else {
   1550             return this._weekdaysShortRegex;
   1551         }
   1552     } else {
   1553         if (!hasOwnProp(this, '_weekdaysShortRegex')) {
   1554             this._weekdaysShortRegex = defaultWeekdaysShortRegex;
   1555         }
   1556         return this._weekdaysShortStrictRegex && isStrict ?
   1557             this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
   1558     }
   1559 }
   1560 
   1561 var defaultWeekdaysMinRegex = matchWord;
   1562 function weekdaysMinRegex (isStrict) {
   1563     if (this._weekdaysParseExact) {
   1564         if (!hasOwnProp(this, '_weekdaysRegex')) {
   1565             computeWeekdaysParse.call(this);
   1566         }
   1567         if (isStrict) {
   1568             return this._weekdaysMinStrictRegex;
   1569         } else {
   1570             return this._weekdaysMinRegex;
   1571         }
   1572     } else {
   1573         if (!hasOwnProp(this, '_weekdaysMinRegex')) {
   1574             this._weekdaysMinRegex = defaultWeekdaysMinRegex;
   1575         }
   1576         return this._weekdaysMinStrictRegex && isStrict ?
   1577             this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
   1578     }
   1579 }
   1580 
   1581 
   1582 function computeWeekdaysParse () {
   1583     function cmpLenRev(a, b) {
   1584         return b.length - a.length;
   1585     }
   1586 
   1587     var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],
   1588         i, mom, minp, shortp, longp;
   1589     for (i = 0; i < 7; i++) {
   1590         // make the regex if we don't have it already
   1591         mom = createUTC([2000, 1]).day(i);
   1592         minp = this.weekdaysMin(mom, '');
   1593         shortp = this.weekdaysShort(mom, '');
   1594         longp = this.weekdays(mom, '');
   1595         minPieces.push(minp);
   1596         shortPieces.push(shortp);
   1597         longPieces.push(longp);
   1598         mixedPieces.push(minp);
   1599         mixedPieces.push(shortp);
   1600         mixedPieces.push(longp);
   1601     }
   1602     // Sorting makes sure if one weekday (or abbr) is a prefix of another it
   1603     // will match the longer piece.
   1604     minPieces.sort(cmpLenRev);
   1605     shortPieces.sort(cmpLenRev);
   1606     longPieces.sort(cmpLenRev);
   1607     mixedPieces.sort(cmpLenRev);
   1608     for (i = 0; i < 7; i++) {
   1609         shortPieces[i] = regexEscape(shortPieces[i]);
   1610         longPieces[i] = regexEscape(longPieces[i]);
   1611         mixedPieces[i] = regexEscape(mixedPieces[i]);
   1612     }
   1613 
   1614     this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
   1615     this._weekdaysShortRegex = this._weekdaysRegex;
   1616     this._weekdaysMinRegex = this._weekdaysRegex;
   1617 
   1618     this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
   1619     this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
   1620     this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');
   1621 }
   1622 
   1623 // FORMATTING
   1624 
   1625 function hFormat() {
   1626     return this.hours() % 12 || 12;
   1627 }
   1628 
   1629 function kFormat() {
   1630     return this.hours() || 24;
   1631 }
   1632 
   1633 addFormatToken('H', ['HH', 2], 0, 'hour');
   1634 addFormatToken('h', ['hh', 2], 0, hFormat);
   1635 addFormatToken('k', ['kk', 2], 0, kFormat);
   1636 
   1637 addFormatToken('hmm', 0, 0, function () {
   1638     return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
   1639 });
   1640 
   1641 addFormatToken('hmmss', 0, 0, function () {
   1642     return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +
   1643         zeroFill(this.seconds(), 2);
   1644 });
   1645 
   1646 addFormatToken('Hmm', 0, 0, function () {
   1647     return '' + this.hours() + zeroFill(this.minutes(), 2);
   1648 });
   1649 
   1650 addFormatToken('Hmmss', 0, 0, function () {
   1651     return '' + this.hours() + zeroFill(this.minutes(), 2) +
   1652         zeroFill(this.seconds(), 2);
   1653 });
   1654 
   1655 function meridiem (token, lowercase) {
   1656     addFormatToken(token, 0, 0, function () {
   1657         return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
   1658     });
   1659 }
   1660 
   1661 meridiem('a', true);
   1662 meridiem('A', false);
   1663 
   1664 // ALIASES
   1665 
   1666 addUnitAlias('hour', 'h');
   1667 
   1668 // PRIORITY
   1669 addUnitPriority('hour', 13);
   1670 
   1671 // PARSING
   1672 
   1673 function matchMeridiem (isStrict, locale) {
   1674     return locale._meridiemParse;
   1675 }
   1676 
   1677 addRegexToken('a',  matchMeridiem);
   1678 addRegexToken('A',  matchMeridiem);
   1679 addRegexToken('H',  match1to2);
   1680 addRegexToken('h',  match1to2);
   1681 addRegexToken('k',  match1to2);
   1682 addRegexToken('HH', match1to2, match2);
   1683 addRegexToken('hh', match1to2, match2);
   1684 addRegexToken('kk', match1to2, match2);
   1685 
   1686 addRegexToken('hmm', match3to4);
   1687 addRegexToken('hmmss', match5to6);
   1688 addRegexToken('Hmm', match3to4);
   1689 addRegexToken('Hmmss', match5to6);
   1690 
   1691 addParseToken(['H', 'HH'], HOUR);
   1692 addParseToken(['k', 'kk'], function (input, array, config) {
   1693     var kInput = toInt(input);
   1694     array[HOUR] = kInput === 24 ? 0 : kInput;
   1695 });
   1696 addParseToken(['a', 'A'], function (input, array, config) {
   1697     config._isPm = config._locale.isPM(input);
   1698     config._meridiem = input;
   1699 });
   1700 addParseToken(['h', 'hh'], function (input, array, config) {
   1701     array[HOUR] = toInt(input);
   1702     getParsingFlags(config).bigHour = true;
   1703 });
   1704 addParseToken('hmm', function (input, array, config) {
   1705     var pos = input.length - 2;
   1706     array[HOUR] = toInt(input.substr(0, pos));
   1707     array[MINUTE] = toInt(input.substr(pos));
   1708     getParsingFlags(config).bigHour = true;
   1709 });
   1710 addParseToken('hmmss', function (input, array, config) {
   1711     var pos1 = input.length - 4;
   1712     var pos2 = input.length - 2;
   1713     array[HOUR] = toInt(input.substr(0, pos1));
   1714     array[MINUTE] = toInt(input.substr(pos1, 2));
   1715     array[SECOND] = toInt(input.substr(pos2));
   1716     getParsingFlags(config).bigHour = true;
   1717 });
   1718 addParseToken('Hmm', function (input, array, config) {
   1719     var pos = input.length - 2;
   1720     array[HOUR] = toInt(input.substr(0, pos));
   1721     array[MINUTE] = toInt(input.substr(pos));
   1722 });
   1723 addParseToken('Hmmss', function (input, array, config) {
   1724     var pos1 = input.length - 4;
   1725     var pos2 = input.length - 2;
   1726     array[HOUR] = toInt(input.substr(0, pos1));
   1727     array[MINUTE] = toInt(input.substr(pos1, 2));
   1728     array[SECOND] = toInt(input.substr(pos2));
   1729 });
   1730 
   1731 // LOCALES
   1732 
   1733 function localeIsPM (input) {
   1734     // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
   1735     // Using charAt should be more compatible.
   1736     return ((input + '').toLowerCase().charAt(0) === 'p');
   1737 }
   1738 
   1739 var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
   1740 function localeMeridiem (hours, minutes, isLower) {
   1741     if (hours > 11) {
   1742         return isLower ? 'pm' : 'PM';
   1743     } else {
   1744         return isLower ? 'am' : 'AM';
   1745     }
   1746 }
   1747 
   1748 
   1749 // MOMENTS
   1750 
   1751 // Setting the hour should keep the time, because the user explicitly
   1752 // specified which hour he wants. So trying to maintain the same hour (in
   1753 // a new timezone) makes sense. Adding/subtracting hours does not follow
   1754 // this rule.
   1755 var getSetHour = makeGetSet('Hours', true);
   1756 
   1757 // months
   1758 // week
   1759 // weekdays
   1760 // meridiem
   1761 var baseConfig = {
   1762     calendar: defaultCalendar,
   1763     longDateFormat: defaultLongDateFormat,
   1764     invalidDate: defaultInvalidDate,
   1765     ordinal: defaultOrdinal,
   1766     dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
   1767     relativeTime: defaultRelativeTime,
   1768 
   1769     months: defaultLocaleMonths,
   1770     monthsShort: defaultLocaleMonthsShort,
   1771 
   1772     week: defaultLocaleWeek,
   1773 
   1774     weekdays: defaultLocaleWeekdays,
   1775     weekdaysMin: defaultLocaleWeekdaysMin,
   1776     weekdaysShort: defaultLocaleWeekdaysShort,
   1777 
   1778     meridiemParse: defaultLocaleMeridiemParse
   1779 };
   1780 
   1781 // internal storage for locale config files
   1782 var locales = {};
   1783 var localeFamilies = {};
   1784 var globalLocale;
   1785 
   1786 function normalizeLocale(key) {
   1787     return key ? key.toLowerCase().replace('_', '-') : key;
   1788 }
   1789 
   1790 // pick the locale from the array
   1791 // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
   1792 // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
   1793 function chooseLocale(names) {
   1794     var i = 0, j, next, locale, split;
   1795 
   1796     while (i < names.length) {
   1797         split = normalizeLocale(names[i]).split('-');
   1798         j = split.length;
   1799         next = normalizeLocale(names[i + 1]);
   1800         next = next ? next.split('-') : null;
   1801         while (j > 0) {
   1802             locale = loadLocale(split.slice(0, j).join('-'));
   1803             if (locale) {
   1804                 return locale;
   1805             }
   1806             if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
   1807                 //the next array item is better than a shallower substring of this one
   1808                 break;
   1809             }
   1810             j--;
   1811         }
   1812         i++;
   1813     }
   1814     return null;
   1815 }
   1816 
   1817 function loadLocale(name) {
   1818     var oldLocale = null;
   1819     // TODO: Find a better way to register and load all the locales in Node
   1820     if (!locales[name] && (typeof module !== 'undefined') &&
   1821             module && module.exports) {
   1822         try {
   1823             oldLocale = globalLocale._abbr;
   1824             require('./locale/' + name);
   1825             // because defineLocale currently also sets the global locale, we
   1826             // want to undo that for lazy loaded locales
   1827             getSetGlobalLocale(oldLocale);
   1828         } catch (e) { }
   1829     }
   1830     return locales[name];
   1831 }
   1832 
   1833 // This function will load locale and then set the global locale.  If
   1834 // no arguments are passed in, it will simply return the current global
   1835 // locale key.
   1836 function getSetGlobalLocale (key, values) {
   1837     var data;
   1838     if (key) {
   1839         if (isUndefined(values)) {
   1840             data = getLocale(key);
   1841         }
   1842         else {
   1843             data = defineLocale(key, values);
   1844         }
   1845 
   1846         if (data) {
   1847             // moment.duration._locale = moment._locale = data;
   1848             globalLocale = data;
   1849         }
   1850     }
   1851 
   1852     return globalLocale._abbr;
   1853 }
   1854 
   1855 function defineLocale (name, config) {
   1856     if (config !== null) {
   1857         var parentConfig = baseConfig;
   1858         config.abbr = name;
   1859         if (locales[name] != null) {
   1860             deprecateSimple('defineLocaleOverride',
   1861                     'use moment.updateLocale(localeName, config) to change ' +
   1862                     'an existing locale. moment.defineLocale(localeName, ' +
   1863                     'config) should only be used for creating a new locale ' +
   1864                     'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');
   1865             parentConfig = locales[name]._config;
   1866         } else if (config.parentLocale != null) {
   1867             if (locales[config.parentLocale] != null) {
   1868                 parentConfig = locales[config.parentLocale]._config;
   1869             } else {
   1870                 if (!localeFamilies[config.parentLocale]) {
   1871                     localeFamilies[config.parentLocale] = [];
   1872                 }
   1873                 localeFamilies[config.parentLocale].push({
   1874                     name: name,
   1875                     config: config
   1876                 });
   1877                 return null;
   1878             }
   1879         }
   1880         locales[name] = new Locale(mergeConfigs(parentConfig, config));
   1881 
   1882         if (localeFamilies[name]) {
   1883             localeFamilies[name].forEach(function (x) {
   1884                 defineLocale(x.name, x.config);
   1885             });
   1886         }
   1887 
   1888         // backwards compat for now: also set the locale
   1889         // make sure we set the locale AFTER all child locales have been
   1890         // created, so we won't end up with the child locale set.
   1891         getSetGlobalLocale(name);
   1892 
   1893 
   1894         return locales[name];
   1895     } else {
   1896         // useful for testing
   1897         delete locales[name];
   1898         return null;
   1899     }
   1900 }
   1901 
   1902 function updateLocale(name, config) {
   1903     if (config != null) {
   1904         var locale, parentConfig = baseConfig;
   1905         // MERGE
   1906         if (locales[name] != null) {
   1907             parentConfig = locales[name]._config;
   1908         }
   1909         config = mergeConfigs(parentConfig, config);
   1910         locale = new Locale(config);
   1911         locale.parentLocale = locales[name];
   1912         locales[name] = locale;
   1913 
   1914         // backwards compat for now: also set the locale
   1915         getSetGlobalLocale(name);
   1916     } else {
   1917         // pass null for config to unupdate, useful for tests
   1918         if (locales[name] != null) {
   1919             if (locales[name].parentLocale != null) {
   1920                 locales[name] = locales[name].parentLocale;
   1921             } else if (locales[name] != null) {
   1922                 delete locales[name];
   1923             }
   1924         }
   1925     }
   1926     return locales[name];
   1927 }
   1928 
   1929 // returns locale data
   1930 function getLocale (key) {
   1931     var locale;
   1932 
   1933     if (key && key._locale && key._locale._abbr) {
   1934         key = key._locale._abbr;
   1935     }
   1936 
   1937     if (!key) {
   1938         return globalLocale;
   1939     }
   1940 
   1941     if (!isArray(key)) {
   1942         //short-circuit everything else
   1943         locale = loadLocale(key);
   1944         if (locale) {
   1945             return locale;
   1946         }
   1947         key = [key];
   1948     }
   1949 
   1950     return chooseLocale(key);
   1951 }
   1952 
   1953 function listLocales() {
   1954     return keys$1(locales);
   1955 }
   1956 
   1957 function checkOverflow (m) {
   1958     var overflow;
   1959     var a = m._a;
   1960 
   1961     if (a && getParsingFlags(m).overflow === -2) {
   1962         overflow =
   1963             a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :
   1964             a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
   1965             a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :
   1966             a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :
   1967             a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :
   1968             a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
   1969             -1;
   1970 
   1971         if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
   1972             overflow = DATE;
   1973         }
   1974         if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
   1975             overflow = WEEK;
   1976         }
   1977         if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
   1978             overflow = WEEKDAY;
   1979         }
   1980 
   1981         getParsingFlags(m).overflow = overflow;
   1982     }
   1983 
   1984     return m;
   1985 }
   1986 
   1987 // iso 8601 regex
   1988 // 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)
   1989 var extendedIsoRegex = /^\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)?)?$/;
   1990 var basicIsoRegex = /^\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)?)?$/;
   1991 
   1992 var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/;
   1993 
   1994 var isoDates = [
   1995     ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
   1996     ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
   1997     ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
   1998     ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
   1999     ['YYYY-DDD', /\d{4}-\d{3}/],
   2000     ['YYYY-MM', /\d{4}-\d\d/, false],
   2001     ['YYYYYYMMDD', /[+-]\d{10}/],
   2002     ['YYYYMMDD', /\d{8}/],
   2003     // YYYYMM is NOT allowed by the standard
   2004     ['GGGG[W]WWE', /\d{4}W\d{3}/],
   2005     ['GGGG[W]WW', /\d{4}W\d{2}/, false],
   2006     ['YYYYDDD', /\d{7}/]
   2007 ];
   2008 
   2009 // iso time formats and regexes
   2010 var isoTimes = [
   2011     ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
   2012     ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
   2013     ['HH:mm:ss', /\d\d:\d\d:\d\d/],
   2014     ['HH:mm', /\d\d:\d\d/],
   2015     ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
   2016     ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
   2017     ['HHmmss', /\d\d\d\d\d\d/],
   2018     ['HHmm', /\d\d\d\d/],
   2019     ['HH', /\d\d/]
   2020 ];
   2021 
   2022 var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
   2023 
   2024 // date from iso format
   2025 function configFromISO(config) {
   2026     var i, l,
   2027         string = config._i,
   2028         match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
   2029         allowTime, dateFormat, timeFormat, tzFormat;
   2030 
   2031     if (match) {
   2032         getParsingFlags(config).iso = true;
   2033 
   2034         for (i = 0, l = isoDates.length; i < l; i++) {
   2035             if (isoDates[i][1].exec(match[1])) {
   2036                 dateFormat = isoDates[i][0];
   2037                 allowTime = isoDates[i][2] !== false;
   2038                 break;
   2039             }
   2040         }
   2041         if (dateFormat == null) {
   2042             config._isValid = false;
   2043             return;
   2044         }
   2045         if (match[3]) {
   2046             for (i = 0, l = isoTimes.length; i < l; i++) {
   2047                 if (isoTimes[i][1].exec(match[3])) {
   2048                     // match[2] should be 'T' or space
   2049                     timeFormat = (match[2] || ' ') + isoTimes[i][0];
   2050                     break;
   2051                 }
   2052             }
   2053             if (timeFormat == null) {
   2054                 config._isValid = false;
   2055                 return;
   2056             }
   2057         }
   2058         if (!allowTime && timeFormat != null) {
   2059             config._isValid = false;
   2060             return;
   2061         }
   2062         if (match[4]) {
   2063             if (tzRegex.exec(match[4])) {
   2064                 tzFormat = 'Z';
   2065             } else {
   2066                 config._isValid = false;
   2067                 return;
   2068             }
   2069         }
   2070         config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
   2071         configFromStringAndFormat(config);
   2072     } else {
   2073         config._isValid = false;
   2074     }
   2075 }
   2076 
   2077 // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
   2078 var basicRfcRegex = /^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/;
   2079 
   2080 // date and time from ref 2822 format
   2081 function configFromRFC2822(config) {
   2082     var string, match, dayFormat,
   2083         dateFormat, timeFormat, tzFormat;
   2084     var timezones = {
   2085         ' GMT': ' +0000',
   2086         ' EDT': ' -0400',
   2087         ' EST': ' -0500',
   2088         ' CDT': ' -0500',
   2089         ' CST': ' -0600',
   2090         ' MDT': ' -0600',
   2091         ' MST': ' -0700',
   2092         ' PDT': ' -0700',
   2093         ' PST': ' -0800'
   2094     };
   2095     var military = 'YXWVUTSRQPONZABCDEFGHIKLM';
   2096     var timezone, timezoneIndex;
   2097 
   2098     string = config._i
   2099         .replace(/\([^\)]*\)|[\n\t]/g, ' ') // Remove comments and folding whitespace
   2100         .replace(/(\s\s+)/g, ' ') // Replace multiple-spaces with a single space
   2101         .replace(/^\s|\s$/g, ''); // Remove leading and trailing spaces
   2102     match = basicRfcRegex.exec(string);
   2103 
   2104     if (match) {
   2105         dayFormat = match[1] ? 'ddd' + ((match[1].length === 5) ? ', ' : ' ') : '';
   2106         dateFormat = 'D MMM ' + ((match[2].length > 10) ? 'YYYY ' : 'YY ');
   2107         timeFormat = 'HH:mm' + (match[4] ? ':ss' : '');
   2108 
   2109         // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.
   2110         if (match[1]) { // day of week given
   2111             var momentDate = new Date(match[2]);
   2112             var momentDay = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'][momentDate.getDay()];
   2113 
   2114             if (match[1].substr(0,3) !== momentDay) {
   2115                 getParsingFlags(config).weekdayMismatch = true;
   2116                 config._isValid = false;
   2117                 return;
   2118             }
   2119         }
   2120 
   2121         switch (match[5].length) {
   2122             case 2: // military
   2123                 if (timezoneIndex === 0) {
   2124                     timezone = ' +0000';
   2125                 } else {
   2126                     timezoneIndex = military.indexOf(match[5][1].toUpperCase()) - 12;
   2127                     timezone = ((timezoneIndex < 0) ? ' -' : ' +') +
   2128                         (('' + timezoneIndex).replace(/^-?/, '0')).match(/..$/)[0] + '00';
   2129                 }
   2130                 break;
   2131             case 4: // Zone
   2132                 timezone = timezones[match[5]];
   2133                 break;
   2134             default: // UT or +/-9999
   2135                 timezone = timezones[' GMT'];
   2136         }
   2137         match[5] = timezone;
   2138         config._i = match.splice(1).join('');
   2139         tzFormat = ' ZZ';
   2140         config._f = dayFormat + dateFormat + timeFormat + tzFormat;
   2141         configFromStringAndFormat(config);
   2142         getParsingFlags(config).rfc2822 = true;
   2143     } else {
   2144         config._isValid = false;
   2145     }
   2146 }
   2147 
   2148 // date from iso format or fallback
   2149 function configFromString(config) {
   2150     var matched = aspNetJsonRegex.exec(config._i);
   2151 
   2152     if (matched !== null) {
   2153         config._d = new Date(+matched[1]);
   2154         return;
   2155     }
   2156 
   2157     configFromISO(config);
   2158     if (config._isValid === false) {
   2159         delete config._isValid;
   2160     } else {
   2161         return;
   2162     }
   2163 
   2164     configFromRFC2822(config);
   2165     if (config._isValid === false) {
   2166         delete config._isValid;
   2167     } else {
   2168         return;
   2169     }
   2170 
   2171     // Final attempt, use Input Fallback
   2172     hooks.createFromInputFallback(config);
   2173 }
   2174 
   2175 hooks.createFromInputFallback = deprecate(
   2176     'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
   2177     'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
   2178     'discouraged and will be removed in an upcoming major release. Please refer to ' +
   2179     'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
   2180     function (config) {
   2181         config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
   2182     }
   2183 );
   2184 
   2185 // Pick the first defined of two or three arguments.
   2186 function defaults(a, b, c) {
   2187     if (a != null) {
   2188         return a;
   2189     }
   2190     if (b != null) {
   2191         return b;
   2192     }
   2193     return c;
   2194 }
   2195 
   2196 function currentDateArray(config) {
   2197     // hooks is actually the exported moment object
   2198     var nowValue = new Date(hooks.now());
   2199     if (config._useUTC) {
   2200         return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];
   2201     }
   2202     return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
   2203 }
   2204 
   2205 // convert an array to a date.
   2206 // the array should mirror the parameters below
   2207 // note: all values past the year are optional and will default to the lowest possible value.
   2208 // [year, month, day , hour, minute, second, millisecond]
   2209 function configFromArray (config) {
   2210     var i, date, input = [], currentDate, yearToUse;
   2211 
   2212     if (config._d) {
   2213         return;
   2214     }
   2215 
   2216     currentDate = currentDateArray(config);
   2217 
   2218     //compute day of the year from weeks and weekdays
   2219     if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
   2220         dayOfYearFromWeekInfo(config);
   2221     }
   2222 
   2223     //if the day of the year is set, figure out what it is
   2224     if (config._dayOfYear != null) {
   2225         yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
   2226 
   2227         if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {
   2228             getParsingFlags(config)._overflowDayOfYear = true;
   2229         }
   2230 
   2231         date = createUTCDate(yearToUse, 0, config._dayOfYear);
   2232         config._a[MONTH] = date.getUTCMonth();
   2233         config._a[DATE] = date.getUTCDate();
   2234     }
   2235 
   2236     // Default to current date.
   2237     // * if no year, month, day of month are given, default to today
   2238     // * if day of month is given, default month and year
   2239     // * if month is given, default only year
   2240     // * if year is given, don't default anything
   2241     for (i = 0; i < 3 && config._a[i] == null; ++i) {
   2242         config._a[i] = input[i] = currentDate[i];
   2243     }
   2244 
   2245     // Zero out whatever was not defaulted, including time
   2246     for (; i < 7; i++) {
   2247         config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
   2248     }
   2249 
   2250     // Check for 24:00:00.000
   2251     if (config._a[HOUR] === 24 &&
   2252             config._a[MINUTE] === 0 &&
   2253             config._a[SECOND] === 0 &&
   2254             config._a[MILLISECOND] === 0) {
   2255         config._nextDay = true;
   2256         config._a[HOUR] = 0;
   2257     }
   2258 
   2259     config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
   2260     // Apply timezone offset from input. The actual utcOffset can be changed
   2261     // with parseZone.
   2262     if (config._tzm != null) {
   2263         config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
   2264     }
   2265 
   2266     if (config._nextDay) {
   2267         config._a[HOUR] = 24;
   2268     }
   2269 }
   2270 
   2271 function dayOfYearFromWeekInfo(config) {
   2272     var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;
   2273 
   2274     w = config._w;
   2275     if (w.GG != null || w.W != null || w.E != null) {
   2276         dow = 1;
   2277         doy = 4;
   2278 
   2279         // TODO: We need to take the current isoWeekYear, but that depends on
   2280         // how we interpret now (local, utc, fixed offset). So create
   2281         // a now version of current config (take local/utc/offset flags, and
   2282         // create now).
   2283         weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);
   2284         week = defaults(w.W, 1);
   2285         weekday = defaults(w.E, 1);
   2286         if (weekday < 1 || weekday > 7) {
   2287             weekdayOverflow = true;
   2288         }
   2289     } else {
   2290         dow = config._locale._week.dow;
   2291         doy = config._locale._week.doy;
   2292 
   2293         var curWeek = weekOfYear(createLocal(), dow, doy);
   2294 
   2295         weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
   2296 
   2297         // Default to current week.
   2298         week = defaults(w.w, curWeek.week);
   2299 
   2300         if (w.d != null) {
   2301             // weekday -- low day numbers are considered next week
   2302             weekday = w.d;
   2303             if (weekday < 0 || weekday > 6) {
   2304                 weekdayOverflow = true;
   2305             }
   2306         } else if (w.e != null) {
   2307             // local weekday -- counting starts from begining of week
   2308             weekday = w.e + dow;
   2309             if (w.e < 0 || w.e > 6) {
   2310                 weekdayOverflow = true;
   2311             }
   2312         } else {
   2313             // default to begining of week
   2314             weekday = dow;
   2315         }
   2316     }
   2317     if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
   2318         getParsingFlags(config)._overflowWeeks = true;
   2319     } else if (weekdayOverflow != null) {
   2320         getParsingFlags(config)._overflowWeekday = true;
   2321     } else {
   2322         temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
   2323         config._a[YEAR] = temp.year;
   2324         config._dayOfYear = temp.dayOfYear;
   2325     }
   2326 }
   2327 
   2328 // constant that refers to the ISO standard
   2329 hooks.ISO_8601 = function () {};
   2330 
   2331 // constant that refers to the RFC 2822 form
   2332 hooks.RFC_2822 = function () {};
   2333 
   2334 // date from string and format string
   2335 function configFromStringAndFormat(config) {
   2336     // TODO: Move this to another part of the creation flow to prevent circular deps
   2337     if (config._f === hooks.ISO_8601) {
   2338         configFromISO(config);
   2339         return;
   2340     }
   2341     if (config._f === hooks.RFC_2822) {
   2342         configFromRFC2822(config);
   2343         return;
   2344     }
   2345     config._a = [];
   2346     getParsingFlags(config).empty = true;
   2347 
   2348     // This array is used to make a Date, either with `new Date` or `Date.UTC`
   2349     var string = '' + config._i,
   2350         i, parsedInput, tokens, token, skipped,
   2351         stringLength = string.length,
   2352         totalParsedInputLength = 0;
   2353 
   2354     tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];
   2355 
   2356     for (i = 0; i < tokens.length; i++) {
   2357         token = tokens[i];
   2358         parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
   2359         // console.log('token', token, 'parsedInput', parsedInput,
   2360         //         'regex', getParseRegexForToken(token, config));
   2361         if (parsedInput) {
   2362             skipped = string.substr(0, string.indexOf(parsedInput));
   2363             if (skipped.length > 0) {
   2364                 getParsingFlags(config).unusedInput.push(skipped);
   2365             }
   2366             string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
   2367             totalParsedInputLength += parsedInput.length;
   2368         }
   2369         // don't parse if it's not a known token
   2370         if (formatTokenFunctions[token]) {
   2371             if (parsedInput) {
   2372                 getParsingFlags(config).empty = false;
   2373             }
   2374             else {
   2375                 getParsingFlags(config).unusedTokens.push(token);
   2376             }
   2377             addTimeToArrayFromToken(token, parsedInput, config);
   2378         }
   2379         else if (config._strict && !parsedInput) {
   2380             getParsingFlags(config).unusedTokens.push(token);
   2381         }
   2382     }
   2383 
   2384     // add remaining unparsed input length to the string
   2385     getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
   2386     if (string.length > 0) {
   2387         getParsingFlags(config).unusedInput.push(string);
   2388     }
   2389 
   2390     // clear _12h flag if hour is <= 12
   2391     if (config._a[HOUR] <= 12 &&
   2392         getParsingFlags(config).bigHour === true &&
   2393         config._a[HOUR] > 0) {
   2394         getParsingFlags(config).bigHour = undefined;
   2395     }
   2396 
   2397     getParsingFlags(config).parsedDateParts = config._a.slice(0);
   2398     getParsingFlags(config).meridiem = config._meridiem;
   2399     // handle meridiem
   2400     config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
   2401 
   2402     configFromArray(config);
   2403     checkOverflow(config);
   2404 }
   2405 
   2406 
   2407 function meridiemFixWrap (locale, hour, meridiem) {
   2408     var isPm;
   2409 
   2410     if (meridiem == null) {
   2411         // nothing to do
   2412         return hour;
   2413     }
   2414     if (locale.meridiemHour != null) {
   2415         return locale.meridiemHour(hour, meridiem);
   2416     } else if (locale.isPM != null) {
   2417         // Fallback
   2418         isPm = locale.isPM(meridiem);
   2419         if (isPm && hour < 12) {
   2420             hour += 12;
   2421         }
   2422         if (!isPm && hour === 12) {
   2423             hour = 0;
   2424         }
   2425         return hour;
   2426     } else {
   2427         // this is not supposed to happen
   2428         return hour;
   2429     }
   2430 }
   2431 
   2432 // date from string and array of format strings
   2433 function configFromStringAndArray(config) {
   2434     var tempConfig,
   2435         bestMoment,
   2436 
   2437         scoreToBeat,
   2438         i,
   2439         currentScore;
   2440 
   2441     if (config._f.length === 0) {
   2442         getParsingFlags(config).invalidFormat = true;
   2443         config._d = new Date(NaN);
   2444         return;
   2445     }
   2446 
   2447     for (i = 0; i < config._f.length; i++) {
   2448         currentScore = 0;
   2449         tempConfig = copyConfig({}, config);
   2450         if (config._useUTC != null) {
   2451             tempConfig._useUTC = config._useUTC;
   2452         }
   2453         tempConfig._f = config._f[i];
   2454         configFromStringAndFormat(tempConfig);
   2455 
   2456         if (!isValid(tempConfig)) {
   2457             continue;
   2458         }
   2459 
   2460         // if there is any input that was not parsed add a penalty for that format
   2461         currentScore += getParsingFlags(tempConfig).charsLeftOver;
   2462 
   2463         //or tokens
   2464         currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
   2465 
   2466         getParsingFlags(tempConfig).score = currentScore;
   2467 
   2468         if (scoreToBeat == null || currentScore < scoreToBeat) {
   2469             scoreToBeat = currentScore;
   2470             bestMoment = tempConfig;
   2471         }
   2472     }
   2473 
   2474     extend(config, bestMoment || tempConfig);
   2475 }
   2476 
   2477 function configFromObject(config) {
   2478     if (config._d) {
   2479         return;
   2480     }
   2481 
   2482     var i = normalizeObjectUnits(config._i);
   2483     config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {
   2484         return obj && parseInt(obj, 10);
   2485     });
   2486 
   2487     configFromArray(config);
   2488 }
   2489 
   2490 function createFromConfig (config) {
   2491     var res = new Moment(checkOverflow(prepareConfig(config)));
   2492     if (res._nextDay) {
   2493         // Adding is smart enough around DST
   2494         res.add(1, 'd');
   2495         res._nextDay = undefined;
   2496     }
   2497 
   2498     return res;
   2499 }
   2500 
   2501 function prepareConfig (config) {
   2502     var input = config._i,
   2503         format = config._f;
   2504 
   2505     config._locale = config._locale || getLocale(config._l);
   2506 
   2507     if (input === null || (format === undefined && input === '')) {
   2508         return createInvalid({nullInput: true});
   2509     }
   2510 
   2511     if (typeof input === 'string') {
   2512         config._i = input = config._locale.preparse(input);
   2513     }
   2514 
   2515     if (isMoment(input)) {
   2516         return new Moment(checkOverflow(input));
   2517     } else if (isDate(input)) {
   2518         config._d = input;
   2519     } else if (isArray(format)) {
   2520         configFromStringAndArray(config);
   2521     } else if (format) {
   2522         configFromStringAndFormat(config);
   2523     }  else {
   2524         configFromInput(config);
   2525     }
   2526 
   2527     if (!isValid(config)) {
   2528         config._d = null;
   2529     }
   2530 
   2531     return config;
   2532 }
   2533 
   2534 function configFromInput(config) {
   2535     var input = config._i;
   2536     if (isUndefined(input)) {
   2537         config._d = new Date(hooks.now());
   2538     } else if (isDate(input)) {
   2539         config._d = new Date(input.valueOf());
   2540     } else if (typeof input === 'string') {
   2541         configFromString(config);
   2542     } else if (isArray(input)) {
   2543         config._a = map(input.slice(0), function (obj) {
   2544             return parseInt(obj, 10);
   2545         });
   2546         configFromArray(config);
   2547     } else if (isObject(input)) {
   2548         configFromObject(config);
   2549     } else if (isNumber(input)) {
   2550         // from milliseconds
   2551         config._d = new Date(input);
   2552     } else {
   2553         hooks.createFromInputFallback(config);
   2554     }
   2555 }
   2556 
   2557 function createLocalOrUTC (input, format, locale, strict, isUTC) {
   2558     var c = {};
   2559 
   2560     if (locale === true || locale === false) {
   2561         strict = locale;
   2562         locale = undefined;
   2563     }
   2564 
   2565     if ((isObject(input) && isObjectEmpty(input)) ||
   2566             (isArray(input) && input.length === 0)) {
   2567         input = undefined;
   2568     }
   2569     // object construction must be done this way.
   2570     // https://github.com/moment/moment/issues/1423
   2571     c._isAMomentObject = true;
   2572     c._useUTC = c._isUTC = isUTC;
   2573     c._l = locale;
   2574     c._i = input;
   2575     c._f = format;
   2576     c._strict = strict;
   2577 
   2578     return createFromConfig(c);
   2579 }
   2580 
   2581 function createLocal (input, format, locale, strict) {
   2582     return createLocalOrUTC(input, format, locale, strict, false);
   2583 }
   2584 
   2585 var prototypeMin = deprecate(
   2586     'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
   2587     function () {
   2588         var other = createLocal.apply(null, arguments);
   2589         if (this.isValid() && other.isValid()) {
   2590             return other < this ? this : other;
   2591         } else {
   2592             return createInvalid();
   2593         }
   2594     }
   2595 );
   2596 
   2597 var prototypeMax = deprecate(
   2598     'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
   2599     function () {
   2600         var other = createLocal.apply(null, arguments);
   2601         if (this.isValid() && other.isValid()) {
   2602             return other > this ? this : other;
   2603         } else {
   2604             return createInvalid();
   2605         }
   2606     }
   2607 );
   2608 
   2609 // Pick a moment m from moments so that m[fn](other) is true for all
   2610 // other. This relies on the function fn to be transitive.
   2611 //
   2612 // moments should either be an array of moment objects or an array, whose
   2613 // first element is an array of moment objects.
   2614 function pickBy(fn, moments) {
   2615     var res, i;
   2616     if (moments.length === 1 && isArray(moments[0])) {
   2617         moments = moments[0];
   2618     }
   2619     if (!moments.length) {
   2620         return createLocal();
   2621     }
   2622     res = moments[0];
   2623     for (i = 1; i < moments.length; ++i) {
   2624         if (!moments[i].isValid() || moments[i][fn](res)) {
   2625             res = moments[i];
   2626         }
   2627     }
   2628     return res;
   2629 }
   2630 
   2631 // TODO: Use [].sort instead?
   2632 function min () {
   2633     var args = [].slice.call(arguments, 0);
   2634 
   2635     return pickBy('isBefore', args);
   2636 }
   2637 
   2638 function max () {
   2639     var args = [].slice.call(arguments, 0);
   2640 
   2641     return pickBy('isAfter', args);
   2642 }
   2643 
   2644 var now = function () {
   2645     return Date.now ? Date.now() : +(new Date());
   2646 };
   2647 
   2648 var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];
   2649 
   2650 function isDurationValid(m) {
   2651     for (var key in m) {
   2652         if (!(ordering.indexOf(key) !== -1 && (m[key] == null || !isNaN(m[key])))) {
   2653             return false;
   2654         }
   2655     }
   2656 
   2657     var unitHasDecimal = false;
   2658     for (var i = 0; i < ordering.length; ++i) {
   2659         if (m[ordering[i]]) {
   2660             if (unitHasDecimal) {
   2661                 return false; // only allow non-integers for smallest unit
   2662             }
   2663             if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
   2664                 unitHasDecimal = true;
   2665             }
   2666         }
   2667     }
   2668 
   2669     return true;
   2670 }
   2671 
   2672 function isValid$1() {
   2673     return this._isValid;
   2674 }
   2675 
   2676 function createInvalid$1() {
   2677     return createDuration(NaN);
   2678 }
   2679 
   2680 function Duration (duration) {
   2681     var normalizedInput = normalizeObjectUnits(duration),
   2682         years = normalizedInput.year || 0,
   2683         quarters = normalizedInput.quarter || 0,
   2684         months = normalizedInput.month || 0,
   2685         weeks = normalizedInput.week || 0,
   2686         days = normalizedInput.day || 0,
   2687         hours = normalizedInput.hour || 0,
   2688         minutes = normalizedInput.minute || 0,
   2689         seconds = normalizedInput.second || 0,
   2690         milliseconds = normalizedInput.millisecond || 0;
   2691 
   2692     this._isValid = isDurationValid(normalizedInput);
   2693 
   2694     // representation for dateAddRemove
   2695     this._milliseconds = +milliseconds +
   2696         seconds * 1e3 + // 1000
   2697         minutes * 6e4 + // 1000 * 60
   2698         hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
   2699     // Because of dateAddRemove treats 24 hours as different from a
   2700     // day when working around DST, we need to store them separately
   2701     this._days = +days +
   2702         weeks * 7;
   2703     // It is impossible translate months into days without knowing
   2704     // which months you are are talking about, so we have to store
   2705     // it separately.
   2706     this._months = +months +
   2707         quarters * 3 +
   2708         years * 12;
   2709 
   2710     this._data = {};
   2711 
   2712     this._locale = getLocale();
   2713 
   2714     this._bubble();
   2715 }
   2716 
   2717 function isDuration (obj) {
   2718     return obj instanceof Duration;
   2719 }
   2720 
   2721 function absRound (number) {
   2722     if (number < 0) {
   2723         return Math.round(-1 * number) * -1;
   2724     } else {
   2725         return Math.round(number);
   2726     }
   2727 }
   2728 
   2729 // FORMATTING
   2730 
   2731 function offset (token, separator) {
   2732     addFormatToken(token, 0, 0, function () {
   2733         var offset = this.utcOffset();
   2734         var sign = '+';
   2735         if (offset < 0) {
   2736             offset = -offset;
   2737             sign = '-';
   2738         }
   2739         return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);
   2740     });
   2741 }
   2742 
   2743 offset('Z', ':');
   2744 offset('ZZ', '');
   2745 
   2746 // PARSING
   2747 
   2748 addRegexToken('Z',  matchShortOffset);
   2749 addRegexToken('ZZ', matchShortOffset);
   2750 addParseToken(['Z', 'ZZ'], function (input, array, config) {
   2751     config._useUTC = true;
   2752     config._tzm = offsetFromString(matchShortOffset, input);
   2753 });
   2754 
   2755 // HELPERS
   2756 
   2757 // timezone chunker
   2758 // '+10:00' > ['10',  '00']
   2759 // '-1530'  > ['-15', '30']
   2760 var chunkOffset = /([\+\-]|\d\d)/gi;
   2761 
   2762 function offsetFromString(matcher, string) {
   2763     var matches = (string || '').match(matcher);
   2764 
   2765     if (matches === null) {
   2766         return null;
   2767     }
   2768 
   2769     var chunk   = matches[matches.length - 1] || [];
   2770     var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];
   2771     var minutes = +(parts[1] * 60) + toInt(parts[2]);
   2772 
   2773     return minutes === 0 ?
   2774       0 :
   2775       parts[0] === '+' ? minutes : -minutes;
   2776 }
   2777 
   2778 // Return a moment from input, that is local/utc/zone equivalent to model.
   2779 function cloneWithOffset(input, model) {
   2780     var res, diff;
   2781     if (model._isUTC) {
   2782         res = model.clone();
   2783         diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();
   2784         // Use low-level api, because this fn is low-level api.
   2785         res._d.setTime(res._d.valueOf() + diff);
   2786         hooks.updateOffset(res, false);
   2787         return res;
   2788     } else {
   2789         return createLocal(input).local();
   2790     }
   2791 }
   2792 
   2793 function getDateOffset (m) {
   2794     // On Firefox.24 Date#getTimezoneOffset returns a floating point.
   2795     // https://github.com/moment/moment/pull/1871
   2796     return -Math.round(m._d.getTimezoneOffset() / 15) * 15;
   2797 }
   2798 
   2799 // HOOKS
   2800 
   2801 // This function will be called whenever a moment is mutated.
   2802 // It is intended to keep the offset in sync with the timezone.
   2803 hooks.updateOffset = function () {};
   2804 
   2805 // MOMENTS
   2806 
   2807 // keepLocalTime = true means only change the timezone, without
   2808 // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
   2809 // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
   2810 // +0200, so we adjust the time as needed, to be valid.
   2811 //
   2812 // Keeping the time actually adds/subtracts (one hour)
   2813 // from the actual represented time. That is why we call updateOffset
   2814 // a second time. In case it wants us to change the offset again
   2815 // _changeInProgress == true case, then we have to adjust, because
   2816 // there is no such time in the given timezone.
   2817 function getSetOffset (input, keepLocalTime, keepMinutes) {
   2818     var offset = this._offset || 0,
   2819         localAdjust;
   2820     if (!this.isValid()) {
   2821         return input != null ? this : NaN;
   2822     }
   2823     if (input != null) {
   2824         if (typeof input === 'string') {
   2825             input = offsetFromString(matchShortOffset, input);
   2826             if (input === null) {
   2827                 return this;
   2828             }
   2829         } else if (Math.abs(input) < 16 && !keepMinutes) {
   2830             input = input * 60;
   2831         }
   2832         if (!this._isUTC && keepLocalTime) {
   2833             localAdjust = getDateOffset(this);
   2834         }
   2835         this._offset = input;
   2836         this._isUTC = true;
   2837         if (localAdjust != null) {
   2838             this.add(localAdjust, 'm');
   2839         }
   2840         if (offset !== input) {
   2841             if (!keepLocalTime || this._changeInProgress) {
   2842                 addSubtract(this, createDuration(input - offset, 'm'), 1, false);
   2843             } else if (!this._changeInProgress) {
   2844                 this._changeInProgress = true;
   2845                 hooks.updateOffset(this, true);
   2846                 this._changeInProgress = null;
   2847             }
   2848         }
   2849         return this;
   2850     } else {
   2851         return this._isUTC ? offset : getDateOffset(this);
   2852     }
   2853 }
   2854 
   2855 function getSetZone (input, keepLocalTime) {
   2856     if (input != null) {
   2857         if (typeof input !== 'string') {
   2858             input = -input;
   2859         }
   2860 
   2861         this.utcOffset(input, keepLocalTime);
   2862 
   2863         return this;
   2864     } else {
   2865         return -this.utcOffset();
   2866     }
   2867 }
   2868 
   2869 function setOffsetToUTC (keepLocalTime) {
   2870     return this.utcOffset(0, keepLocalTime);
   2871 }
   2872 
   2873 function setOffsetToLocal (keepLocalTime) {
   2874     if (this._isUTC) {
   2875         this.utcOffset(0, keepLocalTime);
   2876         this._isUTC = false;
   2877 
   2878         if (keepLocalTime) {
   2879             this.subtract(getDateOffset(this), 'm');
   2880         }
   2881     }
   2882     return this;
   2883 }
   2884 
   2885 function setOffsetToParsedOffset () {
   2886     if (this._tzm != null) {
   2887         this.utcOffset(this._tzm, false, true);
   2888     } else if (typeof this._i === 'string') {
   2889         var tZone = offsetFromString(matchOffset, this._i);
   2890         if (tZone != null) {
   2891             this.utcOffset(tZone);
   2892         }
   2893         else {
   2894             this.utcOffset(0, true);
   2895         }
   2896     }
   2897     return this;
   2898 }
   2899 
   2900 function hasAlignedHourOffset (input) {
   2901     if (!this.isValid()) {
   2902         return false;
   2903     }
   2904     input = input ? createLocal(input).utcOffset() : 0;
   2905 
   2906     return (this.utcOffset() - input) % 60 === 0;
   2907 }
   2908 
   2909 function isDaylightSavingTime () {
   2910     return (
   2911         this.utcOffset() > this.clone().month(0).utcOffset() ||
   2912         this.utcOffset() > this.clone().month(5).utcOffset()
   2913     );
   2914 }
   2915 
   2916 function isDaylightSavingTimeShifted () {
   2917     if (!isUndefined(this._isDSTShifted)) {
   2918         return this._isDSTShifted;
   2919     }
   2920 
   2921     var c = {};
   2922 
   2923     copyConfig(c, this);
   2924     c = prepareConfig(c);
   2925 
   2926     if (c._a) {
   2927         var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
   2928         this._isDSTShifted = this.isValid() &&
   2929             compareArrays(c._a, other.toArray()) > 0;
   2930     } else {
   2931         this._isDSTShifted = false;
   2932     }
   2933 
   2934     return this._isDSTShifted;
   2935 }
   2936 
   2937 function isLocal () {
   2938     return this.isValid() ? !this._isUTC : false;
   2939 }
   2940 
   2941 function isUtcOffset () {
   2942     return this.isValid() ? this._isUTC : false;
   2943 }
   2944 
   2945 function isUtc () {
   2946     return this.isValid() ? this._isUTC && this._offset === 0 : false;
   2947 }
   2948 
   2949 // ASP.NET json date format regex
   2950 var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/;
   2951 
   2952 // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
   2953 // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
   2954 // and further modified to allow for strings containing both week and day
   2955 var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;
   2956 
   2957 function createDuration (input, key) {
   2958     var duration = input,
   2959         // matching against regexp is expensive, do it on demand
   2960         match = null,
   2961         sign,
   2962         ret,
   2963         diffRes;
   2964 
   2965     if (isDuration(input)) {
   2966         duration = {
   2967             ms : input._milliseconds,
   2968             d  : input._days,
   2969             M  : input._months
   2970         };
   2971     } else if (isNumber(input)) {
   2972         duration = {};
   2973         if (key) {
   2974             duration[key] = input;
   2975         } else {
   2976             duration.milliseconds = input;
   2977         }
   2978     } else if (!!(match = aspNetRegex.exec(input))) {
   2979         sign = (match[1] === '-') ? -1 : 1;
   2980         duration = {
   2981             y  : 0,
   2982             d  : toInt(match[DATE])                         * sign,
   2983             h  : toInt(match[HOUR])                         * sign,
   2984             m  : toInt(match[MINUTE])                       * sign,
   2985             s  : toInt(match[SECOND])                       * sign,
   2986             ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match
   2987         };
   2988     } else if (!!(match = isoRegex.exec(input))) {
   2989         sign = (match[1] === '-') ? -1 : 1;
   2990         duration = {
   2991             y : parseIso(match[2], sign),
   2992             M : parseIso(match[3], sign),
   2993             w : parseIso(match[4], sign),
   2994             d : parseIso(match[5], sign),
   2995             h : parseIso(match[6], sign),
   2996             m : parseIso(match[7], sign),
   2997             s : parseIso(match[8], sign)
   2998         };
   2999     } else if (duration == null) {// checks for null or undefined
   3000         duration = {};
   3001     } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {
   3002         diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));
   3003 
   3004         duration = {};
   3005         duration.ms = diffRes.milliseconds;
   3006         duration.M = diffRes.months;
   3007     }
   3008 
   3009     ret = new Duration(duration);
   3010 
   3011     if (isDuration(input) && hasOwnProp(input, '_locale')) {
   3012         ret._locale = input._locale;
   3013     }
   3014 
   3015     return ret;
   3016 }
   3017 
   3018 createDuration.fn = Duration.prototype;
   3019 createDuration.invalid = createInvalid$1;
   3020 
   3021 function parseIso (inp, sign) {
   3022     // We'd normally use ~~inp for this, but unfortunately it also
   3023     // converts floats to ints.
   3024     // inp may be undefined, so careful calling replace on it.
   3025     var res = inp && parseFloat(inp.replace(',', '.'));
   3026     // apply sign while we're at it
   3027     return (isNaN(res) ? 0 : res) * sign;
   3028 }
   3029 
   3030 function positiveMomentsDifference(base, other) {
   3031     var res = {milliseconds: 0, months: 0};
   3032 
   3033     res.months = other.month() - base.month() +
   3034         (other.year() - base.year()) * 12;
   3035     if (base.clone().add(res.months, 'M').isAfter(other)) {
   3036         --res.months;
   3037     }
   3038 
   3039     res.milliseconds = +other - +(base.clone().add(res.months, 'M'));
   3040 
   3041     return res;
   3042 }
   3043 
   3044 function momentsDifference(base, other) {
   3045     var res;
   3046     if (!(base.isValid() && other.isValid())) {
   3047         return {milliseconds: 0, months: 0};
   3048     }
   3049 
   3050     other = cloneWithOffset(other, base);
   3051     if (base.isBefore(other)) {
   3052         res = positiveMomentsDifference(base, other);
   3053     } else {
   3054         res = positiveMomentsDifference(other, base);
   3055         res.milliseconds = -res.milliseconds;
   3056         res.months = -res.months;
   3057     }
   3058 
   3059     return res;
   3060 }
   3061 
   3062 // TODO: remove 'name' arg after deprecation is removed
   3063 function createAdder(direction, name) {
   3064     return function (val, period) {
   3065         var dur, tmp;
   3066         //invert the arguments, but complain about it
   3067         if (period !== null && !isNaN(+period)) {
   3068             deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +
   3069             'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');
   3070             tmp = val; val = period; period = tmp;
   3071         }
   3072 
   3073         val = typeof val === 'string' ? +val : val;
   3074         dur = createDuration(val, period);
   3075         addSubtract(this, dur, direction);
   3076         return this;
   3077     };
   3078 }
   3079 
   3080 function addSubtract (mom, duration, isAdding, updateOffset) {
   3081     var milliseconds = duration._milliseconds,
   3082         days = absRound(duration._days),
   3083         months = absRound(duration._months);
   3084 
   3085     if (!mom.isValid()) {
   3086         // No op
   3087         return;
   3088     }
   3089 
   3090     updateOffset = updateOffset == null ? true : updateOffset;
   3091 
   3092     if (milliseconds) {
   3093         mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
   3094     }
   3095     if (days) {
   3096         set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
   3097     }
   3098     if (months) {
   3099         setMonth(mom, get(mom, 'Month') + months * isAdding);
   3100     }
   3101     if (updateOffset) {
   3102         hooks.updateOffset(mom, days || months);
   3103     }
   3104 }
   3105 
   3106 var add      = createAdder(1, 'add');
   3107 var subtract = createAdder(-1, 'subtract');
   3108 
   3109 function getCalendarFormat(myMoment, now) {
   3110     var diff = myMoment.diff(now, 'days', true);
   3111     return diff < -6 ? 'sameElse' :
   3112             diff < -1 ? 'lastWeek' :
   3113             diff < 0 ? 'lastDay' :
   3114             diff < 1 ? 'sameDay' :
   3115             diff < 2 ? 'nextDay' :
   3116             diff < 7 ? 'nextWeek' : 'sameElse';
   3117 }
   3118 
   3119 function calendar$1 (time, formats) {
   3120     // We want to compare the start of today, vs this.
   3121     // Getting start-of-today depends on whether we're local/utc/offset or not.
   3122     var now = time || createLocal(),
   3123         sod = cloneWithOffset(now, this).startOf('day'),
   3124         format = hooks.calendarFormat(this, sod) || 'sameElse';
   3125 
   3126     var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
   3127 
   3128     return this.format(output || this.localeData().calendar(format, this, createLocal(now)));
   3129 }
   3130 
   3131 function clone () {
   3132     return new Moment(this);
   3133 }
   3134 
   3135 function isAfter (input, units) {
   3136     var localInput = isMoment(input) ? input : createLocal(input);
   3137     if (!(this.isValid() && localInput.isValid())) {
   3138         return false;
   3139     }
   3140     units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
   3141     if (units === 'millisecond') {
   3142         return this.valueOf() > localInput.valueOf();
   3143     } else {
   3144         return localInput.valueOf() < this.clone().startOf(units).valueOf();
   3145     }
   3146 }
   3147 
   3148 function isBefore (input, units) {
   3149     var localInput = isMoment(input) ? input : createLocal(input);
   3150     if (!(this.isValid() && localInput.isValid())) {
   3151         return false;
   3152     }
   3153     units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
   3154     if (units === 'millisecond') {
   3155         return this.valueOf() < localInput.valueOf();
   3156     } else {
   3157         return this.clone().endOf(units).valueOf() < localInput.valueOf();
   3158     }
   3159 }
   3160 
   3161 function isBetween (from, to, units, inclusivity) {
   3162     inclusivity = inclusivity || '()';
   3163     return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&
   3164         (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));
   3165 }
   3166 
   3167 function isSame (input, units) {
   3168     var localInput = isMoment(input) ? input : createLocal(input),
   3169         inputMs;
   3170     if (!(this.isValid() && localInput.isValid())) {
   3171         return false;
   3172     }
   3173     units = normalizeUnits(units || 'millisecond');
   3174     if (units === 'millisecond') {
   3175         return this.valueOf() === localInput.valueOf();
   3176     } else {
   3177         inputMs = localInput.valueOf();
   3178         return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
   3179     }
   3180 }
   3181 
   3182 function isSameOrAfter (input, units) {
   3183     return this.isSame(input, units) || this.isAfter(input,units);
   3184 }
   3185 
   3186 function isSameOrBefore (input, units) {
   3187     return this.isSame(input, units) || this.isBefore(input,units);
   3188 }
   3189 
   3190 function diff (input, units, asFloat) {
   3191     var that,
   3192         zoneDelta,
   3193         delta, output;
   3194 
   3195     if (!this.isValid()) {
   3196         return NaN;
   3197     }
   3198 
   3199     that = cloneWithOffset(input, this);
   3200 
   3201     if (!that.isValid()) {
   3202         return NaN;
   3203     }
   3204 
   3205     zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
   3206 
   3207     units = normalizeUnits(units);
   3208 
   3209     if (units === 'year' || units === 'month' || units === 'quarter') {
   3210         output = monthDiff(this, that);
   3211         if (units === 'quarter') {
   3212             output = output / 3;
   3213         } else if (units === 'year') {
   3214             output = output / 12;
   3215         }
   3216     } else {
   3217         delta = this - that;
   3218         output = units === 'second' ? delta / 1e3 : // 1000
   3219             units === 'minute' ? delta / 6e4 : // 1000 * 60
   3220             units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60
   3221             units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst
   3222             units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst
   3223             delta;
   3224     }
   3225     return asFloat ? output : absFloor(output);
   3226 }
   3227 
   3228 function monthDiff (a, b) {
   3229     // difference in months
   3230     var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),
   3231         // b is in (anchor - 1 month, anchor + 1 month)
   3232         anchor = a.clone().add(wholeMonthDiff, 'months'),
   3233         anchor2, adjust;
   3234 
   3235     if (b - anchor < 0) {
   3236         anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
   3237         // linear across the month
   3238         adjust = (b - anchor) / (anchor - anchor2);
   3239     } else {
   3240         anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
   3241         // linear across the month
   3242         adjust = (b - anchor) / (anchor2 - anchor);
   3243     }
   3244 
   3245     //check for negative zero, return zero if negative zero
   3246     return -(wholeMonthDiff + adjust) || 0;
   3247 }
   3248 
   3249 hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
   3250 hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
   3251 
   3252 function toString () {
   3253     return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
   3254 }
   3255 
   3256 function toISOString() {
   3257     if (!this.isValid()) {
   3258         return null;
   3259     }
   3260     var m = this.clone().utc();
   3261     if (m.year() < 0 || m.year() > 9999) {
   3262         return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
   3263     }
   3264     if (isFunction(Date.prototype.toISOString)) {
   3265         // native implementation is ~50x faster, use it when we can
   3266         return this.toDate().toISOString();
   3267     }
   3268     return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
   3269 }
   3270 
   3271 /**
   3272  * Return a human readable representation of a moment that can
   3273  * also be evaluated to get a new moment which is the same
   3274  *
   3275  * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
   3276  */
   3277 function inspect () {
   3278     if (!this.isValid()) {
   3279         return 'moment.invalid(/* ' + this._i + ' */)';
   3280     }
   3281     var func = 'moment';
   3282     var zone = '';
   3283     if (!this.isLocal()) {
   3284         func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
   3285         zone = 'Z';
   3286     }
   3287     var prefix = '[' + func + '("]';
   3288     var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';
   3289     var datetime = '-MM-DD[T]HH:mm:ss.SSS';
   3290     var suffix = zone + '[")]';
   3291 
   3292     return this.format(prefix + year + datetime + suffix);
   3293 }
   3294 
   3295 function format (inputString) {
   3296     if (!inputString) {
   3297         inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
   3298     }
   3299     var output = formatMoment(this, inputString);
   3300     return this.localeData().postformat(output);
   3301 }
   3302 
   3303 function from (time, withoutSuffix) {
   3304     if (this.isValid() &&
   3305             ((isMoment(time) && time.isValid()) ||
   3306              createLocal(time).isValid())) {
   3307         return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
   3308     } else {
   3309         return this.localeData().invalidDate();
   3310     }
   3311 }
   3312 
   3313 function fromNow (withoutSuffix) {
   3314     return this.from(createLocal(), withoutSuffix);
   3315 }
   3316 
   3317 function to (time, withoutSuffix) {
   3318     if (this.isValid() &&
   3319             ((isMoment(time) && time.isValid()) ||
   3320              createLocal(time).isValid())) {
   3321         return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
   3322     } else {
   3323         return this.localeData().invalidDate();
   3324     }
   3325 }
   3326 
   3327 function toNow (withoutSuffix) {
   3328     return this.to(createLocal(), withoutSuffix);
   3329 }
   3330 
   3331 // If passed a locale key, it will set the locale for this
   3332 // instance.  Otherwise, it will return the locale configuration
   3333 // variables for this instance.
   3334 function locale (key) {
   3335     var newLocaleData;
   3336 
   3337     if (key === undefined) {
   3338         return this._locale._abbr;
   3339     } else {
   3340         newLocaleData = getLocale(key);
   3341         if (newLocaleData != null) {
   3342             this._locale = newLocaleData;
   3343         }
   3344         return this;
   3345     }
   3346 }
   3347 
   3348 var lang = deprecate(
   3349     'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
   3350     function (key) {
   3351         if (key === undefined) {
   3352             return this.localeData();
   3353         } else {
   3354             return this.locale(key);
   3355         }
   3356     }
   3357 );
   3358 
   3359 function localeData () {
   3360     return this._locale;
   3361 }
   3362 
   3363 function startOf (units) {
   3364     units = normalizeUnits(units);
   3365     // the following switch intentionally omits break keywords
   3366     // to utilize falling through the cases.
   3367     switch (units) {
   3368         case 'year':
   3369             this.month(0);
   3370             /* falls through */
   3371         case 'quarter':
   3372         case 'month':
   3373             this.date(1);
   3374             /* falls through */
   3375         case 'week':
   3376         case 'isoWeek':
   3377         case 'day':
   3378         case 'date':
   3379             this.hours(0);
   3380             /* falls through */
   3381         case 'hour':
   3382             this.minutes(0);
   3383             /* falls through */
   3384         case 'minute':
   3385             this.seconds(0);
   3386             /* falls through */
   3387         case 'second':
   3388             this.milliseconds(0);
   3389     }
   3390 
   3391     // weeks are a special case
   3392     if (units === 'week') {
   3393         this.weekday(0);
   3394     }
   3395     if (units === 'isoWeek') {
   3396         this.isoWeekday(1);
   3397     }
   3398 
   3399     // quarters are also special
   3400     if (units === 'quarter') {
   3401         this.month(Math.floor(this.month() / 3) * 3);
   3402     }
   3403 
   3404     return this;
   3405 }
   3406 
   3407 function endOf (units) {
   3408     units = normalizeUnits(units);
   3409     if (units === undefined || units === 'millisecond') {
   3410         return this;
   3411     }
   3412 
   3413     // 'date' is an alias for 'day', so it should be considered as such.
   3414     if (units === 'date') {
   3415         units = 'day';
   3416     }
   3417 
   3418     return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');
   3419 }
   3420 
   3421 function valueOf () {
   3422     return this._d.valueOf() - ((this._offset || 0) * 60000);
   3423 }
   3424 
   3425 function unix () {
   3426     return Math.floor(this.valueOf() / 1000);
   3427 }
   3428 
   3429 function toDate () {
   3430     return new Date(this.valueOf());
   3431 }
   3432 
   3433 function toArray () {
   3434     var m = this;
   3435     return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
   3436 }
   3437 
   3438 function toObject () {
   3439     var m = this;
   3440     return {
   3441         years: m.year(),
   3442         months: m.month(),
   3443         date: m.date(),
   3444         hours: m.hours(),
   3445         minutes: m.minutes(),
   3446         seconds: m.seconds(),
   3447         milliseconds: m.milliseconds()
   3448     };
   3449 }
   3450 
   3451 function toJSON () {
   3452     // new Date(NaN).toJSON() === null
   3453     return this.isValid() ? this.toISOString() : null;
   3454 }
   3455 
   3456 function isValid$2 () {
   3457     return isValid(this);
   3458 }
   3459 
   3460 function parsingFlags () {
   3461     return extend({}, getParsingFlags(this));
   3462 }
   3463 
   3464 function invalidAt () {
   3465     return getParsingFlags(this).overflow;
   3466 }
   3467 
   3468 function creationData() {
   3469     return {
   3470         input: this._i,
   3471         format: this._f,
   3472         locale: this._locale,
   3473         isUTC: this._isUTC,
   3474         strict: this._strict
   3475     };
   3476 }
   3477 
   3478 // FORMATTING
   3479 
   3480 addFormatToken(0, ['gg', 2], 0, function () {
   3481     return this.weekYear() % 100;
   3482 });
   3483 
   3484 addFormatToken(0, ['GG', 2], 0, function () {
   3485     return this.isoWeekYear() % 100;
   3486 });
   3487 
   3488 function addWeekYearFormatToken (token, getter) {
   3489     addFormatToken(0, [token, token.length], 0, getter);
   3490 }
   3491 
   3492 addWeekYearFormatToken('gggg',     'weekYear');
   3493 addWeekYearFormatToken('ggggg',    'weekYear');
   3494 addWeekYearFormatToken('GGGG',  'isoWeekYear');
   3495 addWeekYearFormatToken('GGGGG', 'isoWeekYear');
   3496 
   3497 // ALIASES
   3498 
   3499 addUnitAlias('weekYear', 'gg');
   3500 addUnitAlias('isoWeekYear', 'GG');
   3501 
   3502 // PRIORITY
   3503 
   3504 addUnitPriority('weekYear', 1);
   3505 addUnitPriority('isoWeekYear', 1);
   3506 
   3507 
   3508 // PARSING
   3509 
   3510 addRegexToken('G',      matchSigned);
   3511 addRegexToken('g',      matchSigned);
   3512 addRegexToken('GG',     match1to2, match2);
   3513 addRegexToken('gg',     match1to2, match2);
   3514 addRegexToken('GGGG',   match1to4, match4);
   3515 addRegexToken('gggg',   match1to4, match4);
   3516 addRegexToken('GGGGG',  match1to6, match6);
   3517 addRegexToken('ggggg',  match1to6, match6);
   3518 
   3519 addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {
   3520     week[token.substr(0, 2)] = toInt(input);
   3521 });
   3522 
   3523 addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
   3524     week[token] = hooks.parseTwoDigitYear(input);
   3525 });
   3526 
   3527 // MOMENTS
   3528 
   3529 function getSetWeekYear (input) {
   3530     return getSetWeekYearHelper.call(this,
   3531             input,
   3532             this.week(),
   3533             this.weekday(),
   3534             this.localeData()._week.dow,
   3535             this.localeData()._week.doy);
   3536 }
   3537 
   3538 function getSetISOWeekYear (input) {
   3539     return getSetWeekYearHelper.call(this,
   3540             input, this.isoWeek(), this.isoWeekday(), 1, 4);
   3541 }
   3542 
   3543 function getISOWeeksInYear () {
   3544     return weeksInYear(this.year(), 1, 4);
   3545 }
   3546 
   3547 function getWeeksInYear () {
   3548     var weekInfo = this.localeData()._week;
   3549     return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
   3550 }
   3551 
   3552 function getSetWeekYearHelper(input, week, weekday, dow, doy) {
   3553     var weeksTarget;
   3554     if (input == null) {
   3555         return weekOfYear(this, dow, doy).year;
   3556     } else {
   3557         weeksTarget = weeksInYear(input, dow, doy);
   3558         if (week > weeksTarget) {
   3559             week = weeksTarget;
   3560         }
   3561         return setWeekAll.call(this, input, week, weekday, dow, doy);
   3562     }
   3563 }
   3564 
   3565 function setWeekAll(weekYear, week, weekday, dow, doy) {
   3566     var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
   3567         date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
   3568 
   3569     this.year(date.getUTCFullYear());
   3570     this.month(date.getUTCMonth());
   3571     this.date(date.getUTCDate());
   3572     return this;
   3573 }
   3574 
   3575 // FORMATTING
   3576 
   3577 addFormatToken('Q', 0, 'Qo', 'quarter');
   3578 
   3579 // ALIASES
   3580 
   3581 addUnitAlias('quarter', 'Q');
   3582 
   3583 // PRIORITY
   3584 
   3585 addUnitPriority('quarter', 7);
   3586 
   3587 // PARSING
   3588 
   3589 addRegexToken('Q', match1);
   3590 addParseToken('Q', function (input, array) {
   3591     array[MONTH] = (toInt(input) - 1) * 3;
   3592 });
   3593 
   3594 // MOMENTS
   3595 
   3596 function getSetQuarter (input) {
   3597     return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
   3598 }
   3599 
   3600 // FORMATTING
   3601 
   3602 addFormatToken('D', ['DD', 2], 'Do', 'date');
   3603 
   3604 // ALIASES
   3605 
   3606 addUnitAlias('date', 'D');
   3607 
   3608 // PRIOROITY
   3609 addUnitPriority('date', 9);
   3610 
   3611 // PARSING
   3612 
   3613 addRegexToken('D',  match1to2);
   3614 addRegexToken('DD', match1to2, match2);
   3615 addRegexToken('Do', function (isStrict, locale) {
   3616     // TODO: Remove "ordinalParse" fallback in next major release.
   3617     return isStrict ?
   3618       (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :
   3619       locale._dayOfMonthOrdinalParseLenient;
   3620 });
   3621 
   3622 addParseToken(['D', 'DD'], DATE);
   3623 addParseToken('Do', function (input, array) {
   3624     array[DATE] = toInt(input.match(match1to2)[0], 10);
   3625 });
   3626 
   3627 // MOMENTS
   3628 
   3629 var getSetDayOfMonth = makeGetSet('Date', true);
   3630 
   3631 // FORMATTING
   3632 
   3633 addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
   3634 
   3635 // ALIASES
   3636 
   3637 addUnitAlias('dayOfYear', 'DDD');
   3638 
   3639 // PRIORITY
   3640 addUnitPriority('dayOfYear', 4);
   3641 
   3642 // PARSING
   3643 
   3644 addRegexToken('DDD',  match1to3);
   3645 addRegexToken('DDDD', match3);
   3646 addParseToken(['DDD', 'DDDD'], function (input, array, config) {
   3647     config._dayOfYear = toInt(input);
   3648 });
   3649 
   3650 // HELPERS
   3651 
   3652 // MOMENTS
   3653 
   3654 function getSetDayOfYear (input) {
   3655     var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
   3656     return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
   3657 }
   3658 
   3659 // FORMATTING
   3660 
   3661 addFormatToken('m', ['mm', 2], 0, 'minute');
   3662 
   3663 // ALIASES
   3664 
   3665 addUnitAlias('minute', 'm');
   3666 
   3667 // PRIORITY
   3668 
   3669 addUnitPriority('minute', 14);
   3670 
   3671 // PARSING
   3672 
   3673 addRegexToken('m',  match1to2);
   3674 addRegexToken('mm', match1to2, match2);
   3675 addParseToken(['m', 'mm'], MINUTE);
   3676 
   3677 // MOMENTS
   3678 
   3679 var getSetMinute = makeGetSet('Minutes', false);
   3680 
   3681 // FORMATTING
   3682 
   3683 addFormatToken('s', ['ss', 2], 0, 'second');
   3684 
   3685 // ALIASES
   3686 
   3687 addUnitAlias('second', 's');
   3688 
   3689 // PRIORITY
   3690 
   3691 addUnitPriority('second', 15);
   3692 
   3693 // PARSING
   3694 
   3695 addRegexToken('s',  match1to2);
   3696 addRegexToken('ss', match1to2, match2);
   3697 addParseToken(['s', 'ss'], SECOND);
   3698 
   3699 // MOMENTS
   3700 
   3701 var getSetSecond = makeGetSet('Seconds', false);
   3702 
   3703 // FORMATTING
   3704 
   3705 addFormatToken('S', 0, 0, function () {
   3706     return ~~(this.millisecond() / 100);
   3707 });
   3708 
   3709 addFormatToken(0, ['SS', 2], 0, function () {
   3710     return ~~(this.millisecond() / 10);
   3711 });
   3712 
   3713 addFormatToken(0, ['SSS', 3], 0, 'millisecond');
   3714 addFormatToken(0, ['SSSS', 4], 0, function () {
   3715     return this.millisecond() * 10;
   3716 });
   3717 addFormatToken(0, ['SSSSS', 5], 0, function () {
   3718     return this.millisecond() * 100;
   3719 });
   3720 addFormatToken(0, ['SSSSSS', 6], 0, function () {
   3721     return this.millisecond() * 1000;
   3722 });
   3723 addFormatToken(0, ['SSSSSSS', 7], 0, function () {
   3724     return this.millisecond() * 10000;
   3725 });
   3726 addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
   3727     return this.millisecond() * 100000;
   3728 });
   3729 addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
   3730     return this.millisecond() * 1000000;
   3731 });
   3732 
   3733 
   3734 // ALIASES
   3735 
   3736 addUnitAlias('millisecond', 'ms');
   3737 
   3738 // PRIORITY
   3739 
   3740 addUnitPriority('millisecond', 16);
   3741 
   3742 // PARSING
   3743 
   3744 addRegexToken('S',    match1to3, match1);
   3745 addRegexToken('SS',   match1to3, match2);
   3746 addRegexToken('SSS',  match1to3, match3);
   3747 
   3748 var token;
   3749 for (token = 'SSSS'; token.length <= 9; token += 'S') {
   3750     addRegexToken(token, matchUnsigned);
   3751 }
   3752 
   3753 function parseMs(input, array) {
   3754     array[MILLISECOND] = toInt(('0.' + input) * 1000);
   3755 }
   3756 
   3757 for (token = 'S'; token.length <= 9; token += 'S') {
   3758     addParseToken(token, parseMs);
   3759 }
   3760 // MOMENTS
   3761 
   3762 var getSetMillisecond = makeGetSet('Milliseconds', false);
   3763 
   3764 // FORMATTING
   3765 
   3766 addFormatToken('z',  0, 0, 'zoneAbbr');
   3767 addFormatToken('zz', 0, 0, 'zoneName');
   3768 
   3769 // MOMENTS
   3770 
   3771 function getZoneAbbr () {
   3772     return this._isUTC ? 'UTC' : '';
   3773 }
   3774 
   3775 function getZoneName () {
   3776     return this._isUTC ? 'Coordinated Universal Time' : '';
   3777 }
   3778 
   3779 var proto = Moment.prototype;
   3780 
   3781 proto.add               = add;
   3782 proto.calendar          = calendar$1;
   3783 proto.clone             = clone;
   3784 proto.diff              = diff;
   3785 proto.endOf             = endOf;
   3786 proto.format            = format;
   3787 proto.from              = from;
   3788 proto.fromNow           = fromNow;
   3789 proto.to                = to;
   3790 proto.toNow             = toNow;
   3791 proto.get               = stringGet;
   3792 proto.invalidAt         = invalidAt;
   3793 proto.isAfter           = isAfter;
   3794 proto.isBefore          = isBefore;
   3795 proto.isBetween         = isBetween;
   3796 proto.isSame            = isSame;
   3797 proto.isSameOrAfter     = isSameOrAfter;
   3798 proto.isSameOrBefore    = isSameOrBefore;
   3799 proto.isValid           = isValid$2;
   3800 proto.lang              = lang;
   3801 proto.locale            = locale;
   3802 proto.localeData        = localeData;
   3803 proto.max               = prototypeMax;
   3804 proto.min               = prototypeMin;
   3805 proto.parsingFlags      = parsingFlags;
   3806 proto.set               = stringSet;
   3807 proto.startOf           = startOf;
   3808 proto.subtract          = subtract;
   3809 proto.toArray           = toArray;
   3810 proto.toObject          = toObject;
   3811 proto.toDate            = toDate;
   3812 proto.toISOString       = toISOString;
   3813 proto.inspect           = inspect;
   3814 proto.toJSON            = toJSON;
   3815 proto.toString          = toString;
   3816 proto.unix              = unix;
   3817 proto.valueOf           = valueOf;
   3818 proto.creationData      = creationData;
   3819 
   3820 // Year
   3821 proto.year       = getSetYear;
   3822 proto.isLeapYear = getIsLeapYear;
   3823 
   3824 // Week Year
   3825 proto.weekYear    = getSetWeekYear;
   3826 proto.isoWeekYear = getSetISOWeekYear;
   3827 
   3828 // Quarter
   3829 proto.quarter = proto.quarters = getSetQuarter;
   3830 
   3831 // Month
   3832 proto.month       = getSetMonth;
   3833 proto.daysInMonth = getDaysInMonth;
   3834 
   3835 // Week
   3836 proto.week           = proto.weeks        = getSetWeek;
   3837 proto.isoWeek        = proto.isoWeeks     = getSetISOWeek;
   3838 proto.weeksInYear    = getWeeksInYear;
   3839 proto.isoWeeksInYear = getISOWeeksInYear;
   3840 
   3841 // Day
   3842 proto.date       = getSetDayOfMonth;
   3843 proto.day        = proto.days             = getSetDayOfWeek;
   3844 proto.weekday    = getSetLocaleDayOfWeek;
   3845 proto.isoWeekday = getSetISODayOfWeek;
   3846 proto.dayOfYear  = getSetDayOfYear;
   3847 
   3848 // Hour
   3849 proto.hour = proto.hours = getSetHour;
   3850 
   3851 // Minute
   3852 proto.minute = proto.minutes = getSetMinute;
   3853 
   3854 // Second
   3855 proto.second = proto.seconds = getSetSecond;
   3856 
   3857 // Millisecond
   3858 proto.millisecond = proto.milliseconds = getSetMillisecond;
   3859 
   3860 // Offset
   3861 proto.utcOffset            = getSetOffset;
   3862 proto.utc                  = setOffsetToUTC;
   3863 proto.local                = setOffsetToLocal;
   3864 proto.parseZone            = setOffsetToParsedOffset;
   3865 proto.hasAlignedHourOffset = hasAlignedHourOffset;
   3866 proto.isDST                = isDaylightSavingTime;
   3867 proto.isLocal              = isLocal;
   3868 proto.isUtcOffset          = isUtcOffset;
   3869 proto.isUtc                = isUtc;
   3870 proto.isUTC                = isUtc;
   3871 
   3872 // Timezone
   3873 proto.zoneAbbr = getZoneAbbr;
   3874 proto.zoneName = getZoneName;
   3875 
   3876 // Deprecations
   3877 proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
   3878 proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
   3879 proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);
   3880 proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);
   3881 proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);
   3882 
   3883 function createUnix (input) {
   3884     return createLocal(input * 1000);
   3885 }
   3886 
   3887 function createInZone () {
   3888     return createLocal.apply(null, arguments).parseZone();
   3889 }
   3890 
   3891 function preParsePostFormat (string) {
   3892     return string;
   3893 }
   3894 
   3895 var proto$1 = Locale.prototype;
   3896 
   3897 proto$1.calendar        = calendar;
   3898 proto$1.longDateFormat  = longDateFormat;
   3899 proto$1.invalidDate     = invalidDate;
   3900 proto$1.ordinal         = ordinal;
   3901 proto$1.preparse        = preParsePostFormat;
   3902 proto$1.postformat      = preParsePostFormat;
   3903 proto$1.relativeTime    = relativeTime;
   3904 proto$1.pastFuture      = pastFuture;
   3905 proto$1.set             = set;
   3906 
   3907 // Month
   3908 proto$1.months            =        localeMonths;
   3909 proto$1.monthsShort       =        localeMonthsShort;
   3910 proto$1.monthsParse       =        localeMonthsParse;
   3911 proto$1.monthsRegex       = monthsRegex;
   3912 proto$1.monthsShortRegex  = monthsShortRegex;
   3913 
   3914 // Week
   3915 proto$1.week = localeWeek;
   3916 proto$1.firstDayOfYear = localeFirstDayOfYear;
   3917 proto$1.firstDayOfWeek = localeFirstDayOfWeek;
   3918 
   3919 // Day of Week
   3920 proto$1.weekdays       =        localeWeekdays;
   3921 proto$1.weekdaysMin    =        localeWeekdaysMin;
   3922 proto$1.weekdaysShort  =        localeWeekdaysShort;
   3923 proto$1.weekdaysParse  =        localeWeekdaysParse;
   3924 
   3925 proto$1.weekdaysRegex       =        weekdaysRegex;
   3926 proto$1.weekdaysShortRegex  =        weekdaysShortRegex;
   3927 proto$1.weekdaysMinRegex    =        weekdaysMinRegex;
   3928 
   3929 // Hours
   3930 proto$1.isPM = localeIsPM;
   3931 proto$1.meridiem = localeMeridiem;
   3932 
   3933 function get$1 (format, index, field, setter) {
   3934     var locale = getLocale();
   3935     var utc = createUTC().set(setter, index);
   3936     return locale[field](utc, format);
   3937 }
   3938 
   3939 function listMonthsImpl (format, index, field) {
   3940     if (isNumber(format)) {
   3941         index = format;
   3942         format = undefined;
   3943     }
   3944 
   3945     format = format || '';
   3946 
   3947     if (index != null) {
   3948         return get$1(format, index, field, 'month');
   3949     }
   3950 
   3951     var i;
   3952     var out = [];
   3953     for (i = 0; i < 12; i++) {
   3954         out[i] = get$1(format, i, field, 'month');
   3955     }
   3956     return out;
   3957 }
   3958 
   3959 // ()
   3960 // (5)
   3961 // (fmt, 5)
   3962 // (fmt)
   3963 // (true)
   3964 // (true, 5)
   3965 // (true, fmt, 5)
   3966 // (true, fmt)
   3967 function listWeekdaysImpl (localeSorted, format, index, field) {
   3968     if (typeof localeSorted === 'boolean') {
   3969         if (isNumber(format)) {
   3970             index = format;
   3971             format = undefined;
   3972         }
   3973 
   3974         format = format || '';
   3975     } else {
   3976         format = localeSorted;
   3977         index = format;
   3978         localeSorted = false;
   3979 
   3980         if (isNumber(format)) {
   3981             index = format;
   3982             format = undefined;
   3983         }
   3984 
   3985         format = format || '';
   3986     }
   3987 
   3988     var locale = getLocale(),
   3989         shift = localeSorted ? locale._week.dow : 0;
   3990 
   3991     if (index != null) {
   3992         return get$1(format, (index + shift) % 7, field, 'day');
   3993     }
   3994 
   3995     var i;
   3996     var out = [];
   3997     for (i = 0; i < 7; i++) {
   3998         out[i] = get$1(format, (i + shift) % 7, field, 'day');
   3999     }
   4000     return out;
   4001 }
   4002 
   4003 function listMonths (format, index) {
   4004     return listMonthsImpl(format, index, 'months');
   4005 }
   4006 
   4007 function listMonthsShort (format, index) {
   4008     return listMonthsImpl(format, index, 'monthsShort');
   4009 }
   4010 
   4011 function listWeekdays (localeSorted, format, index) {
   4012     return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
   4013 }
   4014 
   4015 function listWeekdaysShort (localeSorted, format, index) {
   4016     return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
   4017 }
   4018 
   4019 function listWeekdaysMin (localeSorted, format, index) {
   4020     return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
   4021 }
   4022 
   4023 getSetGlobalLocale('en', {
   4024     dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
   4025     ordinal : function (number) {
   4026         var b = number % 10,
   4027             output = (toInt(number % 100 / 10) === 1) ? 'th' :
   4028             (b === 1) ? 'st' :
   4029             (b === 2) ? 'nd' :
   4030             (b === 3) ? 'rd' : 'th';
   4031         return number + output;
   4032     }
   4033 });
   4034 
   4035 // Side effect imports
   4036 hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);
   4037 hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);
   4038 
   4039 var mathAbs = Math.abs;
   4040 
   4041 function abs () {
   4042     var data           = this._data;
   4043 
   4044     this._milliseconds = mathAbs(this._milliseconds);
   4045     this._days         = mathAbs(this._days);
   4046     this._months       = mathAbs(this._months);
   4047 
   4048     data.milliseconds  = mathAbs(data.milliseconds);
   4049     data.seconds       = mathAbs(data.seconds);
   4050     data.minutes       = mathAbs(data.minutes);
   4051     data.hours         = mathAbs(data.hours);
   4052     data.months        = mathAbs(data.months);
   4053     data.years         = mathAbs(data.years);
   4054 
   4055     return this;
   4056 }
   4057 
   4058 function addSubtract$1 (duration, input, value, direction) {
   4059     var other = createDuration(input, value);
   4060 
   4061     duration._milliseconds += direction * other._milliseconds;
   4062     duration._days         += direction * other._days;
   4063     duration._months       += direction * other._months;
   4064 
   4065     return duration._bubble();
   4066 }
   4067 
   4068 // supports only 2.0-style add(1, 's') or add(duration)
   4069 function add$1 (input, value) {
   4070     return addSubtract$1(this, input, value, 1);
   4071 }
   4072 
   4073 // supports only 2.0-style subtract(1, 's') or subtract(duration)
   4074 function subtract$1 (input, value) {
   4075     return addSubtract$1(this, input, value, -1);
   4076 }
   4077 
   4078 function absCeil (number) {
   4079     if (number < 0) {
   4080         return Math.floor(number);
   4081     } else {
   4082         return Math.ceil(number);
   4083     }
   4084 }
   4085 
   4086 function bubble () {
   4087     var milliseconds = this._milliseconds;
   4088     var days         = this._days;
   4089     var months       = this._months;
   4090     var data         = this._data;
   4091     var seconds, minutes, hours, years, monthsFromDays;
   4092 
   4093     // if we have a mix of positive and negative values, bubble down first
   4094     // check: https://github.com/moment/moment/issues/2166
   4095     if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||
   4096             (milliseconds <= 0 && days <= 0 && months <= 0))) {
   4097         milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
   4098         days = 0;
   4099         months = 0;
   4100     }
   4101 
   4102     // The following code bubbles up values, see the tests for
   4103     // examples of what that means.
   4104     data.milliseconds = milliseconds % 1000;
   4105 
   4106     seconds           = absFloor(milliseconds / 1000);
   4107     data.seconds      = seconds % 60;
   4108 
   4109     minutes           = absFloor(seconds / 60);
   4110     data.minutes      = minutes % 60;
   4111 
   4112     hours             = absFloor(minutes / 60);
   4113     data.hours        = hours % 24;
   4114 
   4115     days += absFloor(hours / 24);
   4116 
   4117     // convert days to months
   4118     monthsFromDays = absFloor(daysToMonths(days));
   4119     months += monthsFromDays;
   4120     days -= absCeil(monthsToDays(monthsFromDays));
   4121 
   4122     // 12 months -> 1 year
   4123     years = absFloor(months / 12);
   4124     months %= 12;
   4125 
   4126     data.days   = days;
   4127     data.months = months;
   4128     data.years  = years;
   4129 
   4130     return this;
   4131 }
   4132 
   4133 function daysToMonths (days) {
   4134     // 400 years have 146097 days (taking into account leap year rules)
   4135     // 400 years have 12 months === 4800
   4136     return days * 4800 / 146097;
   4137 }
   4138 
   4139 function monthsToDays (months) {
   4140     // the reverse of daysToMonths
   4141     return months * 146097 / 4800;
   4142 }
   4143 
   4144 function as (units) {
   4145     if (!this.isValid()) {
   4146         return NaN;
   4147     }
   4148     var days;
   4149     var months;
   4150     var milliseconds = this._milliseconds;
   4151 
   4152     units = normalizeUnits(units);
   4153 
   4154     if (units === 'month' || units === 'year') {
   4155         days   = this._days   + milliseconds / 864e5;
   4156         months = this._months + daysToMonths(days);
   4157         return units === 'month' ? months : months / 12;
   4158     } else {
   4159         // handle milliseconds separately because of floating point math errors (issue #1867)
   4160         days = this._days + Math.round(monthsToDays(this._months));
   4161         switch (units) {
   4162             case 'week'   : return days / 7     + milliseconds / 6048e5;
   4163             case 'day'    : return days         + milliseconds / 864e5;
   4164             case 'hour'   : return days * 24    + milliseconds / 36e5;
   4165             case 'minute' : return days * 1440  + milliseconds / 6e4;
   4166             case 'second' : return days * 86400 + milliseconds / 1000;
   4167             // Math.floor prevents floating point math errors here
   4168             case 'millisecond': return Math.floor(days * 864e5) + milliseconds;
   4169             default: throw new Error('Unknown unit ' + units);
   4170         }
   4171     }
   4172 }
   4173 
   4174 // TODO: Use this.as('ms')?
   4175 function valueOf$1 () {
   4176     if (!this.isValid()) {
   4177         return NaN;
   4178     }
   4179     return (
   4180         this._milliseconds +
   4181         this._days * 864e5 +
   4182         (this._months % 12) * 2592e6 +
   4183         toInt(this._months / 12) * 31536e6
   4184     );
   4185 }
   4186 
   4187 function makeAs (alias) {
   4188     return function () {
   4189         return this.as(alias);
   4190     };
   4191 }
   4192 
   4193 var asMilliseconds = makeAs('ms');
   4194 var asSeconds      = makeAs('s');
   4195 var asMinutes      = makeAs('m');
   4196 var asHours        = makeAs('h');
   4197 var asDays         = makeAs('d');
   4198 var asWeeks        = makeAs('w');
   4199 var asMonths       = makeAs('M');
   4200 var asYears        = makeAs('y');
   4201 
   4202 function get$2 (units) {
   4203     units = normalizeUnits(units);
   4204     return this.isValid() ? this[units + 's']() : NaN;
   4205 }
   4206 
   4207 function makeGetter(name) {
   4208     return function () {
   4209         return this.isValid() ? this._data[name] : NaN;
   4210     };
   4211 }
   4212 
   4213 var milliseconds = makeGetter('milliseconds');
   4214 var seconds      = makeGetter('seconds');
   4215 var minutes      = makeGetter('minutes');
   4216 var hours        = makeGetter('hours');
   4217 var days         = makeGetter('days');
   4218 var months       = makeGetter('months');
   4219 var years        = makeGetter('years');
   4220 
   4221 function weeks () {
   4222     return absFloor(this.days() / 7);
   4223 }
   4224 
   4225 var round = Math.round;
   4226 var thresholds = {
   4227     ss: 44,         // a few seconds to seconds
   4228     s : 45,         // seconds to minute
   4229     m : 45,         // minutes to hour
   4230     h : 22,         // hours to day
   4231     d : 26,         // days to month
   4232     M : 11          // months to year
   4233 };
   4234 
   4235 // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
   4236 function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
   4237     return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
   4238 }
   4239 
   4240 function relativeTime$1 (posNegDuration, withoutSuffix, locale) {
   4241     var duration = createDuration(posNegDuration).abs();
   4242     var seconds  = round(duration.as('s'));
   4243     var minutes  = round(duration.as('m'));
   4244     var hours    = round(duration.as('h'));
   4245     var days     = round(duration.as('d'));
   4246     var months   = round(duration.as('M'));
   4247     var years    = round(duration.as('y'));
   4248 
   4249     var a = seconds <= thresholds.ss && ['s', seconds]  ||
   4250             seconds < thresholds.s   && ['ss', seconds] ||
   4251             minutes <= 1             && ['m']           ||
   4252             minutes < thresholds.m   && ['mm', minutes] ||
   4253             hours   <= 1             && ['h']           ||
   4254             hours   < thresholds.h   && ['hh', hours]   ||
   4255             days    <= 1             && ['d']           ||
   4256             days    < thresholds.d   && ['dd', days]    ||
   4257             months  <= 1             && ['M']           ||
   4258             months  < thresholds.M   && ['MM', months]  ||
   4259             years   <= 1             && ['y']           || ['yy', years];
   4260 
   4261     a[2] = withoutSuffix;
   4262     a[3] = +posNegDuration > 0;
   4263     a[4] = locale;
   4264     return substituteTimeAgo.apply(null, a);
   4265 }
   4266 
   4267 // This function allows you to set the rounding function for relative time strings
   4268 function getSetRelativeTimeRounding (roundingFunction) {
   4269     if (roundingFunction === undefined) {
   4270         return round;
   4271     }
   4272     if (typeof(roundingFunction) === 'function') {
   4273         round = roundingFunction;
   4274         return true;
   4275     }
   4276     return false;
   4277 }
   4278 
   4279 // This function allows you to set a threshold for relative time strings
   4280 function getSetRelativeTimeThreshold (threshold, limit) {
   4281     if (thresholds[threshold] === undefined) {
   4282         return false;
   4283     }
   4284     if (limit === undefined) {
   4285         return thresholds[threshold];
   4286     }
   4287     thresholds[threshold] = limit;
   4288     if (threshold === 's') {
   4289         thresholds.ss = limit - 1;
   4290     }
   4291     return true;
   4292 }
   4293 
   4294 function humanize (withSuffix) {
   4295     if (!this.isValid()) {
   4296         return this.localeData().invalidDate();
   4297     }
   4298 
   4299     var locale = this.localeData();
   4300     var output = relativeTime$1(this, !withSuffix, locale);
   4301 
   4302     if (withSuffix) {
   4303         output = locale.pastFuture(+this, output);
   4304     }
   4305 
   4306     return locale.postformat(output);
   4307 }
   4308 
   4309 var abs$1 = Math.abs;
   4310 
   4311 function toISOString$1() {
   4312     // for ISO strings we do not use the normal bubbling rules:
   4313     //  * milliseconds bubble up until they become hours
   4314     //  * days do not bubble at all
   4315     //  * months bubble up until they become years
   4316     // This is because there is no context-free conversion between hours and days
   4317     // (think of clock changes)
   4318     // and also not between days and months (28-31 days per month)
   4319     if (!this.isValid()) {
   4320         return this.localeData().invalidDate();
   4321     }
   4322 
   4323     var seconds = abs$1(this._milliseconds) / 1000;
   4324     var days         = abs$1(this._days);
   4325     var months       = abs$1(this._months);
   4326     var minutes, hours, years;
   4327 
   4328     // 3600 seconds -> 60 minutes -> 1 hour
   4329     minutes           = absFloor(seconds / 60);
   4330     hours             = absFloor(minutes / 60);
   4331     seconds %= 60;
   4332     minutes %= 60;
   4333 
   4334     // 12 months -> 1 year
   4335     years  = absFloor(months / 12);
   4336     months %= 12;
   4337 
   4338 
   4339     // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
   4340     var Y = years;
   4341     var M = months;
   4342     var D = days;
   4343     var h = hours;
   4344     var m = minutes;
   4345     var s = seconds;
   4346     var total = this.asSeconds();
   4347 
   4348     if (!total) {
   4349         // this is the same as C#'s (Noda) and python (isodate)...
   4350         // but not other JS (goog.date)
   4351         return 'P0D';
   4352     }
   4353 
   4354     return (total < 0 ? '-' : '') +
   4355         'P' +
   4356         (Y ? Y + 'Y' : '') +
   4357         (M ? M + 'M' : '') +
   4358         (D ? D + 'D' : '') +
   4359         ((h || m || s) ? 'T' : '') +
   4360         (h ? h + 'H' : '') +
   4361         (m ? m + 'M' : '') +
   4362         (s ? s + 'S' : '');
   4363 }
   4364 
   4365 var proto$2 = Duration.prototype;
   4366 
   4367 proto$2.isValid        = isValid$1;
   4368 proto$2.abs            = abs;
   4369 proto$2.add            = add$1;
   4370 proto$2.subtract       = subtract$1;
   4371 proto$2.as             = as;
   4372 proto$2.asMilliseconds = asMilliseconds;
   4373 proto$2.asSeconds      = asSeconds;
   4374 proto$2.asMinutes      = asMinutes;
   4375 proto$2.asHours        = asHours;
   4376 proto$2.asDays         = asDays;
   4377 proto$2.asWeeks        = asWeeks;
   4378 proto$2.asMonths       = asMonths;
   4379 proto$2.asYears        = asYears;
   4380 proto$2.valueOf        = valueOf$1;
   4381 proto$2._bubble        = bubble;
   4382 proto$2.get            = get$2;
   4383 proto$2.milliseconds   = milliseconds;
   4384 proto$2.seconds        = seconds;
   4385 proto$2.minutes        = minutes;
   4386 proto$2.hours          = hours;
   4387 proto$2.days           = days;
   4388 proto$2.weeks          = weeks;
   4389 proto$2.months         = months;
   4390 proto$2.years          = years;
   4391 proto$2.humanize       = humanize;
   4392 proto$2.toISOString    = toISOString$1;
   4393 proto$2.toString       = toISOString$1;
   4394 proto$2.toJSON         = toISOString$1;
   4395 proto$2.locale         = locale;
   4396 proto$2.localeData     = localeData;
   4397 
   4398 // Deprecations
   4399 proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);
   4400 proto$2.lang = lang;
   4401 
   4402 // Side effect imports
   4403 
   4404 // FORMATTING
   4405 
   4406 addFormatToken('X', 0, 0, 'unix');
   4407 addFormatToken('x', 0, 0, 'valueOf');
   4408 
   4409 // PARSING
   4410 
   4411 addRegexToken('x', matchSigned);
   4412 addRegexToken('X', matchTimestamp);
   4413 addParseToken('X', function (input, array, config) {
   4414     config._d = new Date(parseFloat(input, 10) * 1000);
   4415 });
   4416 addParseToken('x', function (input, array, config) {
   4417     config._d = new Date(toInt(input));
   4418 });
   4419 
   4420 // Side effect imports
   4421 
   4422 //! moment.js
   4423 //! version : 2.18.1
   4424 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
   4425 //! license : MIT
   4426 //! momentjs.com
   4427 
   4428 hooks.version = '2.18.1';
   4429 
   4430 setHookCallback(createLocal);
   4431 
   4432 hooks.fn                    = proto;
   4433 hooks.min                   = min;
   4434 hooks.max                   = max;
   4435 hooks.now                   = now;
   4436 hooks.utc                   = createUTC;
   4437 hooks.unix                  = createUnix;
   4438 hooks.months                = listMonths;
   4439 hooks.isDate                = isDate;
   4440 hooks.locale                = getSetGlobalLocale;
   4441 hooks.invalid               = createInvalid;
   4442 hooks.duration              = createDuration;
   4443 hooks.isMoment              = isMoment;
   4444 hooks.weekdays              = listWeekdays;
   4445 hooks.parseZone             = createInZone;
   4446 hooks.localeData            = getLocale;
   4447 hooks.isDuration            = isDuration;
   4448 hooks.monthsShort           = listMonthsShort;
   4449 hooks.weekdaysMin           = listWeekdaysMin;
   4450 hooks.defineLocale          = defineLocale;
   4451 hooks.updateLocale          = updateLocale;
   4452 hooks.locales               = listLocales;
   4453 hooks.weekdaysShort         = listWeekdaysShort;
   4454 hooks.normalizeUnits        = normalizeUnits;
   4455 hooks.relativeTimeRounding = getSetRelativeTimeRounding;
   4456 hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
   4457 hooks.calendarFormat        = getCalendarFormat;
   4458 hooks.prototype             = proto;
   4459 
   4460 //! moment.js locale configuration
   4461 //! locale : Afrikaans [af]
   4462 //! author : Werner Mollentze : https://github.com/wernerm
   4463 
   4464 hooks.defineLocale('af', {
   4465     months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),
   4466     monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
   4467     weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),
   4468     weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
   4469     weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
   4470     meridiemParse: /vm|nm/i,
   4471     isPM : function (input) {
   4472         return /^nm$/i.test(input);
   4473     },
   4474     meridiem : function (hours, minutes, isLower) {
   4475         if (hours < 12) {
   4476             return isLower ? 'vm' : 'VM';
   4477         } else {
   4478             return isLower ? 'nm' : 'NM';
   4479         }
   4480     },
   4481     longDateFormat : {
   4482         LT : 'HH:mm',
   4483         LTS : 'HH:mm:ss',
   4484         L : 'DD/MM/YYYY',
   4485         LL : 'D MMMM YYYY',
   4486         LLL : 'D MMMM YYYY HH:mm',
   4487         LLLL : 'dddd, D MMMM YYYY HH:mm'
   4488     },
   4489     calendar : {
   4490         sameDay : '[Vandag om] LT',
   4491         nextDay : '[Môre om] LT',
   4492         nextWeek : 'dddd [om] LT',
   4493         lastDay : '[Gister om] LT',
   4494         lastWeek : '[Laas] dddd [om] LT',
   4495         sameElse : 'L'
   4496     },
   4497     relativeTime : {
   4498         future : 'oor %s',
   4499         past : '%s gelede',
   4500         s : '\'n paar sekondes',
   4501         m : '\'n minuut',
   4502         mm : '%d minute',
   4503         h : '\'n uur',
   4504         hh : '%d ure',
   4505         d : '\'n dag',
   4506         dd : '%d dae',
   4507         M : '\'n maand',
   4508         MM : '%d maande',
   4509         y : '\'n jaar',
   4510         yy : '%d jaar'
   4511     },
   4512     dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
   4513     ordinal : function (number) {
   4514         return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter
   4515     },
   4516     week : {
   4517         dow : 1, // Maandag is die eerste dag van die week.
   4518         doy : 4  // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
   4519     }
   4520 });
   4521 
   4522 //! moment.js locale configuration
   4523 //! locale : Arabic (Algeria) [ar-dz]
   4524 //! author : Noureddine LOUAHEDJ : https://github.com/noureddineme
   4525 
   4526 hooks.defineLocale('ar-dz', {
   4527     months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
   4528     monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
   4529     weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
   4530     weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
   4531     weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),
   4532     weekdaysParseExact : true,
   4533     longDateFormat : {
   4534         LT : 'HH:mm',
   4535         LTS : 'HH:mm:ss',
   4536         L : 'DD/MM/YYYY',
   4537         LL : 'D MMMM YYYY',
   4538         LLL : 'D MMMM YYYY HH:mm',
   4539         LLLL : 'dddd D MMMM YYYY HH:mm'
   4540     },
   4541     calendar : {
   4542         sameDay: '[اليوم على الساعة] LT',
   4543         nextDay: '[غدا على الساعة] LT',
   4544         nextWeek: 'dddd [على الساعة] LT',
   4545         lastDay: '[أمس على الساعة] LT',
   4546         lastWeek: 'dddd [على الساعة] LT',
   4547         sameElse: 'L'
   4548     },
   4549     relativeTime : {
   4550         future : 'في %s',
   4551         past : 'منذ %s',
   4552         s : 'ثوان',
   4553         m : 'دقيقة',
   4554         mm : '%d دقائق',
   4555         h : 'ساعة',
   4556         hh : '%d ساعات',
   4557         d : 'يوم',
   4558         dd : '%d أيام',
   4559         M : 'شهر',
   4560         MM : '%d أشهر',
   4561         y : 'سنة',
   4562         yy : '%d سنوات'
   4563     },
   4564     week : {
   4565         dow : 0, // Sunday is the first day of the week.
   4566         doy : 4  // The week that contains Jan 1st is the first week of the year.
   4567     }
   4568 });
   4569 
   4570 //! moment.js locale configuration
   4571 //! locale : Arabic (Kuwait) [ar-kw]
   4572 //! author : Nusret Parlak: https://github.com/nusretparlak
   4573 
   4574 hooks.defineLocale('ar-kw', {
   4575     months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
   4576     monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
   4577     weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
   4578     weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
   4579     weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
   4580     weekdaysParseExact : true,
   4581     longDateFormat : {
   4582         LT : 'HH:mm',
   4583         LTS : 'HH:mm:ss',
   4584         L : 'DD/MM/YYYY',
   4585         LL : 'D MMMM YYYY',
   4586         LLL : 'D MMMM YYYY HH:mm',
   4587         LLLL : 'dddd D MMMM YYYY HH:mm'
   4588     },
   4589     calendar : {
   4590         sameDay: '[اليوم على الساعة] LT',
   4591         nextDay: '[غدا على الساعة] LT',
   4592         nextWeek: 'dddd [على الساعة] LT',
   4593         lastDay: '[أمس على الساعة] LT',
   4594         lastWeek: 'dddd [على الساعة] LT',
   4595         sameElse: 'L'
   4596     },
   4597     relativeTime : {
   4598         future : 'في %s',
   4599         past : 'منذ %s',
   4600         s : 'ثوان',
   4601         m : 'دقيقة',
   4602         mm : '%d دقائق',
   4603         h : 'ساعة',
   4604         hh : '%d ساعات',
   4605         d : 'يوم',
   4606         dd : '%d أيام',
   4607         M : 'شهر',
   4608         MM : '%d أشهر',
   4609         y : 'سنة',
   4610         yy : '%d سنوات'
   4611     },
   4612     week : {
   4613         dow : 0, // Sunday is the first day of the week.
   4614         doy : 12  // The week that contains Jan 1st is the first week of the year.
   4615     }
   4616 });
   4617 
   4618 //! moment.js locale configuration
   4619 //! locale : Arabic (Lybia) [ar-ly]
   4620 //! author : Ali Hmer: https://github.com/kikoanis
   4621 
   4622 var symbolMap = {
   4623     '1': '1',
   4624     '2': '2',
   4625     '3': '3',
   4626     '4': '4',
   4627     '5': '5',
   4628     '6': '6',
   4629     '7': '7',
   4630     '8': '8',
   4631     '9': '9',
   4632     '0': '0'
   4633 };
   4634 var pluralForm = function (n) {
   4635     return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
   4636 };
   4637 var plurals = {
   4638     s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
   4639     m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
   4640     h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
   4641     d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
   4642     M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
   4643     y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
   4644 };
   4645 var pluralize = function (u) {
   4646     return function (number, withoutSuffix, string, isFuture) {
   4647         var f = pluralForm(number),
   4648             str = plurals[u][pluralForm(number)];
   4649         if (f === 2) {
   4650             str = str[withoutSuffix ? 0 : 1];
   4651         }
   4652         return str.replace(/%d/i, number);
   4653     };
   4654 };
   4655 var months$1 = [
   4656     'يناير',
   4657     'فبراير',
   4658     'مارس',
   4659     'أبريل',
   4660     'مايو',
   4661     'يونيو',
   4662     'يوليو',
   4663     'أغسطس',
   4664     'سبتمبر',
   4665     'أكتوبر',
   4666     'نوفمبر',
   4667     'ديسمبر'
   4668 ];
   4669 
   4670 hooks.defineLocale('ar-ly', {
   4671     months : months$1,
   4672     monthsShort : months$1,
   4673     weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
   4674     weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
   4675     weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
   4676     weekdaysParseExact : true,
   4677     longDateFormat : {
   4678         LT : 'HH:mm',
   4679         LTS : 'HH:mm:ss',
   4680         L : 'D/\u200FM/\u200FYYYY',
   4681         LL : 'D MMMM YYYY',
   4682         LLL : 'D MMMM YYYY HH:mm',
   4683         LLLL : 'dddd D MMMM YYYY HH:mm'
   4684     },
   4685     meridiemParse: /ص|م/,
   4686     isPM : function (input) {
   4687         return 'م' === input;
   4688     },
   4689     meridiem : function (hour, minute, isLower) {
   4690         if (hour < 12) {
   4691             return 'ص';
   4692         } else {
   4693             return 'م';
   4694         }
   4695     },
   4696     calendar : {
   4697         sameDay: '[اليوم عند الساعة] LT',
   4698         nextDay: '[غدًا عند الساعة] LT',
   4699         nextWeek: 'dddd [عند الساعة] LT',
   4700         lastDay: '[أمس عند الساعة] LT',
   4701         lastWeek: 'dddd [عند الساعة] LT',
   4702         sameElse: 'L'
   4703     },
   4704     relativeTime : {
   4705         future : 'بعد %s',
   4706         past : 'منذ %s',
   4707         s : pluralize('s'),
   4708         m : pluralize('m'),
   4709         mm : pluralize('m'),
   4710         h : pluralize('h'),
   4711         hh : pluralize('h'),
   4712         d : pluralize('d'),
   4713         dd : pluralize('d'),
   4714         M : pluralize('M'),
   4715         MM : pluralize('M'),
   4716         y : pluralize('y'),
   4717         yy : pluralize('y')
   4718     },
   4719     preparse: function (string) {
   4720         return string.replace(/\u200f/g, '').replace(/،/g, ',');
   4721     },
   4722     postformat: function (string) {
   4723         return string.replace(/\d/g, function (match) {
   4724             return symbolMap[match];
   4725         }).replace(/,/g, '،');
   4726     },
   4727     week : {
   4728         dow : 6, // Saturday is the first day of the week.
   4729         doy : 12  // The week that contains Jan 1st is the first week of the year.
   4730     }
   4731 });
   4732 
   4733 //! moment.js locale configuration
   4734 //! locale : Arabic (Morocco) [ar-ma]
   4735 //! author : ElFadili Yassine : https://github.com/ElFadiliY
   4736 //! author : Abdel Said : https://github.com/abdelsaid
   4737 
   4738 hooks.defineLocale('ar-ma', {
   4739     months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
   4740     monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
   4741     weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
   4742     weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
   4743     weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
   4744     weekdaysParseExact : true,
   4745     longDateFormat : {
   4746         LT : 'HH:mm',
   4747         LTS : 'HH:mm:ss',
   4748         L : 'DD/MM/YYYY',
   4749         LL : 'D MMMM YYYY',
   4750         LLL : 'D MMMM YYYY HH:mm',
   4751         LLLL : 'dddd D MMMM YYYY HH:mm'
   4752     },
   4753     calendar : {
   4754         sameDay: '[اليوم على الساعة] LT',
   4755         nextDay: '[غدا على الساعة] LT',
   4756         nextWeek: 'dddd [على الساعة] LT',
   4757         lastDay: '[أمس على الساعة] LT',
   4758         lastWeek: 'dddd [على الساعة] LT',
   4759         sameElse: 'L'
   4760     },
   4761     relativeTime : {
   4762         future : 'في %s',
   4763         past : 'منذ %s',
   4764         s : 'ثوان',
   4765         m : 'دقيقة',
   4766         mm : '%d دقائق',
   4767         h : 'ساعة',
   4768         hh : '%d ساعات',
   4769         d : 'يوم',
   4770         dd : '%d أيام',
   4771         M : 'شهر',
   4772         MM : '%d أشهر',
   4773         y : 'سنة',
   4774         yy : '%d سنوات'
   4775     },
   4776     week : {
   4777         dow : 6, // Saturday is the first day of the week.
   4778         doy : 12  // The week that contains Jan 1st is the first week of the year.
   4779     }
   4780 });
   4781 
   4782 //! moment.js locale configuration
   4783 //! locale : Arabic (Saudi Arabia) [ar-sa]
   4784 //! author : Suhail Alkowaileet : https://github.com/xsoh
   4785 
   4786 var symbolMap$1 = {
   4787     '1': '١',
   4788     '2': '٢',
   4789     '3': '٣',
   4790     '4': '٤',
   4791     '5': '٥',
   4792     '6': '٦',
   4793     '7': '٧',
   4794     '8': '٨',
   4795     '9': '٩',
   4796     '0': '٠'
   4797 };
   4798 var numberMap = {
   4799     '١': '1',
   4800     '٢': '2',
   4801     '٣': '3',
   4802     '٤': '4',
   4803     '٥': '5',
   4804     '٦': '6',
   4805     '٧': '7',
   4806     '٨': '8',
   4807     '٩': '9',
   4808     '٠': '0'
   4809 };
   4810 
   4811 hooks.defineLocale('ar-sa', {
   4812     months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
   4813     monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
   4814     weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
   4815     weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
   4816     weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
   4817     weekdaysParseExact : true,
   4818     longDateFormat : {
   4819         LT : 'HH:mm',
   4820         LTS : 'HH:mm:ss',
   4821         L : 'DD/MM/YYYY',
   4822         LL : 'D MMMM YYYY',
   4823         LLL : 'D MMMM YYYY HH:mm',
   4824         LLLL : 'dddd D MMMM YYYY HH:mm'
   4825     },
   4826     meridiemParse: /ص|م/,
   4827     isPM : function (input) {
   4828         return 'م' === input;
   4829     },
   4830     meridiem : function (hour, minute, isLower) {
   4831         if (hour < 12) {
   4832             return 'ص';
   4833         } else {
   4834             return 'م';
   4835         }
   4836     },
   4837     calendar : {
   4838         sameDay: '[اليوم على الساعة] LT',
   4839         nextDay: '[غدا على الساعة] LT',
   4840         nextWeek: 'dddd [على الساعة] LT',
   4841         lastDay: '[أمس على الساعة] LT',
   4842         lastWeek: 'dddd [على الساعة] LT',
   4843         sameElse: 'L'
   4844     },
   4845     relativeTime : {
   4846         future : 'في %s',
   4847         past : 'منذ %s',
   4848         s : 'ثوان',
   4849         m : 'دقيقة',
   4850         mm : '%d دقائق',
   4851         h : 'ساعة',
   4852         hh : '%d ساعات',
   4853         d : 'يوم',
   4854         dd : '%d أيام',
   4855         M : 'شهر',
   4856         MM : '%d أشهر',
   4857         y : 'سنة',
   4858         yy : '%d سنوات'
   4859     },
   4860     preparse: function (string) {
   4861         return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
   4862             return numberMap[match];
   4863         }).replace(/،/g, ',');
   4864     },
   4865     postformat: function (string) {
   4866         return string.replace(/\d/g, function (match) {
   4867             return symbolMap$1[match];
   4868         }).replace(/,/g, '،');
   4869     },
   4870     week : {
   4871         dow : 0, // Sunday is the first day of the week.
   4872         doy : 6  // The week that contains Jan 1st is the first week of the year.
   4873     }
   4874 });
   4875 
   4876 //! moment.js locale configuration
   4877 //! locale  :  Arabic (Tunisia) [ar-tn]
   4878 //! author : Nader Toukabri : https://github.com/naderio
   4879 
   4880 hooks.defineLocale('ar-tn', {
   4881     months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
   4882     monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
   4883     weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
   4884     weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
   4885     weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
   4886     weekdaysParseExact : true,
   4887     longDateFormat: {
   4888         LT: 'HH:mm',
   4889         LTS: 'HH:mm:ss',
   4890         L: 'DD/MM/YYYY',
   4891         LL: 'D MMMM YYYY',
   4892         LLL: 'D MMMM YYYY HH:mm',
   4893         LLLL: 'dddd D MMMM YYYY HH:mm'
   4894     },
   4895     calendar: {
   4896         sameDay: '[اليوم على الساعة] LT',
   4897         nextDay: '[غدا على الساعة] LT',
   4898         nextWeek: 'dddd [على الساعة] LT',
   4899         lastDay: '[أمس على الساعة] LT',
   4900         lastWeek: 'dddd [على الساعة] LT',
   4901         sameElse: 'L'
   4902     },
   4903     relativeTime: {
   4904         future: 'في %s',
   4905         past: 'منذ %s',
   4906         s: 'ثوان',
   4907         m: 'دقيقة',
   4908         mm: '%d دقائق',
   4909         h: 'ساعة',
   4910         hh: '%d ساعات',
   4911         d: 'يوم',
   4912         dd: '%d أيام',
   4913         M: 'شهر',
   4914         MM: '%d أشهر',
   4915         y: 'سنة',
   4916         yy: '%d سنوات'
   4917     },
   4918     week: {
   4919         dow: 1, // Monday is the first day of the week.
   4920         doy: 4 // The week that contains Jan 4th is the first week of the year.
   4921     }
   4922 });
   4923 
   4924 //! moment.js locale configuration
   4925 //! locale : Arabic [ar]
   4926 //! author : Abdel Said: https://github.com/abdelsaid
   4927 //! author : Ahmed Elkhatib
   4928 //! author : forabi https://github.com/forabi
   4929 
   4930 var symbolMap$2 = {
   4931     '1': '١',
   4932     '2': '٢',
   4933     '3': '٣',
   4934     '4': '٤',
   4935     '5': '٥',
   4936     '6': '٦',
   4937     '7': '٧',
   4938     '8': '٨',
   4939     '9': '٩',
   4940     '0': '٠'
   4941 };
   4942 var numberMap$1 = {
   4943     '١': '1',
   4944     '٢': '2',
   4945     '٣': '3',
   4946     '٤': '4',
   4947     '٥': '5',
   4948     '٦': '6',
   4949     '٧': '7',
   4950     '٨': '8',
   4951     '٩': '9',
   4952     '٠': '0'
   4953 };
   4954 var pluralForm$1 = function (n) {
   4955     return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
   4956 };
   4957 var plurals$1 = {
   4958     s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
   4959     m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
   4960     h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
   4961     d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
   4962     M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
   4963     y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
   4964 };
   4965 var pluralize$1 = function (u) {
   4966     return function (number, withoutSuffix, string, isFuture) {
   4967         var f = pluralForm$1(number),
   4968             str = plurals$1[u][pluralForm$1(number)];
   4969         if (f === 2) {
   4970             str = str[withoutSuffix ? 0 : 1];
   4971         }
   4972         return str.replace(/%d/i, number);
   4973     };
   4974 };
   4975 var months$2 = [
   4976     'كانون الثاني يناير',
   4977     'شباط فبراير',
   4978     'آذار مارس',
   4979     'نيسان أبريل',
   4980     'أيار مايو',
   4981     'حزيران يونيو',
   4982     'تموز يوليو',
   4983     'آب أغسطس',
   4984     'أيلول سبتمبر',
   4985     'تشرين الأول أكتوبر',
   4986     'تشرين الثاني نوفمبر',
   4987     'كانون الأول ديسمبر'
   4988 ];
   4989 
   4990 hooks.defineLocale('ar', {
   4991     months : months$2,
   4992     monthsShort : months$2,
   4993     weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
   4994     weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
   4995     weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
   4996     weekdaysParseExact : true,
   4997     longDateFormat : {
   4998         LT : 'HH:mm',
   4999         LTS : 'HH:mm:ss',
   5000         L : 'D/\u200FM/\u200FYYYY',
   5001         LL : 'D MMMM YYYY',
   5002         LLL : 'D MMMM YYYY HH:mm',
   5003         LLLL : 'dddd D MMMM YYYY HH:mm'
   5004     },
   5005     meridiemParse: /ص|م/,
   5006     isPM : function (input) {
   5007         return 'م' === input;
   5008     },
   5009     meridiem : function (hour, minute, isLower) {
   5010         if (hour < 12) {
   5011             return 'ص';
   5012         } else {
   5013             return 'م';
   5014         }
   5015     },
   5016     calendar : {
   5017         sameDay: '[اليوم عند الساعة] LT',
   5018         nextDay: '[غدًا عند الساعة] LT',
   5019         nextWeek: 'dddd [عند الساعة] LT',
   5020         lastDay: '[أمس عند الساعة] LT',
   5021         lastWeek: 'dddd [عند الساعة] LT',
   5022         sameElse: 'L'
   5023     },
   5024     relativeTime : {
   5025         future : 'بعد %s',
   5026         past : 'منذ %s',
   5027         s : pluralize$1('s'),
   5028         m : pluralize$1('m'),
   5029         mm : pluralize$1('m'),
   5030         h : pluralize$1('h'),
   5031         hh : pluralize$1('h'),
   5032         d : pluralize$1('d'),
   5033         dd : pluralize$1('d'),
   5034         M : pluralize$1('M'),
   5035         MM : pluralize$1('M'),
   5036         y : pluralize$1('y'),
   5037         yy : pluralize$1('y')
   5038     },
   5039     preparse: function (string) {
   5040         return string.replace(/\u200f/g, '').replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
   5041             return numberMap$1[match];
   5042         }).replace(/،/g, ',');
   5043     },
   5044     postformat: function (string) {
   5045         return string.replace(/\d/g, function (match) {
   5046             return symbolMap$2[match];
   5047         }).replace(/,/g, '،');
   5048     },
   5049     week : {
   5050         dow : 6, // Saturday is the first day of the week.
   5051         doy : 12  // The week that contains Jan 1st is the first week of the year.
   5052     }
   5053 });
   5054 
   5055 //! moment.js locale configuration
   5056 //! locale : Azerbaijani [az]
   5057 //! author : topchiyev : https://github.com/topchiyev
   5058 
   5059 var suffixes = {
   5060     1: '-inci',
   5061     5: '-inci',
   5062     8: '-inci',
   5063     70: '-inci',
   5064     80: '-inci',
   5065     2: '-nci',
   5066     7: '-nci',
   5067     20: '-nci',
   5068     50: '-nci',
   5069     3: '-üncü',
   5070     4: '-üncü',
   5071     100: '-üncü',
   5072     6: '-ncı',
   5073     9: '-uncu',
   5074     10: '-uncu',
   5075     30: '-uncu',
   5076     60: '-ıncı',
   5077     90: '-ıncı'
   5078 };
   5079 
   5080 hooks.defineLocale('az', {
   5081     months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),
   5082     monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
   5083     weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),
   5084     weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
   5085     weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
   5086     weekdaysParseExact : true,
   5087     longDateFormat : {
   5088         LT : 'HH:mm',
   5089         LTS : 'HH:mm:ss',
   5090         L : 'DD.MM.YYYY',
   5091         LL : 'D MMMM YYYY',
   5092         LLL : 'D MMMM YYYY HH:mm',
   5093         LLLL : 'dddd, D MMMM YYYY HH:mm'
   5094     },
   5095     calendar : {
   5096         sameDay : '[bugün saat] LT',
   5097         nextDay : '[sabah saat] LT',
   5098         nextWeek : '[gələn həftə] dddd [saat] LT',
   5099         lastDay : '[dünən] LT',
   5100         lastWeek : '[keçən həftə] dddd [saat] LT',
   5101         sameElse : 'L'
   5102     },
   5103     relativeTime : {
   5104         future : '%s sonra',
   5105         past : '%s əvvəl',
   5106         s : 'birneçə saniyyə',
   5107         m : 'bir dəqiqə',
   5108         mm : '%d dəqiqə',
   5109         h : 'bir saat',
   5110         hh : '%d saat',
   5111         d : 'bir gün',
   5112         dd : '%d gün',
   5113         M : 'bir ay',
   5114         MM : '%d ay',
   5115         y : 'bir il',
   5116         yy : '%d il'
   5117     },
   5118     meridiemParse: /gecə|səhər|gündüz|axşam/,
   5119     isPM : function (input) {
   5120         return /^(gündüz|axşam)$/.test(input);
   5121     },
   5122     meridiem : function (hour, minute, isLower) {
   5123         if (hour < 4) {
   5124             return 'gecə';
   5125         } else if (hour < 12) {
   5126             return 'səhər';
   5127         } else if (hour < 17) {
   5128             return 'gündüz';
   5129         } else {
   5130             return 'axşam';
   5131         }
   5132     },
   5133     dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,
   5134     ordinal : function (number) {
   5135         if (number === 0) {  // special case for zero
   5136             return number + '-ıncı';
   5137         }
   5138         var a = number % 10,
   5139             b = number % 100 - a,
   5140             c = number >= 100 ? 100 : null;
   5141         return number + (suffixes[a] || suffixes[b] || suffixes[c]);
   5142     },
   5143     week : {
   5144         dow : 1, // Monday is the first day of the week.
   5145         doy : 7  // The week that contains Jan 1st is the first week of the year.
   5146     }
   5147 });
   5148 
   5149 //! moment.js locale configuration
   5150 //! locale : Belarusian [be]
   5151 //! author : Dmitry Demidov : https://github.com/demidov91
   5152 //! author: Praleska: http://praleska.pro/
   5153 //! Author : Menelion Elensúle : https://github.com/Oire
   5154 
   5155 function plural(word, num) {
   5156     var forms = word.split('_');
   5157     return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
   5158 }
   5159 function relativeTimeWithPlural(number, withoutSuffix, key) {
   5160     var format = {
   5161         'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',
   5162         'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',
   5163         'dd': 'дзень_дні_дзён',
   5164         'MM': 'месяц_месяцы_месяцаў',
   5165         'yy': 'год_гады_гадоў'
   5166     };
   5167     if (key === 'm') {
   5168         return withoutSuffix ? 'хвіліна' : 'хвіліну';
   5169     }
   5170     else if (key === 'h') {
   5171         return withoutSuffix ? 'гадзіна' : 'гадзіну';
   5172     }
   5173     else {
   5174         return number + ' ' + plural(format[key], +number);
   5175     }
   5176 }
   5177 
   5178 hooks.defineLocale('be', {
   5179     months : {
   5180         format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),
   5181         standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')
   5182     },
   5183     monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),
   5184     weekdays : {
   5185         format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),
   5186         standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
   5187         isFormat: /\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/
   5188     },
   5189     weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
   5190     weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
   5191     longDateFormat : {
   5192         LT : 'HH:mm',
   5193         LTS : 'HH:mm:ss',
   5194         L : 'DD.MM.YYYY',
   5195         LL : 'D MMMM YYYY г.',
   5196         LLL : 'D MMMM YYYY г., HH:mm',
   5197         LLLL : 'dddd, D MMMM YYYY г., HH:mm'
   5198     },
   5199     calendar : {
   5200         sameDay: '[Сёння ў] LT',
   5201         nextDay: '[Заўтра ў] LT',
   5202         lastDay: '[Учора ў] LT',
   5203         nextWeek: function () {
   5204             return '[У] dddd [ў] LT';
   5205         },
   5206         lastWeek: function () {
   5207             switch (this.day()) {
   5208                 case 0:
   5209                 case 3:
   5210                 case 5:
   5211                 case 6:
   5212                     return '[У мінулую] dddd [ў] LT';
   5213                 case 1:
   5214                 case 2:
   5215                 case 4:
   5216                     return '[У мінулы] dddd [ў] LT';
   5217             }
   5218         },
   5219         sameElse: 'L'
   5220     },
   5221     relativeTime : {
   5222         future : 'праз %s',
   5223         past : '%s таму',
   5224         s : 'некалькі секунд',
   5225         m : relativeTimeWithPlural,
   5226         mm : relativeTimeWithPlural,
   5227         h : relativeTimeWithPlural,
   5228         hh : relativeTimeWithPlural,
   5229         d : 'дзень',
   5230         dd : relativeTimeWithPlural,
   5231         M : 'месяц',
   5232         MM : relativeTimeWithPlural,
   5233         y : 'год',
   5234         yy : relativeTimeWithPlural
   5235     },
   5236     meridiemParse: /ночы|раніцы|дня|вечара/,
   5237     isPM : function (input) {
   5238         return /^(дня|вечара)$/.test(input);
   5239     },
   5240     meridiem : function (hour, minute, isLower) {
   5241         if (hour < 4) {
   5242             return 'ночы';
   5243         } else if (hour < 12) {
   5244             return 'раніцы';
   5245         } else if (hour < 17) {
   5246             return 'дня';
   5247         } else {
   5248             return 'вечара';
   5249         }
   5250     },
   5251     dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/,
   5252     ordinal: function (number, period) {
   5253         switch (period) {
   5254             case 'M':
   5255             case 'd':
   5256             case 'DDD':
   5257             case 'w':
   5258             case 'W':
   5259                 return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';
   5260             case 'D':
   5261                 return number + '-га';
   5262             default:
   5263                 return number;
   5264         }
   5265     },
   5266     week : {
   5267         dow : 1, // Monday is the first day of the week.
   5268         doy : 7  // The week that contains Jan 1st is the first week of the year.
   5269     }
   5270 });
   5271 
   5272 //! moment.js locale configuration
   5273 //! locale : Bulgarian [bg]
   5274 //! author : Krasen Borisov : https://github.com/kraz
   5275 
   5276 hooks.defineLocale('bg', {
   5277     months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),
   5278     monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
   5279     weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),
   5280     weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),
   5281     weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
   5282     longDateFormat : {
   5283         LT : 'H:mm',
   5284         LTS : 'H:mm:ss',
   5285         L : 'D.MM.YYYY',
   5286         LL : 'D MMMM YYYY',
   5287         LLL : 'D MMMM YYYY H:mm',
   5288         LLLL : 'dddd, D MMMM YYYY H:mm'
   5289     },
   5290     calendar : {
   5291         sameDay : '[Днес в] LT',
   5292         nextDay : '[Утре в] LT',
   5293         nextWeek : 'dddd [в] LT',
   5294         lastDay : '[Вчера в] LT',
   5295         lastWeek : function () {
   5296             switch (this.day()) {
   5297                 case 0:
   5298                 case 3:
   5299                 case 6:
   5300                     return '[В изминалата] dddd [в] LT';
   5301                 case 1:
   5302                 case 2:
   5303                 case 4:
   5304                 case 5:
   5305                     return '[В изминалия] dddd [в] LT';
   5306             }
   5307         },
   5308         sameElse : 'L'
   5309     },
   5310     relativeTime : {
   5311         future : 'след %s',
   5312         past : 'преди %s',
   5313         s : 'няколко секунди',
   5314         m : 'минута',
   5315         mm : '%d минути',
   5316         h : 'час',
   5317         hh : '%d часа',
   5318         d : 'ден',
   5319         dd : '%d дни',
   5320         M : 'месец',
   5321         MM : '%d месеца',
   5322         y : 'година',
   5323         yy : '%d години'
   5324     },
   5325     dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
   5326     ordinal : function (number) {
   5327         var lastDigit = number % 10,
   5328             last2Digits = number % 100;
   5329         if (number === 0) {
   5330             return number + '-ев';
   5331         } else if (last2Digits === 0) {
   5332             return number + '-ен';
   5333         } else if (last2Digits > 10 && last2Digits < 20) {
   5334             return number + '-ти';
   5335         } else if (lastDigit === 1) {
   5336             return number + '-ви';
   5337         } else if (lastDigit === 2) {
   5338             return number + '-ри';
   5339         } else if (lastDigit === 7 || lastDigit === 8) {
   5340             return number + '-ми';
   5341         } else {
   5342             return number + '-ти';
   5343         }
   5344     },
   5345     week : {
   5346         dow : 1, // Monday is the first day of the week.
   5347         doy : 7  // The week that contains Jan 1st is the first week of the year.
   5348     }
   5349 });
   5350 
   5351 //! moment.js locale configuration
   5352 //! locale : Bengali [bn]
   5353 //! author : Kaushik Gandhi : https://github.com/kaushikgandhi
   5354 
   5355 var symbolMap$3 = {
   5356     '1': '১',
   5357     '2': '২',
   5358     '3': '৩',
   5359     '4': '৪',
   5360     '5': '৫',
   5361     '6': '৬',
   5362     '7': '৭',
   5363     '8': '৮',
   5364     '9': '৯',
   5365     '0': '০'
   5366 };
   5367 var numberMap$2 = {
   5368     '১': '1',
   5369     '২': '2',
   5370     '৩': '3',
   5371     '৪': '4',
   5372     '৫': '5',
   5373     '৬': '6',
   5374     '৭': '7',
   5375     '৮': '8',
   5376     '৯': '9',
   5377     '০': '0'
   5378 };
   5379 
   5380 hooks.defineLocale('bn', {
   5381     months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
   5382     monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),
   5383     weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),
   5384     weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
   5385     weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),
   5386     longDateFormat : {
   5387         LT : 'A h:mm সময়',
   5388         LTS : 'A h:mm:ss সময়',
   5389         L : 'DD/MM/YYYY',
   5390         LL : 'D MMMM YYYY',
   5391         LLL : 'D MMMM YYYY, A h:mm সময়',
   5392         LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'
   5393     },
   5394     calendar : {
   5395         sameDay : '[আজ] LT',
   5396         nextDay : '[আগামীকাল] LT',
   5397         nextWeek : 'dddd, LT',
   5398         lastDay : '[গতকাল] LT',
   5399         lastWeek : '[গত] dddd, LT',
   5400         sameElse : 'L'
   5401     },
   5402     relativeTime : {
   5403         future : '%s পরে',
   5404         past : '%s আগে',
   5405         s : 'কয়েক সেকেন্ড',
   5406         m : 'এক মিনিট',
   5407         mm : '%d মিনিট',
   5408         h : 'এক ঘন্টা',
   5409         hh : '%d ঘন্টা',
   5410         d : 'এক দিন',
   5411         dd : '%d দিন',
   5412         M : 'এক মাস',
   5413         MM : '%d মাস',
   5414         y : 'এক বছর',
   5415         yy : '%d বছর'
   5416     },
   5417     preparse: function (string) {
   5418         return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
   5419             return numberMap$2[match];
   5420         });
   5421     },
   5422     postformat: function (string) {
   5423         return string.replace(/\d/g, function (match) {
   5424             return symbolMap$3[match];
   5425         });
   5426     },
   5427     meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,
   5428     meridiemHour : function (hour, meridiem) {
   5429         if (hour === 12) {
   5430             hour = 0;
   5431         }
   5432         if ((meridiem === 'রাত' && hour >= 4) ||
   5433                 (meridiem === 'দুপুর' && hour < 5) ||
   5434                 meridiem === 'বিকাল') {
   5435             return hour + 12;
   5436         } else {
   5437             return hour;
   5438         }
   5439     },
   5440     meridiem : function (hour, minute, isLower) {
   5441         if (hour < 4) {
   5442             return 'রাত';
   5443         } else if (hour < 10) {
   5444             return 'সকাল';
   5445         } else if (hour < 17) {
   5446             return 'দুপুর';
   5447         } else if (hour < 20) {
   5448             return 'বিকাল';
   5449         } else {
   5450             return 'রাত';
   5451         }
   5452     },
   5453     week : {
   5454         dow : 0, // Sunday is the first day of the week.
   5455         doy : 6  // The week that contains Jan 1st is the first week of the year.
   5456     }
   5457 });
   5458 
   5459 //! moment.js locale configuration
   5460 //! locale : Tibetan [bo]
   5461 //! author : Thupten N. Chakrishar : https://github.com/vajradog
   5462 
   5463 var symbolMap$4 = {
   5464     '1': '༡',
   5465     '2': '༢',
   5466     '3': '༣',
   5467     '4': '༤',
   5468     '5': '༥',
   5469     '6': '༦',
   5470     '7': '༧',
   5471     '8': '༨',
   5472     '9': '༩',
   5473     '0': '༠'
   5474 };
   5475 var numberMap$3 = {
   5476     '༡': '1',
   5477     '༢': '2',
   5478     '༣': '3',
   5479     '༤': '4',
   5480     '༥': '5',
   5481     '༦': '6',
   5482     '༧': '7',
   5483     '༨': '8',
   5484     '༩': '9',
   5485     '༠': '0'
   5486 };
   5487 
   5488 hooks.defineLocale('bo', {
   5489     months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
   5490     monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
   5491     weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),
   5492     weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
   5493     weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
   5494     longDateFormat : {
   5495         LT : 'A h:mm',
   5496         LTS : 'A h:mm:ss',
   5497         L : 'DD/MM/YYYY',
   5498         LL : 'D MMMM YYYY',
   5499         LLL : 'D MMMM YYYY, A h:mm',
   5500         LLLL : 'dddd, D MMMM YYYY, A h:mm'
   5501     },
   5502     calendar : {
   5503         sameDay : '[དི་རིང] LT',
   5504         nextDay : '[སང་ཉིན] LT',
   5505         nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',
   5506         lastDay : '[ཁ་སང] LT',
   5507         lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',
   5508         sameElse : 'L'
   5509     },
   5510     relativeTime : {
   5511         future : '%s ལ་',
   5512         past : '%s སྔན་ལ',
   5513         s : 'ལམ་སང',
   5514         m : 'སྐར་མ་གཅིག',
   5515         mm : '%d སྐར་མ',
   5516         h : 'ཆུ་ཚོད་གཅིག',
   5517         hh : '%d ཆུ་ཚོད',
   5518         d : 'ཉིན་གཅིག',
   5519         dd : '%d ཉིན་',
   5520         M : 'ཟླ་བ་གཅིག',
   5521         MM : '%d ཟླ་བ',
   5522         y : 'ལོ་གཅིག',
   5523         yy : '%d ལོ'
   5524     },
   5525     preparse: function (string) {
   5526         return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {
   5527             return numberMap$3[match];
   5528         });
   5529     },
   5530     postformat: function (string) {
   5531         return string.replace(/\d/g, function (match) {
   5532             return symbolMap$4[match];
   5533         });
   5534     },
   5535     meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,
   5536     meridiemHour : function (hour, meridiem) {
   5537         if (hour === 12) {
   5538             hour = 0;
   5539         }
   5540         if ((meridiem === 'མཚན་མོ' && hour >= 4) ||
   5541                 (meridiem === 'ཉིན་གུང' && hour < 5) ||
   5542                 meridiem === 'དགོང་དག') {
   5543             return hour + 12;
   5544         } else {
   5545             return hour;
   5546         }
   5547     },
   5548     meridiem : function (hour, minute, isLower) {
   5549         if (hour < 4) {
   5550             return 'མཚན་མོ';
   5551         } else if (hour < 10) {
   5552             return 'ཞོགས་ཀས';
   5553         } else if (hour < 17) {
   5554             return 'ཉིན་གུང';
   5555         } else if (hour < 20) {
   5556             return 'དགོང་དག';
   5557         } else {
   5558             return 'མཚན་མོ';
   5559         }
   5560     },
   5561     week : {
   5562         dow : 0, // Sunday is the first day of the week.
   5563         doy : 6  // The week that contains Jan 1st is the first week of the year.
   5564     }
   5565 });
   5566 
   5567 //! moment.js locale configuration
   5568 //! locale : Breton [br]
   5569 //! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
   5570 
   5571 function relativeTimeWithMutation(number, withoutSuffix, key) {
   5572     var format = {
   5573         'mm': 'munutenn',
   5574         'MM': 'miz',
   5575         'dd': 'devezh'
   5576     };
   5577     return number + ' ' + mutation(format[key], number);
   5578 }
   5579 function specialMutationForYears(number) {
   5580     switch (lastNumber(number)) {
   5581         case 1:
   5582         case 3:
   5583         case 4:
   5584         case 5:
   5585         case 9:
   5586             return number + ' bloaz';
   5587         default:
   5588             return number + ' vloaz';
   5589     }
   5590 }
   5591 function lastNumber(number) {
   5592     if (number > 9) {
   5593         return lastNumber(number % 10);
   5594     }
   5595     return number;
   5596 }
   5597 function mutation(text, number) {
   5598     if (number === 2) {
   5599         return softMutation(text);
   5600     }
   5601     return text;
   5602 }
   5603 function softMutation(text) {
   5604     var mutationTable = {
   5605         'm': 'v',
   5606         'b': 'v',
   5607         'd': 'z'
   5608     };
   5609     if (mutationTable[text.charAt(0)] === undefined) {
   5610         return text;
   5611     }
   5612     return mutationTable[text.charAt(0)] + text.substring(1);
   5613 }
   5614 
   5615 hooks.defineLocale('br', {
   5616     months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),
   5617     monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
   5618     weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'),
   5619     weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
   5620     weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
   5621     weekdaysParseExact : true,
   5622     longDateFormat : {
   5623         LT : 'h[e]mm A',
   5624         LTS : 'h[e]mm:ss A',
   5625         L : 'DD/MM/YYYY',
   5626         LL : 'D [a viz] MMMM YYYY',
   5627         LLL : 'D [a viz] MMMM YYYY h[e]mm A',
   5628         LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'
   5629     },
   5630     calendar : {
   5631         sameDay : '[Hiziv da] LT',
   5632         nextDay : '[Warc\'hoazh da] LT',
   5633         nextWeek : 'dddd [da] LT',
   5634         lastDay : '[Dec\'h da] LT',
   5635         lastWeek : 'dddd [paset da] LT',
   5636         sameElse : 'L'
   5637     },
   5638     relativeTime : {
   5639         future : 'a-benn %s',
   5640         past : '%s \'zo',
   5641         s : 'un nebeud segondennoù',
   5642         m : 'ur vunutenn',
   5643         mm : relativeTimeWithMutation,
   5644         h : 'un eur',
   5645         hh : '%d eur',
   5646         d : 'un devezh',
   5647         dd : relativeTimeWithMutation,
   5648         M : 'ur miz',
   5649         MM : relativeTimeWithMutation,
   5650         y : 'ur bloaz',
   5651         yy : specialMutationForYears
   5652     },
   5653     dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/,
   5654     ordinal : function (number) {
   5655         var output = (number === 1) ? 'añ' : 'vet';
   5656         return number + output;
   5657     },
   5658     week : {
   5659         dow : 1, // Monday is the first day of the week.
   5660         doy : 4  // The week that contains Jan 4th is the first week of the year.
   5661     }
   5662 });
   5663 
   5664 //! moment.js locale configuration
   5665 //! locale : Bosnian [bs]
   5666 //! author : Nedim Cholich : https://github.com/frontyard
   5667 //! based on (hr) translation by Bojan Marković
   5668 
   5669 function translate(number, withoutSuffix, key) {
   5670     var result = number + ' ';
   5671     switch (key) {
   5672         case 'm':
   5673             return withoutSuffix ? 'jedna minuta' : 'jedne minute';
   5674         case 'mm':
   5675             if (number === 1) {
   5676                 result += 'minuta';
   5677             } else if (number === 2 || number === 3 || number === 4) {
   5678                 result += 'minute';
   5679             } else {
   5680                 result += 'minuta';
   5681             }
   5682             return result;
   5683         case 'h':
   5684             return withoutSuffix ? 'jedan sat' : 'jednog sata';
   5685         case 'hh':
   5686             if (number === 1) {
   5687                 result += 'sat';
   5688             } else if (number === 2 || number === 3 || number === 4) {
   5689                 result += 'sata';
   5690             } else {
   5691                 result += 'sati';
   5692             }
   5693             return result;
   5694         case 'dd':
   5695             if (number === 1) {
   5696                 result += 'dan';
   5697             } else {
   5698                 result += 'dana';
   5699             }
   5700             return result;
   5701         case 'MM':
   5702             if (number === 1) {
   5703                 result += 'mjesec';
   5704             } else if (number === 2 || number === 3 || number === 4) {
   5705                 result += 'mjeseca';
   5706             } else {
   5707                 result += 'mjeseci';
   5708             }
   5709             return result;
   5710         case 'yy':
   5711             if (number === 1) {
   5712                 result += 'godina';
   5713             } else if (number === 2 || number === 3 || number === 4) {
   5714                 result += 'godine';
   5715             } else {
   5716                 result += 'godina';
   5717             }
   5718             return result;
   5719     }
   5720 }
   5721 
   5722 hooks.defineLocale('bs', {
   5723     months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),
   5724     monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),
   5725     monthsParseExact: true,
   5726     weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
   5727     weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
   5728     weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
   5729     weekdaysParseExact : true,
   5730     longDateFormat : {
   5731         LT : 'H:mm',
   5732         LTS : 'H:mm:ss',
   5733         L : 'DD.MM.YYYY',
   5734         LL : 'D. MMMM YYYY',
   5735         LLL : 'D. MMMM YYYY H:mm',
   5736         LLLL : 'dddd, D. MMMM YYYY H:mm'
   5737     },
   5738     calendar : {
   5739         sameDay  : '[danas u] LT',
   5740         nextDay  : '[sutra u] LT',
   5741         nextWeek : function () {
   5742             switch (this.day()) {
   5743                 case 0:
   5744                     return '[u] [nedjelju] [u] LT';
   5745                 case 3:
   5746                     return '[u] [srijedu] [u] LT';
   5747                 case 6:
   5748                     return '[u] [subotu] [u] LT';
   5749                 case 1:
   5750                 case 2:
   5751                 case 4:
   5752                 case 5:
   5753                     return '[u] dddd [u] LT';
   5754             }
   5755         },
   5756         lastDay  : '[jučer u] LT',
   5757         lastWeek : function () {
   5758             switch (this.day()) {
   5759                 case 0:
   5760                 case 3:
   5761                     return '[prošlu] dddd [u] LT';
   5762                 case 6:
   5763                     return '[prošle] [subote] [u] LT';
   5764                 case 1:
   5765                 case 2:
   5766                 case 4:
   5767                 case 5:
   5768                     return '[prošli] dddd [u] LT';
   5769             }
   5770         },
   5771         sameElse : 'L'
   5772     },
   5773     relativeTime : {
   5774         future : 'za %s',
   5775         past   : 'prije %s',
   5776         s      : 'par sekundi',
   5777         m      : translate,
   5778         mm     : translate,
   5779         h      : translate,
   5780         hh     : translate,
   5781         d      : 'dan',
   5782         dd     : translate,
   5783         M      : 'mjesec',
   5784         MM     : translate,
   5785         y      : 'godinu',
   5786         yy     : translate
   5787     },
   5788     dayOfMonthOrdinalParse: /\d{1,2}\./,
   5789     ordinal : '%d.',
   5790     week : {
   5791         dow : 1, // Monday is the first day of the week.
   5792         doy : 7  // The week that contains Jan 1st is the first week of the year.
   5793     }
   5794 });
   5795 
   5796 //! moment.js locale configuration
   5797 //! locale : Catalan [ca]
   5798 //! author : Juan G. Hurtado : https://github.com/juanghurtado
   5799 
   5800 hooks.defineLocale('ca', {
   5801     months : {
   5802         standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),
   5803         format: 'de gener_de febrer_de març_d\'abril_de maig_de juny_de juliol_d\'agost_de setembre_d\'octubre_de novembre_de desembre'.split('_'),
   5804         isFormat: /D[oD]?(\s)+MMMM/
   5805     },
   5806     monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),
   5807     monthsParseExact : true,
   5808     weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),
   5809     weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
   5810     weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'),
   5811     weekdaysParseExact : true,
   5812     longDateFormat : {
   5813         LT : 'H:mm',
   5814         LTS : 'H:mm:ss',
   5815         L : 'DD/MM/YYYY',
   5816         LL : '[el] D MMMM [de] YYYY',
   5817         ll : 'D MMM YYYY',
   5818         LLL : '[el] D MMMM [de] YYYY [a les] H:mm',
   5819         lll : 'D MMM YYYY, H:mm',
   5820         LLLL : '[el] dddd D MMMM [de] YYYY [a les] H:mm',
   5821         llll : 'ddd D MMM YYYY, H:mm'
   5822     },
   5823     calendar : {
   5824         sameDay : function () {
   5825             return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
   5826         },
   5827         nextDay : function () {
   5828             return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
   5829         },
   5830         nextWeek : function () {
   5831             return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
   5832         },
   5833         lastDay : function () {
   5834             return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
   5835         },
   5836         lastWeek : function () {
   5837             return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
   5838         },
   5839         sameElse : 'L'
   5840     },
   5841     relativeTime : {
   5842         future : 'd\'aquí %s',
   5843         past : 'fa %s',
   5844         s : 'uns segons',
   5845         m : 'un minut',
   5846         mm : '%d minuts',
   5847         h : 'una hora',
   5848         hh : '%d hores',
   5849         d : 'un dia',
   5850         dd : '%d dies',
   5851         M : 'un mes',
   5852         MM : '%d mesos',
   5853         y : 'un any',
   5854         yy : '%d anys'
   5855     },
   5856     dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/,
   5857     ordinal : function (number, period) {
   5858         var output = (number === 1) ? 'r' :
   5859             (number === 2) ? 'n' :
   5860             (number === 3) ? 'r' :
   5861             (number === 4) ? 't' : 'è';
   5862         if (period === 'w' || period === 'W') {
   5863             output = 'a';
   5864         }
   5865         return number + output;
   5866     },
   5867     week : {
   5868         dow : 1, // Monday is the first day of the week.
   5869         doy : 4  // The week that contains Jan 4th is the first week of the year.
   5870     }
   5871 });
   5872 
   5873 //! moment.js locale configuration
   5874 //! locale : Czech [cs]
   5875 //! author : petrbela : https://github.com/petrbela
   5876 
   5877 var months$3 = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_');
   5878 var monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');
   5879 function plural$1(n) {
   5880     return (n > 1) && (n < 5) && (~~(n / 10) !== 1);
   5881 }
   5882 function translate$1(number, withoutSuffix, key, isFuture) {
   5883     var result = number + ' ';
   5884     switch (key) {
   5885         case 's':  // a few seconds / in a few seconds / a few seconds ago
   5886             return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';
   5887         case 'm':  // a minute / in a minute / a minute ago
   5888             return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');
   5889         case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
   5890             if (withoutSuffix || isFuture) {
   5891                 return result + (plural$1(number) ? 'minuty' : 'minut');
   5892             } else {
   5893                 return result + 'minutami';
   5894             }
   5895             break;
   5896         case 'h':  // an hour / in an hour / an hour ago
   5897             return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
   5898         case 'hh': // 9 hours / in 9 hours / 9 hours ago
   5899             if (withoutSuffix || isFuture) {
   5900                 return result + (plural$1(number) ? 'hodiny' : 'hodin');
   5901             } else {
   5902                 return result + 'hodinami';
   5903             }
   5904             break;
   5905         case 'd':  // a day / in a day / a day ago
   5906             return (withoutSuffix || isFuture) ? 'den' : 'dnem';
   5907         case 'dd': // 9 days / in 9 days / 9 days ago
   5908             if (withoutSuffix || isFuture) {
   5909                 return result + (plural$1(number) ? 'dny' : 'dní');
   5910             } else {
   5911                 return result + 'dny';
   5912             }
   5913             break;
   5914         case 'M':  // a month / in a month / a month ago
   5915             return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';
   5916         case 'MM': // 9 months / in 9 months / 9 months ago
   5917             if (withoutSuffix || isFuture) {
   5918                 return result + (plural$1(number) ? 'měsíce' : 'měsíců');
   5919             } else {
   5920                 return result + 'měsíci';
   5921             }
   5922             break;
   5923         case 'y':  // a year / in a year / a year ago
   5924             return (withoutSuffix || isFuture) ? 'rok' : 'rokem';
   5925         case 'yy': // 9 years / in 9 years / 9 years ago
   5926             if (withoutSuffix || isFuture) {
   5927                 return result + (plural$1(number) ? 'roky' : 'let');
   5928             } else {
   5929                 return result + 'lety';
   5930             }
   5931             break;
   5932     }
   5933 }
   5934 
   5935 hooks.defineLocale('cs', {
   5936     months : months$3,
   5937     monthsShort : monthsShort,
   5938     monthsParse : (function (months, monthsShort) {
   5939         var i, _monthsParse = [];
   5940         for (i = 0; i < 12; i++) {
   5941             // use custom parser to solve problem with July (červenec)
   5942             _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');
   5943         }
   5944         return _monthsParse;
   5945     }(months$3, monthsShort)),
   5946     shortMonthsParse : (function (monthsShort) {
   5947         var i, _shortMonthsParse = [];
   5948         for (i = 0; i < 12; i++) {
   5949             _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i');
   5950         }
   5951         return _shortMonthsParse;
   5952     }(monthsShort)),
   5953     longMonthsParse : (function (months) {
   5954         var i, _longMonthsParse = [];
   5955         for (i = 0; i < 12; i++) {
   5956             _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i');
   5957         }
   5958         return _longMonthsParse;
   5959     }(months$3)),
   5960     weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
   5961     weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),
   5962     weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),
   5963     longDateFormat : {
   5964         LT: 'H:mm',
   5965         LTS : 'H:mm:ss',
   5966         L : 'DD.MM.YYYY',
   5967         LL : 'D. MMMM YYYY',
   5968         LLL : 'D. MMMM YYYY H:mm',
   5969         LLLL : 'dddd D. MMMM YYYY H:mm',
   5970         l : 'D. M. YYYY'
   5971     },
   5972     calendar : {
   5973         sameDay: '[dnes v] LT',
   5974         nextDay: '[zítra v] LT',
   5975         nextWeek: function () {
   5976             switch (this.day()) {
   5977                 case 0:
   5978                     return '[v neděli v] LT';
   5979                 case 1:
   5980                 case 2:
   5981                     return '[v] dddd [v] LT';
   5982                 case 3:
   5983                     return '[ve středu v] LT';
   5984                 case 4:
   5985                     return '[ve čtvrtek v] LT';
   5986                 case 5:
   5987                     return '[v pátek v] LT';
   5988                 case 6:
   5989                     return '[v sobotu v] LT';
   5990             }
   5991         },
   5992         lastDay: '[včera v] LT',
   5993         lastWeek: function () {
   5994             switch (this.day()) {
   5995                 case 0:
   5996                     return '[minulou neděli v] LT';
   5997                 case 1:
   5998                 case 2:
   5999                     return '[minulé] dddd [v] LT';
   6000                 case 3:
   6001                     return '[minulou středu v] LT';
   6002                 case 4:
   6003                 case 5:
   6004                     return '[minulý] dddd [v] LT';
   6005                 case 6:
   6006                     return '[minulou sobotu v] LT';
   6007             }
   6008         },
   6009         sameElse: 'L'
   6010     },
   6011     relativeTime : {
   6012         future : 'za %s',
   6013         past : 'před %s',
   6014         s : translate$1,
   6015         m : translate$1,
   6016         mm : translate$1,
   6017         h : translate$1,
   6018         hh : translate$1,
   6019         d : translate$1,
   6020         dd : translate$1,
   6021         M : translate$1,
   6022         MM : translate$1,
   6023         y : translate$1,
   6024         yy : translate$1
   6025     },
   6026     dayOfMonthOrdinalParse : /\d{1,2}\./,
   6027     ordinal : '%d.',
   6028     week : {
   6029         dow : 1, // Monday is the first day of the week.
   6030         doy : 4  // The week that contains Jan 4th is the first week of the year.
   6031     }
   6032 });
   6033 
   6034 //! moment.js locale configuration
   6035 //! locale : Chuvash [cv]
   6036 //! author : Anatoly Mironov : https://github.com/mirontoli
   6037 
   6038 hooks.defineLocale('cv', {
   6039     months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),
   6040     monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
   6041     weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),
   6042     weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),
   6043     weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),
   6044     longDateFormat : {
   6045         LT : 'HH:mm',
   6046         LTS : 'HH:mm:ss',
   6047         L : 'DD-MM-YYYY',
   6048         LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
   6049         LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
   6050         LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'
   6051     },
   6052     calendar : {
   6053         sameDay: '[Паян] LT [сехетре]',
   6054         nextDay: '[Ыран] LT [сехетре]',
   6055         lastDay: '[Ӗнер] LT [сехетре]',
   6056         nextWeek: '[Ҫитес] dddd LT [сехетре]',
   6057         lastWeek: '[Иртнӗ] dddd LT [сехетре]',
   6058         sameElse: 'L'
   6059     },
   6060     relativeTime : {
   6061         future : function (output) {
   6062             var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';
   6063             return output + affix;
   6064         },
   6065         past : '%s каялла',
   6066         s : 'пӗр-ик ҫеккунт',
   6067         m : 'пӗр минут',
   6068         mm : '%d минут',
   6069         h : 'пӗр сехет',
   6070         hh : '%d сехет',
   6071         d : 'пӗр кун',
   6072         dd : '%d кун',
   6073         M : 'пӗр уйӑх',
   6074         MM : '%d уйӑх',
   6075         y : 'пӗр ҫул',
   6076         yy : '%d ҫул'
   6077     },
   6078     dayOfMonthOrdinalParse: /\d{1,2}-мӗш/,
   6079     ordinal : '%d-мӗш',
   6080     week : {
   6081         dow : 1, // Monday is the first day of the week.
   6082         doy : 7  // The week that contains Jan 1st is the first week of the year.
   6083     }
   6084 });
   6085 
   6086 //! moment.js locale configuration
   6087 //! locale : Welsh [cy]
   6088 //! author : Robert Allen : https://github.com/robgallen
   6089 //! author : https://github.com/ryangreaves
   6090 
   6091 hooks.defineLocale('cy', {
   6092     months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),
   6093     monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),
   6094     weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),
   6095     weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
   6096     weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
   6097     weekdaysParseExact : true,
   6098     // time formats are the same as en-gb
   6099     longDateFormat: {
   6100         LT: 'HH:mm',
   6101         LTS : 'HH:mm:ss',
   6102         L: 'DD/MM/YYYY',
   6103         LL: 'D MMMM YYYY',
   6104         LLL: 'D MMMM YYYY HH:mm',
   6105         LLLL: 'dddd, D MMMM YYYY HH:mm'
   6106     },
   6107     calendar: {
   6108         sameDay: '[Heddiw am] LT',
   6109         nextDay: '[Yfory am] LT',
   6110         nextWeek: 'dddd [am] LT',
   6111         lastDay: '[Ddoe am] LT',
   6112         lastWeek: 'dddd [diwethaf am] LT',
   6113         sameElse: 'L'
   6114     },
   6115     relativeTime: {
   6116         future: 'mewn %s',
   6117         past: '%s yn ôl',
   6118         s: 'ychydig eiliadau',
   6119         m: 'munud',
   6120         mm: '%d munud',
   6121         h: 'awr',
   6122         hh: '%d awr',
   6123         d: 'diwrnod',
   6124         dd: '%d diwrnod',
   6125         M: 'mis',
   6126         MM: '%d mis',
   6127         y: 'blwyddyn',
   6128         yy: '%d flynedd'
   6129     },
   6130     dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
   6131     // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
   6132     ordinal: function (number) {
   6133         var b = number,
   6134             output = '',
   6135             lookup = [
   6136                 '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed
   6137                 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed
   6138             ];
   6139         if (b > 20) {
   6140             if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
   6141                 output = 'fed'; // not 30ain, 70ain or 90ain
   6142             } else {
   6143                 output = 'ain';
   6144             }
   6145         } else if (b > 0) {
   6146             output = lookup[b];
   6147         }
   6148         return number + output;
   6149     },
   6150     week : {
   6151         dow : 1, // Monday is the first day of the week.
   6152         doy : 4  // The week that contains Jan 4th is the first week of the year.
   6153     }
   6154 });
   6155 
   6156 //! moment.js locale configuration
   6157 //! locale : Danish [da]
   6158 //! author : Ulrik Nielsen : https://github.com/mrbase
   6159 
   6160 hooks.defineLocale('da', {
   6161     months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),
   6162     monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
   6163     weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
   6164     weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),
   6165     weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
   6166     longDateFormat : {
   6167         LT : 'HH:mm',
   6168         LTS : 'HH:mm:ss',
   6169         L : 'DD/MM/YYYY',
   6170         LL : 'D. MMMM YYYY',
   6171         LLL : 'D. MMMM YYYY HH:mm',
   6172         LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'
   6173     },
   6174     calendar : {
   6175         sameDay : '[i dag kl.] LT',
   6176         nextDay : '[i morgen kl.] LT',
   6177         nextWeek : 'på dddd [kl.] LT',
   6178         lastDay : '[i går kl.] LT',
   6179         lastWeek : '[i] dddd[s kl.] LT',
   6180         sameElse : 'L'
   6181     },
   6182     relativeTime : {
   6183         future : 'om %s',
   6184         past : '%s siden',
   6185         s : 'få sekunder',
   6186         m : 'et minut',
   6187         mm : '%d minutter',
   6188         h : 'en time',
   6189         hh : '%d timer',
   6190         d : 'en dag',
   6191         dd : '%d dage',
   6192         M : 'en måned',
   6193         MM : '%d måneder',
   6194         y : 'et år',
   6195         yy : '%d år'
   6196     },
   6197     dayOfMonthOrdinalParse: /\d{1,2}\./,
   6198     ordinal : '%d.',
   6199     week : {
   6200         dow : 1, // Monday is the first day of the week.
   6201         doy : 4  // The week that contains Jan 4th is the first week of the year.
   6202     }
   6203 });
   6204 
   6205 //! moment.js locale configuration
   6206 //! locale : German (Austria) [de-at]
   6207 //! author : lluchs : https://github.com/lluchs
   6208 //! author: Menelion Elensúle: https://github.com/Oire
   6209 //! author : Martin Groller : https://github.com/MadMG
   6210 //! author : Mikolaj Dadela : https://github.com/mik01aj
   6211 
   6212 function processRelativeTime(number, withoutSuffix, key, isFuture) {
   6213     var format = {
   6214         'm': ['eine Minute', 'einer Minute'],
   6215         'h': ['eine Stunde', 'einer Stunde'],
   6216         'd': ['ein Tag', 'einem Tag'],
   6217         'dd': [number + ' Tage', number + ' Tagen'],
   6218         'M': ['ein Monat', 'einem Monat'],
   6219         'MM': [number + ' Monate', number + ' Monaten'],
   6220         'y': ['ein Jahr', 'einem Jahr'],
   6221         'yy': [number + ' Jahre', number + ' Jahren']
   6222     };
   6223     return withoutSuffix ? format[key][0] : format[key][1];
   6224 }
   6225 
   6226 hooks.defineLocale('de-at', {
   6227     months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
   6228     monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
   6229     monthsParseExact : true,
   6230     weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
   6231     weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
   6232     weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
   6233     weekdaysParseExact : true,
   6234     longDateFormat : {
   6235         LT: 'HH:mm',
   6236         LTS: 'HH:mm:ss',
   6237         L : 'DD.MM.YYYY',
   6238         LL : 'D. MMMM YYYY',
   6239         LLL : 'D. MMMM YYYY HH:mm',
   6240         LLLL : 'dddd, D. MMMM YYYY HH:mm'
   6241     },
   6242     calendar : {
   6243         sameDay: '[heute um] LT [Uhr]',
   6244         sameElse: 'L',
   6245         nextDay: '[morgen um] LT [Uhr]',
   6246         nextWeek: 'dddd [um] LT [Uhr]',
   6247         lastDay: '[gestern um] LT [Uhr]',
   6248         lastWeek: '[letzten] dddd [um] LT [Uhr]'
   6249     },
   6250     relativeTime : {
   6251         future : 'in %s',
   6252         past : 'vor %s',
   6253         s : 'ein paar Sekunden',
   6254         m : processRelativeTime,
   6255         mm : '%d Minuten',
   6256         h : processRelativeTime,
   6257         hh : '%d Stunden',
   6258         d : processRelativeTime,
   6259         dd : processRelativeTime,
   6260         M : processRelativeTime,
   6261         MM : processRelativeTime,
   6262         y : processRelativeTime,
   6263         yy : processRelativeTime
   6264     },
   6265     dayOfMonthOrdinalParse: /\d{1,2}\./,
   6266     ordinal : '%d.',
   6267     week : {
   6268         dow : 1, // Monday is the first day of the week.
   6269         doy : 4  // The week that contains Jan 4th is the first week of the year.
   6270     }
   6271 });
   6272 
   6273 //! moment.js locale configuration
   6274 //! locale : German (Switzerland) [de-ch]
   6275 //! author : sschueller : https://github.com/sschueller
   6276 
   6277 // based on: https://www.bk.admin.ch/dokumentation/sprachen/04915/05016/index.html?lang=de#
   6278 
   6279 function processRelativeTime$1(number, withoutSuffix, key, isFuture) {
   6280     var format = {
   6281         'm': ['eine Minute', 'einer Minute'],
   6282         'h': ['eine Stunde', 'einer Stunde'],
   6283         'd': ['ein Tag', 'einem Tag'],
   6284         'dd': [number + ' Tage', number + ' Tagen'],
   6285         'M': ['ein Monat', 'einem Monat'],
   6286         'MM': [number + ' Monate', number + ' Monaten'],
   6287         'y': ['ein Jahr', 'einem Jahr'],
   6288         'yy': [number + ' Jahre', number + ' Jahren']
   6289     };
   6290     return withoutSuffix ? format[key][0] : format[key][1];
   6291 }
   6292 
   6293 hooks.defineLocale('de-ch', {
   6294     months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
   6295     monthsShort : 'Jan._Febr._März_April_Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.'.split('_'),
   6296     monthsParseExact : true,
   6297     weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
   6298     weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
   6299     weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
   6300     weekdaysParseExact : true,
   6301     longDateFormat : {
   6302         LT: 'HH.mm',
   6303         LTS: 'HH.mm.ss',
   6304         L : 'DD.MM.YYYY',
   6305         LL : 'D. MMMM YYYY',
   6306         LLL : 'D. MMMM YYYY HH.mm',
   6307         LLLL : 'dddd, D. MMMM YYYY HH.mm'
   6308     },
   6309     calendar : {
   6310         sameDay: '[heute um] LT [Uhr]',
   6311         sameElse: 'L',
   6312         nextDay: '[morgen um] LT [Uhr]',
   6313         nextWeek: 'dddd [um] LT [Uhr]',
   6314         lastDay: '[gestern um] LT [Uhr]',
   6315         lastWeek: '[letzten] dddd [um] LT [Uhr]'
   6316     },
   6317     relativeTime : {
   6318         future : 'in %s',
   6319         past : 'vor %s',
   6320         s : 'ein paar Sekunden',
   6321         m : processRelativeTime$1,
   6322         mm : '%d Minuten',
   6323         h : processRelativeTime$1,
   6324         hh : '%d Stunden',
   6325         d : processRelativeTime$1,
   6326         dd : processRelativeTime$1,
   6327         M : processRelativeTime$1,
   6328         MM : processRelativeTime$1,
   6329         y : processRelativeTime$1,
   6330         yy : processRelativeTime$1
   6331     },
   6332     dayOfMonthOrdinalParse: /\d{1,2}\./,
   6333     ordinal : '%d.',
   6334     week : {
   6335         dow : 1, // Monday is the first day of the week.
   6336         doy : 4  // The week that contains Jan 4th is the first week of the year.
   6337     }
   6338 });
   6339 
   6340 //! moment.js locale configuration
   6341 //! locale : German [de]
   6342 //! author : lluchs : https://github.com/lluchs
   6343 //! author: Menelion Elensúle: https://github.com/Oire
   6344 //! author : Mikolaj Dadela : https://github.com/mik01aj
   6345 
   6346 function processRelativeTime$2(number, withoutSuffix, key, isFuture) {
   6347     var format = {
   6348         'm': ['eine Minute', 'einer Minute'],
   6349         'h': ['eine Stunde', 'einer Stunde'],
   6350         'd': ['ein Tag', 'einem Tag'],
   6351         'dd': [number + ' Tage', number + ' Tagen'],
   6352         'M': ['ein Monat', 'einem Monat'],
   6353         'MM': [number + ' Monate', number + ' Monaten'],
   6354         'y': ['ein Jahr', 'einem Jahr'],
   6355         'yy': [number + ' Jahre', number + ' Jahren']
   6356     };
   6357     return withoutSuffix ? format[key][0] : format[key][1];
   6358 }
   6359 
   6360 hooks.defineLocale('de', {
   6361     months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
   6362     monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
   6363     monthsParseExact : true,
   6364     weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
   6365     weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
   6366     weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
   6367     weekdaysParseExact : true,
   6368     longDateFormat : {
   6369         LT: 'HH:mm',
   6370         LTS: 'HH:mm:ss',
   6371         L : 'DD.MM.YYYY',
   6372         LL : 'D. MMMM YYYY',
   6373         LLL : 'D. MMMM YYYY HH:mm',
   6374         LLLL : 'dddd, D. MMMM YYYY HH:mm'
   6375     },
   6376     calendar : {
   6377         sameDay: '[heute um] LT [Uhr]',
   6378         sameElse: 'L',
   6379         nextDay: '[morgen um] LT [Uhr]',
   6380         nextWeek: 'dddd [um] LT [Uhr]',
   6381         lastDay: '[gestern um] LT [Uhr]',
   6382         lastWeek: '[letzten] dddd [um] LT [Uhr]'
   6383     },
   6384     relativeTime : {
   6385         future : 'in %s',
   6386         past : 'vor %s',
   6387         s : 'ein paar Sekunden',
   6388         m : processRelativeTime$2,
   6389         mm : '%d Minuten',
   6390         h : processRelativeTime$2,
   6391         hh : '%d Stunden',
   6392         d : processRelativeTime$2,
   6393         dd : processRelativeTime$2,
   6394         M : processRelativeTime$2,
   6395         MM : processRelativeTime$2,
   6396         y : processRelativeTime$2,
   6397         yy : processRelativeTime$2
   6398     },
   6399     dayOfMonthOrdinalParse: /\d{1,2}\./,
   6400     ordinal : '%d.',
   6401     week : {
   6402         dow : 1, // Monday is the first day of the week.
   6403         doy : 4  // The week that contains Jan 4th is the first week of the year.
   6404     }
   6405 });
   6406 
   6407 //! moment.js locale configuration
   6408 //! locale : Maldivian [dv]
   6409 //! author : Jawish Hameed : https://github.com/jawish
   6410 
   6411 var months$4 = [
   6412     'ޖެނުއަރީ',
   6413     'ފެބްރުއަރީ',
   6414     'މާރިޗު',
   6415     'އޭޕްރީލު',
   6416     'މޭ',
   6417     'ޖޫން',
   6418     'ޖުލައި',
   6419     'އޯގަސްޓު',
   6420     'ސެޕްޓެމްބަރު',
   6421     'އޮކްޓޯބަރު',
   6422     'ނޮވެމްބަރު',
   6423     'ޑިސެމްބަރު'
   6424 ];
   6425 var weekdays = [
   6426     'އާދިއްތަ',
   6427     'ހޯމަ',
   6428     'އަންގާރަ',
   6429     'ބުދަ',
   6430     'ބުރާސްފަތި',
   6431     'ހުކުރު',
   6432     'ހޮނިހިރު'
   6433 ];
   6434 
   6435 hooks.defineLocale('dv', {
   6436     months : months$4,
   6437     monthsShort : months$4,
   6438     weekdays : weekdays,
   6439     weekdaysShort : weekdays,
   6440     weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),
   6441     longDateFormat : {
   6442 
   6443         LT : 'HH:mm',
   6444         LTS : 'HH:mm:ss',
   6445         L : 'D/M/YYYY',
   6446         LL : 'D MMMM YYYY',
   6447         LLL : 'D MMMM YYYY HH:mm',
   6448         LLLL : 'dddd D MMMM YYYY HH:mm'
   6449     },
   6450     meridiemParse: /މކ|މފ/,
   6451     isPM : function (input) {
   6452         return 'މފ' === input;
   6453     },
   6454     meridiem : function (hour, minute, isLower) {
   6455         if (hour < 12) {
   6456             return 'މކ';
   6457         } else {
   6458             return 'މފ';
   6459         }
   6460     },
   6461     calendar : {
   6462         sameDay : '[މިއަދު] LT',
   6463         nextDay : '[މާދަމާ] LT',
   6464         nextWeek : 'dddd LT',
   6465         lastDay : '[އިއްޔެ] LT',
   6466         lastWeek : '[ފާއިތުވި] dddd LT',
   6467         sameElse : 'L'
   6468     },
   6469     relativeTime : {
   6470         future : 'ތެރޭގައި %s',
   6471         past : 'ކުރިން %s',
   6472         s : 'ސިކުންތުކޮޅެއް',
   6473         m : 'މިނިޓެއް',
   6474         mm : 'މިނިޓު %d',
   6475         h : 'ގަޑިއިރެއް',
   6476         hh : 'ގަޑިއިރު %d',
   6477         d : 'ދުވަހެއް',
   6478         dd : 'ދުވަސް %d',
   6479         M : 'މަހެއް',
   6480         MM : 'މަސް %d',
   6481         y : 'އަހަރެއް',
   6482         yy : 'އަހަރު %d'
   6483     },
   6484     preparse: function (string) {
   6485         return string.replace(/،/g, ',');
   6486     },
   6487     postformat: function (string) {
   6488         return string.replace(/,/g, '،');
   6489     },
   6490     week : {
   6491         dow : 7,  // Sunday is the first day of the week.
   6492         doy : 12  // The week that contains Jan 1st is the first week of the year.
   6493     }
   6494 });
   6495 
   6496 //! moment.js locale configuration
   6497 //! locale : Greek [el]
   6498 //! author : Aggelos Karalias : https://github.com/mehiel
   6499 
   6500 hooks.defineLocale('el', {
   6501     monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),
   6502     monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),
   6503     months : function (momentToFormat, format) {
   6504         if (!momentToFormat) {
   6505             return this._monthsNominativeEl;
   6506         } else if (/D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'
   6507             return this._monthsGenitiveEl[momentToFormat.month()];
   6508         } else {
   6509             return this._monthsNominativeEl[momentToFormat.month()];
   6510         }
   6511     },
   6512     monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),
   6513     weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),
   6514     weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),
   6515     weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),
   6516     meridiem : function (hours, minutes, isLower) {
   6517         if (hours > 11) {
   6518             return isLower ? 'μμ' : 'ΜΜ';
   6519         } else {
   6520             return isLower ? 'πμ' : 'ΠΜ';
   6521         }
   6522     },
   6523     isPM : function (input) {
   6524         return ((input + '').toLowerCase()[0] === 'μ');
   6525     },
   6526     meridiemParse : /[ΠΜ]\.?Μ?\.?/i,
   6527     longDateFormat : {
   6528         LT : 'h:mm A',
   6529         LTS : 'h:mm:ss A',
   6530         L : 'DD/MM/YYYY',
   6531         LL : 'D MMMM YYYY',
   6532         LLL : 'D MMMM YYYY h:mm A',
   6533         LLLL : 'dddd, D MMMM YYYY h:mm A'
   6534     },
   6535     calendarEl : {
   6536         sameDay : '[Σήμερα {}] LT',
   6537         nextDay : '[Αύριο {}] LT',
   6538         nextWeek : 'dddd [{}] LT',
   6539         lastDay : '[Χθες {}] LT',
   6540         lastWeek : function () {
   6541             switch (this.day()) {
   6542                 case 6:
   6543                     return '[το προηγούμενο] dddd [{}] LT';
   6544                 default:
   6545                     return '[την προηγούμενη] dddd [{}] LT';
   6546             }
   6547         },
   6548         sameElse : 'L'
   6549     },
   6550     calendar : function (key, mom) {
   6551         var output = this._calendarEl[key],
   6552             hours = mom && mom.hours();
   6553         if (isFunction(output)) {
   6554             output = output.apply(mom);
   6555         }
   6556         return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));
   6557     },
   6558     relativeTime : {
   6559         future : 'σε %s',
   6560         past : '%s πριν',
   6561         s : 'λίγα δευτερόλεπτα',
   6562         m : 'ένα λεπτό',
   6563         mm : '%d λεπτά',
   6564         h : 'μία ώρα',
   6565         hh : '%d ώρες',
   6566         d : 'μία μέρα',
   6567         dd : '%d μέρες',
   6568         M : 'ένας μήνας',
   6569         MM : '%d μήνες',
   6570         y : 'ένας χρόνος',
   6571         yy : '%d χρόνια'
   6572     },
   6573     dayOfMonthOrdinalParse: /\d{1,2}η/,
   6574     ordinal: '%dη',
   6575     week : {
   6576         dow : 1, // Monday is the first day of the week.
   6577         doy : 4  // The week that contains Jan 4st is the first week of the year.
   6578     }
   6579 });
   6580 
   6581 //! moment.js locale configuration
   6582 //! locale : English (Australia) [en-au]
   6583 //! author : Jared Morse : https://github.com/jarcoal
   6584 
   6585 hooks.defineLocale('en-au', {
   6586     months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
   6587     monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
   6588     weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
   6589     weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
   6590     weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
   6591     longDateFormat : {
   6592         LT : 'h:mm A',
   6593         LTS : 'h:mm:ss A',
   6594         L : 'DD/MM/YYYY',
   6595         LL : 'D MMMM YYYY',
   6596         LLL : 'D MMMM YYYY h:mm A',
   6597         LLLL : 'dddd, D MMMM YYYY h:mm A'
   6598     },
   6599     calendar : {
   6600         sameDay : '[Today at] LT',
   6601         nextDay : '[Tomorrow at] LT',
   6602         nextWeek : 'dddd [at] LT',
   6603         lastDay : '[Yesterday at] LT',
   6604         lastWeek : '[Last] dddd [at] LT',
   6605         sameElse : 'L'
   6606     },
   6607     relativeTime : {
   6608         future : 'in %s',
   6609         past : '%s ago',
   6610         s : 'a few seconds',
   6611         m : 'a minute',
   6612         mm : '%d minutes',
   6613         h : 'an hour',
   6614         hh : '%d hours',
   6615         d : 'a day',
   6616         dd : '%d days',
   6617         M : 'a month',
   6618         MM : '%d months',
   6619         y : 'a year',
   6620         yy : '%d years'
   6621     },
   6622     dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
   6623     ordinal : function (number) {
   6624         var b = number % 10,
   6625             output = (~~(number % 100 / 10) === 1) ? 'th' :
   6626             (b === 1) ? 'st' :
   6627             (b === 2) ? 'nd' :
   6628             (b === 3) ? 'rd' : 'th';
   6629         return number + output;
   6630     },
   6631     week : {
   6632         dow : 1, // Monday is the first day of the week.
   6633         doy : 4  // The week that contains Jan 4th is the first week of the year.
   6634     }
   6635 });
   6636 
   6637 //! moment.js locale configuration
   6638 //! locale : English (Canada) [en-ca]
   6639 //! author : Jonathan Abourbih : https://github.com/jonbca
   6640 
   6641 hooks.defineLocale('en-ca', {
   6642     months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
   6643     monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
   6644     weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
   6645     weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
   6646     weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
   6647     longDateFormat : {
   6648         LT : 'h:mm A',
   6649         LTS : 'h:mm:ss A',
   6650         L : 'YYYY-MM-DD',
   6651         LL : 'MMMM D, YYYY',
   6652         LLL : 'MMMM D, YYYY h:mm A',
   6653         LLLL : 'dddd, MMMM D, YYYY h:mm A'
   6654     },
   6655     calendar : {
   6656         sameDay : '[Today at] LT',
   6657         nextDay : '[Tomorrow at] LT',
   6658         nextWeek : 'dddd [at] LT',
   6659         lastDay : '[Yesterday at] LT',
   6660         lastWeek : '[Last] dddd [at] LT',
   6661         sameElse : 'L'
   6662     },
   6663     relativeTime : {
   6664         future : 'in %s',
   6665         past : '%s ago',
   6666         s : 'a few seconds',
   6667         m : 'a minute',
   6668         mm : '%d minutes',
   6669         h : 'an hour',
   6670         hh : '%d hours',
   6671         d : 'a day',
   6672         dd : '%d days',
   6673         M : 'a month',
   6674         MM : '%d months',
   6675         y : 'a year',
   6676         yy : '%d years'
   6677     },
   6678     dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
   6679     ordinal : function (number) {
   6680         var b = number % 10,
   6681             output = (~~(number % 100 / 10) === 1) ? 'th' :
   6682             (b === 1) ? 'st' :
   6683             (b === 2) ? 'nd' :
   6684             (b === 3) ? 'rd' : 'th';
   6685         return number + output;
   6686     }
   6687 });
   6688 
   6689 //! moment.js locale configuration
   6690 //! locale : English (United Kingdom) [en-gb]
   6691 //! author : Chris Gedrim : https://github.com/chrisgedrim
   6692 
   6693 hooks.defineLocale('en-gb', {
   6694     months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
   6695     monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
   6696     weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
   6697     weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
   6698     weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
   6699     longDateFormat : {
   6700         LT : 'HH:mm',
   6701         LTS : 'HH:mm:ss',
   6702         L : 'DD/MM/YYYY',
   6703         LL : 'D MMMM YYYY',
   6704         LLL : 'D MMMM YYYY HH:mm',
   6705         LLLL : 'dddd, D MMMM YYYY HH:mm'
   6706     },
   6707     calendar : {
   6708         sameDay : '[Today at] LT',
   6709         nextDay : '[Tomorrow at] LT',
   6710         nextWeek : 'dddd [at] LT',
   6711         lastDay : '[Yesterday at] LT',
   6712         lastWeek : '[Last] dddd [at] LT',
   6713         sameElse : 'L'
   6714     },
   6715     relativeTime : {
   6716         future : 'in %s',
   6717         past : '%s ago',
   6718         s : 'a few seconds',
   6719         m : 'a minute',
   6720         mm : '%d minutes',
   6721         h : 'an hour',
   6722         hh : '%d hours',
   6723         d : 'a day',
   6724         dd : '%d days',
   6725         M : 'a month',
   6726         MM : '%d months',
   6727         y : 'a year',
   6728         yy : '%d years'
   6729     },
   6730     dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
   6731     ordinal : function (number) {
   6732         var b = number % 10,
   6733             output = (~~(number % 100 / 10) === 1) ? 'th' :
   6734             (b === 1) ? 'st' :
   6735             (b === 2) ? 'nd' :
   6736             (b === 3) ? 'rd' : 'th';
   6737         return number + output;
   6738     },
   6739     week : {
   6740         dow : 1, // Monday is the first day of the week.
   6741         doy : 4  // The week that contains Jan 4th is the first week of the year.
   6742     }
   6743 });
   6744 
   6745 //! moment.js locale configuration
   6746 //! locale : English (Ireland) [en-ie]
   6747 //! author : Chris Cartlidge : https://github.com/chriscartlidge
   6748 
   6749 hooks.defineLocale('en-ie', {
   6750     months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
   6751     monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
   6752     weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
   6753     weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
   6754     weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
   6755     longDateFormat : {
   6756         LT : 'HH:mm',
   6757         LTS : 'HH:mm:ss',
   6758         L : 'DD-MM-YYYY',
   6759         LL : 'D MMMM YYYY',
   6760         LLL : 'D MMMM YYYY HH:mm',
   6761         LLLL : 'dddd D MMMM YYYY HH:mm'
   6762     },
   6763     calendar : {
   6764         sameDay : '[Today at] LT',
   6765         nextDay : '[Tomorrow at] LT',
   6766         nextWeek : 'dddd [at] LT',
   6767         lastDay : '[Yesterday at] LT',
   6768         lastWeek : '[Last] dddd [at] LT',
   6769         sameElse : 'L'
   6770     },
   6771     relativeTime : {
   6772         future : 'in %s',
   6773         past : '%s ago',
   6774         s : 'a few seconds',
   6775         m : 'a minute',
   6776         mm : '%d minutes',
   6777         h : 'an hour',
   6778         hh : '%d hours',
   6779         d : 'a day',
   6780         dd : '%d days',
   6781         M : 'a month',
   6782         MM : '%d months',
   6783         y : 'a year',
   6784         yy : '%d years'
   6785     },
   6786     dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
   6787     ordinal : function (number) {
   6788         var b = number % 10,
   6789             output = (~~(number % 100 / 10) === 1) ? 'th' :
   6790             (b === 1) ? 'st' :
   6791             (b === 2) ? 'nd' :
   6792             (b === 3) ? 'rd' : 'th';
   6793         return number + output;
   6794     },
   6795     week : {
   6796         dow : 1, // Monday is the first day of the week.
   6797         doy : 4  // The week that contains Jan 4th is the first week of the year.
   6798     }
   6799 });
   6800 
   6801 //! moment.js locale configuration
   6802 //! locale : English (New Zealand) [en-nz]
   6803 //! author : Luke McGregor : https://github.com/lukemcgregor
   6804 
   6805 hooks.defineLocale('en-nz', {
   6806     months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
   6807     monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
   6808     weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
   6809     weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
   6810     weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
   6811     longDateFormat : {
   6812         LT : 'h:mm A',
   6813         LTS : 'h:mm:ss A',
   6814         L : 'DD/MM/YYYY',
   6815         LL : 'D MMMM YYYY',
   6816         LLL : 'D MMMM YYYY h:mm A',
   6817         LLLL : 'dddd, D MMMM YYYY h:mm A'
   6818     },
   6819     calendar : {
   6820         sameDay : '[Today at] LT',
   6821         nextDay : '[Tomorrow at] LT',
   6822         nextWeek : 'dddd [at] LT',
   6823         lastDay : '[Yesterday at] LT',
   6824         lastWeek : '[Last] dddd [at] LT',
   6825         sameElse : 'L'
   6826     },
   6827     relativeTime : {
   6828         future : 'in %s',
   6829         past : '%s ago',
   6830         s : 'a few seconds',
   6831         m : 'a minute',
   6832         mm : '%d minutes',
   6833         h : 'an hour',
   6834         hh : '%d hours',
   6835         d : 'a day',
   6836         dd : '%d days',
   6837         M : 'a month',
   6838         MM : '%d months',
   6839         y : 'a year',
   6840         yy : '%d years'
   6841     },
   6842     dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
   6843     ordinal : function (number) {
   6844         var b = number % 10,
   6845             output = (~~(number % 100 / 10) === 1) ? 'th' :
   6846             (b === 1) ? 'st' :
   6847             (b === 2) ? 'nd' :
   6848             (b === 3) ? 'rd' : 'th';
   6849         return number + output;
   6850     },
   6851     week : {
   6852         dow : 1, // Monday is the first day of the week.
   6853         doy : 4  // The week that contains Jan 4th is the first week of the year.
   6854     }
   6855 });
   6856 
   6857 //! moment.js locale configuration
   6858 //! locale : Esperanto [eo]
   6859 //! author : Colin Dean : https://github.com/colindean
   6860 //! author : Mia Nordentoft Imperatori : https://github.com/miestasmia
   6861 //! comment : miestasmia corrected the translation by colindean
   6862 
   6863 hooks.defineLocale('eo', {
   6864     months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),
   6865     monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),
   6866     weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),
   6867     weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),
   6868     weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'),
   6869     longDateFormat : {
   6870         LT : 'HH:mm',
   6871         LTS : 'HH:mm:ss',
   6872         L : 'YYYY-MM-DD',
   6873         LL : 'D[-a de] MMMM, YYYY',
   6874         LLL : 'D[-a de] MMMM, YYYY HH:mm',
   6875         LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm'
   6876     },
   6877     meridiemParse: /[ap]\.t\.m/i,
   6878     isPM: function (input) {
   6879         return input.charAt(0).toLowerCase() === 'p';
   6880     },
   6881     meridiem : function (hours, minutes, isLower) {
   6882         if (hours > 11) {
   6883             return isLower ? 'p.t.m.' : 'P.T.M.';
   6884         } else {
   6885             return isLower ? 'a.t.m.' : 'A.T.M.';
   6886         }
   6887     },
   6888     calendar : {
   6889         sameDay : '[Hodiaŭ je] LT',
   6890         nextDay : '[Morgaŭ je] LT',
   6891         nextWeek : 'dddd [je] LT',
   6892         lastDay : '[Hieraŭ je] LT',
   6893         lastWeek : '[pasinta] dddd [je] LT',
   6894         sameElse : 'L'
   6895     },
   6896     relativeTime : {
   6897         future : 'post %s',
   6898         past : 'antaŭ %s',
   6899         s : 'sekundoj',
   6900         m : 'minuto',
   6901         mm : '%d minutoj',
   6902         h : 'horo',
   6903         hh : '%d horoj',
   6904         d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo
   6905         dd : '%d tagoj',
   6906         M : 'monato',
   6907         MM : '%d monatoj',
   6908         y : 'jaro',
   6909         yy : '%d jaroj'
   6910     },
   6911     dayOfMonthOrdinalParse: /\d{1,2}a/,
   6912     ordinal : '%da',
   6913     week : {
   6914         dow : 1, // Monday is the first day of the week.
   6915         doy : 7  // The week that contains Jan 1st is the first week of the year.
   6916     }
   6917 });
   6918 
   6919 //! moment.js locale configuration
   6920 //! locale : Spanish (Dominican Republic) [es-do]
   6921 
   6922 var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');
   6923 var monthsShort$1 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
   6924 
   6925 hooks.defineLocale('es-do', {
   6926     months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
   6927     monthsShort : function (m, format) {
   6928         if (!m) {
   6929             return monthsShortDot;
   6930         } else if (/-MMM-/.test(format)) {
   6931             return monthsShort$1[m.month()];
   6932         } else {
   6933             return monthsShortDot[m.month()];
   6934         }
   6935     },
   6936     monthsParseExact : true,
   6937     weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
   6938     weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
   6939     weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
   6940     weekdaysParseExact : true,
   6941     longDateFormat : {
   6942         LT : 'h:mm A',
   6943         LTS : 'h:mm:ss A',
   6944         L : 'DD/MM/YYYY',
   6945         LL : 'D [de] MMMM [de] YYYY',
   6946         LLL : 'D [de] MMMM [de] YYYY h:mm A',
   6947         LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'
   6948     },
   6949     calendar : {
   6950         sameDay : function () {
   6951             return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
   6952         },
   6953         nextDay : function () {
   6954             return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
   6955         },
   6956         nextWeek : function () {
   6957             return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
   6958         },
   6959         lastDay : function () {
   6960             return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
   6961         },
   6962         lastWeek : function () {
   6963             return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
   6964         },
   6965         sameElse : 'L'
   6966     },
   6967     relativeTime : {
   6968         future : 'en %s',
   6969         past : 'hace %s',
   6970         s : 'unos segundos',
   6971         m : 'un minuto',
   6972         mm : '%d minutos',
   6973         h : 'una hora',
   6974         hh : '%d horas',
   6975         d : 'un día',
   6976         dd : '%d días',
   6977         M : 'un mes',
   6978         MM : '%d meses',
   6979         y : 'un año',
   6980         yy : '%d años'
   6981     },
   6982     dayOfMonthOrdinalParse : /\d{1,2}º/,
   6983     ordinal : '%dº',
   6984     week : {
   6985         dow : 1, // Monday is the first day of the week.
   6986         doy : 4  // The week that contains Jan 4th is the first week of the year.
   6987     }
   6988 });
   6989 
   6990 //! moment.js locale configuration
   6991 //! locale : Spanish [es]
   6992 //! author : Julio Napurí : https://github.com/julionc
   6993 
   6994 var monthsShortDot$1 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');
   6995 var monthsShort$2 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
   6996 
   6997 hooks.defineLocale('es', {
   6998     months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
   6999     monthsShort : function (m, format) {
   7000         if (!m) {
   7001             return monthsShortDot$1;
   7002         } else if (/-MMM-/.test(format)) {
   7003             return monthsShort$2[m.month()];
   7004         } else {
   7005             return monthsShortDot$1[m.month()];
   7006         }
   7007     },
   7008     monthsParseExact : true,
   7009     weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
   7010     weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
   7011     weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
   7012     weekdaysParseExact : true,
   7013     longDateFormat : {
   7014         LT : 'H:mm',
   7015         LTS : 'H:mm:ss',
   7016         L : 'DD/MM/YYYY',
   7017         LL : 'D [de] MMMM [de] YYYY',
   7018         LLL : 'D [de] MMMM [de] YYYY H:mm',
   7019         LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
   7020     },
   7021     calendar : {
   7022         sameDay : function () {
   7023             return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
   7024         },
   7025         nextDay : function () {
   7026             return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
   7027         },
   7028         nextWeek : function () {
   7029             return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
   7030         },
   7031         lastDay : function () {
   7032             return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
   7033         },
   7034         lastWeek : function () {
   7035             return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
   7036         },
   7037         sameElse : 'L'
   7038     },
   7039     relativeTime : {
   7040         future : 'en %s',
   7041         past : 'hace %s',
   7042         s : 'unos segundos',
   7043         m : 'un minuto',
   7044         mm : '%d minutos',
   7045         h : 'una hora',
   7046         hh : '%d horas',
   7047         d : 'un día',
   7048         dd : '%d días',
   7049         M : 'un mes',
   7050         MM : '%d meses',
   7051         y : 'un año',
   7052         yy : '%d años'
   7053     },
   7054     dayOfMonthOrdinalParse : /\d{1,2}º/,
   7055     ordinal : '%dº',
   7056     week : {
   7057         dow : 1, // Monday is the first day of the week.
   7058         doy : 4  // The week that contains Jan 4th is the first week of the year.
   7059     }
   7060 });
   7061 
   7062 //! moment.js locale configuration
   7063 //! locale : Estonian [et]
   7064 //! author : Henry Kehlmann : https://github.com/madhenry
   7065 //! improvements : Illimar Tambek : https://github.com/ragulka
   7066 
   7067 function processRelativeTime$3(number, withoutSuffix, key, isFuture) {
   7068     var format = {
   7069         's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],
   7070         'm' : ['ühe minuti', 'üks minut'],
   7071         'mm': [number + ' minuti', number + ' minutit'],
   7072         'h' : ['ühe tunni', 'tund aega', 'üks tund'],
   7073         'hh': [number + ' tunni', number + ' tundi'],
   7074         'd' : ['ühe päeva', 'üks päev'],
   7075         'M' : ['kuu aja', 'kuu aega', 'üks kuu'],
   7076         'MM': [number + ' kuu', number + ' kuud'],
   7077         'y' : ['ühe aasta', 'aasta', 'üks aasta'],
   7078         'yy': [number + ' aasta', number + ' aastat']
   7079     };
   7080     if (withoutSuffix) {
   7081         return format[key][2] ? format[key][2] : format[key][1];
   7082     }
   7083     return isFuture ? format[key][0] : format[key][1];
   7084 }
   7085 
   7086 hooks.defineLocale('et', {
   7087     months        : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),
   7088     monthsShort   : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),
   7089     weekdays      : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),
   7090     weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),
   7091     weekdaysMin   : 'P_E_T_K_N_R_L'.split('_'),
   7092     longDateFormat : {
   7093         LT   : 'H:mm',
   7094         LTS : 'H:mm:ss',
   7095         L    : 'DD.MM.YYYY',
   7096         LL   : 'D. MMMM YYYY',
   7097         LLL  : 'D. MMMM YYYY H:mm',
   7098         LLLL : 'dddd, D. MMMM YYYY H:mm'
   7099     },
   7100     calendar : {
   7101         sameDay  : '[Täna,] LT',
   7102         nextDay  : '[Homme,] LT',
   7103         nextWeek : '[Järgmine] dddd LT',
   7104         lastDay  : '[Eile,] LT',
   7105         lastWeek : '[Eelmine] dddd LT',
   7106         sameElse : 'L'
   7107     },
   7108     relativeTime : {
   7109         future : '%s pärast',
   7110         past   : '%s tagasi',
   7111         s      : processRelativeTime$3,
   7112         m      : processRelativeTime$3,
   7113         mm     : processRelativeTime$3,
   7114         h      : processRelativeTime$3,
   7115         hh     : processRelativeTime$3,
   7116         d      : processRelativeTime$3,
   7117         dd     : '%d päeva',
   7118         M      : processRelativeTime$3,
   7119         MM     : processRelativeTime$3,
   7120         y      : processRelativeTime$3,
   7121         yy     : processRelativeTime$3
   7122     },
   7123     dayOfMonthOrdinalParse: /\d{1,2}\./,
   7124     ordinal : '%d.',
   7125     week : {
   7126         dow : 1, // Monday is the first day of the week.
   7127         doy : 4  // The week that contains Jan 4th is the first week of the year.
   7128     }
   7129 });
   7130 
   7131 //! moment.js locale configuration
   7132 //! locale : Basque [eu]
   7133 //! author : Eneko Illarramendi : https://github.com/eillarra
   7134 
   7135 hooks.defineLocale('eu', {
   7136     months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),
   7137     monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),
   7138     monthsParseExact : true,
   7139     weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),
   7140     weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),
   7141     weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),
   7142     weekdaysParseExact : true,
   7143     longDateFormat : {
   7144         LT : 'HH:mm',
   7145         LTS : 'HH:mm:ss',
   7146         L : 'YYYY-MM-DD',
   7147         LL : 'YYYY[ko] MMMM[ren] D[a]',
   7148         LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',
   7149         LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
   7150         l : 'YYYY-M-D',
   7151         ll : 'YYYY[ko] MMM D[a]',
   7152         lll : 'YYYY[ko] MMM D[a] HH:mm',
   7153         llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'
   7154     },
   7155     calendar : {
   7156         sameDay : '[gaur] LT[etan]',
   7157         nextDay : '[bihar] LT[etan]',
   7158         nextWeek : 'dddd LT[etan]',
   7159         lastDay : '[atzo] LT[etan]',
   7160         lastWeek : '[aurreko] dddd LT[etan]',
   7161         sameElse : 'L'
   7162     },
   7163     relativeTime : {
   7164         future : '%s barru',
   7165         past : 'duela %s',
   7166         s : 'segundo batzuk',
   7167         m : 'minutu bat',
   7168         mm : '%d minutu',
   7169         h : 'ordu bat',
   7170         hh : '%d ordu',
   7171         d : 'egun bat',
   7172         dd : '%d egun',
   7173         M : 'hilabete bat',
   7174         MM : '%d hilabete',
   7175         y : 'urte bat',
   7176         yy : '%d urte'
   7177     },
   7178     dayOfMonthOrdinalParse: /\d{1,2}\./,
   7179     ordinal : '%d.',
   7180     week : {
   7181         dow : 1, // Monday is the first day of the week.
   7182         doy : 7  // The week that contains Jan 1st is the first week of the year.
   7183     }
   7184 });
   7185 
   7186 //! moment.js locale configuration
   7187 //! locale : Persian [fa]
   7188 //! author : Ebrahim Byagowi : https://github.com/ebraminio
   7189 
   7190 var symbolMap$5 = {
   7191     '1': '۱',
   7192     '2': '۲',
   7193     '3': '۳',
   7194     '4': '۴',
   7195     '5': '۵',
   7196     '6': '۶',
   7197     '7': '۷',
   7198     '8': '۸',
   7199     '9': '۹',
   7200     '0': '۰'
   7201 };
   7202 var numberMap$4 = {
   7203     '۱': '1',
   7204     '۲': '2',
   7205     '۳': '3',
   7206     '۴': '4',
   7207     '۵': '5',
   7208     '۶': '6',
   7209     '۷': '7',
   7210     '۸': '8',
   7211     '۹': '9',
   7212     '۰': '0'
   7213 };
   7214 
   7215 hooks.defineLocale('fa', {
   7216     months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
   7217     monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
   7218     weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
   7219     weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
   7220     weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),
   7221     weekdaysParseExact : true,
   7222     longDateFormat : {
   7223         LT : 'HH:mm',
   7224         LTS : 'HH:mm:ss',
   7225         L : 'DD/MM/YYYY',
   7226         LL : 'D MMMM YYYY',
   7227         LLL : 'D MMMM YYYY HH:mm',
   7228         LLLL : 'dddd, D MMMM YYYY HH:mm'
   7229     },
   7230     meridiemParse: /قبل از ظهر|بعد از ظهر/,
   7231     isPM: function (input) {
   7232         return /بعد از ظهر/.test(input);
   7233     },
   7234     meridiem : function (hour, minute, isLower) {
   7235         if (hour < 12) {
   7236             return 'قبل از ظهر';
   7237         } else {
   7238             return 'بعد از ظهر';
   7239         }
   7240     },
   7241     calendar : {
   7242         sameDay : '[امروز ساعت] LT',
   7243         nextDay : '[فردا ساعت] LT',
   7244         nextWeek : 'dddd [ساعت] LT',
   7245         lastDay : '[دیروز ساعت] LT',
   7246         lastWeek : 'dddd [پیش] [ساعت] LT',
   7247         sameElse : 'L'
   7248     },
   7249     relativeTime : {
   7250         future : 'در %s',
   7251         past : '%s پیش',
   7252         s : 'چند ثانیه',
   7253         m : 'یک دقیقه',
   7254         mm : '%d دقیقه',
   7255         h : 'یک ساعت',
   7256         hh : '%d ساعت',
   7257         d : 'یک روز',
   7258         dd : '%d روز',
   7259         M : 'یک ماه',
   7260         MM : '%d ماه',
   7261         y : 'یک سال',
   7262         yy : '%d سال'
   7263     },
   7264     preparse: function (string) {
   7265         return string.replace(/[۰-۹]/g, function (match) {
   7266             return numberMap$4[match];
   7267         }).replace(/،/g, ',');
   7268     },
   7269     postformat: function (string) {
   7270         return string.replace(/\d/g, function (match) {
   7271             return symbolMap$5[match];
   7272         }).replace(/,/g, '،');
   7273     },
   7274     dayOfMonthOrdinalParse: /\d{1,2}م/,
   7275     ordinal : '%dم',
   7276     week : {
   7277         dow : 6, // Saturday is the first day of the week.
   7278         doy : 12 // The week that contains Jan 1st is the first week of the year.
   7279     }
   7280 });
   7281 
   7282 //! moment.js locale configuration
   7283 //! locale : Finnish [fi]
   7284 //! author : Tarmo Aidantausta : https://github.com/bleadof
   7285 
   7286 var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' ');
   7287 var numbersFuture = [
   7288         'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',
   7289         numbersPast[7], numbersPast[8], numbersPast[9]
   7290     ];
   7291 function translate$2(number, withoutSuffix, key, isFuture) {
   7292     var result = '';
   7293     switch (key) {
   7294         case 's':
   7295             return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
   7296         case 'm':
   7297             return isFuture ? 'minuutin' : 'minuutti';
   7298         case 'mm':
   7299             result = isFuture ? 'minuutin' : 'minuuttia';
   7300             break;
   7301         case 'h':
   7302             return isFuture ? 'tunnin' : 'tunti';
   7303         case 'hh':
   7304             result = isFuture ? 'tunnin' : 'tuntia';
   7305             break;
   7306         case 'd':
   7307             return isFuture ? 'päivän' : 'päivä';
   7308         case 'dd':
   7309             result = isFuture ? 'päivän' : 'päivää';
   7310             break;
   7311         case 'M':
   7312             return isFuture ? 'kuukauden' : 'kuukausi';
   7313         case 'MM':
   7314             result = isFuture ? 'kuukauden' : 'kuukautta';
   7315             break;
   7316         case 'y':
   7317             return isFuture ? 'vuoden' : 'vuosi';
   7318         case 'yy':
   7319             result = isFuture ? 'vuoden' : 'vuotta';
   7320             break;
   7321     }
   7322     result = verbalNumber(number, isFuture) + ' ' + result;
   7323     return result;
   7324 }
   7325 function verbalNumber(number, isFuture) {
   7326     return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;
   7327 }
   7328 
   7329 hooks.defineLocale('fi', {
   7330     months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),
   7331     monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),
   7332     weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),
   7333     weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),
   7334     weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),
   7335     longDateFormat : {
   7336         LT : 'HH.mm',
   7337         LTS : 'HH.mm.ss',
   7338         L : 'DD.MM.YYYY',
   7339         LL : 'Do MMMM[ta] YYYY',
   7340         LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',
   7341         LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
   7342         l : 'D.M.YYYY',
   7343         ll : 'Do MMM YYYY',
   7344         lll : 'Do MMM YYYY, [klo] HH.mm',
   7345         llll : 'ddd, Do MMM YYYY, [klo] HH.mm'
   7346     },
   7347     calendar : {
   7348         sameDay : '[tänään] [klo] LT',
   7349         nextDay : '[huomenna] [klo] LT',
   7350         nextWeek : 'dddd [klo] LT',
   7351         lastDay : '[eilen] [klo] LT',
   7352         lastWeek : '[viime] dddd[na] [klo] LT',
   7353         sameElse : 'L'
   7354     },
   7355     relativeTime : {
   7356         future : '%s päästä',
   7357         past : '%s sitten',
   7358         s : translate$2,
   7359         m : translate$2,
   7360         mm : translate$2,
   7361         h : translate$2,
   7362         hh : translate$2,
   7363         d : translate$2,
   7364         dd : translate$2,
   7365         M : translate$2,
   7366         MM : translate$2,
   7367         y : translate$2,
   7368         yy : translate$2
   7369     },
   7370     dayOfMonthOrdinalParse: /\d{1,2}\./,
   7371     ordinal : '%d.',
   7372     week : {
   7373         dow : 1, // Monday is the first day of the week.
   7374         doy : 4  // The week that contains Jan 4th is the first week of the year.
   7375     }
   7376 });
   7377 
   7378 //! moment.js locale configuration
   7379 //! locale : Faroese [fo]
   7380 //! author : Ragnar Johannesen : https://github.com/ragnar123
   7381 
   7382 hooks.defineLocale('fo', {
   7383     months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
   7384     monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
   7385     weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),
   7386     weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),
   7387     weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),
   7388     longDateFormat : {
   7389         LT : 'HH:mm',
   7390         LTS : 'HH:mm:ss',
   7391         L : 'DD/MM/YYYY',
   7392         LL : 'D MMMM YYYY',
   7393         LLL : 'D MMMM YYYY HH:mm',
   7394         LLLL : 'dddd D. MMMM, YYYY HH:mm'
   7395     },
   7396     calendar : {
   7397         sameDay : '[Í dag kl.] LT',
   7398         nextDay : '[Í morgin kl.] LT',
   7399         nextWeek : 'dddd [kl.] LT',
   7400         lastDay : '[Í gjár kl.] LT',
   7401         lastWeek : '[síðstu] dddd [kl] LT',
   7402         sameElse : 'L'
   7403     },
   7404     relativeTime : {
   7405         future : 'um %s',
   7406         past : '%s síðani',
   7407         s : 'fá sekund',
   7408         m : 'ein minutt',
   7409         mm : '%d minuttir',
   7410         h : 'ein tími',
   7411         hh : '%d tímar',
   7412         d : 'ein dagur',
   7413         dd : '%d dagar',
   7414         M : 'ein mánaði',
   7415         MM : '%d mánaðir',
   7416         y : 'eitt ár',
   7417         yy : '%d ár'
   7418     },
   7419     dayOfMonthOrdinalParse: /\d{1,2}\./,
   7420     ordinal : '%d.',
   7421     week : {
   7422         dow : 1, // Monday is the first day of the week.
   7423         doy : 4  // The week that contains Jan 4th is the first week of the year.
   7424     }
   7425 });
   7426 
   7427 //! moment.js locale configuration
   7428 //! locale : French (Canada) [fr-ca]
   7429 //! author : Jonathan Abourbih : https://github.com/jonbca
   7430 
   7431 hooks.defineLocale('fr-ca', {
   7432     months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
   7433     monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
   7434     monthsParseExact : true,
   7435     weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
   7436     weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
   7437     weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
   7438     weekdaysParseExact : true,
   7439     longDateFormat : {
   7440         LT : 'HH:mm',
   7441         LTS : 'HH:mm:ss',
   7442         L : 'YYYY-MM-DD',
   7443         LL : 'D MMMM YYYY',
   7444         LLL : 'D MMMM YYYY HH:mm',
   7445         LLLL : 'dddd D MMMM YYYY HH:mm'
   7446     },
   7447     calendar : {
   7448         sameDay : '[Aujourd’hui à] LT',
   7449         nextDay : '[Demain à] LT',
   7450         nextWeek : 'dddd [à] LT',
   7451         lastDay : '[Hier à] LT',
   7452         lastWeek : 'dddd [dernier à] LT',
   7453         sameElse : 'L'
   7454     },
   7455     relativeTime : {
   7456         future : 'dans %s',
   7457         past : 'il y a %s',
   7458         s : 'quelques secondes',
   7459         m : 'une minute',
   7460         mm : '%d minutes',
   7461         h : 'une heure',
   7462         hh : '%d heures',
   7463         d : 'un jour',
   7464         dd : '%d jours',
   7465         M : 'un mois',
   7466         MM : '%d mois',
   7467         y : 'un an',
   7468         yy : '%d ans'
   7469     },
   7470     dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
   7471     ordinal : function (number, period) {
   7472         switch (period) {
   7473             // Words with masculine grammatical gender: mois, trimestre, jour
   7474             default:
   7475             case 'M':
   7476             case 'Q':
   7477             case 'D':
   7478             case 'DDD':
   7479             case 'd':
   7480                 return number + (number === 1 ? 'er' : 'e');
   7481 
   7482             // Words with feminine grammatical gender: semaine
   7483             case 'w':
   7484             case 'W':
   7485                 return number + (number === 1 ? 're' : 'e');
   7486         }
   7487     }
   7488 });
   7489 
   7490 //! moment.js locale configuration
   7491 //! locale : French (Switzerland) [fr-ch]
   7492 //! author : Gaspard Bucher : https://github.com/gaspard
   7493 
   7494 hooks.defineLocale('fr-ch', {
   7495     months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
   7496     monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
   7497     monthsParseExact : true,
   7498     weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
   7499     weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
   7500     weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
   7501     weekdaysParseExact : true,
   7502     longDateFormat : {
   7503         LT : 'HH:mm',
   7504         LTS : 'HH:mm:ss',
   7505         L : 'DD.MM.YYYY',
   7506         LL : 'D MMMM YYYY',
   7507         LLL : 'D MMMM YYYY HH:mm',
   7508         LLLL : 'dddd D MMMM YYYY HH:mm'
   7509     },
   7510     calendar : {
   7511         sameDay : '[Aujourd’hui à] LT',
   7512         nextDay : '[Demain à] LT',
   7513         nextWeek : 'dddd [à] LT',
   7514         lastDay : '[Hier à] LT',
   7515         lastWeek : 'dddd [dernier à] LT',
   7516         sameElse : 'L'
   7517     },
   7518     relativeTime : {
   7519         future : 'dans %s',
   7520         past : 'il y a %s',
   7521         s : 'quelques secondes',
   7522         m : 'une minute',
   7523         mm : '%d minutes',
   7524         h : 'une heure',
   7525         hh : '%d heures',
   7526         d : 'un jour',
   7527         dd : '%d jours',
   7528         M : 'un mois',
   7529         MM : '%d mois',
   7530         y : 'un an',
   7531         yy : '%d ans'
   7532     },
   7533     dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
   7534     ordinal : function (number, period) {
   7535         switch (period) {
   7536             // Words with masculine grammatical gender: mois, trimestre, jour
   7537             default:
   7538             case 'M':
   7539             case 'Q':
   7540             case 'D':
   7541             case 'DDD':
   7542             case 'd':
   7543                 return number + (number === 1 ? 'er' : 'e');
   7544 
   7545             // Words with feminine grammatical gender: semaine
   7546             case 'w':
   7547             case 'W':
   7548                 return number + (number === 1 ? 're' : 'e');
   7549         }
   7550     },
   7551     week : {
   7552         dow : 1, // Monday is the first day of the week.
   7553         doy : 4  // The week that contains Jan 4th is the first week of the year.
   7554     }
   7555 });
   7556 
   7557 //! moment.js locale configuration
   7558 //! locale : French [fr]
   7559 //! author : John Fischer : https://github.com/jfroffice
   7560 
   7561 hooks.defineLocale('fr', {
   7562     months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
   7563     monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
   7564     monthsParseExact : true,
   7565     weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
   7566     weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
   7567     weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
   7568     weekdaysParseExact : true,
   7569     longDateFormat : {
   7570         LT : 'HH:mm',
   7571         LTS : 'HH:mm:ss',
   7572         L : 'DD/MM/YYYY',
   7573         LL : 'D MMMM YYYY',
   7574         LLL : 'D MMMM YYYY HH:mm',
   7575         LLLL : 'dddd D MMMM YYYY HH:mm'
   7576     },
   7577     calendar : {
   7578         sameDay : '[Aujourd’hui à] LT',
   7579         nextDay : '[Demain à] LT',
   7580         nextWeek : 'dddd [à] LT',
   7581         lastDay : '[Hier à] LT',
   7582         lastWeek : 'dddd [dernier à] LT',
   7583         sameElse : 'L'
   7584     },
   7585     relativeTime : {
   7586         future : 'dans %s',
   7587         past : 'il y a %s',
   7588         s : 'quelques secondes',
   7589         m : 'une minute',
   7590         mm : '%d minutes',
   7591         h : 'une heure',
   7592         hh : '%d heures',
   7593         d : 'un jour',
   7594         dd : '%d jours',
   7595         M : 'un mois',
   7596         MM : '%d mois',
   7597         y : 'un an',
   7598         yy : '%d ans'
   7599     },
   7600     dayOfMonthOrdinalParse: /\d{1,2}(er|)/,
   7601     ordinal : function (number, period) {
   7602         switch (period) {
   7603             // TODO: Return 'e' when day of month > 1. Move this case inside
   7604             // block for masculine words below.
   7605             // See https://github.com/moment/moment/issues/3375
   7606             case 'D':
   7607                 return number + (number === 1 ? 'er' : '');
   7608 
   7609             // Words with masculine grammatical gender: mois, trimestre, jour
   7610             default:
   7611             case 'M':
   7612             case 'Q':
   7613             case 'DDD':
   7614             case 'd':
   7615                 return number + (number === 1 ? 'er' : 'e');
   7616 
   7617             // Words with feminine grammatical gender: semaine
   7618             case 'w':
   7619             case 'W':
   7620                 return number + (number === 1 ? 're' : 'e');
   7621         }
   7622     },
   7623     week : {
   7624         dow : 1, // Monday is the first day of the week.
   7625         doy : 4  // The week that contains Jan 4th is the first week of the year.
   7626     }
   7627 });
   7628 
   7629 //! moment.js locale configuration
   7630 //! locale : Frisian [fy]
   7631 //! author : Robin van der Vliet : https://github.com/robin0van0der0v
   7632 
   7633 var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_');
   7634 var monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');
   7635 
   7636 hooks.defineLocale('fy', {
   7637     months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),
   7638     monthsShort : function (m, format) {
   7639         if (!m) {
   7640             return monthsShortWithDots;
   7641         } else if (/-MMM-/.test(format)) {
   7642             return monthsShortWithoutDots[m.month()];
   7643         } else {
   7644             return monthsShortWithDots[m.month()];
   7645         }
   7646     },
   7647     monthsParseExact : true,
   7648     weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),
   7649     weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),
   7650     weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
   7651     weekdaysParseExact : true,
   7652     longDateFormat : {
   7653         LT : 'HH:mm',
   7654         LTS : 'HH:mm:ss',
   7655         L : 'DD-MM-YYYY',
   7656         LL : 'D MMMM YYYY',
   7657         LLL : 'D MMMM YYYY HH:mm',
   7658         LLLL : 'dddd D MMMM YYYY HH:mm'
   7659     },
   7660     calendar : {
   7661         sameDay: '[hjoed om] LT',
   7662         nextDay: '[moarn om] LT',
   7663         nextWeek: 'dddd [om] LT',
   7664         lastDay: '[juster om] LT',
   7665         lastWeek: '[ôfrûne] dddd [om] LT',
   7666         sameElse: 'L'
   7667     },
   7668     relativeTime : {
   7669         future : 'oer %s',
   7670         past : '%s lyn',
   7671         s : 'in pear sekonden',
   7672         m : 'ien minút',
   7673         mm : '%d minuten',
   7674         h : 'ien oere',
   7675         hh : '%d oeren',
   7676         d : 'ien dei',
   7677         dd : '%d dagen',
   7678         M : 'ien moanne',
   7679         MM : '%d moannen',
   7680         y : 'ien jier',
   7681         yy : '%d jierren'
   7682     },
   7683     dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
   7684     ordinal : function (number) {
   7685         return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
   7686     },
   7687     week : {
   7688         dow : 1, // Monday is the first day of the week.
   7689         doy : 4  // The week that contains Jan 4th is the first week of the year.
   7690     }
   7691 });
   7692 
   7693 //! moment.js locale configuration
   7694 //! locale : Scottish Gaelic [gd]
   7695 //! author : Jon Ashdown : https://github.com/jonashdown
   7696 
   7697 var months$5 = [
   7698     'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'
   7699 ];
   7700 
   7701 var monthsShort$3 = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];
   7702 
   7703 var weekdays$1 = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];
   7704 
   7705 var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];
   7706 
   7707 var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];
   7708 
   7709 hooks.defineLocale('gd', {
   7710     months : months$5,
   7711     monthsShort : monthsShort$3,
   7712     monthsParseExact : true,
   7713     weekdays : weekdays$1,
   7714     weekdaysShort : weekdaysShort,
   7715     weekdaysMin : weekdaysMin,
   7716     longDateFormat : {
   7717         LT : 'HH:mm',
   7718         LTS : 'HH:mm:ss',
   7719         L : 'DD/MM/YYYY',
   7720         LL : 'D MMMM YYYY',
   7721         LLL : 'D MMMM YYYY HH:mm',
   7722         LLLL : 'dddd, D MMMM YYYY HH:mm'
   7723     },
   7724     calendar : {
   7725         sameDay : '[An-diugh aig] LT',
   7726         nextDay : '[A-màireach aig] LT',
   7727         nextWeek : 'dddd [aig] LT',
   7728         lastDay : '[An-dè aig] LT',
   7729         lastWeek : 'dddd [seo chaidh] [aig] LT',
   7730         sameElse : 'L'
   7731     },
   7732     relativeTime : {
   7733         future : 'ann an %s',
   7734         past : 'bho chionn %s',
   7735         s : 'beagan diogan',
   7736         m : 'mionaid',
   7737         mm : '%d mionaidean',
   7738         h : 'uair',
   7739         hh : '%d uairean',
   7740         d : 'latha',
   7741         dd : '%d latha',
   7742         M : 'mìos',
   7743         MM : '%d mìosan',
   7744         y : 'bliadhna',
   7745         yy : '%d bliadhna'
   7746     },
   7747     dayOfMonthOrdinalParse : /\d{1,2}(d|na|mh)/,
   7748     ordinal : function (number) {
   7749         var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
   7750         return number + output;
   7751     },
   7752     week : {
   7753         dow : 1, // Monday is the first day of the week.
   7754         doy : 4  // The week that contains Jan 4th is the first week of the year.
   7755     }
   7756 });
   7757 
   7758 //! moment.js locale configuration
   7759 //! locale : Galician [gl]
   7760 //! author : Juan G. Hurtado : https://github.com/juanghurtado
   7761 
   7762 hooks.defineLocale('gl', {
   7763     months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),
   7764     monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),
   7765     monthsParseExact: true,
   7766     weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),
   7767     weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),
   7768     weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),
   7769     weekdaysParseExact : true,
   7770     longDateFormat : {
   7771         LT : 'H:mm',
   7772         LTS : 'H:mm:ss',
   7773         L : 'DD/MM/YYYY',
   7774         LL : 'D [de] MMMM [de] YYYY',
   7775         LLL : 'D [de] MMMM [de] YYYY H:mm',
   7776         LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
   7777     },
   7778     calendar : {
   7779         sameDay : function () {
   7780             return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
   7781         },
   7782         nextDay : function () {
   7783             return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
   7784         },
   7785         nextWeek : function () {
   7786             return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
   7787         },
   7788         lastDay : function () {
   7789             return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';
   7790         },
   7791         lastWeek : function () {
   7792             return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
   7793         },
   7794         sameElse : 'L'
   7795     },
   7796     relativeTime : {
   7797         future : function (str) {
   7798             if (str.indexOf('un') === 0) {
   7799                 return 'n' + str;
   7800             }
   7801             return 'en ' + str;
   7802         },
   7803         past : 'hai %s',
   7804         s : 'uns segundos',
   7805         m : 'un minuto',
   7806         mm : '%d minutos',
   7807         h : 'unha hora',
   7808         hh : '%d horas',
   7809         d : 'un día',
   7810         dd : '%d días',
   7811         M : 'un mes',
   7812         MM : '%d meses',
   7813         y : 'un ano',
   7814         yy : '%d anos'
   7815     },
   7816     dayOfMonthOrdinalParse : /\d{1,2}º/,
   7817     ordinal : '%dº',
   7818     week : {
   7819         dow : 1, // Monday is the first day of the week.
   7820         doy : 4  // The week that contains Jan 4th is the first week of the year.
   7821     }
   7822 });
   7823 
   7824 //! moment.js locale configuration
   7825 //! locale : Konkani Latin script [gom-latn]
   7826 //! author : The Discoverer : https://github.com/WikiDiscoverer
   7827 
   7828 function processRelativeTime$4(number, withoutSuffix, key, isFuture) {
   7829     var format = {
   7830         's': ['thodde secondanim', 'thodde second'],
   7831         'm': ['eka mintan', 'ek minute'],
   7832         'mm': [number + ' mintanim', number + ' mintam'],
   7833         'h': ['eka horan', 'ek hor'],
   7834         'hh': [number + ' horanim', number + ' hor'],
   7835         'd': ['eka disan', 'ek dis'],
   7836         'dd': [number + ' disanim', number + ' dis'],
   7837         'M': ['eka mhoinean', 'ek mhoino'],
   7838         'MM': [number + ' mhoineanim', number + ' mhoine'],
   7839         'y': ['eka vorsan', 'ek voros'],
   7840         'yy': [number + ' vorsanim', number + ' vorsam']
   7841     };
   7842     return withoutSuffix ? format[key][0] : format[key][1];
   7843 }
   7844 
   7845 hooks.defineLocale('gom-latn', {
   7846     months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),
   7847     monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),
   7848     monthsParseExact : true,
   7849     weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\'var'.split('_'),
   7850     weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),
   7851     weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),
   7852     weekdaysParseExact : true,
   7853     longDateFormat : {
   7854         LT : 'A h:mm [vazta]',
   7855         LTS : 'A h:mm:ss [vazta]',
   7856         L : 'DD-MM-YYYY',
   7857         LL : 'D MMMM YYYY',
   7858         LLL : 'D MMMM YYYY A h:mm [vazta]',
   7859         LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',
   7860         llll: 'ddd, D MMM YYYY, A h:mm [vazta]'
   7861     },
   7862     calendar : {
   7863         sameDay: '[Aiz] LT',
   7864         nextDay: '[Faleam] LT',
   7865         nextWeek: '[Ieta to] dddd[,] LT',
   7866         lastDay: '[Kal] LT',
   7867         lastWeek: '[Fatlo] dddd[,] LT',
   7868         sameElse: 'L'
   7869     },
   7870     relativeTime : {
   7871         future : '%s',
   7872         past : '%s adim',
   7873         s : processRelativeTime$4,
   7874         m : processRelativeTime$4,
   7875         mm : processRelativeTime$4,
   7876         h : processRelativeTime$4,
   7877         hh : processRelativeTime$4,
   7878         d : processRelativeTime$4,
   7879         dd : processRelativeTime$4,
   7880         M : processRelativeTime$4,
   7881         MM : processRelativeTime$4,
   7882         y : processRelativeTime$4,
   7883         yy : processRelativeTime$4
   7884     },
   7885     dayOfMonthOrdinalParse : /\d{1,2}(er)/,
   7886     ordinal : function (number, period) {
   7887         switch (period) {
   7888             // the ordinal 'er' only applies to day of the month
   7889             case 'D':
   7890                 return number + 'er';
   7891             default:
   7892             case 'M':
   7893             case 'Q':
   7894             case 'DDD':
   7895             case 'd':
   7896             case 'w':
   7897             case 'W':
   7898                 return number;
   7899         }
   7900     },
   7901     week : {
   7902         dow : 1, // Monday is the first day of the week.
   7903         doy : 4  // The week that contains Jan 4th is the first week of the year.
   7904     },
   7905     meridiemParse: /rati|sokalli|donparam|sanje/,
   7906     meridiemHour : function (hour, meridiem) {
   7907         if (hour === 12) {
   7908             hour = 0;
   7909         }
   7910         if (meridiem === 'rati') {
   7911             return hour < 4 ? hour : hour + 12;
   7912         } else if (meridiem === 'sokalli') {
   7913             return hour;
   7914         } else if (meridiem === 'donparam') {
   7915             return hour > 12 ? hour : hour + 12;
   7916         } else if (meridiem === 'sanje') {
   7917             return hour + 12;
   7918         }
   7919     },
   7920     meridiem : function (hour, minute, isLower) {
   7921         if (hour < 4) {
   7922             return 'rati';
   7923         } else if (hour < 12) {
   7924             return 'sokalli';
   7925         } else if (hour < 16) {
   7926             return 'donparam';
   7927         } else if (hour < 20) {
   7928             return 'sanje';
   7929         } else {
   7930             return 'rati';
   7931         }
   7932     }
   7933 });
   7934 
   7935 //! moment.js locale configuration
   7936 //! locale : Hebrew [he]
   7937 //! author : Tomer Cohen : https://github.com/tomer
   7938 //! author : Moshe Simantov : https://github.com/DevelopmentIL
   7939 //! author : Tal Ater : https://github.com/TalAter
   7940 
   7941 hooks.defineLocale('he', {
   7942     months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),
   7943     monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),
   7944     weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
   7945     weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),
   7946     weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),
   7947     longDateFormat : {
   7948         LT : 'HH:mm',
   7949         LTS : 'HH:mm:ss',
   7950         L : 'DD/MM/YYYY',
   7951         LL : 'D [ב]MMMM YYYY',
   7952         LLL : 'D [ב]MMMM YYYY HH:mm',
   7953         LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',
   7954         l : 'D/M/YYYY',
   7955         ll : 'D MMM YYYY',
   7956         lll : 'D MMM YYYY HH:mm',
   7957         llll : 'ddd, D MMM YYYY HH:mm'
   7958     },
   7959     calendar : {
   7960         sameDay : '[היום ב־]LT',
   7961         nextDay : '[מחר ב־]LT',
   7962         nextWeek : 'dddd [בשעה] LT',
   7963         lastDay : '[אתמול ב־]LT',
   7964         lastWeek : '[ביום] dddd [האחרון בשעה] LT',
   7965         sameElse : 'L'
   7966     },
   7967     relativeTime : {
   7968         future : 'בעוד %s',
   7969         past : 'לפני %s',
   7970         s : 'מספר שניות',
   7971         m : 'דקה',
   7972         mm : '%d דקות',
   7973         h : 'שעה',
   7974         hh : function (number) {
   7975             if (number === 2) {
   7976                 return 'שעתיים';
   7977             }
   7978             return number + ' שעות';
   7979         },
   7980         d : 'יום',
   7981         dd : function (number) {
   7982             if (number === 2) {
   7983                 return 'יומיים';
   7984             }
   7985             return number + ' ימים';
   7986         },
   7987         M : 'חודש',
   7988         MM : function (number) {
   7989             if (number === 2) {
   7990                 return 'חודשיים';
   7991             }
   7992             return number + ' חודשים';
   7993         },
   7994         y : 'שנה',
   7995         yy : function (number) {
   7996             if (number === 2) {
   7997                 return 'שנתיים';
   7998             } else if (number % 10 === 0 && number !== 10) {
   7999                 return number + ' שנה';
   8000             }
   8001             return number + ' שנים';
   8002         }
   8003     },
   8004     meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,
   8005     isPM : function (input) {
   8006         return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input);
   8007     },
   8008     meridiem : function (hour, minute, isLower) {
   8009         if (hour < 5) {
   8010             return 'לפנות בוקר';
   8011         } else if (hour < 10) {
   8012             return 'בבוקר';
   8013         } else if (hour < 12) {
   8014             return isLower ? 'לפנה"צ' : 'לפני הצהריים';
   8015         } else if (hour < 18) {
   8016             return isLower ? 'אחה"צ' : 'אחרי הצהריים';
   8017         } else {
   8018             return 'בערב';
   8019         }
   8020     }
   8021 });
   8022 
   8023 //! moment.js locale configuration
   8024 //! locale : Hindi [hi]
   8025 //! author : Mayank Singhal : https://github.com/mayanksinghal
   8026 
   8027 var symbolMap$6 = {
   8028     '1': '१',
   8029     '2': '२',
   8030     '3': '३',
   8031     '4': '४',
   8032     '5': '५',
   8033     '6': '६',
   8034     '7': '७',
   8035     '8': '८',
   8036     '9': '९',
   8037     '0': '०'
   8038 };
   8039 var numberMap$5 = {
   8040     '१': '1',
   8041     '२': '2',
   8042     '३': '3',
   8043     '४': '4',
   8044     '५': '5',
   8045     '६': '6',
   8046     '७': '7',
   8047     '८': '8',
   8048     '९': '9',
   8049     '०': '0'
   8050 };
   8051 
   8052 hooks.defineLocale('hi', {
   8053     months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),
   8054     monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),
   8055     monthsParseExact: true,
   8056     weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
   8057     weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),
   8058     weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
   8059     longDateFormat : {
   8060         LT : 'A h:mm बजे',
   8061         LTS : 'A h:mm:ss बजे',
   8062         L : 'DD/MM/YYYY',
   8063         LL : 'D MMMM YYYY',
   8064         LLL : 'D MMMM YYYY, A h:mm बजे',
   8065         LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'
   8066     },
   8067     calendar : {
   8068         sameDay : '[आज] LT',
   8069         nextDay : '[कल] LT',
   8070         nextWeek : 'dddd, LT',
   8071         lastDay : '[कल] LT',
   8072         lastWeek : '[पिछले] dddd, LT',
   8073         sameElse : 'L'
   8074     },
   8075     relativeTime : {
   8076         future : '%s में',
   8077         past : '%s पहले',
   8078         s : 'कुछ ही क्षण',
   8079         m : 'एक मिनट',
   8080         mm : '%d मिनट',
   8081         h : 'एक घंटा',
   8082         hh : '%d घंटे',
   8083         d : 'एक दिन',
   8084         dd : '%d दिन',
   8085         M : 'एक महीने',
   8086         MM : '%d महीने',
   8087         y : 'एक वर्ष',
   8088         yy : '%d वर्ष'
   8089     },
   8090     preparse: function (string) {
   8091         return string.replace(/[१२३४५६७८९०]/g, function (match) {
   8092             return numberMap$5[match];
   8093         });
   8094     },
   8095     postformat: function (string) {
   8096         return string.replace(/\d/g, function (match) {
   8097             return symbolMap$6[match];
   8098         });
   8099     },
   8100     // Hindi notation for meridiems are quite fuzzy in practice. While there exists
   8101     // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
   8102     meridiemParse: /रात|सुबह|दोपहर|शाम/,
   8103     meridiemHour : function (hour, meridiem) {
   8104         if (hour === 12) {
   8105             hour = 0;
   8106         }
   8107         if (meridiem === 'रात') {
   8108             return hour < 4 ? hour : hour + 12;
   8109         } else if (meridiem === 'सुबह') {
   8110             return hour;
   8111         } else if (meridiem === 'दोपहर') {
   8112             return hour >= 10 ? hour : hour + 12;
   8113         } else if (meridiem === 'शाम') {
   8114             return hour + 12;
   8115         }
   8116     },
   8117     meridiem : function (hour, minute, isLower) {
   8118         if (hour < 4) {
   8119             return 'रात';
   8120         } else if (hour < 10) {
   8121             return 'सुबह';
   8122         } else if (hour < 17) {
   8123             return 'दोपहर';
   8124         } else if (hour < 20) {
   8125             return 'शाम';
   8126         } else {
   8127             return 'रात';
   8128         }
   8129     },
   8130     week : {
   8131         dow : 0, // Sunday is the first day of the week.
   8132         doy : 6  // The week that contains Jan 1st is the first week of the year.
   8133     }
   8134 });
   8135 
   8136 //! moment.js locale configuration
   8137 //! locale : Croatian [hr]
   8138 //! author : Bojan Marković : https://github.com/bmarkovic
   8139 
   8140 function translate$3(number, withoutSuffix, key) {
   8141     var result = number + ' ';
   8142     switch (key) {
   8143         case 'm':
   8144             return withoutSuffix ? 'jedna minuta' : 'jedne minute';
   8145         case 'mm':
   8146             if (number === 1) {
   8147                 result += 'minuta';
   8148             } else if (number === 2 || number === 3 || number === 4) {
   8149                 result += 'minute';
   8150             } else {
   8151                 result += 'minuta';
   8152             }
   8153             return result;
   8154         case 'h':
   8155             return withoutSuffix ? 'jedan sat' : 'jednog sata';
   8156         case 'hh':
   8157             if (number === 1) {
   8158                 result += 'sat';
   8159             } else if (number === 2 || number === 3 || number === 4) {
   8160                 result += 'sata';
   8161             } else {
   8162                 result += 'sati';
   8163             }
   8164             return result;
   8165         case 'dd':
   8166             if (number === 1) {
   8167                 result += 'dan';
   8168             } else {
   8169                 result += 'dana';
   8170             }
   8171             return result;
   8172         case 'MM':
   8173             if (number === 1) {
   8174                 result += 'mjesec';
   8175             } else if (number === 2 || number === 3 || number === 4) {
   8176                 result += 'mjeseca';
   8177             } else {
   8178                 result += 'mjeseci';
   8179             }
   8180             return result;
   8181         case 'yy':
   8182             if (number === 1) {
   8183                 result += 'godina';
   8184             } else if (number === 2 || number === 3 || number === 4) {
   8185                 result += 'godine';
   8186             } else {
   8187                 result += 'godina';
   8188             }
   8189             return result;
   8190     }
   8191 }
   8192 
   8193 hooks.defineLocale('hr', {
   8194     months : {
   8195         format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),
   8196         standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')
   8197     },
   8198     monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),
   8199     monthsParseExact: true,
   8200     weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
   8201     weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
   8202     weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
   8203     weekdaysParseExact : true,
   8204     longDateFormat : {
   8205         LT : 'H:mm',
   8206         LTS : 'H:mm:ss',
   8207         L : 'DD.MM.YYYY',
   8208         LL : 'D. MMMM YYYY',
   8209         LLL : 'D. MMMM YYYY H:mm',
   8210         LLLL : 'dddd, D. MMMM YYYY H:mm'
   8211     },
   8212     calendar : {
   8213         sameDay  : '[danas u] LT',
   8214         nextDay  : '[sutra u] LT',
   8215         nextWeek : function () {
   8216             switch (this.day()) {
   8217                 case 0:
   8218                     return '[u] [nedjelju] [u] LT';
   8219                 case 3:
   8220                     return '[u] [srijedu] [u] LT';
   8221                 case 6:
   8222                     return '[u] [subotu] [u] LT';
   8223                 case 1:
   8224                 case 2:
   8225                 case 4:
   8226                 case 5:
   8227                     return '[u] dddd [u] LT';
   8228             }
   8229         },
   8230         lastDay  : '[jučer u] LT',
   8231         lastWeek : function () {
   8232             switch (this.day()) {
   8233                 case 0:
   8234                 case 3:
   8235                     return '[prošlu] dddd [u] LT';
   8236                 case 6:
   8237                     return '[prošle] [subote] [u] LT';
   8238                 case 1:
   8239                 case 2:
   8240                 case 4:
   8241                 case 5:
   8242                     return '[prošli] dddd [u] LT';
   8243             }
   8244         },
   8245         sameElse : 'L'
   8246     },
   8247     relativeTime : {
   8248         future : 'za %s',
   8249         past   : 'prije %s',
   8250         s      : 'par sekundi',
   8251         m      : translate$3,
   8252         mm     : translate$3,
   8253         h      : translate$3,
   8254         hh     : translate$3,
   8255         d      : 'dan',
   8256         dd     : translate$3,
   8257         M      : 'mjesec',
   8258         MM     : translate$3,
   8259         y      : 'godinu',
   8260         yy     : translate$3
   8261     },
   8262     dayOfMonthOrdinalParse: /\d{1,2}\./,
   8263     ordinal : '%d.',
   8264     week : {
   8265         dow : 1, // Monday is the first day of the week.
   8266         doy : 7  // The week that contains Jan 1st is the first week of the year.
   8267     }
   8268 });
   8269 
   8270 //! moment.js locale configuration
   8271 //! locale : Hungarian [hu]
   8272 //! author : Adam Brunner : https://github.com/adambrunner
   8273 
   8274 var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');
   8275 function translate$4(number, withoutSuffix, key, isFuture) {
   8276     var num = number,
   8277         suffix;
   8278     switch (key) {
   8279         case 's':
   8280             return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';
   8281         case 'm':
   8282             return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
   8283         case 'mm':
   8284             return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
   8285         case 'h':
   8286             return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
   8287         case 'hh':
   8288             return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
   8289         case 'd':
   8290             return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
   8291         case 'dd':
   8292             return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
   8293         case 'M':
   8294             return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
   8295         case 'MM':
   8296             return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
   8297         case 'y':
   8298             return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
   8299         case 'yy':
   8300             return num + (isFuture || withoutSuffix ? ' év' : ' éve');
   8301     }
   8302     return '';
   8303 }
   8304 function week(isFuture) {
   8305     return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';
   8306 }
   8307 
   8308 hooks.defineLocale('hu', {
   8309     months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),
   8310     monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),
   8311     weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),
   8312     weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),
   8313     weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),
   8314     longDateFormat : {
   8315         LT : 'H:mm',
   8316         LTS : 'H:mm:ss',
   8317         L : 'YYYY.MM.DD.',
   8318         LL : 'YYYY. MMMM D.',
   8319         LLL : 'YYYY. MMMM D. H:mm',
   8320         LLLL : 'YYYY. MMMM D., dddd H:mm'
   8321     },
   8322     meridiemParse: /de|du/i,
   8323     isPM: function (input) {
   8324         return input.charAt(1).toLowerCase() === 'u';
   8325     },
   8326     meridiem : function (hours, minutes, isLower) {
   8327         if (hours < 12) {
   8328             return isLower === true ? 'de' : 'DE';
   8329         } else {
   8330             return isLower === true ? 'du' : 'DU';
   8331         }
   8332     },
   8333     calendar : {
   8334         sameDay : '[ma] LT[-kor]',
   8335         nextDay : '[holnap] LT[-kor]',
   8336         nextWeek : function () {
   8337             return week.call(this, true);
   8338         },
   8339         lastDay : '[tegnap] LT[-kor]',
   8340         lastWeek : function () {
   8341             return week.call(this, false);
   8342         },
   8343         sameElse : 'L'
   8344     },
   8345     relativeTime : {
   8346         future : '%s múlva',
   8347         past : '%s',
   8348         s : translate$4,
   8349         m : translate$4,
   8350         mm : translate$4,
   8351         h : translate$4,
   8352         hh : translate$4,
   8353         d : translate$4,
   8354         dd : translate$4,
   8355         M : translate$4,
   8356         MM : translate$4,
   8357         y : translate$4,
   8358         yy : translate$4
   8359     },
   8360     dayOfMonthOrdinalParse: /\d{1,2}\./,
   8361     ordinal : '%d.',
   8362     week : {
   8363         dow : 1, // Monday is the first day of the week.
   8364         doy : 4  // The week that contains Jan 4th is the first week of the year.
   8365     }
   8366 });
   8367 
   8368 //! moment.js locale configuration
   8369 //! locale : Armenian [hy-am]
   8370 //! author : Armendarabyan : https://github.com/armendarabyan
   8371 
   8372 hooks.defineLocale('hy-am', {
   8373     months : {
   8374         format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),
   8375         standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')
   8376     },
   8377     monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
   8378     weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),
   8379     weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
   8380     weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
   8381     longDateFormat : {
   8382         LT : 'HH:mm',
   8383         LTS : 'HH:mm:ss',
   8384         L : 'DD.MM.YYYY',
   8385         LL : 'D MMMM YYYY թ.',
   8386         LLL : 'D MMMM YYYY թ., HH:mm',
   8387         LLLL : 'dddd, D MMMM YYYY թ., HH:mm'
   8388     },
   8389     calendar : {
   8390         sameDay: '[այսօր] LT',
   8391         nextDay: '[վաղը] LT',
   8392         lastDay: '[երեկ] LT',
   8393         nextWeek: function () {
   8394             return 'dddd [օրը ժամը] LT';
   8395         },
   8396         lastWeek: function () {
   8397             return '[անցած] dddd [օրը ժամը] LT';
   8398         },
   8399         sameElse: 'L'
   8400     },
   8401     relativeTime : {
   8402         future : '%s հետո',
   8403         past : '%s առաջ',
   8404         s : 'մի քանի վայրկյան',
   8405         m : 'րոպե',
   8406         mm : '%d րոպե',
   8407         h : 'ժամ',
   8408         hh : '%d ժամ',
   8409         d : 'օր',
   8410         dd : '%d օր',
   8411         M : 'ամիս',
   8412         MM : '%d ամիս',
   8413         y : 'տարի',
   8414         yy : '%d տարի'
   8415     },
   8416     meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,
   8417     isPM: function (input) {
   8418         return /^(ցերեկվա|երեկոյան)$/.test(input);
   8419     },
   8420     meridiem : function (hour) {
   8421         if (hour < 4) {
   8422             return 'գիշերվա';
   8423         } else if (hour < 12) {
   8424             return 'առավոտվա';
   8425         } else if (hour < 17) {
   8426             return 'ցերեկվա';
   8427         } else {
   8428             return 'երեկոյան';
   8429         }
   8430     },
   8431     dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/,
   8432     ordinal: function (number, period) {
   8433         switch (period) {
   8434             case 'DDD':
   8435             case 'w':
   8436             case 'W':
   8437             case 'DDDo':
   8438                 if (number === 1) {
   8439                     return number + '-ին';
   8440                 }
   8441                 return number + '-րդ';
   8442             default:
   8443                 return number;
   8444         }
   8445     },
   8446     week : {
   8447         dow : 1, // Monday is the first day of the week.
   8448         doy : 7  // The week that contains Jan 1st is the first week of the year.
   8449     }
   8450 });
   8451 
   8452 //! moment.js locale configuration
   8453 //! locale : Indonesian [id]
   8454 //! author : Mohammad Satrio Utomo : https://github.com/tyok
   8455 //! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
   8456 
   8457 hooks.defineLocale('id', {
   8458     months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),
   8459     monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'),
   8460     weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
   8461     weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
   8462     weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
   8463     longDateFormat : {
   8464         LT : 'HH.mm',
   8465         LTS : 'HH.mm.ss',
   8466         L : 'DD/MM/YYYY',
   8467         LL : 'D MMMM YYYY',
   8468         LLL : 'D MMMM YYYY [pukul] HH.mm',
   8469         LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
   8470     },
   8471     meridiemParse: /pagi|siang|sore|malam/,
   8472     meridiemHour : function (hour, meridiem) {
   8473         if (hour === 12) {
   8474             hour = 0;
   8475         }
   8476         if (meridiem === 'pagi') {
   8477             return hour;
   8478         } else if (meridiem === 'siang') {
   8479             return hour >= 11 ? hour : hour + 12;
   8480         } else if (meridiem === 'sore' || meridiem === 'malam') {
   8481             return hour + 12;
   8482         }
   8483     },
   8484     meridiem : function (hours, minutes, isLower) {
   8485         if (hours < 11) {
   8486             return 'pagi';
   8487         } else if (hours < 15) {
   8488             return 'siang';
   8489         } else if (hours < 19) {
   8490             return 'sore';
   8491         } else {
   8492             return 'malam';
   8493         }
   8494     },
   8495     calendar : {
   8496         sameDay : '[Hari ini pukul] LT',
   8497         nextDay : '[Besok pukul] LT',
   8498         nextWeek : 'dddd [pukul] LT',
   8499         lastDay : '[Kemarin pukul] LT',
   8500         lastWeek : 'dddd [lalu pukul] LT',
   8501         sameElse : 'L'
   8502     },
   8503     relativeTime : {
   8504         future : 'dalam %s',
   8505         past : '%s yang lalu',
   8506         s : 'beberapa detik',
   8507         m : 'semenit',
   8508         mm : '%d menit',
   8509         h : 'sejam',
   8510         hh : '%d jam',
   8511         d : 'sehari',
   8512         dd : '%d hari',
   8513         M : 'sebulan',
   8514         MM : '%d bulan',
   8515         y : 'setahun',
   8516         yy : '%d tahun'
   8517     },
   8518     week : {
   8519         dow : 1, // Monday is the first day of the week.
   8520         doy : 7  // The week that contains Jan 1st is the first week of the year.
   8521     }
   8522 });
   8523 
   8524 //! moment.js locale configuration
   8525 //! locale : Icelandic [is]
   8526 //! author : Hinrik Örn Sigurðsson : https://github.com/hinrik
   8527 
   8528 function plural$2(n) {
   8529     if (n % 100 === 11) {
   8530         return true;
   8531     } else if (n % 10 === 1) {
   8532         return false;
   8533     }
   8534     return true;
   8535 }
   8536 function translate$5(number, withoutSuffix, key, isFuture) {
   8537     var result = number + ' ';
   8538     switch (key) {
   8539         case 's':
   8540             return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';
   8541         case 'm':
   8542             return withoutSuffix ? 'mínúta' : 'mínútu';
   8543         case 'mm':
   8544             if (plural$2(number)) {
   8545                 return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');
   8546             } else if (withoutSuffix) {
   8547                 return result + 'mínúta';
   8548             }
   8549             return result + 'mínútu';
   8550         case 'hh':
   8551             if (plural$2(number)) {
   8552                 return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
   8553             }
   8554             return result + 'klukkustund';
   8555         case 'd':
   8556             if (withoutSuffix) {
   8557                 return 'dagur';
   8558             }
   8559             return isFuture ? 'dag' : 'degi';
   8560         case 'dd':
   8561             if (plural$2(number)) {
   8562                 if (withoutSuffix) {
   8563                     return result + 'dagar';
   8564                 }
   8565                 return result + (isFuture ? 'daga' : 'dögum');
   8566             } else if (withoutSuffix) {
   8567                 return result + 'dagur';
   8568             }
   8569             return result + (isFuture ? 'dag' : 'degi');
   8570         case 'M':
   8571             if (withoutSuffix) {
   8572                 return 'mánuður';
   8573             }
   8574             return isFuture ? 'mánuð' : 'mánuði';
   8575         case 'MM':
   8576             if (plural$2(number)) {
   8577                 if (withoutSuffix) {
   8578                     return result + 'mánuðir';
   8579                 }
   8580                 return result + (isFuture ? 'mánuði' : 'mánuðum');
   8581             } else if (withoutSuffix) {
   8582                 return result + 'mánuður';
   8583             }
   8584             return result + (isFuture ? 'mánuð' : 'mánuði');
   8585         case 'y':
   8586             return withoutSuffix || isFuture ? 'ár' : 'ári';
   8587         case 'yy':
   8588             if (plural$2(number)) {
   8589                 return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
   8590             }
   8591             return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
   8592     }
   8593 }
   8594 
   8595 hooks.defineLocale('is', {
   8596     months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),
   8597     monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),
   8598     weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),
   8599     weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),
   8600     weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
   8601     longDateFormat : {
   8602         LT : 'H:mm',
   8603         LTS : 'H:mm:ss',
   8604         L : 'DD.MM.YYYY',
   8605         LL : 'D. MMMM YYYY',
   8606         LLL : 'D. MMMM YYYY [kl.] H:mm',
   8607         LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'
   8608     },
   8609     calendar : {
   8610         sameDay : '[í dag kl.] LT',
   8611         nextDay : '[á morgun kl.] LT',
   8612         nextWeek : 'dddd [kl.] LT',
   8613         lastDay : '[í gær kl.] LT',
   8614         lastWeek : '[síðasta] dddd [kl.] LT',
   8615         sameElse : 'L'
   8616     },
   8617     relativeTime : {
   8618         future : 'eftir %s',
   8619         past : 'fyrir %s síðan',
   8620         s : translate$5,
   8621         m : translate$5,
   8622         mm : translate$5,
   8623         h : 'klukkustund',
   8624         hh : translate$5,
   8625         d : translate$5,
   8626         dd : translate$5,
   8627         M : translate$5,
   8628         MM : translate$5,
   8629         y : translate$5,
   8630         yy : translate$5
   8631     },
   8632     dayOfMonthOrdinalParse: /\d{1,2}\./,
   8633     ordinal : '%d.',
   8634     week : {
   8635         dow : 1, // Monday is the first day of the week.
   8636         doy : 4  // The week that contains Jan 4th is the first week of the year.
   8637     }
   8638 });
   8639 
   8640 //! moment.js locale configuration
   8641 //! locale : Italian [it]
   8642 //! author : Lorenzo : https://github.com/aliem
   8643 //! author: Mattia Larentis: https://github.com/nostalgiaz
   8644 
   8645 hooks.defineLocale('it', {
   8646     months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),
   8647     monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
   8648     weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),
   8649     weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
   8650     weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),
   8651     longDateFormat : {
   8652         LT : 'HH:mm',
   8653         LTS : 'HH:mm:ss',
   8654         L : 'DD/MM/YYYY',
   8655         LL : 'D MMMM YYYY',
   8656         LLL : 'D MMMM YYYY HH:mm',
   8657         LLLL : 'dddd, D MMMM YYYY HH:mm'
   8658     },
   8659     calendar : {
   8660         sameDay: '[Oggi alle] LT',
   8661         nextDay: '[Domani alle] LT',
   8662         nextWeek: 'dddd [alle] LT',
   8663         lastDay: '[Ieri alle] LT',
   8664         lastWeek: function () {
   8665             switch (this.day()) {
   8666                 case 0:
   8667                     return '[la scorsa] dddd [alle] LT';
   8668                 default:
   8669                     return '[lo scorso] dddd [alle] LT';
   8670             }
   8671         },
   8672         sameElse: 'L'
   8673     },
   8674     relativeTime : {
   8675         future : function (s) {
   8676             return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;
   8677         },
   8678         past : '%s fa',
   8679         s : 'alcuni secondi',
   8680         m : 'un minuto',
   8681         mm : '%d minuti',
   8682         h : 'un\'ora',
   8683         hh : '%d ore',
   8684         d : 'un giorno',
   8685         dd : '%d giorni',
   8686         M : 'un mese',
   8687         MM : '%d mesi',
   8688         y : 'un anno',
   8689         yy : '%d anni'
   8690     },
   8691     dayOfMonthOrdinalParse : /\d{1,2}º/,
   8692     ordinal: '%dº',
   8693     week : {
   8694         dow : 1, // Monday is the first day of the week.
   8695         doy : 4  // The week that contains Jan 4th is the first week of the year.
   8696     }
   8697 });
   8698 
   8699 //! moment.js locale configuration
   8700 //! locale : Japanese [ja]
   8701 //! author : LI Long : https://github.com/baryon
   8702 
   8703 hooks.defineLocale('ja', {
   8704     months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
   8705     monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
   8706     weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
   8707     weekdaysShort : '日_月_火_水_木_金_土'.split('_'),
   8708     weekdaysMin : '日_月_火_水_木_金_土'.split('_'),
   8709     longDateFormat : {
   8710         LT : 'HH:mm',
   8711         LTS : 'HH:mm:ss',
   8712         L : 'YYYY/MM/DD',
   8713         LL : 'YYYY年M月D日',
   8714         LLL : 'YYYY年M月D日 HH:mm',
   8715         LLLL : 'YYYY年M月D日 HH:mm dddd',
   8716         l : 'YYYY/MM/DD',
   8717         ll : 'YYYY年M月D日',
   8718         lll : 'YYYY年M月D日 HH:mm',
   8719         llll : 'YYYY年M月D日 HH:mm dddd'
   8720     },
   8721     meridiemParse: /午前|午後/i,
   8722     isPM : function (input) {
   8723         return input === '午後';
   8724     },
   8725     meridiem : function (hour, minute, isLower) {
   8726         if (hour < 12) {
   8727             return '午前';
   8728         } else {
   8729             return '午後';
   8730         }
   8731     },
   8732     calendar : {
   8733         sameDay : '[今日] LT',
   8734         nextDay : '[明日] LT',
   8735         nextWeek : '[来週]dddd LT',
   8736         lastDay : '[昨日] LT',
   8737         lastWeek : '[前週]dddd LT',
   8738         sameElse : 'L'
   8739     },
   8740     dayOfMonthOrdinalParse : /\d{1,2}日/,
   8741     ordinal : function (number, period) {
   8742         switch (period) {
   8743             case 'd':
   8744             case 'D':
   8745             case 'DDD':
   8746                 return number + '日';
   8747             default:
   8748                 return number;
   8749         }
   8750     },
   8751     relativeTime : {
   8752         future : '%s後',
   8753         past : '%s前',
   8754         s : '数秒',
   8755         m : '1分',
   8756         mm : '%d分',
   8757         h : '1時間',
   8758         hh : '%d時間',
   8759         d : '1日',
   8760         dd : '%d日',
   8761         M : '1ヶ月',
   8762         MM : '%dヶ月',
   8763         y : '1年',
   8764         yy : '%d年'
   8765     }
   8766 });
   8767 
   8768 //! moment.js locale configuration
   8769 //! locale : Javanese [jv]
   8770 //! author : Rony Lantip : https://github.com/lantip
   8771 //! reference: http://jv.wikipedia.org/wiki/Basa_Jawa
   8772 
   8773 hooks.defineLocale('jv', {
   8774     months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),
   8775     monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
   8776     weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
   8777     weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
   8778     weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
   8779     longDateFormat : {
   8780         LT : 'HH.mm',
   8781         LTS : 'HH.mm.ss',
   8782         L : 'DD/MM/YYYY',
   8783         LL : 'D MMMM YYYY',
   8784         LLL : 'D MMMM YYYY [pukul] HH.mm',
   8785         LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
   8786     },
   8787     meridiemParse: /enjing|siyang|sonten|ndalu/,
   8788     meridiemHour : function (hour, meridiem) {
   8789         if (hour === 12) {
   8790             hour = 0;
   8791         }
   8792         if (meridiem === 'enjing') {
   8793             return hour;
   8794         } else if (meridiem === 'siyang') {
   8795             return hour >= 11 ? hour : hour + 12;
   8796         } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
   8797             return hour + 12;
   8798         }
   8799     },
   8800     meridiem : function (hours, minutes, isLower) {
   8801         if (hours < 11) {
   8802             return 'enjing';
   8803         } else if (hours < 15) {
   8804             return 'siyang';
   8805         } else if (hours < 19) {
   8806             return 'sonten';
   8807         } else {
   8808             return 'ndalu';
   8809         }
   8810     },
   8811     calendar : {
   8812         sameDay : '[Dinten puniko pukul] LT',
   8813         nextDay : '[Mbenjang pukul] LT',
   8814         nextWeek : 'dddd [pukul] LT',
   8815         lastDay : '[Kala wingi pukul] LT',
   8816         lastWeek : 'dddd [kepengker pukul] LT',
   8817         sameElse : 'L'
   8818     },
   8819     relativeTime : {
   8820         future : 'wonten ing %s',
   8821         past : '%s ingkang kepengker',
   8822         s : 'sawetawis detik',
   8823         m : 'setunggal menit',
   8824         mm : '%d menit',
   8825         h : 'setunggal jam',
   8826         hh : '%d jam',
   8827         d : 'sedinten',
   8828         dd : '%d dinten',
   8829         M : 'sewulan',
   8830         MM : '%d wulan',
   8831         y : 'setaun',
   8832         yy : '%d taun'
   8833     },
   8834     week : {
   8835         dow : 1, // Monday is the first day of the week.
   8836         doy : 7  // The week that contains Jan 1st is the first week of the year.
   8837     }
   8838 });
   8839 
   8840 //! moment.js locale configuration
   8841 //! locale : Georgian [ka]
   8842 //! author : Irakli Janiashvili : https://github.com/irakli-janiashvili
   8843 
   8844 hooks.defineLocale('ka', {
   8845     months : {
   8846         standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
   8847         format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')
   8848     },
   8849     monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
   8850     weekdays : {
   8851         standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
   8852         format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),
   8853         isFormat: /(წინა|შემდეგ)/
   8854     },
   8855     weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
   8856     weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
   8857     longDateFormat : {
   8858         LT : 'h:mm A',
   8859         LTS : 'h:mm:ss A',
   8860         L : 'DD/MM/YYYY',
   8861         LL : 'D MMMM YYYY',
   8862         LLL : 'D MMMM YYYY h:mm A',
   8863         LLLL : 'dddd, D MMMM YYYY h:mm A'
   8864     },
   8865     calendar : {
   8866         sameDay : '[დღეს] LT[-ზე]',
   8867         nextDay : '[ხვალ] LT[-ზე]',
   8868         lastDay : '[გუშინ] LT[-ზე]',
   8869         nextWeek : '[შემდეგ] dddd LT[-ზე]',
   8870         lastWeek : '[წინა] dddd LT-ზე',
   8871         sameElse : 'L'
   8872     },
   8873     relativeTime : {
   8874         future : function (s) {
   8875             return (/(წამი|წუთი|საათი|წელი)/).test(s) ?
   8876                 s.replace(/ი$/, 'ში') :
   8877                 s + 'ში';
   8878         },
   8879         past : function (s) {
   8880             if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {
   8881                 return s.replace(/(ი|ე)$/, 'ის უკან');
   8882             }
   8883             if ((/წელი/).test(s)) {
   8884                 return s.replace(/წელი$/, 'წლის უკან');
   8885             }
   8886         },
   8887         s : 'რამდენიმე წამი',
   8888         m : 'წუთი',
   8889         mm : '%d წუთი',
   8890         h : 'საათი',
   8891         hh : '%d საათი',
   8892         d : 'დღე',
   8893         dd : '%d დღე',
   8894         M : 'თვე',
   8895         MM : '%d თვე',
   8896         y : 'წელი',
   8897         yy : '%d წელი'
   8898     },
   8899     dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,
   8900     ordinal : function (number) {
   8901         if (number === 0) {
   8902             return number;
   8903         }
   8904         if (number === 1) {
   8905             return number + '-ლი';
   8906         }
   8907         if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {
   8908             return 'მე-' + number;
   8909         }
   8910         return number + '-ე';
   8911     },
   8912     week : {
   8913         dow : 1,
   8914         doy : 7
   8915     }
   8916 });
   8917 
   8918 //! moment.js locale configuration
   8919 //! locale : Kazakh [kk]
   8920 //! authors : Nurlan Rakhimzhanov : https://github.com/nurlan
   8921 
   8922 var suffixes$1 = {
   8923     0: '-ші',
   8924     1: '-ші',
   8925     2: '-ші',
   8926     3: '-ші',
   8927     4: '-ші',
   8928     5: '-ші',
   8929     6: '-шы',
   8930     7: '-ші',
   8931     8: '-ші',
   8932     9: '-шы',
   8933     10: '-шы',
   8934     20: '-шы',
   8935     30: '-шы',
   8936     40: '-шы',
   8937     50: '-ші',
   8938     60: '-шы',
   8939     70: '-ші',
   8940     80: '-ші',
   8941     90: '-шы',
   8942     100: '-ші'
   8943 };
   8944 
   8945 hooks.defineLocale('kk', {
   8946     months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),
   8947     monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),
   8948     weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),
   8949     weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),
   8950     weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),
   8951     longDateFormat : {
   8952         LT : 'HH:mm',
   8953         LTS : 'HH:mm:ss',
   8954         L : 'DD.MM.YYYY',
   8955         LL : 'D MMMM YYYY',
   8956         LLL : 'D MMMM YYYY HH:mm',
   8957         LLLL : 'dddd, D MMMM YYYY HH:mm'
   8958     },
   8959     calendar : {
   8960         sameDay : '[Бүгін сағат] LT',
   8961         nextDay : '[Ертең сағат] LT',
   8962         nextWeek : 'dddd [сағат] LT',
   8963         lastDay : '[Кеше сағат] LT',
   8964         lastWeek : '[Өткен аптаның] dddd [сағат] LT',
   8965         sameElse : 'L'
   8966     },
   8967     relativeTime : {
   8968         future : '%s ішінде',
   8969         past : '%s бұрын',
   8970         s : 'бірнеше секунд',
   8971         m : 'бір минут',
   8972         mm : '%d минут',
   8973         h : 'бір сағат',
   8974         hh : '%d сағат',
   8975         d : 'бір күн',
   8976         dd : '%d күн',
   8977         M : 'бір ай',
   8978         MM : '%d ай',
   8979         y : 'бір жыл',
   8980         yy : '%d жыл'
   8981     },
   8982     dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/,
   8983     ordinal : function (number) {
   8984         var a = number % 10,
   8985             b = number >= 100 ? 100 : null;
   8986         return number + (suffixes$1[number] || suffixes$1[a] || suffixes$1[b]);
   8987     },
   8988     week : {
   8989         dow : 1, // Monday is the first day of the week.
   8990         doy : 7  // The week that contains Jan 1st is the first week of the year.
   8991     }
   8992 });
   8993 
   8994 //! moment.js locale configuration
   8995 //! locale : Cambodian [km]
   8996 //! author : Kruy Vanna : https://github.com/kruyvanna
   8997 
   8998 hooks.defineLocale('km', {
   8999     months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
   9000     monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
   9001     weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
   9002     weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
   9003     weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
   9004     longDateFormat: {
   9005         LT: 'HH:mm',
   9006         LTS : 'HH:mm:ss',
   9007         L: 'DD/MM/YYYY',
   9008         LL: 'D MMMM YYYY',
   9009         LLL: 'D MMMM YYYY HH:mm',
   9010         LLLL: 'dddd, D MMMM YYYY HH:mm'
   9011     },
   9012     calendar: {
   9013         sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',
   9014         nextDay: '[ស្អែក ម៉ោង] LT',
   9015         nextWeek: 'dddd [ម៉ោង] LT',
   9016         lastDay: '[ម្សិលមិញ ម៉ោង] LT',
   9017         lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',
   9018         sameElse: 'L'
   9019     },
   9020     relativeTime: {
   9021         future: '%sទៀត',
   9022         past: '%sមុន',
   9023         s: 'ប៉ុន្មានវិនាទី',
   9024         m: 'មួយនាទី',
   9025         mm: '%d នាទី',
   9026         h: 'មួយម៉ោង',
   9027         hh: '%d ម៉ោង',
   9028         d: 'មួយថ្ងៃ',
   9029         dd: '%d ថ្ងៃ',
   9030         M: 'មួយខែ',
   9031         MM: '%d ខែ',
   9032         y: 'មួយឆ្នាំ',
   9033         yy: '%d ឆ្នាំ'
   9034     },
   9035     week: {
   9036         dow: 1, // Monday is the first day of the week.
   9037         doy: 4 // The week that contains Jan 4th is the first week of the year.
   9038     }
   9039 });
   9040 
   9041 //! moment.js locale configuration
   9042 //! locale : Kannada [kn]
   9043 //! author : Rajeev Naik : https://github.com/rajeevnaikte
   9044 
   9045 var symbolMap$7 = {
   9046     '1': '೧',
   9047     '2': '೨',
   9048     '3': '೩',
   9049     '4': '೪',
   9050     '5': '೫',
   9051     '6': '೬',
   9052     '7': '೭',
   9053     '8': '೮',
   9054     '9': '೯',
   9055     '0': '೦'
   9056 };
   9057 var numberMap$6 = {
   9058     '೧': '1',
   9059     '೨': '2',
   9060     '೩': '3',
   9061     '೪': '4',
   9062     '೫': '5',
   9063     '೬': '6',
   9064     '೭': '7',
   9065     '೮': '8',
   9066     '೯': '9',
   9067     '೦': '0'
   9068 };
   9069 
   9070 hooks.defineLocale('kn', {
   9071     months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),
   9072     monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬ_ನವೆಂಬ_ಡಿಸೆಂಬ'.split('_'),
   9073     monthsParseExact: true,
   9074     weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),
   9075     weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),
   9076     weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),
   9077     longDateFormat : {
   9078         LT : 'A h:mm',
   9079         LTS : 'A h:mm:ss',
   9080         L : 'DD/MM/YYYY',
   9081         LL : 'D MMMM YYYY',
   9082         LLL : 'D MMMM YYYY, A h:mm',
   9083         LLLL : 'dddd, D MMMM YYYY, A h:mm'
   9084     },
   9085     calendar : {
   9086         sameDay : '[ಇಂದು] LT',
   9087         nextDay : '[ನಾಳೆ] LT',
   9088         nextWeek : 'dddd, LT',
   9089         lastDay : '[ನಿನ್ನೆ] LT',
   9090         lastWeek : '[ಕೊನೆಯ] dddd, LT',
   9091         sameElse : 'L'
   9092     },
   9093     relativeTime : {
   9094         future : '%s ನಂತರ',
   9095         past : '%s ಹಿಂದೆ',
   9096         s : 'ಕೆಲವು ಕ್ಷಣಗಳು',
   9097         m : 'ಒಂದು ನಿಮಿಷ',
   9098         mm : '%d ನಿಮಿಷ',
   9099         h : 'ಒಂದು ಗಂಟೆ',
   9100         hh : '%d ಗಂಟೆ',
   9101         d : 'ಒಂದು ದಿನ',
   9102         dd : '%d ದಿನ',
   9103         M : 'ಒಂದು ತಿಂಗಳು',
   9104         MM : '%d ತಿಂಗಳು',
   9105         y : 'ಒಂದು ವರ್ಷ',
   9106         yy : '%d ವರ್ಷ'
   9107     },
   9108     preparse: function (string) {
   9109         return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {
   9110             return numberMap$6[match];
   9111         });
   9112     },
   9113     postformat: function (string) {
   9114         return string.replace(/\d/g, function (match) {
   9115             return symbolMap$7[match];
   9116         });
   9117     },
   9118     meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,
   9119     meridiemHour : function (hour, meridiem) {
   9120         if (hour === 12) {
   9121             hour = 0;
   9122         }
   9123         if (meridiem === 'ರಾತ್ರಿ') {
   9124             return hour < 4 ? hour : hour + 12;
   9125         } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {
   9126             return hour;
   9127         } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {
   9128             return hour >= 10 ? hour : hour + 12;
   9129         } else if (meridiem === 'ಸಂಜೆ') {
   9130             return hour + 12;
   9131         }
   9132     },
   9133     meridiem : function (hour, minute, isLower) {
   9134         if (hour < 4) {
   9135             return 'ರಾತ್ರಿ';
   9136         } else if (hour < 10) {
   9137             return 'ಬೆಳಿಗ್ಗೆ';
   9138         } else if (hour < 17) {
   9139             return 'ಮಧ್ಯಾಹ್ನ';
   9140         } else if (hour < 20) {
   9141             return 'ಸಂಜೆ';
   9142         } else {
   9143             return 'ರಾತ್ರಿ';
   9144         }
   9145     },
   9146     dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/,
   9147     ordinal : function (number) {
   9148         return number + 'ನೇ';
   9149     },
   9150     week : {
   9151         dow : 0, // Sunday is the first day of the week.
   9152         doy : 6  // The week that contains Jan 1st is the first week of the year.
   9153     }
   9154 });
   9155 
   9156 //! moment.js locale configuration
   9157 //! locale : Korean [ko]
   9158 //! author : Kyungwook, Park : https://github.com/kyungw00k
   9159 //! author : Jeeeyul Lee <jeeeyul@gmail.com>
   9160 
   9161 hooks.defineLocale('ko', {
   9162     months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
   9163     monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
   9164     weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
   9165     weekdaysShort : '일_월_화_수_목_금_토'.split('_'),
   9166     weekdaysMin : '일_월_화_수_목_금_토'.split('_'),
   9167     longDateFormat : {
   9168         LT : 'A h:mm',
   9169         LTS : 'A h:mm:ss',
   9170         L : 'YYYY.MM.DD',
   9171         LL : 'YYYY년 MMMM D일',
   9172         LLL : 'YYYY년 MMMM D일 A h:mm',
   9173         LLLL : 'YYYY년 MMMM D일 dddd A h:mm',
   9174         l : 'YYYY.MM.DD',
   9175         ll : 'YYYY년 MMMM D일',
   9176         lll : 'YYYY년 MMMM D일 A h:mm',
   9177         llll : 'YYYY년 MMMM D일 dddd A h:mm'
   9178     },
   9179     calendar : {
   9180         sameDay : '오늘 LT',
   9181         nextDay : '내일 LT',
   9182         nextWeek : 'dddd LT',
   9183         lastDay : '어제 LT',
   9184         lastWeek : '지난주 dddd LT',
   9185         sameElse : 'L'
   9186     },
   9187     relativeTime : {
   9188         future : '%s 후',
   9189         past : '%s 전',
   9190         s : '몇 초',
   9191         ss : '%d초',
   9192         m : '1분',
   9193         mm : '%d분',
   9194         h : '한 시간',
   9195         hh : '%d시간',
   9196         d : '하루',
   9197         dd : '%d일',
   9198         M : '한 달',
   9199         MM : '%d달',
   9200         y : '일 년',
   9201         yy : '%d년'
   9202     },
   9203     dayOfMonthOrdinalParse : /\d{1,2}일/,
   9204     ordinal : '%d일',
   9205     meridiemParse : /오전|오후/,
   9206     isPM : function (token) {
   9207         return token === '오후';
   9208     },
   9209     meridiem : function (hour, minute, isUpper) {
   9210         return hour < 12 ? '오전' : '오후';
   9211     }
   9212 });
   9213 
   9214 //! moment.js locale configuration
   9215 //! locale : Kyrgyz [ky]
   9216 //! author : Chyngyz Arystan uulu : https://github.com/chyngyz
   9217 
   9218 
   9219 var suffixes$2 = {
   9220     0: '-чү',
   9221     1: '-чи',
   9222     2: '-чи',
   9223     3: '-чү',
   9224     4: '-чү',
   9225     5: '-чи',
   9226     6: '-чы',
   9227     7: '-чи',
   9228     8: '-чи',
   9229     9: '-чу',
   9230     10: '-чу',
   9231     20: '-чы',
   9232     30: '-чу',
   9233     40: '-чы',
   9234     50: '-чү',
   9235     60: '-чы',
   9236     70: '-чи',
   9237     80: '-чи',
   9238     90: '-чу',
   9239     100: '-чү'
   9240 };
   9241 
   9242 hooks.defineLocale('ky', {
   9243     months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
   9244     monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
   9245     weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),
   9246     weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),
   9247     weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),
   9248     longDateFormat : {
   9249         LT : 'HH:mm',
   9250         LTS : 'HH:mm:ss',
   9251         L : 'DD.MM.YYYY',
   9252         LL : 'D MMMM YYYY',
   9253         LLL : 'D MMMM YYYY HH:mm',
   9254         LLLL : 'dddd, D MMMM YYYY HH:mm'
   9255     },
   9256     calendar : {
   9257         sameDay : '[Бүгүн саат] LT',
   9258         nextDay : '[Эртең саат] LT',
   9259         nextWeek : 'dddd [саат] LT',
   9260         lastDay : '[Кече саат] LT',
   9261         lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT',
   9262         sameElse : 'L'
   9263     },
   9264     relativeTime : {
   9265         future : '%s ичинде',
   9266         past : '%s мурун',
   9267         s : 'бирнече секунд',
   9268         m : 'бир мүнөт',
   9269         mm : '%d мүнөт',
   9270         h : 'бир саат',
   9271         hh : '%d саат',
   9272         d : 'бир күн',
   9273         dd : '%d күн',
   9274         M : 'бир ай',
   9275         MM : '%d ай',
   9276         y : 'бир жыл',
   9277         yy : '%d жыл'
   9278     },
   9279     dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/,
   9280     ordinal : function (number) {
   9281         var a = number % 10,
   9282             b = number >= 100 ? 100 : null;
   9283         return number + (suffixes$2[number] || suffixes$2[a] || suffixes$2[b]);
   9284     },
   9285     week : {
   9286         dow : 1, // Monday is the first day of the week.
   9287         doy : 7  // The week that contains Jan 1st is the first week of the year.
   9288     }
   9289 });
   9290 
   9291 //! moment.js locale configuration
   9292 //! locale : Luxembourgish [lb]
   9293 //! author : mweimerskirch : https://github.com/mweimerskirch
   9294 //! author : David Raison : https://github.com/kwisatz
   9295 
   9296 function processRelativeTime$5(number, withoutSuffix, key, isFuture) {
   9297     var format = {
   9298         'm': ['eng Minutt', 'enger Minutt'],
   9299         'h': ['eng Stonn', 'enger Stonn'],
   9300         'd': ['een Dag', 'engem Dag'],
   9301         'M': ['ee Mount', 'engem Mount'],
   9302         'y': ['ee Joer', 'engem Joer']
   9303     };
   9304     return withoutSuffix ? format[key][0] : format[key][1];
   9305 }
   9306 function processFutureTime(string) {
   9307     var number = string.substr(0, string.indexOf(' '));
   9308     if (eifelerRegelAppliesToNumber(number)) {
   9309         return 'a ' + string;
   9310     }
   9311     return 'an ' + string;
   9312 }
   9313 function processPastTime(string) {
   9314     var number = string.substr(0, string.indexOf(' '));
   9315     if (eifelerRegelAppliesToNumber(number)) {
   9316         return 'viru ' + string;
   9317     }
   9318     return 'virun ' + string;
   9319 }
   9320 /**
   9321  * Returns true if the word before the given number loses the '-n' ending.
   9322  * e.g. 'an 10 Deeg' but 'a 5 Deeg'
   9323  *
   9324  * @param number {integer}
   9325  * @returns {boolean}
   9326  */
   9327 function eifelerRegelAppliesToNumber(number) {
   9328     number = parseInt(number, 10);
   9329     if (isNaN(number)) {
   9330         return false;
   9331     }
   9332     if (number < 0) {
   9333         // Negative Number --> always true
   9334         return true;
   9335     } else if (number < 10) {
   9336         // Only 1 digit
   9337         if (4 <= number && number <= 7) {
   9338             return true;
   9339         }
   9340         return false;
   9341     } else if (number < 100) {
   9342         // 2 digits
   9343         var lastDigit = number % 10, firstDigit = number / 10;
   9344         if (lastDigit === 0) {
   9345             return eifelerRegelAppliesToNumber(firstDigit);
   9346         }
   9347         return eifelerRegelAppliesToNumber(lastDigit);
   9348     } else if (number < 10000) {
   9349         // 3 or 4 digits --> recursively check first digit
   9350         while (number >= 10) {
   9351             number = number / 10;
   9352         }
   9353         return eifelerRegelAppliesToNumber(number);
   9354     } else {
   9355         // Anything larger than 4 digits: recursively check first n-3 digits
   9356         number = number / 1000;
   9357         return eifelerRegelAppliesToNumber(number);
   9358     }
   9359 }
   9360 
   9361 hooks.defineLocale('lb', {
   9362     months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
   9363     monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
   9364     monthsParseExact : true,
   9365     weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),
   9366     weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
   9367     weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
   9368     weekdaysParseExact : true,
   9369     longDateFormat: {
   9370         LT: 'H:mm [Auer]',
   9371         LTS: 'H:mm:ss [Auer]',
   9372         L: 'DD.MM.YYYY',
   9373         LL: 'D. MMMM YYYY',
   9374         LLL: 'D. MMMM YYYY H:mm [Auer]',
   9375         LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'
   9376     },
   9377     calendar: {
   9378         sameDay: '[Haut um] LT',
   9379         sameElse: 'L',
   9380         nextDay: '[Muer um] LT',
   9381         nextWeek: 'dddd [um] LT',
   9382         lastDay: '[Gëschter um] LT',
   9383         lastWeek: function () {
   9384             // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
   9385             switch (this.day()) {
   9386                 case 2:
   9387                 case 4:
   9388                     return '[Leschten] dddd [um] LT';
   9389                 default:
   9390                     return '[Leschte] dddd [um] LT';
   9391             }
   9392         }
   9393     },
   9394     relativeTime : {
   9395         future : processFutureTime,
   9396         past : processPastTime,
   9397         s : 'e puer Sekonnen',
   9398         m : processRelativeTime$5,
   9399         mm : '%d Minutten',
   9400         h : processRelativeTime$5,
   9401         hh : '%d Stonnen',
   9402         d : processRelativeTime$5,
   9403         dd : '%d Deeg',
   9404         M : processRelativeTime$5,
   9405         MM : '%d Méint',
   9406         y : processRelativeTime$5,
   9407         yy : '%d Joer'
   9408     },
   9409     dayOfMonthOrdinalParse: /\d{1,2}\./,
   9410     ordinal: '%d.',
   9411     week: {
   9412         dow: 1, // Monday is the first day of the week.
   9413         doy: 4  // The week that contains Jan 4th is the first week of the year.
   9414     }
   9415 });
   9416 
   9417 //! moment.js locale configuration
   9418 //! locale : Lao [lo]
   9419 //! author : Ryan Hart : https://github.com/ryanhart2
   9420 
   9421 hooks.defineLocale('lo', {
   9422     months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
   9423     monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
   9424     weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
   9425     weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
   9426     weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),
   9427     weekdaysParseExact : true,
   9428     longDateFormat : {
   9429         LT : 'HH:mm',
   9430         LTS : 'HH:mm:ss',
   9431         L : 'DD/MM/YYYY',
   9432         LL : 'D MMMM YYYY',
   9433         LLL : 'D MMMM YYYY HH:mm',
   9434         LLLL : 'ວັນdddd D MMMM YYYY HH:mm'
   9435     },
   9436     meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,
   9437     isPM: function (input) {
   9438         return input === 'ຕອນແລງ';
   9439     },
   9440     meridiem : function (hour, minute, isLower) {
   9441         if (hour < 12) {
   9442             return 'ຕອນເຊົ້າ';
   9443         } else {
   9444             return 'ຕອນແລງ';
   9445         }
   9446     },
   9447     calendar : {
   9448         sameDay : '[ມື້ນີ້ເວລາ] LT',
   9449         nextDay : '[ມື້ອື່ນເວລາ] LT',
   9450         nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',
   9451         lastDay : '[ມື້ວານນີ້ເວລາ] LT',
   9452         lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',
   9453         sameElse : 'L'
   9454     },
   9455     relativeTime : {
   9456         future : 'ອີກ %s',
   9457         past : '%sຜ່ານມາ',
   9458         s : 'ບໍ່ເທົ່າໃດວິນາທີ',
   9459         m : '1 ນາທີ',
   9460         mm : '%d ນາທີ',
   9461         h : '1 ຊົ່ວໂມງ',
   9462         hh : '%d ຊົ່ວໂມງ',
   9463         d : '1 ມື້',
   9464         dd : '%d ມື້',
   9465         M : '1 ເດືອນ',
   9466         MM : '%d ເດືອນ',
   9467         y : '1 ປີ',
   9468         yy : '%d ປີ'
   9469     },
   9470     dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/,
   9471     ordinal : function (number) {
   9472         return 'ທີ່' + number;
   9473     }
   9474 });
   9475 
   9476 //! moment.js locale configuration
   9477 //! locale : Lithuanian [lt]
   9478 //! author : Mindaugas Mozūras : https://github.com/mmozuras
   9479 
   9480 var units = {
   9481     'm' : 'minutė_minutės_minutę',
   9482     'mm': 'minutės_minučių_minutes',
   9483     'h' : 'valanda_valandos_valandą',
   9484     'hh': 'valandos_valandų_valandas',
   9485     'd' : 'diena_dienos_dieną',
   9486     'dd': 'dienos_dienų_dienas',
   9487     'M' : 'mėnuo_mėnesio_mėnesį',
   9488     'MM': 'mėnesiai_mėnesių_mėnesius',
   9489     'y' : 'metai_metų_metus',
   9490     'yy': 'metai_metų_metus'
   9491 };
   9492 function translateSeconds(number, withoutSuffix, key, isFuture) {
   9493     if (withoutSuffix) {
   9494         return 'kelios sekundės';
   9495     } else {
   9496         return isFuture ? 'kelių sekundžių' : 'kelias sekundes';
   9497     }
   9498 }
   9499 function translateSingular(number, withoutSuffix, key, isFuture) {
   9500     return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);
   9501 }
   9502 function special(number) {
   9503     return number % 10 === 0 || (number > 10 && number < 20);
   9504 }
   9505 function forms(key) {
   9506     return units[key].split('_');
   9507 }
   9508 function translate$6(number, withoutSuffix, key, isFuture) {
   9509     var result = number + ' ';
   9510     if (number === 1) {
   9511         return result + translateSingular(number, withoutSuffix, key[0], isFuture);
   9512     } else if (withoutSuffix) {
   9513         return result + (special(number) ? forms(key)[1] : forms(key)[0]);
   9514     } else {
   9515         if (isFuture) {
   9516             return result + forms(key)[1];
   9517         } else {
   9518             return result + (special(number) ? forms(key)[1] : forms(key)[2]);
   9519         }
   9520     }
   9521 }
   9522 hooks.defineLocale('lt', {
   9523     months : {
   9524         format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),
   9525         standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),
   9526         isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/
   9527     },
   9528     monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
   9529     weekdays : {
   9530         format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),
   9531         standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),
   9532         isFormat: /dddd HH:mm/
   9533     },
   9534     weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
   9535     weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),
   9536     weekdaysParseExact : true,
   9537     longDateFormat : {
   9538         LT : 'HH:mm',
   9539         LTS : 'HH:mm:ss',
   9540         L : 'YYYY-MM-DD',
   9541         LL : 'YYYY [m.] MMMM D [d.]',
   9542         LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
   9543         LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
   9544         l : 'YYYY-MM-DD',
   9545         ll : 'YYYY [m.] MMMM D [d.]',
   9546         lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
   9547         llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'
   9548     },
   9549     calendar : {
   9550         sameDay : '[Šiandien] LT',
   9551         nextDay : '[Rytoj] LT',
   9552         nextWeek : 'dddd LT',
   9553         lastDay : '[Vakar] LT',
   9554         lastWeek : '[Praėjusį] dddd LT',
   9555         sameElse : 'L'
   9556     },
   9557     relativeTime : {
   9558         future : 'po %s',
   9559         past : 'prieš %s',
   9560         s : translateSeconds,
   9561         m : translateSingular,
   9562         mm : translate$6,
   9563         h : translateSingular,
   9564         hh : translate$6,
   9565         d : translateSingular,
   9566         dd : translate$6,
   9567         M : translateSingular,
   9568         MM : translate$6,
   9569         y : translateSingular,
   9570         yy : translate$6
   9571     },
   9572     dayOfMonthOrdinalParse: /\d{1,2}-oji/,
   9573     ordinal : function (number) {
   9574         return number + '-oji';
   9575     },
   9576     week : {
   9577         dow : 1, // Monday is the first day of the week.
   9578         doy : 4  // The week that contains Jan 4th is the first week of the year.
   9579     }
   9580 });
   9581 
   9582 //! moment.js locale configuration
   9583 //! locale : Latvian [lv]
   9584 //! author : Kristaps Karlsons : https://github.com/skakri
   9585 //! author : Jānis Elmeris : https://github.com/JanisE
   9586 
   9587 var units$1 = {
   9588     'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),
   9589     'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),
   9590     'h': 'stundas_stundām_stunda_stundas'.split('_'),
   9591     'hh': 'stundas_stundām_stunda_stundas'.split('_'),
   9592     'd': 'dienas_dienām_diena_dienas'.split('_'),
   9593     'dd': 'dienas_dienām_diena_dienas'.split('_'),
   9594     'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
   9595     'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
   9596     'y': 'gada_gadiem_gads_gadi'.split('_'),
   9597     'yy': 'gada_gadiem_gads_gadi'.split('_')
   9598 };
   9599 /**
   9600  * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
   9601  */
   9602 function format$1(forms, number, withoutSuffix) {
   9603     if (withoutSuffix) {
   9604         // E.g. "21 minūte", "3 minūtes".
   9605         return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
   9606     } else {
   9607         // E.g. "21 minūtes" as in "pēc 21 minūtes".
   9608         // E.g. "3 minūtēm" as in "pēc 3 minūtēm".
   9609         return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
   9610     }
   9611 }
   9612 function relativeTimeWithPlural$1(number, withoutSuffix, key) {
   9613     return number + ' ' + format$1(units$1[key], number, withoutSuffix);
   9614 }
   9615 function relativeTimeWithSingular(number, withoutSuffix, key) {
   9616     return format$1(units$1[key], number, withoutSuffix);
   9617 }
   9618 function relativeSeconds(number, withoutSuffix) {
   9619     return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';
   9620 }
   9621 
   9622 hooks.defineLocale('lv', {
   9623     months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),
   9624     monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),
   9625     weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),
   9626     weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),
   9627     weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),
   9628     weekdaysParseExact : true,
   9629     longDateFormat : {
   9630         LT : 'HH:mm',
   9631         LTS : 'HH:mm:ss',
   9632         L : 'DD.MM.YYYY.',
   9633         LL : 'YYYY. [gada] D. MMMM',
   9634         LLL : 'YYYY. [gada] D. MMMM, HH:mm',
   9635         LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'
   9636     },
   9637     calendar : {
   9638         sameDay : '[Šodien pulksten] LT',
   9639         nextDay : '[Rīt pulksten] LT',
   9640         nextWeek : 'dddd [pulksten] LT',
   9641         lastDay : '[Vakar pulksten] LT',
   9642         lastWeek : '[Pagājušā] dddd [pulksten] LT',
   9643         sameElse : 'L'
   9644     },
   9645     relativeTime : {
   9646         future : 'pēc %s',
   9647         past : 'pirms %s',
   9648         s : relativeSeconds,
   9649         m : relativeTimeWithSingular,
   9650         mm : relativeTimeWithPlural$1,
   9651         h : relativeTimeWithSingular,
   9652         hh : relativeTimeWithPlural$1,
   9653         d : relativeTimeWithSingular,
   9654         dd : relativeTimeWithPlural$1,
   9655         M : relativeTimeWithSingular,
   9656         MM : relativeTimeWithPlural$1,
   9657         y : relativeTimeWithSingular,
   9658         yy : relativeTimeWithPlural$1
   9659     },
   9660     dayOfMonthOrdinalParse: /\d{1,2}\./,
   9661     ordinal : '%d.',
   9662     week : {
   9663         dow : 1, // Monday is the first day of the week.
   9664         doy : 4  // The week that contains Jan 4th is the first week of the year.
   9665     }
   9666 });
   9667 
   9668 //! moment.js locale configuration
   9669 //! locale : Montenegrin [me]
   9670 //! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac
   9671 
   9672 var translator = {
   9673     words: { //Different grammatical cases
   9674         m: ['jedan minut', 'jednog minuta'],
   9675         mm: ['minut', 'minuta', 'minuta'],
   9676         h: ['jedan sat', 'jednog sata'],
   9677         hh: ['sat', 'sata', 'sati'],
   9678         dd: ['dan', 'dana', 'dana'],
   9679         MM: ['mjesec', 'mjeseca', 'mjeseci'],
   9680         yy: ['godina', 'godine', 'godina']
   9681     },
   9682     correctGrammaticalCase: function (number, wordKey) {
   9683         return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
   9684     },
   9685     translate: function (number, withoutSuffix, key) {
   9686         var wordKey = translator.words[key];
   9687         if (key.length === 1) {
   9688             return withoutSuffix ? wordKey[0] : wordKey[1];
   9689         } else {
   9690             return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
   9691         }
   9692     }
   9693 };
   9694 
   9695 hooks.defineLocale('me', {
   9696     months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
   9697     monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
   9698     monthsParseExact : true,
   9699     weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
   9700     weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
   9701     weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
   9702     weekdaysParseExact : true,
   9703     longDateFormat: {
   9704         LT: 'H:mm',
   9705         LTS : 'H:mm:ss',
   9706         L: 'DD.MM.YYYY',
   9707         LL: 'D. MMMM YYYY',
   9708         LLL: 'D. MMMM YYYY H:mm',
   9709         LLLL: 'dddd, D. MMMM YYYY H:mm'
   9710     },
   9711     calendar: {
   9712         sameDay: '[danas u] LT',
   9713         nextDay: '[sjutra u] LT',
   9714 
   9715         nextWeek: function () {
   9716             switch (this.day()) {
   9717                 case 0:
   9718                     return '[u] [nedjelju] [u] LT';
   9719                 case 3:
   9720                     return '[u] [srijedu] [u] LT';
   9721                 case 6:
   9722                     return '[u] [subotu] [u] LT';
   9723                 case 1:
   9724                 case 2:
   9725                 case 4:
   9726                 case 5:
   9727                     return '[u] dddd [u] LT';
   9728             }
   9729         },
   9730         lastDay  : '[juče u] LT',
   9731         lastWeek : function () {
   9732             var lastWeekDays = [
   9733                 '[prošle] [nedjelje] [u] LT',
   9734                 '[prošlog] [ponedjeljka] [u] LT',
   9735                 '[prošlog] [utorka] [u] LT',
   9736                 '[prošle] [srijede] [u] LT',
   9737                 '[prošlog] [četvrtka] [u] LT',
   9738                 '[prošlog] [petka] [u] LT',
   9739                 '[prošle] [subote] [u] LT'
   9740             ];
   9741             return lastWeekDays[this.day()];
   9742         },
   9743         sameElse : 'L'
   9744     },
   9745     relativeTime : {
   9746         future : 'za %s',
   9747         past   : 'prije %s',
   9748         s      : 'nekoliko sekundi',
   9749         m      : translator.translate,
   9750         mm     : translator.translate,
   9751         h      : translator.translate,
   9752         hh     : translator.translate,
   9753         d      : 'dan',
   9754         dd     : translator.translate,
   9755         M      : 'mjesec',
   9756         MM     : translator.translate,
   9757         y      : 'godinu',
   9758         yy     : translator.translate
   9759     },
   9760     dayOfMonthOrdinalParse: /\d{1,2}\./,
   9761     ordinal : '%d.',
   9762     week : {
   9763         dow : 1, // Monday is the first day of the week.
   9764         doy : 7  // The week that contains Jan 1st is the first week of the year.
   9765     }
   9766 });
   9767 
   9768 //! moment.js locale configuration
   9769 //! locale : Maori [mi]
   9770 //! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal
   9771 
   9772 hooks.defineLocale('mi', {
   9773     months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),
   9774     monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),
   9775     monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
   9776     monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
   9777     monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
   9778     monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
   9779     weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),
   9780     weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
   9781     weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
   9782     longDateFormat: {
   9783         LT: 'HH:mm',
   9784         LTS: 'HH:mm:ss',
   9785         L: 'DD/MM/YYYY',
   9786         LL: 'D MMMM YYYY',
   9787         LLL: 'D MMMM YYYY [i] HH:mm',
   9788         LLLL: 'dddd, D MMMM YYYY [i] HH:mm'
   9789     },
   9790     calendar: {
   9791         sameDay: '[i teie mahana, i] LT',
   9792         nextDay: '[apopo i] LT',
   9793         nextWeek: 'dddd [i] LT',
   9794         lastDay: '[inanahi i] LT',
   9795         lastWeek: 'dddd [whakamutunga i] LT',
   9796         sameElse: 'L'
   9797     },
   9798     relativeTime: {
   9799         future: 'i roto i %s',
   9800         past: '%s i mua',
   9801         s: 'te hēkona ruarua',
   9802         m: 'he meneti',
   9803         mm: '%d meneti',
   9804         h: 'te haora',
   9805         hh: '%d haora',
   9806         d: 'he ra',
   9807         dd: '%d ra',
   9808         M: 'he marama',
   9809         MM: '%d marama',
   9810         y: 'he tau',
   9811         yy: '%d tau'
   9812     },
   9813     dayOfMonthOrdinalParse: /\d{1,2}º/,
   9814     ordinal: '%dº',
   9815     week : {
   9816         dow : 1, // Monday is the first day of the week.
   9817         doy : 4  // The week that contains Jan 4th is the first week of the year.
   9818     }
   9819 });
   9820 
   9821 //! moment.js locale configuration
   9822 //! locale : Macedonian [mk]
   9823 //! author : Borislav Mickov : https://github.com/B0k0
   9824 
   9825 hooks.defineLocale('mk', {
   9826     months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),
   9827     monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),
   9828     weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),
   9829     weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),
   9830     weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),
   9831     longDateFormat : {
   9832         LT : 'H:mm',
   9833         LTS : 'H:mm:ss',
   9834         L : 'D.MM.YYYY',
   9835         LL : 'D MMMM YYYY',
   9836         LLL : 'D MMMM YYYY H:mm',
   9837         LLLL : 'dddd, D MMMM YYYY H:mm'
   9838     },
   9839     calendar : {
   9840         sameDay : '[Денес во] LT',
   9841         nextDay : '[Утре во] LT',
   9842         nextWeek : '[Во] dddd [во] LT',
   9843         lastDay : '[Вчера во] LT',
   9844         lastWeek : function () {
   9845             switch (this.day()) {
   9846                 case 0:
   9847                 case 3:
   9848                 case 6:
   9849                     return '[Изминатата] dddd [во] LT';
   9850                 case 1:
   9851                 case 2:
   9852                 case 4:
   9853                 case 5:
   9854                     return '[Изминатиот] dddd [во] LT';
   9855             }
   9856         },
   9857         sameElse : 'L'
   9858     },
   9859     relativeTime : {
   9860         future : 'после %s',
   9861         past : 'пред %s',
   9862         s : 'неколку секунди',
   9863         m : 'минута',
   9864         mm : '%d минути',
   9865         h : 'час',
   9866         hh : '%d часа',
   9867         d : 'ден',
   9868         dd : '%d дена',
   9869         M : 'месец',
   9870         MM : '%d месеци',
   9871         y : 'година',
   9872         yy : '%d години'
   9873     },
   9874     dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
   9875     ordinal : function (number) {
   9876         var lastDigit = number % 10,
   9877             last2Digits = number % 100;
   9878         if (number === 0) {
   9879             return number + '-ев';
   9880         } else if (last2Digits === 0) {
   9881             return number + '-ен';
   9882         } else if (last2Digits > 10 && last2Digits < 20) {
   9883             return number + '-ти';
   9884         } else if (lastDigit === 1) {
   9885             return number + '-ви';
   9886         } else if (lastDigit === 2) {
   9887             return number + '-ри';
   9888         } else if (lastDigit === 7 || lastDigit === 8) {
   9889             return number + '-ми';
   9890         } else {
   9891             return number + '-ти';
   9892         }
   9893     },
   9894     week : {
   9895         dow : 1, // Monday is the first day of the week.
   9896         doy : 7  // The week that contains Jan 1st is the first week of the year.
   9897     }
   9898 });
   9899 
   9900 //! moment.js locale configuration
   9901 //! locale : Malayalam [ml]
   9902 //! author : Floyd Pink : https://github.com/floydpink
   9903 
   9904 hooks.defineLocale('ml', {
   9905     months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),
   9906     monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),
   9907     monthsParseExact : true,
   9908     weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),
   9909     weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),
   9910     weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
   9911     longDateFormat : {
   9912         LT : 'A h:mm -നു',
   9913         LTS : 'A h:mm:ss -നു',
   9914         L : 'DD/MM/YYYY',
   9915         LL : 'D MMMM YYYY',
   9916         LLL : 'D MMMM YYYY, A h:mm -നു',
   9917         LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'
   9918     },
   9919     calendar : {
   9920         sameDay : '[ഇന്ന്] LT',
   9921         nextDay : '[നാളെ] LT',
   9922         nextWeek : 'dddd, LT',
   9923         lastDay : '[ഇന്നലെ] LT',
   9924         lastWeek : '[കഴിഞ്ഞ] dddd, LT',
   9925         sameElse : 'L'
   9926     },
   9927     relativeTime : {
   9928         future : '%s കഴിഞ്ഞ്',
   9929         past : '%s മുൻപ്',
   9930         s : 'അൽപ നിമിഷങ്ങൾ',
   9931         m : 'ഒരു മിനിറ്റ്',
   9932         mm : '%d മിനിറ്റ്',
   9933         h : 'ഒരു മണിക്കൂർ',
   9934         hh : '%d മണിക്കൂർ',
   9935         d : 'ഒരു ദിവസം',
   9936         dd : '%d ദിവസം',
   9937         M : 'ഒരു മാസം',
   9938         MM : '%d മാസം',
   9939         y : 'ഒരു വർഷം',
   9940         yy : '%d വർഷം'
   9941     },
   9942     meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,
   9943     meridiemHour : function (hour, meridiem) {
   9944         if (hour === 12) {
   9945             hour = 0;
   9946         }
   9947         if ((meridiem === 'രാത്രി' && hour >= 4) ||
   9948                 meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||
   9949                 meridiem === 'വൈകുന്നേരം') {
   9950             return hour + 12;
   9951         } else {
   9952             return hour;
   9953         }
   9954     },
   9955     meridiem : function (hour, minute, isLower) {
   9956         if (hour < 4) {
   9957             return 'രാത്രി';
   9958         } else if (hour < 12) {
   9959             return 'രാവിലെ';
   9960         } else if (hour < 17) {
   9961             return 'ഉച്ച കഴിഞ്ഞ്';
   9962         } else if (hour < 20) {
   9963             return 'വൈകുന്നേരം';
   9964         } else {
   9965             return 'രാത്രി';
   9966         }
   9967     }
   9968 });
   9969 
   9970 //! moment.js locale configuration
   9971 //! locale : Marathi [mr]
   9972 //! author : Harshad Kale : https://github.com/kalehv
   9973 //! author : Vivek Athalye : https://github.com/vnathalye
   9974 
   9975 var symbolMap$8 = {
   9976     '1': '१',
   9977     '2': '२',
   9978     '3': '३',
   9979     '4': '४',
   9980     '5': '५',
   9981     '6': '६',
   9982     '7': '७',
   9983     '8': '८',
   9984     '9': '९',
   9985     '0': '०'
   9986 };
   9987 var numberMap$7 = {
   9988     '१': '1',
   9989     '२': '2',
   9990     '३': '3',
   9991     '४': '4',
   9992     '५': '5',
   9993     '६': '6',
   9994     '७': '7',
   9995     '८': '8',
   9996     '९': '9',
   9997     '०': '0'
   9998 };
   9999 
  10000 function relativeTimeMr(number, withoutSuffix, string, isFuture)
  10001 {
  10002     var output = '';
  10003     if (withoutSuffix) {
  10004         switch (string) {
  10005             case 's': output = 'काही सेकंद'; break;
  10006             case 'm': output = 'एक मिनिट'; break;
  10007             case 'mm': output = '%d मिनिटे'; break;
  10008             case 'h': output = 'एक तास'; break;
  10009             case 'hh': output = '%d तास'; break;
  10010             case 'd': output = 'एक दिवस'; break;
  10011             case 'dd': output = '%d दिवस'; break;
  10012             case 'M': output = 'एक महिना'; break;
  10013             case 'MM': output = '%d महिने'; break;
  10014             case 'y': output = 'एक वर्ष'; break;
  10015             case 'yy': output = '%d वर्षे'; break;
  10016         }
  10017     }
  10018     else {
  10019         switch (string) {
  10020             case 's': output = 'काही सेकंदां'; break;
  10021             case 'm': output = 'एका मिनिटा'; break;
  10022             case 'mm': output = '%d मिनिटां'; break;
  10023             case 'h': output = 'एका तासा'; break;
  10024             case 'hh': output = '%d तासां'; break;
  10025             case 'd': output = 'एका दिवसा'; break;
  10026             case 'dd': output = '%d दिवसां'; break;
  10027             case 'M': output = 'एका महिन्या'; break;
  10028             case 'MM': output = '%d महिन्यां'; break;
  10029             case 'y': output = 'एका वर्षा'; break;
  10030             case 'yy': output = '%d वर्षां'; break;
  10031         }
  10032     }
  10033     return output.replace(/%d/i, number);
  10034 }
  10035 
  10036 hooks.defineLocale('mr', {
  10037     months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),
  10038     monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),
  10039     monthsParseExact : true,
  10040     weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
  10041     weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),
  10042     weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
  10043     longDateFormat : {
  10044         LT : 'A h:mm वाजता',
  10045         LTS : 'A h:mm:ss वाजता',
  10046         L : 'DD/MM/YYYY',
  10047         LL : 'D MMMM YYYY',
  10048         LLL : 'D MMMM YYYY, A h:mm वाजता',
  10049         LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'
  10050     },
  10051     calendar : {
  10052         sameDay : '[आज] LT',
  10053         nextDay : '[उद्या] LT',
  10054         nextWeek : 'dddd, LT',
  10055         lastDay : '[काल] LT',
  10056         lastWeek: '[मागील] dddd, LT',
  10057         sameElse : 'L'
  10058     },
  10059     relativeTime : {
  10060         future: '%sमध्ये',
  10061         past: '%sपूर्वी',
  10062         s: relativeTimeMr,
  10063         m: relativeTimeMr,
  10064         mm: relativeTimeMr,
  10065         h: relativeTimeMr,
  10066         hh: relativeTimeMr,
  10067         d: relativeTimeMr,
  10068         dd: relativeTimeMr,
  10069         M: relativeTimeMr,
  10070         MM: relativeTimeMr,
  10071         y: relativeTimeMr,
  10072         yy: relativeTimeMr
  10073     },
  10074     preparse: function (string) {
  10075         return string.replace(/[१२३४५६७८९०]/g, function (match) {
  10076             return numberMap$7[match];
  10077         });
  10078     },
  10079     postformat: function (string) {
  10080         return string.replace(/\d/g, function (match) {
  10081             return symbolMap$8[match];
  10082         });
  10083     },
  10084     meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,
  10085     meridiemHour : function (hour, meridiem) {
  10086         if (hour === 12) {
  10087             hour = 0;
  10088         }
  10089         if (meridiem === 'रात्री') {
  10090             return hour < 4 ? hour : hour + 12;
  10091         } else if (meridiem === 'सकाळी') {
  10092             return hour;
  10093         } else if (meridiem === 'दुपारी') {
  10094             return hour >= 10 ? hour : hour + 12;
  10095         } else if (meridiem === 'सायंकाळी') {
  10096             return hour + 12;
  10097         }
  10098     },
  10099     meridiem: function (hour, minute, isLower) {
  10100         if (hour < 4) {
  10101             return 'रात्री';
  10102         } else if (hour < 10) {
  10103             return 'सकाळी';
  10104         } else if (hour < 17) {
  10105             return 'दुपारी';
  10106         } else if (hour < 20) {
  10107             return 'सायंकाळी';
  10108         } else {
  10109             return 'रात्री';
  10110         }
  10111     },
  10112     week : {
  10113         dow : 0, // Sunday is the first day of the week.
  10114         doy : 6  // The week that contains Jan 1st is the first week of the year.
  10115     }
  10116 });
  10117 
  10118 //! moment.js locale configuration
  10119 //! locale : Malay [ms-my]
  10120 //! note : DEPRECATED, the correct one is [ms]
  10121 //! author : Weldan Jamili : https://github.com/weldan
  10122 
  10123 hooks.defineLocale('ms-my', {
  10124     months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
  10125     monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
  10126     weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
  10127     weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
  10128     weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
  10129     longDateFormat : {
  10130         LT : 'HH.mm',
  10131         LTS : 'HH.mm.ss',
  10132         L : 'DD/MM/YYYY',
  10133         LL : 'D MMMM YYYY',
  10134         LLL : 'D MMMM YYYY [pukul] HH.mm',
  10135         LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
  10136     },
  10137     meridiemParse: /pagi|tengahari|petang|malam/,
  10138     meridiemHour: function (hour, meridiem) {
  10139         if (hour === 12) {
  10140             hour = 0;
  10141         }
  10142         if (meridiem === 'pagi') {
  10143             return hour;
  10144         } else if (meridiem === 'tengahari') {
  10145             return hour >= 11 ? hour : hour + 12;
  10146         } else if (meridiem === 'petang' || meridiem === 'malam') {
  10147             return hour + 12;
  10148         }
  10149     },
  10150     meridiem : function (hours, minutes, isLower) {
  10151         if (hours < 11) {
  10152             return 'pagi';
  10153         } else if (hours < 15) {
  10154             return 'tengahari';
  10155         } else if (hours < 19) {
  10156             return 'petang';
  10157         } else {
  10158             return 'malam';
  10159         }
  10160     },
  10161     calendar : {
  10162         sameDay : '[Hari ini pukul] LT',
  10163         nextDay : '[Esok pukul] LT',
  10164         nextWeek : 'dddd [pukul] LT',
  10165         lastDay : '[Kelmarin pukul] LT',
  10166         lastWeek : 'dddd [lepas pukul] LT',
  10167         sameElse : 'L'
  10168     },
  10169     relativeTime : {
  10170         future : 'dalam %s',
  10171         past : '%s yang lepas',
  10172         s : 'beberapa saat',
  10173         m : 'seminit',
  10174         mm : '%d minit',
  10175         h : 'sejam',
  10176         hh : '%d jam',
  10177         d : 'sehari',
  10178         dd : '%d hari',
  10179         M : 'sebulan',
  10180         MM : '%d bulan',
  10181         y : 'setahun',
  10182         yy : '%d tahun'
  10183     },
  10184     week : {
  10185         dow : 1, // Monday is the first day of the week.
  10186         doy : 7  // The week that contains Jan 1st is the first week of the year.
  10187     }
  10188 });
  10189 
  10190 //! moment.js locale configuration
  10191 //! locale : Malay [ms]
  10192 //! author : Weldan Jamili : https://github.com/weldan
  10193 
  10194 hooks.defineLocale('ms', {
  10195     months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
  10196     monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
  10197     weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
  10198     weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
  10199     weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
  10200     longDateFormat : {
  10201         LT : 'HH.mm',
  10202         LTS : 'HH.mm.ss',
  10203         L : 'DD/MM/YYYY',
  10204         LL : 'D MMMM YYYY',
  10205         LLL : 'D MMMM YYYY [pukul] HH.mm',
  10206         LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
  10207     },
  10208     meridiemParse: /pagi|tengahari|petang|malam/,
  10209     meridiemHour: function (hour, meridiem) {
  10210         if (hour === 12) {
  10211             hour = 0;
  10212         }
  10213         if (meridiem === 'pagi') {
  10214             return hour;
  10215         } else if (meridiem === 'tengahari') {
  10216             return hour >= 11 ? hour : hour + 12;
  10217         } else if (meridiem === 'petang' || meridiem === 'malam') {
  10218             return hour + 12;
  10219         }
  10220     },
  10221     meridiem : function (hours, minutes, isLower) {
  10222         if (hours < 11) {
  10223             return 'pagi';
  10224         } else if (hours < 15) {
  10225             return 'tengahari';
  10226         } else if (hours < 19) {
  10227             return 'petang';
  10228         } else {
  10229             return 'malam';
  10230         }
  10231     },
  10232     calendar : {
  10233         sameDay : '[Hari ini pukul] LT',
  10234         nextDay : '[Esok pukul] LT',
  10235         nextWeek : 'dddd [pukul] LT',
  10236         lastDay : '[Kelmarin pukul] LT',
  10237         lastWeek : 'dddd [lepas pukul] LT',
  10238         sameElse : 'L'
  10239     },
  10240     relativeTime : {
  10241         future : 'dalam %s',
  10242         past : '%s yang lepas',
  10243         s : 'beberapa saat',
  10244         m : 'seminit',
  10245         mm : '%d minit',
  10246         h : 'sejam',
  10247         hh : '%d jam',
  10248         d : 'sehari',
  10249         dd : '%d hari',
  10250         M : 'sebulan',
  10251         MM : '%d bulan',
  10252         y : 'setahun',
  10253         yy : '%d tahun'
  10254     },
  10255     week : {
  10256         dow : 1, // Monday is the first day of the week.
  10257         doy : 7  // The week that contains Jan 1st is the first week of the year.
  10258     }
  10259 });
  10260 
  10261 //! moment.js locale configuration
  10262 //! locale : Burmese [my]
  10263 //! author : Squar team, mysquar.com
  10264 //! author : David Rossellat : https://github.com/gholadr
  10265 //! author : Tin Aung Lin : https://github.com/thanyawzinmin
  10266 
  10267 var symbolMap$9 = {
  10268     '1': '၁',
  10269     '2': '၂',
  10270     '3': '၃',
  10271     '4': '၄',
  10272     '5': '၅',
  10273     '6': '၆',
  10274     '7': '၇',
  10275     '8': '၈',
  10276     '9': '၉',
  10277     '0': '၀'
  10278 };
  10279 var numberMap$8 = {
  10280     '၁': '1',
  10281     '၂': '2',
  10282     '၃': '3',
  10283     '၄': '4',
  10284     '၅': '5',
  10285     '၆': '6',
  10286     '၇': '7',
  10287     '၈': '8',
  10288     '၉': '9',
  10289     '၀': '0'
  10290 };
  10291 
  10292 hooks.defineLocale('my', {
  10293     months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),
  10294     monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),
  10295     weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),
  10296     weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
  10297     weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
  10298 
  10299     longDateFormat: {
  10300         LT: 'HH:mm',
  10301         LTS: 'HH:mm:ss',
  10302         L: 'DD/MM/YYYY',
  10303         LL: 'D MMMM YYYY',
  10304         LLL: 'D MMMM YYYY HH:mm',
  10305         LLLL: 'dddd D MMMM YYYY HH:mm'
  10306     },
  10307     calendar: {
  10308         sameDay: '[ယနေ.] LT [မှာ]',
  10309         nextDay: '[မနက်ဖြန်] LT [မှာ]',
  10310         nextWeek: 'dddd LT [မှာ]',
  10311         lastDay: '[မနေ.က] LT [မှာ]',
  10312         lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',
  10313         sameElse: 'L'
  10314     },
  10315     relativeTime: {
  10316         future: 'လာမည့် %s မှာ',
  10317         past: 'လွန်ခဲ့သော %s က',
  10318         s: 'စက္ကန်.အနည်းငယ်',
  10319         m: 'တစ်မိနစ်',
  10320         mm: '%d မိနစ်',
  10321         h: 'တစ်နာရီ',
  10322         hh: '%d နာရီ',
  10323         d: 'တစ်ရက်',
  10324         dd: '%d ရက်',
  10325         M: 'တစ်လ',
  10326         MM: '%d လ',
  10327         y: 'တစ်နှစ်',
  10328         yy: '%d နှစ်'
  10329     },
  10330     preparse: function (string) {
  10331         return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {
  10332             return numberMap$8[match];
  10333         });
  10334     },
  10335     postformat: function (string) {
  10336         return string.replace(/\d/g, function (match) {
  10337             return symbolMap$9[match];
  10338         });
  10339     },
  10340     week: {
  10341         dow: 1, // Monday is the first day of the week.
  10342         doy: 4 // The week that contains Jan 1st is the first week of the year.
  10343     }
  10344 });
  10345 
  10346 //! moment.js locale configuration
  10347 //! locale : Norwegian Bokmål [nb]
  10348 //! authors : Espen Hovlandsdal : https://github.com/rexxars
  10349 //!           Sigurd Gartmann : https://github.com/sigurdga
  10350 
  10351 hooks.defineLocale('nb', {
  10352     months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
  10353     monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),
  10354     monthsParseExact : true,
  10355     weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
  10356     weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),
  10357     weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
  10358     weekdaysParseExact : true,
  10359     longDateFormat : {
  10360         LT : 'HH:mm',
  10361         LTS : 'HH:mm:ss',
  10362         L : 'DD.MM.YYYY',
  10363         LL : 'D. MMMM YYYY',
  10364         LLL : 'D. MMMM YYYY [kl.] HH:mm',
  10365         LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
  10366     },
  10367     calendar : {
  10368         sameDay: '[i dag kl.] LT',
  10369         nextDay: '[i morgen kl.] LT',
  10370         nextWeek: 'dddd [kl.] LT',
  10371         lastDay: '[i går kl.] LT',
  10372         lastWeek: '[forrige] dddd [kl.] LT',
  10373         sameElse: 'L'
  10374     },
  10375     relativeTime : {
  10376         future : 'om %s',
  10377         past : '%s siden',
  10378         s : 'noen sekunder',
  10379         m : 'ett minutt',
  10380         mm : '%d minutter',
  10381         h : 'en time',
  10382         hh : '%d timer',
  10383         d : 'en dag',
  10384         dd : '%d dager',
  10385         M : 'en måned',
  10386         MM : '%d måneder',
  10387         y : 'ett år',
  10388         yy : '%d år'
  10389     },
  10390     dayOfMonthOrdinalParse: /\d{1,2}\./,
  10391     ordinal : '%d.',
  10392     week : {
  10393         dow : 1, // Monday is the first day of the week.
  10394         doy : 4  // The week that contains Jan 4th is the first week of the year.
  10395     }
  10396 });
  10397 
  10398 //! moment.js locale configuration
  10399 //! locale : Nepalese [ne]
  10400 //! author : suvash : https://github.com/suvash
  10401 
  10402 var symbolMap$10 = {
  10403     '1': '१',
  10404     '2': '२',
  10405     '3': '३',
  10406     '4': '४',
  10407     '5': '५',
  10408     '6': '६',
  10409     '7': '७',
  10410     '8': '८',
  10411     '9': '९',
  10412     '0': '०'
  10413 };
  10414 var numberMap$9 = {
  10415     '१': '1',
  10416     '२': '2',
  10417     '३': '3',
  10418     '४': '4',
  10419     '५': '5',
  10420     '६': '6',
  10421     '७': '7',
  10422     '८': '8',
  10423     '९': '9',
  10424     '०': '0'
  10425 };
  10426 
  10427 hooks.defineLocale('ne', {
  10428     months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),
  10429     monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),
  10430     monthsParseExact : true,
  10431     weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),
  10432     weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
  10433     weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),
  10434     weekdaysParseExact : true,
  10435     longDateFormat : {
  10436         LT : 'Aको h:mm बजे',
  10437         LTS : 'Aको h:mm:ss बजे',
  10438         L : 'DD/MM/YYYY',
  10439         LL : 'D MMMM YYYY',
  10440         LLL : 'D MMMM YYYY, Aको h:mm बजे',
  10441         LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'
  10442     },
  10443     preparse: function (string) {
  10444         return string.replace(/[१२३४५६७८९०]/g, function (match) {
  10445             return numberMap$9[match];
  10446         });
  10447     },
  10448     postformat: function (string) {
  10449         return string.replace(/\d/g, function (match) {
  10450             return symbolMap$10[match];
  10451         });
  10452     },
  10453     meridiemParse: /राति|बिहान|दिउँसो|साँझ/,
  10454     meridiemHour : function (hour, meridiem) {
  10455         if (hour === 12) {
  10456             hour = 0;
  10457         }
  10458         if (meridiem === 'राति') {
  10459             return hour < 4 ? hour : hour + 12;
  10460         } else if (meridiem === 'बिहान') {
  10461             return hour;
  10462         } else if (meridiem === 'दिउँसो') {
  10463             return hour >= 10 ? hour : hour + 12;
  10464         } else if (meridiem === 'साँझ') {
  10465             return hour + 12;
  10466         }
  10467     },
  10468     meridiem : function (hour, minute, isLower) {
  10469         if (hour < 3) {
  10470             return 'राति';
  10471         } else if (hour < 12) {
  10472             return 'बिहान';
  10473         } else if (hour < 16) {
  10474             return 'दिउँसो';
  10475         } else if (hour < 20) {
  10476             return 'साँझ';
  10477         } else {
  10478             return 'राति';
  10479         }
  10480     },
  10481     calendar : {
  10482         sameDay : '[आज] LT',
  10483         nextDay : '[भोलि] LT',
  10484         nextWeek : '[आउँदो] dddd[,] LT',
  10485         lastDay : '[हिजो] LT',
  10486         lastWeek : '[गएको] dddd[,] LT',
  10487         sameElse : 'L'
  10488     },
  10489     relativeTime : {
  10490         future : '%sमा',
  10491         past : '%s अगाडि',
  10492         s : 'केही क्षण',
  10493         m : 'एक मिनेट',
  10494         mm : '%d मिनेट',
  10495         h : 'एक घण्टा',
  10496         hh : '%d घण्टा',
  10497         d : 'एक दिन',
  10498         dd : '%d दिन',
  10499         M : 'एक महिना',
  10500         MM : '%d महिना',
  10501         y : 'एक बर्ष',
  10502         yy : '%d बर्ष'
  10503     },
  10504     week : {
  10505         dow : 0, // Sunday is the first day of the week.
  10506         doy : 6  // The week that contains Jan 1st is the first week of the year.
  10507     }
  10508 });
  10509 
  10510 //! moment.js locale configuration
  10511 //! locale : Dutch (Belgium) [nl-be]
  10512 //! author : Joris Röling : https://github.com/jorisroling
  10513 //! author : Jacob Middag : https://github.com/middagj
  10514 
  10515 var monthsShortWithDots$1 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_');
  10516 var monthsShortWithoutDots$1 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
  10517 
  10518 var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];
  10519 var monthsRegex$1 = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
  10520 
  10521 hooks.defineLocale('nl-be', {
  10522     months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
  10523     monthsShort : function (m, format) {
  10524         if (!m) {
  10525             return monthsShortWithDots$1;
  10526         } else if (/-MMM-/.test(format)) {
  10527             return monthsShortWithoutDots$1[m.month()];
  10528         } else {
  10529             return monthsShortWithDots$1[m.month()];
  10530         }
  10531     },
  10532 
  10533     monthsRegex: monthsRegex$1,
  10534     monthsShortRegex: monthsRegex$1,
  10535     monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,
  10536     monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
  10537 
  10538     monthsParse : monthsParse,
  10539     longMonthsParse : monthsParse,
  10540     shortMonthsParse : monthsParse,
  10541 
  10542     weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
  10543     weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
  10544     weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
  10545     weekdaysParseExact : true,
  10546     longDateFormat : {
  10547         LT : 'HH:mm',
  10548         LTS : 'HH:mm:ss',
  10549         L : 'DD/MM/YYYY',
  10550         LL : 'D MMMM YYYY',
  10551         LLL : 'D MMMM YYYY HH:mm',
  10552         LLLL : 'dddd D MMMM YYYY HH:mm'
  10553     },
  10554     calendar : {
  10555         sameDay: '[vandaag om] LT',
  10556         nextDay: '[morgen om] LT',
  10557         nextWeek: 'dddd [om] LT',
  10558         lastDay: '[gisteren om] LT',
  10559         lastWeek: '[afgelopen] dddd [om] LT',
  10560         sameElse: 'L'
  10561     },
  10562     relativeTime : {
  10563         future : 'over %s',
  10564         past : '%s geleden',
  10565         s : 'een paar seconden',
  10566         m : 'één minuut',
  10567         mm : '%d minuten',
  10568         h : 'één uur',
  10569         hh : '%d uur',
  10570         d : 'één dag',
  10571         dd : '%d dagen',
  10572         M : 'één maand',
  10573         MM : '%d maanden',
  10574         y : 'één jaar',
  10575         yy : '%d jaar'
  10576     },
  10577     dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
  10578     ordinal : function (number) {
  10579         return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
  10580     },
  10581     week : {
  10582         dow : 1, // Monday is the first day of the week.
  10583         doy : 4  // The week that contains Jan 4th is the first week of the year.
  10584     }
  10585 });
  10586 
  10587 //! moment.js locale configuration
  10588 //! locale : Dutch [nl]
  10589 //! author : Joris Röling : https://github.com/jorisroling
  10590 //! author : Jacob Middag : https://github.com/middagj
  10591 
  10592 var monthsShortWithDots$2 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_');
  10593 var monthsShortWithoutDots$2 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
  10594 
  10595 var monthsParse$1 = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];
  10596 var monthsRegex$2 = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
  10597 
  10598 hooks.defineLocale('nl', {
  10599     months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
  10600     monthsShort : function (m, format) {
  10601         if (!m) {
  10602             return monthsShortWithDots$2;
  10603         } else if (/-MMM-/.test(format)) {
  10604             return monthsShortWithoutDots$2[m.month()];
  10605         } else {
  10606             return monthsShortWithDots$2[m.month()];
  10607         }
  10608     },
  10609 
  10610     monthsRegex: monthsRegex$2,
  10611     monthsShortRegex: monthsRegex$2,
  10612     monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,
  10613     monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
  10614 
  10615     monthsParse : monthsParse$1,
  10616     longMonthsParse : monthsParse$1,
  10617     shortMonthsParse : monthsParse$1,
  10618 
  10619     weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
  10620     weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
  10621     weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
  10622     weekdaysParseExact : true,
  10623     longDateFormat : {
  10624         LT : 'HH:mm',
  10625         LTS : 'HH:mm:ss',
  10626         L : 'DD-MM-YYYY',
  10627         LL : 'D MMMM YYYY',
  10628         LLL : 'D MMMM YYYY HH:mm',
  10629         LLLL : 'dddd D MMMM YYYY HH:mm'
  10630     },
  10631     calendar : {
  10632         sameDay: '[vandaag om] LT',
  10633         nextDay: '[morgen om] LT',
  10634         nextWeek: 'dddd [om] LT',
  10635         lastDay: '[gisteren om] LT',
  10636         lastWeek: '[afgelopen] dddd [om] LT',
  10637         sameElse: 'L'
  10638     },
  10639     relativeTime : {
  10640         future : 'over %s',
  10641         past : '%s geleden',
  10642         s : 'een paar seconden',
  10643         m : 'één minuut',
  10644         mm : '%d minuten',
  10645         h : 'één uur',
  10646         hh : '%d uur',
  10647         d : 'één dag',
  10648         dd : '%d dagen',
  10649         M : 'één maand',
  10650         MM : '%d maanden',
  10651         y : 'één jaar',
  10652         yy : '%d jaar'
  10653     },
  10654     dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
  10655     ordinal : function (number) {
  10656         return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
  10657     },
  10658     week : {
  10659         dow : 1, // Monday is the first day of the week.
  10660         doy : 4  // The week that contains Jan 4th is the first week of the year.
  10661     }
  10662 });
  10663 
  10664 //! moment.js locale configuration
  10665 //! locale : Nynorsk [nn]
  10666 //! author : https://github.com/mechuwind
  10667 
  10668 hooks.defineLocale('nn', {
  10669     months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
  10670     monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
  10671     weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
  10672     weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),
  10673     weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),
  10674     longDateFormat : {
  10675         LT : 'HH:mm',
  10676         LTS : 'HH:mm:ss',
  10677         L : 'DD.MM.YYYY',
  10678         LL : 'D. MMMM YYYY',
  10679         LLL : 'D. MMMM YYYY [kl.] H:mm',
  10680         LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
  10681     },
  10682     calendar : {
  10683         sameDay: '[I dag klokka] LT',
  10684         nextDay: '[I morgon klokka] LT',
  10685         nextWeek: 'dddd [klokka] LT',
  10686         lastDay: '[I går klokka] LT',
  10687         lastWeek: '[Føregåande] dddd [klokka] LT',
  10688         sameElse: 'L'
  10689     },
  10690     relativeTime : {
  10691         future : 'om %s',
  10692         past : '%s sidan',
  10693         s : 'nokre sekund',
  10694         m : 'eit minutt',
  10695         mm : '%d minutt',
  10696         h : 'ein time',
  10697         hh : '%d timar',
  10698         d : 'ein dag',
  10699         dd : '%d dagar',
  10700         M : 'ein månad',
  10701         MM : '%d månader',
  10702         y : 'eit år',
  10703         yy : '%d år'
  10704     },
  10705     dayOfMonthOrdinalParse: /\d{1,2}\./,
  10706     ordinal : '%d.',
  10707     week : {
  10708         dow : 1, // Monday is the first day of the week.
  10709         doy : 4  // The week that contains Jan 4th is the first week of the year.
  10710     }
  10711 });
  10712 
  10713 //! moment.js locale configuration
  10714 //! locale : Punjabi (India) [pa-in]
  10715 //! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit
  10716 
  10717 var symbolMap$11 = {
  10718     '1': '੧',
  10719     '2': '੨',
  10720     '3': '੩',
  10721     '4': '੪',
  10722     '5': '੫',
  10723     '6': '੬',
  10724     '7': '੭',
  10725     '8': '੮',
  10726     '9': '੯',
  10727     '0': '੦'
  10728 };
  10729 var numberMap$10 = {
  10730     '੧': '1',
  10731     '੨': '2',
  10732     '੩': '3',
  10733     '੪': '4',
  10734     '੫': '5',
  10735     '੬': '6',
  10736     '੭': '7',
  10737     '੮': '8',
  10738     '੯': '9',
  10739     '੦': '0'
  10740 };
  10741 
  10742 hooks.defineLocale('pa-in', {
  10743     // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi.
  10744     months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
  10745     monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
  10746     weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),
  10747     weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
  10748     weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
  10749     longDateFormat : {
  10750         LT : 'A h:mm ਵਜੇ',
  10751         LTS : 'A h:mm:ss ਵਜੇ',
  10752         L : 'DD/MM/YYYY',
  10753         LL : 'D MMMM YYYY',
  10754         LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',
  10755         LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'
  10756     },
  10757     calendar : {
  10758         sameDay : '[ਅਜ] LT',
  10759         nextDay : '[ਕਲ] LT',
  10760         nextWeek : 'dddd, LT',
  10761         lastDay : '[ਕਲ] LT',
  10762         lastWeek : '[ਪਿਛਲੇ] dddd, LT',
  10763         sameElse : 'L'
  10764     },
  10765     relativeTime : {
  10766         future : '%s ਵਿੱਚ',
  10767         past : '%s ਪਿਛਲੇ',
  10768         s : 'ਕੁਝ ਸਕਿੰਟ',
  10769         m : 'ਇਕ ਮਿੰਟ',
  10770         mm : '%d ਮਿੰਟ',
  10771         h : 'ਇੱਕ ਘੰਟਾ',
  10772         hh : '%d ਘੰਟੇ',
  10773         d : 'ਇੱਕ ਦਿਨ',
  10774         dd : '%d ਦਿਨ',
  10775         M : 'ਇੱਕ ਮਹੀਨਾ',
  10776         MM : '%d ਮਹੀਨੇ',
  10777         y : 'ਇੱਕ ਸਾਲ',
  10778         yy : '%d ਸਾਲ'
  10779     },
  10780     preparse: function (string) {
  10781         return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {
  10782             return numberMap$10[match];
  10783         });
  10784     },
  10785     postformat: function (string) {
  10786         return string.replace(/\d/g, function (match) {
  10787             return symbolMap$11[match];
  10788         });
  10789     },
  10790     // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
  10791     // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
  10792     meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,
  10793     meridiemHour : function (hour, meridiem) {
  10794         if (hour === 12) {
  10795             hour = 0;
  10796         }
  10797         if (meridiem === 'ਰਾਤ') {
  10798             return hour < 4 ? hour : hour + 12;
  10799         } else if (meridiem === 'ਸਵੇਰ') {
  10800             return hour;
  10801         } else if (meridiem === 'ਦੁਪਹਿਰ') {
  10802             return hour >= 10 ? hour : hour + 12;
  10803         } else if (meridiem === 'ਸ਼ਾਮ') {
  10804             return hour + 12;
  10805         }
  10806     },
  10807     meridiem : function (hour, minute, isLower) {
  10808         if (hour < 4) {
  10809             return 'ਰਾਤ';
  10810         } else if (hour < 10) {
  10811             return 'ਸਵੇਰ';
  10812         } else if (hour < 17) {
  10813             return 'ਦੁਪਹਿਰ';
  10814         } else if (hour < 20) {
  10815             return 'ਸ਼ਾਮ';
  10816         } else {
  10817             return 'ਰਾਤ';
  10818         }
  10819     },
  10820     week : {
  10821         dow : 0, // Sunday is the first day of the week.
  10822         doy : 6  // The week that contains Jan 1st is the first week of the year.
  10823     }
  10824 });
  10825 
  10826 //! moment.js locale configuration
  10827 //! locale : Polish [pl]
  10828 //! author : Rafal Hirsz : https://github.com/evoL
  10829 
  10830 var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_');
  10831 var monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');
  10832 function plural$3(n) {
  10833     return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);
  10834 }
  10835 function translate$7(number, withoutSuffix, key) {
  10836     var result = number + ' ';
  10837     switch (key) {
  10838         case 'm':
  10839             return withoutSuffix ? 'minuta' : 'minutę';
  10840         case 'mm':
  10841             return result + (plural$3(number) ? 'minuty' : 'minut');
  10842         case 'h':
  10843             return withoutSuffix  ? 'godzina'  : 'godzinę';
  10844         case 'hh':
  10845             return result + (plural$3(number) ? 'godziny' : 'godzin');
  10846         case 'MM':
  10847             return result + (plural$3(number) ? 'miesiące' : 'miesięcy');
  10848         case 'yy':
  10849             return result + (plural$3(number) ? 'lata' : 'lat');
  10850     }
  10851 }
  10852 
  10853 hooks.defineLocale('pl', {
  10854     months : function (momentToFormat, format) {
  10855         if (!momentToFormat) {
  10856             return monthsNominative;
  10857         } else if (format === '') {
  10858             // Hack: if format empty we know this is used to generate
  10859             // RegExp by moment. Give then back both valid forms of months
  10860             // in RegExp ready format.
  10861             return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';
  10862         } else if (/D MMMM/.test(format)) {
  10863             return monthsSubjective[momentToFormat.month()];
  10864         } else {
  10865             return monthsNominative[momentToFormat.month()];
  10866         }
  10867     },
  10868     monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
  10869     weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),
  10870     weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),
  10871     weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
  10872     longDateFormat : {
  10873         LT : 'HH:mm',
  10874         LTS : 'HH:mm:ss',
  10875         L : 'DD.MM.YYYY',
  10876         LL : 'D MMMM YYYY',
  10877         LLL : 'D MMMM YYYY HH:mm',
  10878         LLLL : 'dddd, D MMMM YYYY HH:mm'
  10879     },
  10880     calendar : {
  10881         sameDay: '[Dziś o] LT',
  10882         nextDay: '[Jutro o] LT',
  10883         nextWeek: '[W] dddd [o] LT',
  10884         lastDay: '[Wczoraj o] LT',
  10885         lastWeek: function () {
  10886             switch (this.day()) {
  10887                 case 0:
  10888                     return '[W zeszłą niedzielę o] LT';
  10889                 case 3:
  10890                     return '[W zeszłą środę o] LT';
  10891                 case 6:
  10892                     return '[W zeszłą sobotę o] LT';
  10893                 default:
  10894                     return '[W zeszły] dddd [o] LT';
  10895             }
  10896         },
  10897         sameElse: 'L'
  10898     },
  10899     relativeTime : {
  10900         future : 'za %s',
  10901         past : '%s temu',
  10902         s : 'kilka sekund',
  10903         m : translate$7,
  10904         mm : translate$7,
  10905         h : translate$7,
  10906         hh : translate$7,
  10907         d : '1 dzień',
  10908         dd : '%d dni',
  10909         M : 'miesiąc',
  10910         MM : translate$7,
  10911         y : 'rok',
  10912         yy : translate$7
  10913     },
  10914     dayOfMonthOrdinalParse: /\d{1,2}\./,
  10915     ordinal : '%d.',
  10916     week : {
  10917         dow : 1, // Monday is the first day of the week.
  10918         doy : 4  // The week that contains Jan 4th is the first week of the year.
  10919     }
  10920 });
  10921 
  10922 //! moment.js locale configuration
  10923 //! locale : Portuguese (Brazil) [pt-br]
  10924 //! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
  10925 
  10926 hooks.defineLocale('pt-br', {
  10927     months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
  10928     monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
  10929     weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),
  10930     weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
  10931     weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),
  10932     weekdaysParseExact : true,
  10933     longDateFormat : {
  10934         LT : 'HH:mm',
  10935         LTS : 'HH:mm:ss',
  10936         L : 'DD/MM/YYYY',
  10937         LL : 'D [de] MMMM [de] YYYY',
  10938         LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',
  10939         LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'
  10940     },
  10941     calendar : {
  10942         sameDay: '[Hoje às] LT',
  10943         nextDay: '[Amanhã às] LT',
  10944         nextWeek: 'dddd [às] LT',
  10945         lastDay: '[Ontem às] LT',
  10946         lastWeek: function () {
  10947             return (this.day() === 0 || this.day() === 6) ?
  10948                 '[Último] dddd [às] LT' : // Saturday + Sunday
  10949                 '[Última] dddd [às] LT'; // Monday - Friday
  10950         },
  10951         sameElse: 'L'
  10952     },
  10953     relativeTime : {
  10954         future : 'em %s',
  10955         past : '%s atrás',
  10956         s : 'poucos segundos',
  10957         m : 'um minuto',
  10958         mm : '%d minutos',
  10959         h : 'uma hora',
  10960         hh : '%d horas',
  10961         d : 'um dia',
  10962         dd : '%d dias',
  10963         M : 'um mês',
  10964         MM : '%d meses',
  10965         y : 'um ano',
  10966         yy : '%d anos'
  10967     },
  10968     dayOfMonthOrdinalParse: /\d{1,2}º/,
  10969     ordinal : '%dº'
  10970 });
  10971 
  10972 //! moment.js locale configuration
  10973 //! locale : Portuguese [pt]
  10974 //! author : Jefferson : https://github.com/jalex79
  10975 
  10976 hooks.defineLocale('pt', {
  10977     months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
  10978     monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
  10979     weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'),
  10980     weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
  10981     weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),
  10982     weekdaysParseExact : true,
  10983     longDateFormat : {
  10984         LT : 'HH:mm',
  10985         LTS : 'HH:mm:ss',
  10986         L : 'DD/MM/YYYY',
  10987         LL : 'D [de] MMMM [de] YYYY',
  10988         LLL : 'D [de] MMMM [de] YYYY HH:mm',
  10989         LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'
  10990     },
  10991     calendar : {
  10992         sameDay: '[Hoje às] LT',
  10993         nextDay: '[Amanhã às] LT',
  10994         nextWeek: 'dddd [às] LT',
  10995         lastDay: '[Ontem às] LT',
  10996         lastWeek: function () {
  10997             return (this.day() === 0 || this.day() === 6) ?
  10998                 '[Último] dddd [às] LT' : // Saturday + Sunday
  10999                 '[Última] dddd [às] LT'; // Monday - Friday
  11000         },
  11001         sameElse: 'L'
  11002     },
  11003     relativeTime : {
  11004         future : 'em %s',
  11005         past : 'há %s',
  11006         s : 'segundos',
  11007         m : 'um minuto',
  11008         mm : '%d minutos',
  11009         h : 'uma hora',
  11010         hh : '%d horas',
  11011         d : 'um dia',
  11012         dd : '%d dias',
  11013         M : 'um mês',
  11014         MM : '%d meses',
  11015         y : 'um ano',
  11016         yy : '%d anos'
  11017     },
  11018     dayOfMonthOrdinalParse: /\d{1,2}º/,
  11019     ordinal : '%dº',
  11020     week : {
  11021         dow : 1, // Monday is the first day of the week.
  11022         doy : 4  // The week that contains Jan 4th is the first week of the year.
  11023     }
  11024 });
  11025 
  11026 //! moment.js locale configuration
  11027 //! locale : Romanian [ro]
  11028 //! author : Vlad Gurdiga : https://github.com/gurdiga
  11029 //! author : Valentin Agachi : https://github.com/avaly
  11030 
  11031 function relativeTimeWithPlural$2(number, withoutSuffix, key) {
  11032     var format = {
  11033             'mm': 'minute',
  11034             'hh': 'ore',
  11035             'dd': 'zile',
  11036             'MM': 'luni',
  11037             'yy': 'ani'
  11038         },
  11039         separator = ' ';
  11040     if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
  11041         separator = ' de ';
  11042     }
  11043     return number + separator + format[key];
  11044 }
  11045 
  11046 hooks.defineLocale('ro', {
  11047     months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),
  11048     monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),
  11049     monthsParseExact: true,
  11050     weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
  11051     weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
  11052     weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
  11053     longDateFormat : {
  11054         LT : 'H:mm',
  11055         LTS : 'H:mm:ss',
  11056         L : 'DD.MM.YYYY',
  11057         LL : 'D MMMM YYYY',
  11058         LLL : 'D MMMM YYYY H:mm',
  11059         LLLL : 'dddd, D MMMM YYYY H:mm'
  11060     },
  11061     calendar : {
  11062         sameDay: '[azi la] LT',
  11063         nextDay: '[mâine la] LT',
  11064         nextWeek: 'dddd [la] LT',
  11065         lastDay: '[ieri la] LT',
  11066         lastWeek: '[fosta] dddd [la] LT',
  11067         sameElse: 'L'
  11068     },
  11069     relativeTime : {
  11070         future : 'peste %s',
  11071         past : '%s în urmă',
  11072         s : 'câteva secunde',
  11073         m : 'un minut',
  11074         mm : relativeTimeWithPlural$2,
  11075         h : 'o oră',
  11076         hh : relativeTimeWithPlural$2,
  11077         d : 'o zi',
  11078         dd : relativeTimeWithPlural$2,
  11079         M : 'o lună',
  11080         MM : relativeTimeWithPlural$2,
  11081         y : 'un an',
  11082         yy : relativeTimeWithPlural$2
  11083     },
  11084     week : {
  11085         dow : 1, // Monday is the first day of the week.
  11086         doy : 7  // The week that contains Jan 1st is the first week of the year.
  11087     }
  11088 });
  11089 
  11090 //! moment.js locale configuration
  11091 //! locale : Russian [ru]
  11092 //! author : Viktorminator : https://github.com/Viktorminator
  11093 //! Author : Menelion Elensúle : https://github.com/Oire
  11094 //! author : Коренберг Марк : https://github.com/socketpair
  11095 
  11096 function plural$4(word, num) {
  11097     var forms = word.split('_');
  11098     return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
  11099 }
  11100 function relativeTimeWithPlural$3(number, withoutSuffix, key) {
  11101     var format = {
  11102         'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
  11103         'hh': 'час_часа_часов',
  11104         'dd': 'день_дня_дней',
  11105         'MM': 'месяц_месяца_месяцев',
  11106         'yy': 'год_года_лет'
  11107     };
  11108     if (key === 'm') {
  11109         return withoutSuffix ? 'минута' : 'минуту';
  11110     }
  11111     else {
  11112         return number + ' ' + plural$4(format[key], +number);
  11113     }
  11114 }
  11115 var monthsParse$2 = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];
  11116 
  11117 // http://new.gramota.ru/spravka/rules/139-prop : § 103
  11118 // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
  11119 // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
  11120 hooks.defineLocale('ru', {
  11121     months : {
  11122         format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),
  11123         standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')
  11124     },
  11125     monthsShort : {
  11126         // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ?
  11127         format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),
  11128         standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')
  11129     },
  11130     weekdays : {
  11131         standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
  11132         format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),
  11133         isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/
  11134     },
  11135     weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
  11136     weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
  11137     monthsParse : monthsParse$2,
  11138     longMonthsParse : monthsParse$2,
  11139     shortMonthsParse : monthsParse$2,
  11140 
  11141     // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
  11142     monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
  11143 
  11144     // копия предыдущего
  11145     monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
  11146 
  11147     // полные названия с падежами
  11148     monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
  11149 
  11150     // Выражение, которое соотвествует только сокращённым формам
  11151     monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,
  11152     longDateFormat : {
  11153         LT : 'HH:mm',
  11154         LTS : 'HH:mm:ss',
  11155         L : 'DD.MM.YYYY',
  11156         LL : 'D MMMM YYYY г.',
  11157         LLL : 'D MMMM YYYY г., HH:mm',
  11158         LLLL : 'dddd, D MMMM YYYY г., HH:mm'
  11159     },
  11160     calendar : {
  11161         sameDay: '[Сегодня в] LT',
  11162         nextDay: '[Завтра в] LT',
  11163         lastDay: '[Вчера в] LT',
  11164         nextWeek: function (now) {
  11165             if (now.week() !== this.week()) {
  11166                 switch (this.day()) {
  11167                     case 0:
  11168                         return '[В следующее] dddd [в] LT';
  11169                     case 1:
  11170                     case 2:
  11171                     case 4:
  11172                         return '[В следующий] dddd [в] LT';
  11173                     case 3:
  11174                     case 5:
  11175                     case 6:
  11176                         return '[В следующую] dddd [в] LT';
  11177                 }
  11178             } else {
  11179                 if (this.day() === 2) {
  11180                     return '[Во] dddd [в] LT';
  11181                 } else {
  11182                     return '[В] dddd [в] LT';
  11183                 }
  11184             }
  11185         },
  11186         lastWeek: function (now) {
  11187             if (now.week() !== this.week()) {
  11188                 switch (this.day()) {
  11189                     case 0:
  11190                         return '[В прошлое] dddd [в] LT';
  11191                     case 1:
  11192                     case 2:
  11193                     case 4:
  11194                         return '[В прошлый] dddd [в] LT';
  11195                     case 3:
  11196                     case 5:
  11197                     case 6:
  11198                         return '[В прошлую] dddd [в] LT';
  11199                 }
  11200             } else {
  11201                 if (this.day() === 2) {
  11202                     return '[Во] dddd [в] LT';
  11203                 } else {
  11204                     return '[В] dddd [в] LT';
  11205                 }
  11206             }
  11207         },
  11208         sameElse: 'L'
  11209     },
  11210     relativeTime : {
  11211         future : 'через %s',
  11212         past : '%s назад',
  11213         s : 'несколько секунд',
  11214         m : relativeTimeWithPlural$3,
  11215         mm : relativeTimeWithPlural$3,
  11216         h : 'час',
  11217         hh : relativeTimeWithPlural$3,
  11218         d : 'день',
  11219         dd : relativeTimeWithPlural$3,
  11220         M : 'месяц',
  11221         MM : relativeTimeWithPlural$3,
  11222         y : 'год',
  11223         yy : relativeTimeWithPlural$3
  11224     },
  11225     meridiemParse: /ночи|утра|дня|вечера/i,
  11226     isPM : function (input) {
  11227         return /^(дня|вечера)$/.test(input);
  11228     },
  11229     meridiem : function (hour, minute, isLower) {
  11230         if (hour < 4) {
  11231             return 'ночи';
  11232         } else if (hour < 12) {
  11233             return 'утра';
  11234         } else if (hour < 17) {
  11235             return 'дня';
  11236         } else {
  11237             return 'вечера';
  11238         }
  11239     },
  11240     dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/,
  11241     ordinal: function (number, period) {
  11242         switch (period) {
  11243             case 'M':
  11244             case 'd':
  11245             case 'DDD':
  11246                 return number + '-й';
  11247             case 'D':
  11248                 return number + '-го';
  11249             case 'w':
  11250             case 'W':
  11251                 return number + '-я';
  11252             default:
  11253                 return number;
  11254         }
  11255     },
  11256     week : {
  11257         dow : 1, // Monday is the first day of the week.
  11258         doy : 7  // The week that contains Jan 1st is the first week of the year.
  11259     }
  11260 });
  11261 
  11262 //! moment.js locale configuration
  11263 //! locale : Sindhi [sd]
  11264 //! author : Narain Sagar : https://github.com/narainsagar
  11265 
  11266 var months$6 = [
  11267     'جنوري',
  11268     'فيبروري',
  11269     'مارچ',
  11270     'اپريل',
  11271     'مئي',
  11272     'جون',
  11273     'جولاءِ',
  11274     'آگسٽ',
  11275     'سيپٽمبر',
  11276     'آڪٽوبر',
  11277     'نومبر',
  11278     'ڊسمبر'
  11279 ];
  11280 var days$1 = [
  11281     'آچر',
  11282     'سومر',
  11283     'اڱارو',
  11284     'اربع',
  11285     'خميس',
  11286     'جمع',
  11287     'ڇنڇر'
  11288 ];
  11289 
  11290 hooks.defineLocale('sd', {
  11291     months : months$6,
  11292     monthsShort : months$6,
  11293     weekdays : days$1,
  11294     weekdaysShort : days$1,
  11295     weekdaysMin : days$1,
  11296     longDateFormat : {
  11297         LT : 'HH:mm',
  11298         LTS : 'HH:mm:ss',
  11299         L : 'DD/MM/YYYY',
  11300         LL : 'D MMMM YYYY',
  11301         LLL : 'D MMMM YYYY HH:mm',
  11302         LLLL : 'dddd، D MMMM YYYY HH:mm'
  11303     },
  11304     meridiemParse: /صبح|شام/,
  11305     isPM : function (input) {
  11306         return 'شام' === input;
  11307     },
  11308     meridiem : function (hour, minute, isLower) {
  11309         if (hour < 12) {
  11310             return 'صبح';
  11311         }
  11312         return 'شام';
  11313     },
  11314     calendar : {
  11315         sameDay : '[اڄ] LT',
  11316         nextDay : '[سڀاڻي] LT',
  11317         nextWeek : 'dddd [اڳين هفتي تي] LT',
  11318         lastDay : '[ڪالهه] LT',
  11319         lastWeek : '[گزريل هفتي] dddd [تي] LT',
  11320         sameElse : 'L'
  11321     },
  11322     relativeTime : {
  11323         future : '%s پوء',
  11324         past : '%s اڳ',
  11325         s : 'چند سيڪنڊ',
  11326         m : 'هڪ منٽ',
  11327         mm : '%d منٽ',
  11328         h : 'هڪ ڪلاڪ',
  11329         hh : '%d ڪلاڪ',
  11330         d : 'هڪ ڏينهن',
  11331         dd : '%d ڏينهن',
  11332         M : 'هڪ مهينو',
  11333         MM : '%d مهينا',
  11334         y : 'هڪ سال',
  11335         yy : '%d سال'
  11336     },
  11337     preparse: function (string) {
  11338         return string.replace(/،/g, ',');
  11339     },
  11340     postformat: function (string) {
  11341         return string.replace(/,/g, '،');
  11342     },
  11343     week : {
  11344         dow : 1, // Monday is the first day of the week.
  11345         doy : 4  // The week that contains Jan 4th is the first week of the year.
  11346     }
  11347 });
  11348 
  11349 //! moment.js locale configuration
  11350 //! locale : Northern Sami [se]
  11351 //! authors : Bård Rolstad Henriksen : https://github.com/karamell
  11352 
  11353 
  11354 hooks.defineLocale('se', {
  11355     months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),
  11356     monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),
  11357     weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),
  11358     weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),
  11359     weekdaysMin : 's_v_m_g_d_b_L'.split('_'),
  11360     longDateFormat : {
  11361         LT : 'HH:mm',
  11362         LTS : 'HH:mm:ss',
  11363         L : 'DD.MM.YYYY',
  11364         LL : 'MMMM D. [b.] YYYY',
  11365         LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',
  11366         LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'
  11367     },
  11368     calendar : {
  11369         sameDay: '[otne ti] LT',
  11370         nextDay: '[ihttin ti] LT',
  11371         nextWeek: 'dddd [ti] LT',
  11372         lastDay: '[ikte ti] LT',
  11373         lastWeek: '[ovddit] dddd [ti] LT',
  11374         sameElse: 'L'
  11375     },
  11376     relativeTime : {
  11377         future : '%s geažes',
  11378         past : 'maŋit %s',
  11379         s : 'moadde sekunddat',
  11380         m : 'okta minuhta',
  11381         mm : '%d minuhtat',
  11382         h : 'okta diimmu',
  11383         hh : '%d diimmut',
  11384         d : 'okta beaivi',
  11385         dd : '%d beaivvit',
  11386         M : 'okta mánnu',
  11387         MM : '%d mánut',
  11388         y : 'okta jahki',
  11389         yy : '%d jagit'
  11390     },
  11391     dayOfMonthOrdinalParse: /\d{1,2}\./,
  11392     ordinal : '%d.',
  11393     week : {
  11394         dow : 1, // Monday is the first day of the week.
  11395         doy : 4  // The week that contains Jan 4th is the first week of the year.
  11396     }
  11397 });
  11398 
  11399 //! moment.js locale configuration
  11400 //! locale : Sinhalese [si]
  11401 //! author : Sampath Sitinamaluwa : https://github.com/sampathsris
  11402 
  11403 /*jshint -W100*/
  11404 hooks.defineLocale('si', {
  11405     months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),
  11406     monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),
  11407     weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),
  11408     weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),
  11409     weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),
  11410     weekdaysParseExact : true,
  11411     longDateFormat : {
  11412         LT : 'a h:mm',
  11413         LTS : 'a h:mm:ss',
  11414         L : 'YYYY/MM/DD',
  11415         LL : 'YYYY MMMM D',
  11416         LLL : 'YYYY MMMM D, a h:mm',
  11417         LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'
  11418     },
  11419     calendar : {
  11420         sameDay : '[අද] LT[ට]',
  11421         nextDay : '[හෙට] LT[ට]',
  11422         nextWeek : 'dddd LT[ට]',
  11423         lastDay : '[ඊයේ] LT[ට]',
  11424         lastWeek : '[පසුගිය] dddd LT[ට]',
  11425         sameElse : 'L'
  11426     },
  11427     relativeTime : {
  11428         future : '%sකින්',
  11429         past : '%sකට පෙර',
  11430         s : 'තත්පර කිහිපය',
  11431         m : 'මිනිත්තුව',
  11432         mm : 'මිනිත්තු %d',
  11433         h : 'පැය',
  11434         hh : 'පැය %d',
  11435         d : 'දිනය',
  11436         dd : 'දින %d',
  11437         M : 'මාසය',
  11438         MM : 'මාස %d',
  11439         y : 'වසර',
  11440         yy : 'වසර %d'
  11441     },
  11442     dayOfMonthOrdinalParse: /\d{1,2} වැනි/,
  11443     ordinal : function (number) {
  11444         return number + ' වැනි';
  11445     },
  11446     meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,
  11447     isPM : function (input) {
  11448         return input === 'ප.ව.' || input === 'පස් වරු';
  11449     },
  11450     meridiem : function (hours, minutes, isLower) {
  11451         if (hours > 11) {
  11452             return isLower ? 'ප.ව.' : 'පස් වරු';
  11453         } else {
  11454             return isLower ? 'පෙ.ව.' : 'පෙර වරු';
  11455         }
  11456     }
  11457 });
  11458 
  11459 //! moment.js locale configuration
  11460 //! locale : Slovak [sk]
  11461 //! author : Martin Minka : https://github.com/k2s
  11462 //! based on work of petrbela : https://github.com/petrbela
  11463 
  11464 var months$7 = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_');
  11465 var monthsShort$4 = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');
  11466 function plural$5(n) {
  11467     return (n > 1) && (n < 5);
  11468 }
  11469 function translate$8(number, withoutSuffix, key, isFuture) {
  11470     var result = number + ' ';
  11471     switch (key) {
  11472         case 's':  // a few seconds / in a few seconds / a few seconds ago
  11473             return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';
  11474         case 'm':  // a minute / in a minute / a minute ago
  11475             return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');
  11476         case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
  11477             if (withoutSuffix || isFuture) {
  11478                 return result + (plural$5(number) ? 'minúty' : 'minút');
  11479             } else {
  11480                 return result + 'minútami';
  11481             }
  11482             break;
  11483         case 'h':  // an hour / in an hour / an hour ago
  11484             return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
  11485         case 'hh': // 9 hours / in 9 hours / 9 hours ago
  11486             if (withoutSuffix || isFuture) {
  11487                 return result + (plural$5(number) ? 'hodiny' : 'hodín');
  11488             } else {
  11489                 return result + 'hodinami';
  11490             }
  11491             break;
  11492         case 'd':  // a day / in a day / a day ago
  11493             return (withoutSuffix || isFuture) ? 'deň' : 'dňom';
  11494         case 'dd': // 9 days / in 9 days / 9 days ago
  11495             if (withoutSuffix || isFuture) {
  11496                 return result + (plural$5(number) ? 'dni' : 'dní');
  11497             } else {
  11498                 return result + 'dňami';
  11499             }
  11500             break;
  11501         case 'M':  // a month / in a month / a month ago
  11502             return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';
  11503         case 'MM': // 9 months / in 9 months / 9 months ago
  11504             if (withoutSuffix || isFuture) {
  11505                 return result + (plural$5(number) ? 'mesiace' : 'mesiacov');
  11506             } else {
  11507                 return result + 'mesiacmi';
  11508             }
  11509             break;
  11510         case 'y':  // a year / in a year / a year ago
  11511             return (withoutSuffix || isFuture) ? 'rok' : 'rokom';
  11512         case 'yy': // 9 years / in 9 years / 9 years ago
  11513             if (withoutSuffix || isFuture) {
  11514                 return result + (plural$5(number) ? 'roky' : 'rokov');
  11515             } else {
  11516                 return result + 'rokmi';
  11517             }
  11518             break;
  11519     }
  11520 }
  11521 
  11522 hooks.defineLocale('sk', {
  11523     months : months$7,
  11524     monthsShort : monthsShort$4,
  11525     weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),
  11526     weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),
  11527     weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),
  11528     longDateFormat : {
  11529         LT: 'H:mm',
  11530         LTS : 'H:mm:ss',
  11531         L : 'DD.MM.YYYY',
  11532         LL : 'D. MMMM YYYY',
  11533         LLL : 'D. MMMM YYYY H:mm',
  11534         LLLL : 'dddd D. MMMM YYYY H:mm'
  11535     },
  11536     calendar : {
  11537         sameDay: '[dnes o] LT',
  11538         nextDay: '[zajtra o] LT',
  11539         nextWeek: function () {
  11540             switch (this.day()) {
  11541                 case 0:
  11542                     return '[v nedeľu o] LT';
  11543                 case 1:
  11544                 case 2:
  11545                     return '[v] dddd [o] LT';
  11546                 case 3:
  11547                     return '[v stredu o] LT';
  11548                 case 4:
  11549                     return '[vo štvrtok o] LT';
  11550                 case 5:
  11551                     return '[v piatok o] LT';
  11552                 case 6:
  11553                     return '[v sobotu o] LT';
  11554             }
  11555         },
  11556         lastDay: '[včera o] LT',
  11557         lastWeek: function () {
  11558             switch (this.day()) {
  11559                 case 0:
  11560                     return '[minulú nedeľu o] LT';
  11561                 case 1:
  11562                 case 2:
  11563                     return '[minulý] dddd [o] LT';
  11564                 case 3:
  11565                     return '[minulú stredu o] LT';
  11566                 case 4:
  11567                 case 5:
  11568                     return '[minulý] dddd [o] LT';
  11569                 case 6:
  11570                     return '[minulú sobotu o] LT';
  11571             }
  11572         },
  11573         sameElse: 'L'
  11574     },
  11575     relativeTime : {
  11576         future : 'za %s',
  11577         past : 'pred %s',
  11578         s : translate$8,
  11579         m : translate$8,
  11580         mm : translate$8,
  11581         h : translate$8,
  11582         hh : translate$8,
  11583         d : translate$8,
  11584         dd : translate$8,
  11585         M : translate$8,
  11586         MM : translate$8,
  11587         y : translate$8,
  11588         yy : translate$8
  11589     },
  11590     dayOfMonthOrdinalParse: /\d{1,2}\./,
  11591     ordinal : '%d.',
  11592     week : {
  11593         dow : 1, // Monday is the first day of the week.
  11594         doy : 4  // The week that contains Jan 4th is the first week of the year.
  11595     }
  11596 });
  11597 
  11598 //! moment.js locale configuration
  11599 //! locale : Slovenian [sl]
  11600 //! author : Robert Sedovšek : https://github.com/sedovsek
  11601 
  11602 function processRelativeTime$6(number, withoutSuffix, key, isFuture) {
  11603     var result = number + ' ';
  11604     switch (key) {
  11605         case 's':
  11606             return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';
  11607         case 'm':
  11608             return withoutSuffix ? 'ena minuta' : 'eno minuto';
  11609         case 'mm':
  11610             if (number === 1) {
  11611                 result += withoutSuffix ? 'minuta' : 'minuto';
  11612             } else if (number === 2) {
  11613                 result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
  11614             } else if (number < 5) {
  11615                 result += withoutSuffix || isFuture ? 'minute' : 'minutami';
  11616             } else {
  11617                 result += withoutSuffix || isFuture ? 'minut' : 'minutami';
  11618             }
  11619             return result;
  11620         case 'h':
  11621             return withoutSuffix ? 'ena ura' : 'eno uro';
  11622         case 'hh':
  11623             if (number === 1) {
  11624                 result += withoutSuffix ? 'ura' : 'uro';
  11625             } else if (number === 2) {
  11626                 result += withoutSuffix || isFuture ? 'uri' : 'urama';
  11627             } else if (number < 5) {
  11628                 result += withoutSuffix || isFuture ? 'ure' : 'urami';
  11629             } else {
  11630                 result += withoutSuffix || isFuture ? 'ur' : 'urami';
  11631             }
  11632             return result;
  11633         case 'd':
  11634             return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
  11635         case 'dd':
  11636             if (number === 1) {
  11637                 result += withoutSuffix || isFuture ? 'dan' : 'dnem';
  11638             } else if (number === 2) {
  11639                 result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
  11640             } else {
  11641                 result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
  11642             }
  11643             return result;
  11644         case 'M':
  11645             return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
  11646         case 'MM':
  11647             if (number === 1) {
  11648                 result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
  11649             } else if (number === 2) {
  11650                 result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
  11651             } else if (number < 5) {
  11652                 result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
  11653             } else {
  11654                 result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
  11655             }
  11656             return result;
  11657         case 'y':
  11658             return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
  11659         case 'yy':
  11660             if (number === 1) {
  11661                 result += withoutSuffix || isFuture ? 'leto' : 'letom';
  11662             } else if (number === 2) {
  11663                 result += withoutSuffix || isFuture ? 'leti' : 'letoma';
  11664             } else if (number < 5) {
  11665                 result += withoutSuffix || isFuture ? 'leta' : 'leti';
  11666             } else {
  11667                 result += withoutSuffix || isFuture ? 'let' : 'leti';
  11668             }
  11669             return result;
  11670     }
  11671 }
  11672 
  11673 hooks.defineLocale('sl', {
  11674     months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),
  11675     monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),
  11676     monthsParseExact: true,
  11677     weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
  11678     weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
  11679     weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),
  11680     weekdaysParseExact : true,
  11681     longDateFormat : {
  11682         LT : 'H:mm',
  11683         LTS : 'H:mm:ss',
  11684         L : 'DD.MM.YYYY',
  11685         LL : 'D. MMMM YYYY',
  11686         LLL : 'D. MMMM YYYY H:mm',
  11687         LLLL : 'dddd, D. MMMM YYYY H:mm'
  11688     },
  11689     calendar : {
  11690         sameDay  : '[danes ob] LT',
  11691         nextDay  : '[jutri ob] LT',
  11692 
  11693         nextWeek : function () {
  11694             switch (this.day()) {
  11695                 case 0:
  11696                     return '[v] [nedeljo] [ob] LT';
  11697                 case 3:
  11698                     return '[v] [sredo] [ob] LT';
  11699                 case 6:
  11700                     return '[v] [soboto] [ob] LT';
  11701                 case 1:
  11702                 case 2:
  11703                 case 4:
  11704                 case 5:
  11705                     return '[v] dddd [ob] LT';
  11706             }
  11707         },
  11708         lastDay  : '[včeraj ob] LT',
  11709         lastWeek : function () {
  11710             switch (this.day()) {
  11711                 case 0:
  11712                     return '[prejšnjo] [nedeljo] [ob] LT';
  11713                 case 3:
  11714                     return '[prejšnjo] [sredo] [ob] LT';
  11715                 case 6:
  11716                     return '[prejšnjo] [soboto] [ob] LT';
  11717                 case 1:
  11718                 case 2:
  11719                 case 4:
  11720                 case 5:
  11721                     return '[prejšnji] dddd [ob] LT';
  11722             }
  11723         },
  11724         sameElse : 'L'
  11725     },
  11726     relativeTime : {
  11727         future : 'čez %s',
  11728         past   : 'pred %s',
  11729         s      : processRelativeTime$6,
  11730         m      : processRelativeTime$6,
  11731         mm     : processRelativeTime$6,
  11732         h      : processRelativeTime$6,
  11733         hh     : processRelativeTime$6,
  11734         d      : processRelativeTime$6,
  11735         dd     : processRelativeTime$6,
  11736         M      : processRelativeTime$6,
  11737         MM     : processRelativeTime$6,
  11738         y      : processRelativeTime$6,
  11739         yy     : processRelativeTime$6
  11740     },
  11741     dayOfMonthOrdinalParse: /\d{1,2}\./,
  11742     ordinal : '%d.',
  11743     week : {
  11744         dow : 1, // Monday is the first day of the week.
  11745         doy : 7  // The week that contains Jan 1st is the first week of the year.
  11746     }
  11747 });
  11748 
  11749 //! moment.js locale configuration
  11750 //! locale : Albanian [sq]
  11751 //! author : Flakërim Ismani : https://github.com/flakerimi
  11752 //! author : Menelion Elensúle : https://github.com/Oire
  11753 //! author : Oerd Cukalla : https://github.com/oerd
  11754 
  11755 hooks.defineLocale('sq', {
  11756     months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),
  11757     monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),
  11758     weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),
  11759     weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
  11760     weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),
  11761     weekdaysParseExact : true,
  11762     meridiemParse: /PD|MD/,
  11763     isPM: function (input) {
  11764         return input.charAt(0) === 'M';
  11765     },
  11766     meridiem : function (hours, minutes, isLower) {
  11767         return hours < 12 ? 'PD' : 'MD';
  11768     },
  11769     longDateFormat : {
  11770         LT : 'HH:mm',
  11771         LTS : 'HH:mm:ss',
  11772         L : 'DD/MM/YYYY',
  11773         LL : 'D MMMM YYYY',
  11774         LLL : 'D MMMM YYYY HH:mm',
  11775         LLLL : 'dddd, D MMMM YYYY HH:mm'
  11776     },
  11777     calendar : {
  11778         sameDay : '[Sot në] LT',
  11779         nextDay : '[Nesër në] LT',
  11780         nextWeek : 'dddd [në] LT',
  11781         lastDay : '[Dje në] LT',
  11782         lastWeek : 'dddd [e kaluar në] LT',
  11783         sameElse : 'L'
  11784     },
  11785     relativeTime : {
  11786         future : 'në %s',
  11787         past : '%s më parë',
  11788         s : 'disa sekonda',
  11789         m : 'një minutë',
  11790         mm : '%d minuta',
  11791         h : 'një orë',
  11792         hh : '%d orë',
  11793         d : 'një ditë',
  11794         dd : '%d ditë',
  11795         M : 'një muaj',
  11796         MM : '%d muaj',
  11797         y : 'një vit',
  11798         yy : '%d vite'
  11799     },
  11800     dayOfMonthOrdinalParse: /\d{1,2}\./,
  11801     ordinal : '%d.',
  11802     week : {
  11803         dow : 1, // Monday is the first day of the week.
  11804         doy : 4  // The week that contains Jan 4th is the first week of the year.
  11805     }
  11806 });
  11807 
  11808 //! moment.js locale configuration
  11809 //! locale : Serbian Cyrillic [sr-cyrl]
  11810 //! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
  11811 
  11812 var translator$1 = {
  11813     words: { //Different grammatical cases
  11814         m: ['један минут', 'једне минуте'],
  11815         mm: ['минут', 'минуте', 'минута'],
  11816         h: ['један сат', 'једног сата'],
  11817         hh: ['сат', 'сата', 'сати'],
  11818         dd: ['дан', 'дана', 'дана'],
  11819         MM: ['месец', 'месеца', 'месеци'],
  11820         yy: ['година', 'године', 'година']
  11821     },
  11822     correctGrammaticalCase: function (number, wordKey) {
  11823         return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
  11824     },
  11825     translate: function (number, withoutSuffix, key) {
  11826         var wordKey = translator$1.words[key];
  11827         if (key.length === 1) {
  11828             return withoutSuffix ? wordKey[0] : wordKey[1];
  11829         } else {
  11830             return number + ' ' + translator$1.correctGrammaticalCase(number, wordKey);
  11831         }
  11832     }
  11833 };
  11834 
  11835 hooks.defineLocale('sr-cyrl', {
  11836     months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),
  11837     monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),
  11838     monthsParseExact: true,
  11839     weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),
  11840     weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),
  11841     weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),
  11842     weekdaysParseExact : true,
  11843     longDateFormat: {
  11844         LT: 'H:mm',
  11845         LTS : 'H:mm:ss',
  11846         L: 'DD.MM.YYYY',
  11847         LL: 'D. MMMM YYYY',
  11848         LLL: 'D. MMMM YYYY H:mm',
  11849         LLLL: 'dddd, D. MMMM YYYY H:mm'
  11850     },
  11851     calendar: {
  11852         sameDay: '[данас у] LT',
  11853         nextDay: '[сутра у] LT',
  11854         nextWeek: function () {
  11855             switch (this.day()) {
  11856                 case 0:
  11857                     return '[у] [недељу] [у] LT';
  11858                 case 3:
  11859                     return '[у] [среду] [у] LT';
  11860                 case 6:
  11861                     return '[у] [суботу] [у] LT';
  11862                 case 1:
  11863                 case 2:
  11864                 case 4:
  11865                 case 5:
  11866                     return '[у] dddd [у] LT';
  11867             }
  11868         },
  11869         lastDay  : '[јуче у] LT',
  11870         lastWeek : function () {
  11871             var lastWeekDays = [
  11872                 '[прошле] [недеље] [у] LT',
  11873                 '[прошлог] [понедељка] [у] LT',
  11874                 '[прошлог] [уторка] [у] LT',
  11875                 '[прошле] [среде] [у] LT',
  11876                 '[прошлог] [четвртка] [у] LT',
  11877                 '[прошлог] [петка] [у] LT',
  11878                 '[прошле] [суботе] [у] LT'
  11879             ];
  11880             return lastWeekDays[this.day()];
  11881         },
  11882         sameElse : 'L'
  11883     },
  11884     relativeTime : {
  11885         future : 'за %s',
  11886         past   : 'пре %s',
  11887         s      : 'неколико секунди',
  11888         m      : translator$1.translate,
  11889         mm     : translator$1.translate,
  11890         h      : translator$1.translate,
  11891         hh     : translator$1.translate,
  11892         d      : 'дан',
  11893         dd     : translator$1.translate,
  11894         M      : 'месец',
  11895         MM     : translator$1.translate,
  11896         y      : 'годину',
  11897         yy     : translator$1.translate
  11898     },
  11899     dayOfMonthOrdinalParse: /\d{1,2}\./,
  11900     ordinal : '%d.',
  11901     week : {
  11902         dow : 1, // Monday is the first day of the week.
  11903         doy : 7  // The week that contains Jan 1st is the first week of the year.
  11904     }
  11905 });
  11906 
  11907 //! moment.js locale configuration
  11908 //! locale : Serbian [sr]
  11909 //! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
  11910 
  11911 var translator$2 = {
  11912     words: { //Different grammatical cases
  11913         m: ['jedan minut', 'jedne minute'],
  11914         mm: ['minut', 'minute', 'minuta'],
  11915         h: ['jedan sat', 'jednog sata'],
  11916         hh: ['sat', 'sata', 'sati'],
  11917         dd: ['dan', 'dana', 'dana'],
  11918         MM: ['mesec', 'meseca', 'meseci'],
  11919         yy: ['godina', 'godine', 'godina']
  11920     },
  11921     correctGrammaticalCase: function (number, wordKey) {
  11922         return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
  11923     },
  11924     translate: function (number, withoutSuffix, key) {
  11925         var wordKey = translator$2.words[key];
  11926         if (key.length === 1) {
  11927             return withoutSuffix ? wordKey[0] : wordKey[1];
  11928         } else {
  11929             return number + ' ' + translator$2.correctGrammaticalCase(number, wordKey);
  11930         }
  11931     }
  11932 };
  11933 
  11934 hooks.defineLocale('sr', {
  11935     months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
  11936     monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
  11937     monthsParseExact: true,
  11938     weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),
  11939     weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),
  11940     weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
  11941     weekdaysParseExact : true,
  11942     longDateFormat: {
  11943         LT: 'H:mm',
  11944         LTS : 'H:mm:ss',
  11945         L: 'DD.MM.YYYY',
  11946         LL: 'D. MMMM YYYY',
  11947         LLL: 'D. MMMM YYYY H:mm',
  11948         LLLL: 'dddd, D. MMMM YYYY H:mm'
  11949     },
  11950     calendar: {
  11951         sameDay: '[danas u] LT',
  11952         nextDay: '[sutra u] LT',
  11953         nextWeek: function () {
  11954             switch (this.day()) {
  11955                 case 0:
  11956                     return '[u] [nedelju] [u] LT';
  11957                 case 3:
  11958                     return '[u] [sredu] [u] LT';
  11959                 case 6:
  11960                     return '[u] [subotu] [u] LT';
  11961                 case 1:
  11962                 case 2:
  11963                 case 4:
  11964                 case 5:
  11965                     return '[u] dddd [u] LT';
  11966             }
  11967         },
  11968         lastDay  : '[juče u] LT',
  11969         lastWeek : function () {
  11970             var lastWeekDays = [
  11971                 '[prošle] [nedelje] [u] LT',
  11972                 '[prošlog] [ponedeljka] [u] LT',
  11973                 '[prošlog] [utorka] [u] LT',
  11974                 '[prošle] [srede] [u] LT',
  11975                 '[prošlog] [četvrtka] [u] LT',
  11976                 '[prošlog] [petka] [u] LT',
  11977                 '[prošle] [subote] [u] LT'
  11978             ];
  11979             return lastWeekDays[this.day()];
  11980         },
  11981         sameElse : 'L'
  11982     },
  11983     relativeTime : {
  11984         future : 'za %s',
  11985         past   : 'pre %s',
  11986         s      : 'nekoliko sekundi',
  11987         m      : translator$2.translate,
  11988         mm     : translator$2.translate,
  11989         h      : translator$2.translate,
  11990         hh     : translator$2.translate,
  11991         d      : 'dan',
  11992         dd     : translator$2.translate,
  11993         M      : 'mesec',
  11994         MM     : translator$2.translate,
  11995         y      : 'godinu',
  11996         yy     : translator$2.translate
  11997     },
  11998     dayOfMonthOrdinalParse: /\d{1,2}\./,
  11999     ordinal : '%d.',
  12000     week : {
  12001         dow : 1, // Monday is the first day of the week.
  12002         doy : 7  // The week that contains Jan 1st is the first week of the year.
  12003     }
  12004 });
  12005 
  12006 //! moment.js locale configuration
  12007 //! locale : siSwati [ss]
  12008 //! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies
  12009 
  12010 
  12011 hooks.defineLocale('ss', {
  12012     months : "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'),
  12013     monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
  12014     weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),
  12015     weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
  12016     weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
  12017     weekdaysParseExact : true,
  12018     longDateFormat : {
  12019         LT : 'h:mm A',
  12020         LTS : 'h:mm:ss A',
  12021         L : 'DD/MM/YYYY',
  12022         LL : 'D MMMM YYYY',
  12023         LLL : 'D MMMM YYYY h:mm A',
  12024         LLLL : 'dddd, D MMMM YYYY h:mm A'
  12025     },
  12026     calendar : {
  12027         sameDay : '[Namuhla nga] LT',
  12028         nextDay : '[Kusasa nga] LT',
  12029         nextWeek : 'dddd [nga] LT',
  12030         lastDay : '[Itolo nga] LT',
  12031         lastWeek : 'dddd [leliphelile] [nga] LT',
  12032         sameElse : 'L'
  12033     },
  12034     relativeTime : {
  12035         future : 'nga %s',
  12036         past : 'wenteka nga %s',
  12037         s : 'emizuzwana lomcane',
  12038         m : 'umzuzu',
  12039         mm : '%d emizuzu',
  12040         h : 'lihora',
  12041         hh : '%d emahora',
  12042         d : 'lilanga',
  12043         dd : '%d emalanga',
  12044         M : 'inyanga',
  12045         MM : '%d tinyanga',
  12046         y : 'umnyaka',
  12047         yy : '%d iminyaka'
  12048     },
  12049     meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
  12050     meridiem : function (hours, minutes, isLower) {
  12051         if (hours < 11) {
  12052             return 'ekuseni';
  12053         } else if (hours < 15) {
  12054             return 'emini';
  12055         } else if (hours < 19) {
  12056             return 'entsambama';
  12057         } else {
  12058             return 'ebusuku';
  12059         }
  12060     },
  12061     meridiemHour : function (hour, meridiem) {
  12062         if (hour === 12) {
  12063             hour = 0;
  12064         }
  12065         if (meridiem === 'ekuseni') {
  12066             return hour;
  12067         } else if (meridiem === 'emini') {
  12068             return hour >= 11 ? hour : hour + 12;
  12069         } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
  12070             if (hour === 0) {
  12071                 return 0;
  12072             }
  12073             return hour + 12;
  12074         }
  12075     },
  12076     dayOfMonthOrdinalParse: /\d{1,2}/,
  12077     ordinal : '%d',
  12078     week : {
  12079         dow : 1, // Monday is the first day of the week.
  12080         doy : 4  // The week that contains Jan 4th is the first week of the year.
  12081     }
  12082 });
  12083 
  12084 //! moment.js locale configuration
  12085 //! locale : Swedish [sv]
  12086 //! author : Jens Alm : https://github.com/ulmus
  12087 
  12088 hooks.defineLocale('sv', {
  12089     months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),
  12090     monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
  12091     weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
  12092     weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),
  12093     weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),
  12094     longDateFormat : {
  12095         LT : 'HH:mm',
  12096         LTS : 'HH:mm:ss',
  12097         L : 'YYYY-MM-DD',
  12098         LL : 'D MMMM YYYY',
  12099         LLL : 'D MMMM YYYY [kl.] HH:mm',
  12100         LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',
  12101         lll : 'D MMM YYYY HH:mm',
  12102         llll : 'ddd D MMM YYYY HH:mm'
  12103     },
  12104     calendar : {
  12105         sameDay: '[Idag] LT',
  12106         nextDay: '[Imorgon] LT',
  12107         lastDay: '[Igår] LT',
  12108         nextWeek: '[På] dddd LT',
  12109         lastWeek: '[I] dddd[s] LT',
  12110         sameElse: 'L'
  12111     },
  12112     relativeTime : {
  12113         future : 'om %s',
  12114         past : 'för %s sedan',
  12115         s : 'några sekunder',
  12116         m : 'en minut',
  12117         mm : '%d minuter',
  12118         h : 'en timme',
  12119         hh : '%d timmar',
  12120         d : 'en dag',
  12121         dd : '%d dagar',
  12122         M : 'en månad',
  12123         MM : '%d månader',
  12124         y : 'ett år',
  12125         yy : '%d år'
  12126     },
  12127     dayOfMonthOrdinalParse: /\d{1,2}(e|a)/,
  12128     ordinal : function (number) {
  12129         var b = number % 10,
  12130             output = (~~(number % 100 / 10) === 1) ? 'e' :
  12131             (b === 1) ? 'a' :
  12132             (b === 2) ? 'a' :
  12133             (b === 3) ? 'e' : 'e';
  12134         return number + output;
  12135     },
  12136     week : {
  12137         dow : 1, // Monday is the first day of the week.
  12138         doy : 4  // The week that contains Jan 4th is the first week of the year.
  12139     }
  12140 });
  12141 
  12142 //! moment.js locale configuration
  12143 //! locale : Swahili [sw]
  12144 //! author : Fahad Kassim : https://github.com/fadsel
  12145 
  12146 hooks.defineLocale('sw', {
  12147     months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),
  12148     monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
  12149     weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),
  12150     weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
  12151     weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
  12152     weekdaysParseExact : true,
  12153     longDateFormat : {
  12154         LT : 'HH:mm',
  12155         LTS : 'HH:mm:ss',
  12156         L : 'DD.MM.YYYY',
  12157         LL : 'D MMMM YYYY',
  12158         LLL : 'D MMMM YYYY HH:mm',
  12159         LLLL : 'dddd, D MMMM YYYY HH:mm'
  12160     },
  12161     calendar : {
  12162         sameDay : '[leo saa] LT',
  12163         nextDay : '[kesho saa] LT',
  12164         nextWeek : '[wiki ijayo] dddd [saat] LT',
  12165         lastDay : '[jana] LT',
  12166         lastWeek : '[wiki iliyopita] dddd [saat] LT',
  12167         sameElse : 'L'
  12168     },
  12169     relativeTime : {
  12170         future : '%s baadaye',
  12171         past : 'tokea %s',
  12172         s : 'hivi punde',
  12173         m : 'dakika moja',
  12174         mm : 'dakika %d',
  12175         h : 'saa limoja',
  12176         hh : 'masaa %d',
  12177         d : 'siku moja',
  12178         dd : 'masiku %d',
  12179         M : 'mwezi mmoja',
  12180         MM : 'miezi %d',
  12181         y : 'mwaka mmoja',
  12182         yy : 'miaka %d'
  12183     },
  12184     week : {
  12185         dow : 1, // Monday is the first day of the week.
  12186         doy : 7  // The week that contains Jan 1st is the first week of the year.
  12187     }
  12188 });
  12189 
  12190 //! moment.js locale configuration
  12191 //! locale : Tamil [ta]
  12192 //! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
  12193 
  12194 var symbolMap$12 = {
  12195     '1': '௧',
  12196     '2': '௨',
  12197     '3': '௩',
  12198     '4': '௪',
  12199     '5': '௫',
  12200     '6': '௬',
  12201     '7': '௭',
  12202     '8': '௮',
  12203     '9': '௯',
  12204     '0': '௦'
  12205 };
  12206 var numberMap$11 = {
  12207     '௧': '1',
  12208     '௨': '2',
  12209     '௩': '3',
  12210     '௪': '4',
  12211     '௫': '5',
  12212     '௬': '6',
  12213     '௭': '7',
  12214     '௮': '8',
  12215     '௯': '9',
  12216     '௦': '0'
  12217 };
  12218 
  12219 hooks.defineLocale('ta', {
  12220     months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
  12221     monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
  12222     weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),
  12223     weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),
  12224     weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
  12225     longDateFormat : {
  12226         LT : 'HH:mm',
  12227         LTS : 'HH:mm:ss',
  12228         L : 'DD/MM/YYYY',
  12229         LL : 'D MMMM YYYY',
  12230         LLL : 'D MMMM YYYY, HH:mm',
  12231         LLLL : 'dddd, D MMMM YYYY, HH:mm'
  12232     },
  12233     calendar : {
  12234         sameDay : '[இன்று] LT',
  12235         nextDay : '[நாளை] LT',
  12236         nextWeek : 'dddd, LT',
  12237         lastDay : '[நேற்று] LT',
  12238         lastWeek : '[கடந்த வாரம்] dddd, LT',
  12239         sameElse : 'L'
  12240     },
  12241     relativeTime : {
  12242         future : '%s இல்',
  12243         past : '%s முன்',
  12244         s : 'ஒரு சில விநாடிகள்',
  12245         m : 'ஒரு நிமிடம்',
  12246         mm : '%d நிமிடங்கள்',
  12247         h : 'ஒரு மணி நேரம்',
  12248         hh : '%d மணி நேரம்',
  12249         d : 'ஒரு நாள்',
  12250         dd : '%d நாட்கள்',
  12251         M : 'ஒரு மாதம்',
  12252         MM : '%d மாதங்கள்',
  12253         y : 'ஒரு வருடம்',
  12254         yy : '%d ஆண்டுகள்'
  12255     },
  12256     dayOfMonthOrdinalParse: /\d{1,2}வது/,
  12257     ordinal : function (number) {
  12258         return number + 'வது';
  12259     },
  12260     preparse: function (string) {
  12261         return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
  12262             return numberMap$11[match];
  12263         });
  12264     },
  12265     postformat: function (string) {
  12266         return string.replace(/\d/g, function (match) {
  12267             return symbolMap$12[match];
  12268         });
  12269     },
  12270     // refer http://ta.wikipedia.org/s/1er1
  12271     meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,
  12272     meridiem : function (hour, minute, isLower) {
  12273         if (hour < 2) {
  12274             return ' யாமம்';
  12275         } else if (hour < 6) {
  12276             return ' வைகறை';  // வைகறை
  12277         } else if (hour < 10) {
  12278             return ' காலை'; // காலை
  12279         } else if (hour < 14) {
  12280             return ' நண்பகல்'; // நண்பகல்
  12281         } else if (hour < 18) {
  12282             return ' எற்பாடு'; // எற்பாடு
  12283         } else if (hour < 22) {
  12284             return ' மாலை'; // மாலை
  12285         } else {
  12286             return ' யாமம்';
  12287         }
  12288     },
  12289     meridiemHour : function (hour, meridiem) {
  12290         if (hour === 12) {
  12291             hour = 0;
  12292         }
  12293         if (meridiem === 'யாமம்') {
  12294             return hour < 2 ? hour : hour + 12;
  12295         } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {
  12296             return hour;
  12297         } else if (meridiem === 'நண்பகல்') {
  12298             return hour >= 10 ? hour : hour + 12;
  12299         } else {
  12300             return hour + 12;
  12301         }
  12302     },
  12303     week : {
  12304         dow : 0, // Sunday is the first day of the week.
  12305         doy : 6  // The week that contains Jan 1st is the first week of the year.
  12306     }
  12307 });
  12308 
  12309 //! moment.js locale configuration
  12310 //! locale : Telugu [te]
  12311 //! author : Krishna Chaitanya Thota : https://github.com/kcthota
  12312 
  12313 hooks.defineLocale('te', {
  12314     months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),
  12315     monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),
  12316     monthsParseExact : true,
  12317     weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),
  12318     weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),
  12319     weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),
  12320     longDateFormat : {
  12321         LT : 'A h:mm',
  12322         LTS : 'A h:mm:ss',
  12323         L : 'DD/MM/YYYY',
  12324         LL : 'D MMMM YYYY',
  12325         LLL : 'D MMMM YYYY, A h:mm',
  12326         LLLL : 'dddd, D MMMM YYYY, A h:mm'
  12327     },
  12328     calendar : {
  12329         sameDay : '[నేడు] LT',
  12330         nextDay : '[రేపు] LT',
  12331         nextWeek : 'dddd, LT',
  12332         lastDay : '[నిన్న] LT',
  12333         lastWeek : '[గత] dddd, LT',
  12334         sameElse : 'L'
  12335     },
  12336     relativeTime : {
  12337         future : '%s లో',
  12338         past : '%s క్రితం',
  12339         s : 'కొన్ని క్షణాలు',
  12340         m : 'ఒక నిమిషం',
  12341         mm : '%d నిమిషాలు',
  12342         h : 'ఒక గంట',
  12343         hh : '%d గంటలు',
  12344         d : 'ఒక రోజు',
  12345         dd : '%d రోజులు',
  12346         M : 'ఒక నెల',
  12347         MM : '%d నెలలు',
  12348         y : 'ఒక సంవత్సరం',
  12349         yy : '%d సంవత్సరాలు'
  12350     },
  12351     dayOfMonthOrdinalParse : /\d{1,2}వ/,
  12352     ordinal : '%dవ',
  12353     meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,
  12354     meridiemHour : function (hour, meridiem) {
  12355         if (hour === 12) {
  12356             hour = 0;
  12357         }
  12358         if (meridiem === 'రాత్రి') {
  12359             return hour < 4 ? hour : hour + 12;
  12360         } else if (meridiem === 'ఉదయం') {
  12361             return hour;
  12362         } else if (meridiem === 'మధ్యాహ్నం') {
  12363             return hour >= 10 ? hour : hour + 12;
  12364         } else if (meridiem === 'సాయంత్రం') {
  12365             return hour + 12;
  12366         }
  12367     },
  12368     meridiem : function (hour, minute, isLower) {
  12369         if (hour < 4) {
  12370             return 'రాత్రి';
  12371         } else if (hour < 10) {
  12372             return 'ఉదయం';
  12373         } else if (hour < 17) {
  12374             return 'మధ్యాహ్నం';
  12375         } else if (hour < 20) {
  12376             return 'సాయంత్రం';
  12377         } else {
  12378             return 'రాత్రి';
  12379         }
  12380     },
  12381     week : {
  12382         dow : 0, // Sunday is the first day of the week.
  12383         doy : 6  // The week that contains Jan 1st is the first week of the year.
  12384     }
  12385 });
  12386 
  12387 //! moment.js locale configuration
  12388 //! locale : Tetun Dili (East Timor) [tet]
  12389 //! author : Joshua Brooks : https://github.com/joshbrooks
  12390 //! author : Onorio De J. Afonso : https://github.com/marobo
  12391 
  12392 hooks.defineLocale('tet', {
  12393     months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),
  12394     monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez'.split('_'),
  12395     weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu'.split('_'),
  12396     weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sext_Sab'.split('_'),
  12397     weekdaysMin : 'Do_Seg_Te_Ku_Ki_Sex_Sa'.split('_'),
  12398     longDateFormat : {
  12399         LT : 'HH:mm',
  12400         LTS : 'HH:mm:ss',
  12401         L : 'DD/MM/YYYY',
  12402         LL : 'D MMMM YYYY',
  12403         LLL : 'D MMMM YYYY HH:mm',
  12404         LLLL : 'dddd, D MMMM YYYY HH:mm'
  12405     },
  12406     calendar : {
  12407         sameDay: '[Ohin iha] LT',
  12408         nextDay: '[Aban iha] LT',
  12409         nextWeek: 'dddd [iha] LT',
  12410         lastDay: '[Horiseik iha] LT',
  12411         lastWeek: 'dddd [semana kotuk] [iha] LT',
  12412         sameElse: 'L'
  12413     },
  12414     relativeTime : {
  12415         future : 'iha %s',
  12416         past : '%s liuba',
  12417         s : 'minutu balun',
  12418         m : 'minutu ida',
  12419         mm : 'minutus %d',
  12420         h : 'horas ida',
  12421         hh : 'horas %d',
  12422         d : 'loron ida',
  12423         dd : 'loron %d',
  12424         M : 'fulan ida',
  12425         MM : 'fulan %d',
  12426         y : 'tinan ida',
  12427         yy : 'tinan %d'
  12428     },
  12429     dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
  12430     ordinal : function (number) {
  12431         var b = number % 10,
  12432             output = (~~(number % 100 / 10) === 1) ? 'th' :
  12433             (b === 1) ? 'st' :
  12434             (b === 2) ? 'nd' :
  12435             (b === 3) ? 'rd' : 'th';
  12436         return number + output;
  12437     },
  12438     week : {
  12439         dow : 1, // Monday is the first day of the week.
  12440         doy : 4  // The week that contains Jan 4th is the first week of the year.
  12441     }
  12442 });
  12443 
  12444 //! moment.js locale configuration
  12445 //! locale : Thai [th]
  12446 //! author : Kridsada Thanabulpong : https://github.com/sirn
  12447 
  12448 hooks.defineLocale('th', {
  12449     months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),
  12450     monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),
  12451     monthsParseExact: true,
  12452     weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
  12453     weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference
  12454     weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
  12455     weekdaysParseExact : true,
  12456     longDateFormat : {
  12457         LT : 'H:mm',
  12458         LTS : 'H:mm:ss',
  12459         L : 'DD/MM/YYYY',
  12460         LL : 'D MMMM YYYY',
  12461         LLL : 'D MMMM YYYY เวลา H:mm',
  12462         LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'
  12463     },
  12464     meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,
  12465     isPM: function (input) {
  12466         return input === 'หลังเที่ยง';
  12467     },
  12468     meridiem : function (hour, minute, isLower) {
  12469         if (hour < 12) {
  12470             return 'ก่อนเที่ยง';
  12471         } else {
  12472             return 'หลังเที่ยง';
  12473         }
  12474     },
  12475     calendar : {
  12476         sameDay : '[วันนี้ เวลา] LT',
  12477         nextDay : '[พรุ่งนี้ เวลา] LT',
  12478         nextWeek : 'dddd[หน้า เวลา] LT',
  12479         lastDay : '[เมื่อวานนี้ เวลา] LT',
  12480         lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',
  12481         sameElse : 'L'
  12482     },
  12483     relativeTime : {
  12484         future : 'อีก %s',
  12485         past : '%sที่แล้ว',
  12486         s : 'ไม่กี่วินาที',
  12487         m : '1 นาที',
  12488         mm : '%d นาที',
  12489         h : '1 ชั่วโมง',
  12490         hh : '%d ชั่วโมง',
  12491         d : '1 วัน',
  12492         dd : '%d วัน',
  12493         M : '1 เดือน',
  12494         MM : '%d เดือน',
  12495         y : '1 ปี',
  12496         yy : '%d ปี'
  12497     }
  12498 });
  12499 
  12500 //! moment.js locale configuration
  12501 //! locale : Tagalog (Philippines) [tl-ph]
  12502 //! author : Dan Hagman : https://github.com/hagmandan
  12503 
  12504 hooks.defineLocale('tl-ph', {
  12505     months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),
  12506     monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
  12507     weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),
  12508     weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
  12509     weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
  12510     longDateFormat : {
  12511         LT : 'HH:mm',
  12512         LTS : 'HH:mm:ss',
  12513         L : 'MM/D/YYYY',
  12514         LL : 'MMMM D, YYYY',
  12515         LLL : 'MMMM D, YYYY HH:mm',
  12516         LLLL : 'dddd, MMMM DD, YYYY HH:mm'
  12517     },
  12518     calendar : {
  12519         sameDay: 'LT [ngayong araw]',
  12520         nextDay: '[Bukas ng] LT',
  12521         nextWeek: 'LT [sa susunod na] dddd',
  12522         lastDay: 'LT [kahapon]',
  12523         lastWeek: 'LT [noong nakaraang] dddd',
  12524         sameElse: 'L'
  12525     },
  12526     relativeTime : {
  12527         future : 'sa loob ng %s',
  12528         past : '%s ang nakalipas',
  12529         s : 'ilang segundo',
  12530         m : 'isang minuto',
  12531         mm : '%d minuto',
  12532         h : 'isang oras',
  12533         hh : '%d oras',
  12534         d : 'isang araw',
  12535         dd : '%d araw',
  12536         M : 'isang buwan',
  12537         MM : '%d buwan',
  12538         y : 'isang taon',
  12539         yy : '%d taon'
  12540     },
  12541     dayOfMonthOrdinalParse: /\d{1,2}/,
  12542     ordinal : function (number) {
  12543         return number;
  12544     },
  12545     week : {
  12546         dow : 1, // Monday is the first day of the week.
  12547         doy : 4  // The week that contains Jan 4th is the first week of the year.
  12548     }
  12549 });
  12550 
  12551 //! moment.js locale configuration
  12552 //! locale : Klingon [tlh]
  12553 //! author : Dominika Kruk : https://github.com/amaranthrose
  12554 
  12555 var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');
  12556 
  12557 function translateFuture(output) {
  12558     var time = output;
  12559     time = (output.indexOf('jaj') !== -1) ?
  12560     time.slice(0, -3) + 'leS' :
  12561     (output.indexOf('jar') !== -1) ?
  12562     time.slice(0, -3) + 'waQ' :
  12563     (output.indexOf('DIS') !== -1) ?
  12564     time.slice(0, -3) + 'nem' :
  12565     time + ' pIq';
  12566     return time;
  12567 }
  12568 
  12569 function translatePast(output) {
  12570     var time = output;
  12571     time = (output.indexOf('jaj') !== -1) ?
  12572     time.slice(0, -3) + 'Hu’' :
  12573     (output.indexOf('jar') !== -1) ?
  12574     time.slice(0, -3) + 'wen' :
  12575     (output.indexOf('DIS') !== -1) ?
  12576     time.slice(0, -3) + 'ben' :
  12577     time + ' ret';
  12578     return time;
  12579 }
  12580 
  12581 function translate$9(number, withoutSuffix, string, isFuture) {
  12582     var numberNoun = numberAsNoun(number);
  12583     switch (string) {
  12584         case 'mm':
  12585             return numberNoun + ' tup';
  12586         case 'hh':
  12587             return numberNoun + ' rep';
  12588         case 'dd':
  12589             return numberNoun + ' jaj';
  12590         case 'MM':
  12591             return numberNoun + ' jar';
  12592         case 'yy':
  12593             return numberNoun + ' DIS';
  12594     }
  12595 }
  12596 
  12597 function numberAsNoun(number) {
  12598     var hundred = Math.floor((number % 1000) / 100),
  12599     ten = Math.floor((number % 100) / 10),
  12600     one = number % 10,
  12601     word = '';
  12602     if (hundred > 0) {
  12603         word += numbersNouns[hundred] + 'vatlh';
  12604     }
  12605     if (ten > 0) {
  12606         word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';
  12607     }
  12608     if (one > 0) {
  12609         word += ((word !== '') ? ' ' : '') + numbersNouns[one];
  12610     }
  12611     return (word === '') ? 'pagh' : word;
  12612 }
  12613 
  12614 hooks.defineLocale('tlh', {
  12615     months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),
  12616     monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),
  12617     monthsParseExact : true,
  12618     weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
  12619     weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
  12620     weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
  12621     longDateFormat : {
  12622         LT : 'HH:mm',
  12623         LTS : 'HH:mm:ss',
  12624         L : 'DD.MM.YYYY',
  12625         LL : 'D MMMM YYYY',
  12626         LLL : 'D MMMM YYYY HH:mm',
  12627         LLLL : 'dddd, D MMMM YYYY HH:mm'
  12628     },
  12629     calendar : {
  12630         sameDay: '[DaHjaj] LT',
  12631         nextDay: '[wa’leS] LT',
  12632         nextWeek: 'LLL',
  12633         lastDay: '[wa’Hu’] LT',
  12634         lastWeek: 'LLL',
  12635         sameElse: 'L'
  12636     },
  12637     relativeTime : {
  12638         future : translateFuture,
  12639         past : translatePast,
  12640         s : 'puS lup',
  12641         m : 'wa’ tup',
  12642         mm : translate$9,
  12643         h : 'wa’ rep',
  12644         hh : translate$9,
  12645         d : 'wa’ jaj',
  12646         dd : translate$9,
  12647         M : 'wa’ jar',
  12648         MM : translate$9,
  12649         y : 'wa’ DIS',
  12650         yy : translate$9
  12651     },
  12652     dayOfMonthOrdinalParse: /\d{1,2}\./,
  12653     ordinal : '%d.',
  12654     week : {
  12655         dow : 1, // Monday is the first day of the week.
  12656         doy : 4  // The week that contains Jan 4th is the first week of the year.
  12657     }
  12658 });
  12659 
  12660 //! moment.js locale configuration
  12661 //! locale : Turkish [tr]
  12662 //! authors : Erhan Gundogan : https://github.com/erhangundogan,
  12663 //!           Burak Yiğit Kaya: https://github.com/BYK
  12664 
  12665 var suffixes$3 = {
  12666     1: '\'inci',
  12667     5: '\'inci',
  12668     8: '\'inci',
  12669     70: '\'inci',
  12670     80: '\'inci',
  12671     2: '\'nci',
  12672     7: '\'nci',
  12673     20: '\'nci',
  12674     50: '\'nci',
  12675     3: '\'üncü',
  12676     4: '\'üncü',
  12677     100: '\'üncü',
  12678     6: '\'ncı',
  12679     9: '\'uncu',
  12680     10: '\'uncu',
  12681     30: '\'uncu',
  12682     60: '\'ıncı',
  12683     90: '\'ıncı'
  12684 };
  12685 
  12686 hooks.defineLocale('tr', {
  12687     months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),
  12688     monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),
  12689     weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),
  12690     weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),
  12691     weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
  12692     longDateFormat : {
  12693         LT : 'HH:mm',
  12694         LTS : 'HH:mm:ss',
  12695         L : 'DD.MM.YYYY',
  12696         LL : 'D MMMM YYYY',
  12697         LLL : 'D MMMM YYYY HH:mm',
  12698         LLLL : 'dddd, D MMMM YYYY HH:mm'
  12699     },
  12700     calendar : {
  12701         sameDay : '[bugün saat] LT',
  12702         nextDay : '[yarın saat] LT',
  12703         nextWeek : '[haftaya] dddd [saat] LT',
  12704         lastDay : '[dün] LT',
  12705         lastWeek : '[geçen hafta] dddd [saat] LT',
  12706         sameElse : 'L'
  12707     },
  12708     relativeTime : {
  12709         future : '%s sonra',
  12710         past : '%s önce',
  12711         s : 'birkaç saniye',
  12712         m : 'bir dakika',
  12713         mm : '%d dakika',
  12714         h : 'bir saat',
  12715         hh : '%d saat',
  12716         d : 'bir gün',
  12717         dd : '%d gün',
  12718         M : 'bir ay',
  12719         MM : '%d ay',
  12720         y : 'bir yıl',
  12721         yy : '%d yıl'
  12722     },
  12723     dayOfMonthOrdinalParse: /\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,
  12724     ordinal : function (number) {
  12725         if (number === 0) {  // special case for zero
  12726             return number + '\'ıncı';
  12727         }
  12728         var a = number % 10,
  12729             b = number % 100 - a,
  12730             c = number >= 100 ? 100 : null;
  12731         return number + (suffixes$3[a] || suffixes$3[b] || suffixes$3[c]);
  12732     },
  12733     week : {
  12734         dow : 1, // Monday is the first day of the week.
  12735         doy : 7  // The week that contains Jan 1st is the first week of the year.
  12736     }
  12737 });
  12738 
  12739 //! moment.js locale configuration
  12740 //! locale : Talossan [tzl]
  12741 //! author : Robin van der Vliet : https://github.com/robin0van0der0v
  12742 //! author : Iustì Canun
  12743 
  12744 // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
  12745 // This is currently too difficult (maybe even impossible) to add.
  12746 hooks.defineLocale('tzl', {
  12747     months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),
  12748     monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
  12749     weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),
  12750     weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),
  12751     weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),
  12752     longDateFormat : {
  12753         LT : 'HH.mm',
  12754         LTS : 'HH.mm.ss',
  12755         L : 'DD.MM.YYYY',
  12756         LL : 'D. MMMM [dallas] YYYY',
  12757         LLL : 'D. MMMM [dallas] YYYY HH.mm',
  12758         LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'
  12759     },
  12760     meridiemParse: /d\'o|d\'a/i,
  12761     isPM : function (input) {
  12762         return 'd\'o' === input.toLowerCase();
  12763     },
  12764     meridiem : function (hours, minutes, isLower) {
  12765         if (hours > 11) {
  12766             return isLower ? 'd\'o' : 'D\'O';
  12767         } else {
  12768             return isLower ? 'd\'a' : 'D\'A';
  12769         }
  12770     },
  12771     calendar : {
  12772         sameDay : '[oxhi à] LT',
  12773         nextDay : '[demà à] LT',
  12774         nextWeek : 'dddd [à] LT',
  12775         lastDay : '[ieiri à] LT',
  12776         lastWeek : '[sür el] dddd [lasteu à] LT',
  12777         sameElse : 'L'
  12778     },
  12779     relativeTime : {
  12780         future : 'osprei %s',
  12781         past : 'ja%s',
  12782         s : processRelativeTime$7,
  12783         m : processRelativeTime$7,
  12784         mm : processRelativeTime$7,
  12785         h : processRelativeTime$7,
  12786         hh : processRelativeTime$7,
  12787         d : processRelativeTime$7,
  12788         dd : processRelativeTime$7,
  12789         M : processRelativeTime$7,
  12790         MM : processRelativeTime$7,
  12791         y : processRelativeTime$7,
  12792         yy : processRelativeTime$7
  12793     },
  12794     dayOfMonthOrdinalParse: /\d{1,2}\./,
  12795     ordinal : '%d.',
  12796     week : {
  12797         dow : 1, // Monday is the first day of the week.
  12798         doy : 4  // The week that contains Jan 4th is the first week of the year.
  12799     }
  12800 });
  12801 
  12802 function processRelativeTime$7(number, withoutSuffix, key, isFuture) {
  12803     var format = {
  12804         's': ['viensas secunds', '\'iensas secunds'],
  12805         'm': ['\'n míut', '\'iens míut'],
  12806         'mm': [number + ' míuts', '' + number + ' míuts'],
  12807         'h': ['\'n þora', '\'iensa þora'],
  12808         'hh': [number + ' þoras', '' + number + ' þoras'],
  12809         'd': ['\'n ziua', '\'iensa ziua'],
  12810         'dd': [number + ' ziuas', '' + number + ' ziuas'],
  12811         'M': ['\'n mes', '\'iens mes'],
  12812         'MM': [number + ' mesen', '' + number + ' mesen'],
  12813         'y': ['\'n ar', '\'iens ar'],
  12814         'yy': [number + ' ars', '' + number + ' ars']
  12815     };
  12816     return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);
  12817 }
  12818 
  12819 //! moment.js locale configuration
  12820 //! locale : Central Atlas Tamazight Latin [tzm-latn]
  12821 //! author : Abdel Said : https://github.com/abdelsaid
  12822 
  12823 hooks.defineLocale('tzm-latn', {
  12824     months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
  12825     monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
  12826     weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
  12827     weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
  12828     weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
  12829     longDateFormat : {
  12830         LT : 'HH:mm',
  12831         LTS : 'HH:mm:ss',
  12832         L : 'DD/MM/YYYY',
  12833         LL : 'D MMMM YYYY',
  12834         LLL : 'D MMMM YYYY HH:mm',
  12835         LLLL : 'dddd D MMMM YYYY HH:mm'
  12836     },
  12837     calendar : {
  12838         sameDay: '[asdkh g] LT',
  12839         nextDay: '[aska g] LT',
  12840         nextWeek: 'dddd [g] LT',
  12841         lastDay: '[assant g] LT',
  12842         lastWeek: 'dddd [g] LT',
  12843         sameElse: 'L'
  12844     },
  12845     relativeTime : {
  12846         future : 'dadkh s yan %s',
  12847         past : 'yan %s',
  12848         s : 'imik',
  12849         m : 'minuḍ',
  12850         mm : '%d minuḍ',
  12851         h : 'saɛa',
  12852         hh : '%d tassaɛin',
  12853         d : 'ass',
  12854         dd : '%d ossan',
  12855         M : 'ayowr',
  12856         MM : '%d iyyirn',
  12857         y : 'asgas',
  12858         yy : '%d isgasn'
  12859     },
  12860     week : {
  12861         dow : 6, // Saturday is the first day of the week.
  12862         doy : 12  // The week that contains Jan 1st is the first week of the year.
  12863     }
  12864 });
  12865 
  12866 //! moment.js locale configuration
  12867 //! locale : Central Atlas Tamazight [tzm]
  12868 //! author : Abdel Said : https://github.com/abdelsaid
  12869 
  12870 hooks.defineLocale('tzm', {
  12871     months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
  12872     monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
  12873     weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
  12874     weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
  12875     weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
  12876     longDateFormat : {
  12877         LT : 'HH:mm',
  12878         LTS: 'HH:mm:ss',
  12879         L : 'DD/MM/YYYY',
  12880         LL : 'D MMMM YYYY',
  12881         LLL : 'D MMMM YYYY HH:mm',
  12882         LLLL : 'dddd D MMMM YYYY HH:mm'
  12883     },
  12884     calendar : {
  12885         sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',
  12886         nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
  12887         nextWeek: 'dddd [ⴴ] LT',
  12888         lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',
  12889         lastWeek: 'dddd [ⴴ] LT',
  12890         sameElse: 'L'
  12891     },
  12892     relativeTime : {
  12893         future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',
  12894         past : 'ⵢⴰⵏ %s',
  12895         s : 'ⵉⵎⵉⴽ',
  12896         m : 'ⵎⵉⵏⵓⴺ',
  12897         mm : '%d ⵎⵉⵏⵓⴺ',
  12898         h : 'ⵙⴰⵄⴰ',
  12899         hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',
  12900         d : 'ⴰⵙⵙ',
  12901         dd : '%d oⵙⵙⴰⵏ',
  12902         M : 'ⴰⵢoⵓⵔ',
  12903         MM : '%d ⵉⵢⵢⵉⵔⵏ',
  12904         y : 'ⴰⵙⴳⴰⵙ',
  12905         yy : '%d ⵉⵙⴳⴰⵙⵏ'
  12906     },
  12907     week : {
  12908         dow : 6, // Saturday is the first day of the week.
  12909         doy : 12  // The week that contains Jan 1st is the first week of the year.
  12910     }
  12911 });
  12912 
  12913 //! moment.js locale configuration
  12914 //! locale : Ukrainian [uk]
  12915 //! author : zemlanin : https://github.com/zemlanin
  12916 //! Author : Menelion Elensúle : https://github.com/Oire
  12917 
  12918 function plural$6(word, num) {
  12919     var forms = word.split('_');
  12920     return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
  12921 }
  12922 function relativeTimeWithPlural$4(number, withoutSuffix, key) {
  12923     var format = {
  12924         'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',
  12925         'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',
  12926         'dd': 'день_дні_днів',
  12927         'MM': 'місяць_місяці_місяців',
  12928         'yy': 'рік_роки_років'
  12929     };
  12930     if (key === 'm') {
  12931         return withoutSuffix ? 'хвилина' : 'хвилину';
  12932     }
  12933     else if (key === 'h') {
  12934         return withoutSuffix ? 'година' : 'годину';
  12935     }
  12936     else {
  12937         return number + ' ' + plural$6(format[key], +number);
  12938     }
  12939 }
  12940 function weekdaysCaseReplace(m, format) {
  12941     var weekdays = {
  12942         'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),
  12943         'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),
  12944         'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')
  12945     };
  12946 
  12947     if (!m) {
  12948         return weekdays['nominative'];
  12949     }
  12950 
  12951     var nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ?
  12952         'accusative' :
  12953         ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ?
  12954             'genitive' :
  12955             'nominative');
  12956     return weekdays[nounCase][m.day()];
  12957 }
  12958 function processHoursFunction(str) {
  12959     return function () {
  12960         return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
  12961     };
  12962 }
  12963 
  12964 hooks.defineLocale('uk', {
  12965     months : {
  12966         'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),
  12967         'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')
  12968     },
  12969     monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),
  12970     weekdays : weekdaysCaseReplace,
  12971     weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
  12972     weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
  12973     longDateFormat : {
  12974         LT : 'HH:mm',
  12975         LTS : 'HH:mm:ss',
  12976         L : 'DD.MM.YYYY',
  12977         LL : 'D MMMM YYYY р.',
  12978         LLL : 'D MMMM YYYY р., HH:mm',
  12979         LLLL : 'dddd, D MMMM YYYY р., HH:mm'
  12980     },
  12981     calendar : {
  12982         sameDay: processHoursFunction('[Сьогодні '),
  12983         nextDay: processHoursFunction('[Завтра '),
  12984         lastDay: processHoursFunction('[Вчора '),
  12985         nextWeek: processHoursFunction('[У] dddd ['),
  12986         lastWeek: function () {
  12987             switch (this.day()) {
  12988                 case 0:
  12989                 case 3:
  12990                 case 5:
  12991                 case 6:
  12992                     return processHoursFunction('[Минулої] dddd [').call(this);
  12993                 case 1:
  12994                 case 2:
  12995                 case 4:
  12996                     return processHoursFunction('[Минулого] dddd [').call(this);
  12997             }
  12998         },
  12999         sameElse: 'L'
  13000     },
  13001     relativeTime : {
  13002         future : 'за %s',
  13003         past : '%s тому',
  13004         s : 'декілька секунд',
  13005         m : relativeTimeWithPlural$4,
  13006         mm : relativeTimeWithPlural$4,
  13007         h : 'годину',
  13008         hh : relativeTimeWithPlural$4,
  13009         d : 'день',
  13010         dd : relativeTimeWithPlural$4,
  13011         M : 'місяць',
  13012         MM : relativeTimeWithPlural$4,
  13013         y : 'рік',
  13014         yy : relativeTimeWithPlural$4
  13015     },
  13016     // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
  13017     meridiemParse: /ночі|ранку|дня|вечора/,
  13018     isPM: function (input) {
  13019         return /^(дня|вечора)$/.test(input);
  13020     },
  13021     meridiem : function (hour, minute, isLower) {
  13022         if (hour < 4) {
  13023             return 'ночі';
  13024         } else if (hour < 12) {
  13025             return 'ранку';
  13026         } else if (hour < 17) {
  13027             return 'дня';
  13028         } else {
  13029             return 'вечора';
  13030         }
  13031     },
  13032     dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/,
  13033     ordinal: function (number, period) {
  13034         switch (period) {
  13035             case 'M':
  13036             case 'd':
  13037             case 'DDD':
  13038             case 'w':
  13039             case 'W':
  13040                 return number + '-й';
  13041             case 'D':
  13042                 return number + '-го';
  13043             default:
  13044                 return number;
  13045         }
  13046     },
  13047     week : {
  13048         dow : 1, // Monday is the first day of the week.
  13049         doy : 7  // The week that contains Jan 1st is the first week of the year.
  13050     }
  13051 });
  13052 
  13053 //! moment.js locale configuration
  13054 //! locale : Urdu [ur]
  13055 //! author : Sawood Alam : https://github.com/ibnesayeed
  13056 //! author : Zack : https://github.com/ZackVision
  13057 
  13058 var months$8 = [
  13059     'جنوری',
  13060     'فروری',
  13061     'مارچ',
  13062     'اپریل',
  13063     'مئی',
  13064     'جون',
  13065     'جولائی',
  13066     'اگست',
  13067     'ستمبر',
  13068     'اکتوبر',
  13069     'نومبر',
  13070     'دسمبر'
  13071 ];
  13072 var days$2 = [
  13073     'اتوار',
  13074     'پیر',
  13075     'منگل',
  13076     'بدھ',
  13077     'جمعرات',
  13078     'جمعہ',
  13079     'ہفتہ'
  13080 ];
  13081 
  13082 hooks.defineLocale('ur', {
  13083     months : months$8,
  13084     monthsShort : months$8,
  13085     weekdays : days$2,
  13086     weekdaysShort : days$2,
  13087     weekdaysMin : days$2,
  13088     longDateFormat : {
  13089         LT : 'HH:mm',
  13090         LTS : 'HH:mm:ss',
  13091         L : 'DD/MM/YYYY',
  13092         LL : 'D MMMM YYYY',
  13093         LLL : 'D MMMM YYYY HH:mm',
  13094         LLLL : 'dddd، D MMMM YYYY HH:mm'
  13095     },
  13096     meridiemParse: /صبح|شام/,
  13097     isPM : function (input) {
  13098         return 'شام' === input;
  13099     },
  13100     meridiem : function (hour, minute, isLower) {
  13101         if (hour < 12) {
  13102             return 'صبح';
  13103         }
  13104         return 'شام';
  13105     },
  13106     calendar : {
  13107         sameDay : '[آج بوقت] LT',
  13108         nextDay : '[کل بوقت] LT',
  13109         nextWeek : 'dddd [بوقت] LT',
  13110         lastDay : '[گذشتہ روز بوقت] LT',
  13111         lastWeek : '[گذشتہ] dddd [بوقت] LT',
  13112         sameElse : 'L'
  13113     },
  13114     relativeTime : {
  13115         future : '%s بعد',
  13116         past : '%s قبل',
  13117         s : 'چند سیکنڈ',
  13118         m : 'ایک منٹ',
  13119         mm : '%d منٹ',
  13120         h : 'ایک گھنٹہ',
  13121         hh : '%d گھنٹے',
  13122         d : 'ایک دن',
  13123         dd : '%d دن',
  13124         M : 'ایک ماہ',
  13125         MM : '%d ماہ',
  13126         y : 'ایک سال',
  13127         yy : '%d سال'
  13128     },
  13129     preparse: function (string) {
  13130         return string.replace(/،/g, ',');
  13131     },
  13132     postformat: function (string) {
  13133         return string.replace(/,/g, '،');
  13134     },
  13135     week : {
  13136         dow : 1, // Monday is the first day of the week.
  13137         doy : 4  // The week that contains Jan 4th is the first week of the year.
  13138     }
  13139 });
  13140 
  13141 //! moment.js locale configuration
  13142 //! locale : Uzbek Latin [uz-latn]
  13143 //! author : Rasulbek Mirzayev : github.com/Rasulbeeek
  13144 
  13145 hooks.defineLocale('uz-latn', {
  13146     months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),
  13147     monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),
  13148     weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),
  13149     weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),
  13150     weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),
  13151     longDateFormat : {
  13152         LT : 'HH:mm',
  13153         LTS : 'HH:mm:ss',
  13154         L : 'DD/MM/YYYY',
  13155         LL : 'D MMMM YYYY',
  13156         LLL : 'D MMMM YYYY HH:mm',
  13157         LLLL : 'D MMMM YYYY, dddd HH:mm'
  13158     },
  13159     calendar : {
  13160         sameDay : '[Bugun soat] LT [da]',
  13161         nextDay : '[Ertaga] LT [da]',
  13162         nextWeek : 'dddd [kuni soat] LT [da]',
  13163         lastDay : '[Kecha soat] LT [da]',
  13164         lastWeek : '[O\'tgan] dddd [kuni soat] LT [da]',
  13165         sameElse : 'L'
  13166     },
  13167     relativeTime : {
  13168         future : 'Yaqin %s ichida',
  13169         past : 'Bir necha %s oldin',
  13170         s : 'soniya',
  13171         m : 'bir daqiqa',
  13172         mm : '%d daqiqa',
  13173         h : 'bir soat',
  13174         hh : '%d soat',
  13175         d : 'bir kun',
  13176         dd : '%d kun',
  13177         M : 'bir oy',
  13178         MM : '%d oy',
  13179         y : 'bir yil',
  13180         yy : '%d yil'
  13181     },
  13182     week : {
  13183         dow : 1, // Monday is the first day of the week.
  13184         doy : 7  // The week that contains Jan 1st is the first week of the year.
  13185     }
  13186 });
  13187 
  13188 //! moment.js locale configuration
  13189 //! locale : Uzbek [uz]
  13190 //! author : Sardor Muminov : https://github.com/muminoff
  13191 
  13192 hooks.defineLocale('uz', {
  13193     months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),
  13194     monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
  13195     weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),
  13196     weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),
  13197     weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
  13198     longDateFormat : {
  13199         LT : 'HH:mm',
  13200         LTS : 'HH:mm:ss',
  13201         L : 'DD/MM/YYYY',
  13202         LL : 'D MMMM YYYY',
  13203         LLL : 'D MMMM YYYY HH:mm',
  13204         LLLL : 'D MMMM YYYY, dddd HH:mm'
  13205     },
  13206     calendar : {
  13207         sameDay : '[Бугун соат] LT [да]',
  13208         nextDay : '[Эртага] LT [да]',
  13209         nextWeek : 'dddd [куни соат] LT [да]',
  13210         lastDay : '[Кеча соат] LT [да]',
  13211         lastWeek : '[Утган] dddd [куни соат] LT [да]',
  13212         sameElse : 'L'
  13213     },
  13214     relativeTime : {
  13215         future : 'Якин %s ичида',
  13216         past : 'Бир неча %s олдин',
  13217         s : 'фурсат',
  13218         m : 'бир дакика',
  13219         mm : '%d дакика',
  13220         h : 'бир соат',
  13221         hh : '%d соат',
  13222         d : 'бир кун',
  13223         dd : '%d кун',
  13224         M : 'бир ой',
  13225         MM : '%d ой',
  13226         y : 'бир йил',
  13227         yy : '%d йил'
  13228     },
  13229     week : {
  13230         dow : 1, // Monday is the first day of the week.
  13231         doy : 7  // The week that contains Jan 4th is the first week of the year.
  13232     }
  13233 });
  13234 
  13235 //! moment.js locale configuration
  13236 //! locale : Vietnamese [vi]
  13237 //! author : Bang Nguyen : https://github.com/bangnk
  13238 
  13239 hooks.defineLocale('vi', {
  13240     months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),
  13241     monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),
  13242     monthsParseExact : true,
  13243     weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),
  13244     weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
  13245     weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
  13246     weekdaysParseExact : true,
  13247     meridiemParse: /sa|ch/i,
  13248     isPM : function (input) {
  13249         return /^ch$/i.test(input);
  13250     },
  13251     meridiem : function (hours, minutes, isLower) {
  13252         if (hours < 12) {
  13253             return isLower ? 'sa' : 'SA';
  13254         } else {
  13255             return isLower ? 'ch' : 'CH';
  13256         }
  13257     },
  13258     longDateFormat : {
  13259         LT : 'HH:mm',
  13260         LTS : 'HH:mm:ss',
  13261         L : 'DD/MM/YYYY',
  13262         LL : 'D MMMM [năm] YYYY',
  13263         LLL : 'D MMMM [năm] YYYY HH:mm',
  13264         LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',
  13265         l : 'DD/M/YYYY',
  13266         ll : 'D MMM YYYY',
  13267         lll : 'D MMM YYYY HH:mm',
  13268         llll : 'ddd, D MMM YYYY HH:mm'
  13269     },
  13270     calendar : {
  13271         sameDay: '[Hôm nay lúc] LT',
  13272         nextDay: '[Ngày mai lúc] LT',
  13273         nextWeek: 'dddd [tuần tới lúc] LT',
  13274         lastDay: '[Hôm qua lúc] LT',
  13275         lastWeek: 'dddd [tuần rồi lúc] LT',
  13276         sameElse: 'L'
  13277     },
  13278     relativeTime : {
  13279         future : '%s tới',
  13280         past : '%s trước',
  13281         s : 'vài giây',
  13282         m : 'một phút',
  13283         mm : '%d phút',
  13284         h : 'một giờ',
  13285         hh : '%d giờ',
  13286         d : 'một ngày',
  13287         dd : '%d ngày',
  13288         M : 'một tháng',
  13289         MM : '%d tháng',
  13290         y : 'một năm',
  13291         yy : '%d năm'
  13292     },
  13293     dayOfMonthOrdinalParse: /\d{1,2}/,
  13294     ordinal : function (number) {
  13295         return number;
  13296     },
  13297     week : {
  13298         dow : 1, // Monday is the first day of the week.
  13299         doy : 4  // The week that contains Jan 4th is the first week of the year.
  13300     }
  13301 });
  13302 
  13303 //! moment.js locale configuration
  13304 //! locale : Pseudo [x-pseudo]
  13305 //! author : Andrew Hood : https://github.com/andrewhood125
  13306 
  13307 hooks.defineLocale('x-pseudo', {
  13308     months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),
  13309     monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),
  13310     monthsParseExact : true,
  13311     weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),
  13312     weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),
  13313     weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),
  13314     weekdaysParseExact : true,
  13315     longDateFormat : {
  13316         LT : 'HH:mm',
  13317         L : 'DD/MM/YYYY',
  13318         LL : 'D MMMM YYYY',
  13319         LLL : 'D MMMM YYYY HH:mm',
  13320         LLLL : 'dddd, D MMMM YYYY HH:mm'
  13321     },
  13322     calendar : {
  13323         sameDay : '[T~ódá~ý át] LT',
  13324         nextDay : '[T~ómó~rró~w át] LT',
  13325         nextWeek : 'dddd [át] LT',
  13326         lastDay : '[Ý~ést~érdá~ý át] LT',
  13327         lastWeek : '[L~ást] dddd [át] LT',
  13328         sameElse : 'L'
  13329     },
  13330     relativeTime : {
  13331         future : 'í~ñ %s',
  13332         past : '%s á~gó',
  13333         s : 'á ~féw ~sécó~ñds',
  13334         m : 'á ~míñ~úté',
  13335         mm : '%d m~íñú~tés',
  13336         h : 'á~ñ hó~úr',
  13337         hh : '%d h~óúrs',
  13338         d : 'á ~dáý',
  13339         dd : '%d d~áýs',
  13340         M : 'á ~móñ~th',
  13341         MM : '%d m~óñt~hs',
  13342         y : 'á ~ýéár',
  13343         yy : '%d ý~éárs'
  13344     },
  13345     dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
  13346     ordinal : function (number) {
  13347         var b = number % 10,
  13348             output = (~~(number % 100 / 10) === 1) ? 'th' :
  13349             (b === 1) ? 'st' :
  13350             (b === 2) ? 'nd' :
  13351             (b === 3) ? 'rd' : 'th';
  13352         return number + output;
  13353     },
  13354     week : {
  13355         dow : 1, // Monday is the first day of the week.
  13356         doy : 4  // The week that contains Jan 4th is the first week of the year.
  13357     }
  13358 });
  13359 
  13360 //! moment.js locale configuration
  13361 //! locale : Yoruba Nigeria [yo]
  13362 //! author : Atolagbe Abisoye : https://github.com/andela-batolagbe
  13363 
  13364 hooks.defineLocale('yo', {
  13365     months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),
  13366     monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),
  13367     weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),
  13368     weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),
  13369     weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),
  13370     longDateFormat : {
  13371         LT : 'h:mm A',
  13372         LTS : 'h:mm:ss A',
  13373         L : 'DD/MM/YYYY',
  13374         LL : 'D MMMM YYYY',
  13375         LLL : 'D MMMM YYYY h:mm A',
  13376         LLLL : 'dddd, D MMMM YYYY h:mm A'
  13377     },
  13378     calendar : {
  13379         sameDay : '[Ònì ni] LT',
  13380         nextDay : '[Ọ̀la ni] LT',
  13381         nextWeek : 'dddd [Ọsẹ̀ tón\'bọ] [ni] LT',
  13382         lastDay : '[Àna ni] LT',
  13383         lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',
  13384         sameElse : 'L'
  13385     },
  13386     relativeTime : {
  13387         future : 'ní %s',
  13388         past : '%s kọjá',
  13389         s : 'ìsẹjú aayá die',
  13390         m : 'ìsẹjú kan',
  13391         mm : 'ìsẹjú %d',
  13392         h : 'wákati kan',
  13393         hh : 'wákati %d',
  13394         d : 'ọjọ́ kan',
  13395         dd : 'ọjọ́ %d',
  13396         M : 'osù kan',
  13397         MM : 'osù %d',
  13398         y : 'ọdún kan',
  13399         yy : 'ọdún %d'
  13400     },
  13401     dayOfMonthOrdinalParse : /ọjọ́\s\d{1,2}/,
  13402     ordinal : 'ọjọ́ %d',
  13403     week : {
  13404         dow : 1, // Monday is the first day of the week.
  13405         doy : 4 // The week that contains Jan 4th is the first week of the year.
  13406     }
  13407 });
  13408 
  13409 //! moment.js locale configuration
  13410 //! locale : Chinese (China) [zh-cn]
  13411 //! author : suupic : https://github.com/suupic
  13412 //! author : Zeno Zeng : https://github.com/zenozeng
  13413 
  13414 hooks.defineLocale('zh-cn', {
  13415     months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
  13416     monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
  13417     weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
  13418     weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),
  13419     weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
  13420     longDateFormat : {
  13421         LT : 'HH:mm',
  13422         LTS : 'HH:mm:ss',
  13423         L : 'YYYY年MMMD日',
  13424         LL : 'YYYY年MMMD日',
  13425         LLL : 'YYYY年MMMD日Ah点mm分',
  13426         LLLL : 'YYYY年MMMD日ddddAh点mm分',
  13427         l : 'YYYY年MMMD日',
  13428         ll : 'YYYY年MMMD日',
  13429         lll : 'YYYY年MMMD日 HH:mm',
  13430         llll : 'YYYY年MMMD日dddd HH:mm'
  13431     },
  13432     meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
  13433     meridiemHour: function (hour, meridiem) {
  13434         if (hour === 12) {
  13435             hour = 0;
  13436         }
  13437         if (meridiem === '凌晨' || meridiem === '早上' ||
  13438                 meridiem === '上午') {
  13439             return hour;
  13440         } else if (meridiem === '下午' || meridiem === '晚上') {
  13441             return hour + 12;
  13442         } else {
  13443             // '中午'
  13444             return hour >= 11 ? hour : hour + 12;
  13445         }
  13446     },
  13447     meridiem : function (hour, minute, isLower) {
  13448         var hm = hour * 100 + minute;
  13449         if (hm < 600) {
  13450             return '凌晨';
  13451         } else if (hm < 900) {
  13452             return '早上';
  13453         } else if (hm < 1130) {
  13454             return '上午';
  13455         } else if (hm < 1230) {
  13456             return '中午';
  13457         } else if (hm < 1800) {
  13458             return '下午';
  13459         } else {
  13460             return '晚上';
  13461         }
  13462     },
  13463     calendar : {
  13464         sameDay : '[今天]LT',
  13465         nextDay : '[明天]LT',
  13466         nextWeek : '[下]ddddLT',
  13467         lastDay : '[昨天]LT',
  13468         lastWeek : '[上]ddddLT',
  13469         sameElse : 'L'
  13470     },
  13471     dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/,
  13472     ordinal : function (number, period) {
  13473         switch (period) {
  13474             case 'd':
  13475             case 'D':
  13476             case 'DDD':
  13477                 return number + '日';
  13478             case 'M':
  13479                 return number + '月';
  13480             case 'w':
  13481             case 'W':
  13482                 return number + '周';
  13483             default:
  13484                 return number;
  13485         }
  13486     },
  13487     relativeTime : {
  13488         future : '%s内',
  13489         past : '%s前',
  13490         s : '几秒',
  13491         m : '1 分钟',
  13492         mm : '%d 分钟',
  13493         h : '1 小时',
  13494         hh : '%d 小时',
  13495         d : '1 天',
  13496         dd : '%d 天',
  13497         M : '1 个月',
  13498         MM : '%d 个月',
  13499         y : '1 年',
  13500         yy : '%d 年'
  13501     },
  13502     week : {
  13503         // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
  13504         dow : 1, // Monday is the first day of the week.
  13505         doy : 4  // The week that contains Jan 4th is the first week of the year.
  13506     }
  13507 });
  13508 
  13509 //! moment.js locale configuration
  13510 //! locale : Chinese (Hong Kong) [zh-hk]
  13511 //! author : Ben : https://github.com/ben-lin
  13512 //! author : Chris Lam : https://github.com/hehachris
  13513 //! author : Konstantin : https://github.com/skfd
  13514 
  13515 hooks.defineLocale('zh-hk', {
  13516     months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
  13517     monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
  13518     weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
  13519     weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),
  13520     weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
  13521     longDateFormat : {
  13522         LT : 'HH:mm',
  13523         LTS : 'HH:mm:ss',
  13524         L : 'YYYY年MMMD日',
  13525         LL : 'YYYY年MMMD日',
  13526         LLL : 'YYYY年MMMD日 HH:mm',
  13527         LLLL : 'YYYY年MMMD日dddd HH:mm',
  13528         l : 'YYYY年MMMD日',
  13529         ll : 'YYYY年MMMD日',
  13530         lll : 'YYYY年MMMD日 HH:mm',
  13531         llll : 'YYYY年MMMD日dddd HH:mm'
  13532     },
  13533     meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
  13534     meridiemHour : function (hour, meridiem) {
  13535         if (hour === 12) {
  13536             hour = 0;
  13537         }
  13538         if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
  13539             return hour;
  13540         } else if (meridiem === '中午') {
  13541             return hour >= 11 ? hour : hour + 12;
  13542         } else if (meridiem === '下午' || meridiem === '晚上') {
  13543             return hour + 12;
  13544         }
  13545     },
  13546     meridiem : function (hour, minute, isLower) {
  13547         var hm = hour * 100 + minute;
  13548         if (hm < 600) {
  13549             return '凌晨';
  13550         } else if (hm < 900) {
  13551             return '早上';
  13552         } else if (hm < 1130) {
  13553             return '上午';
  13554         } else if (hm < 1230) {
  13555             return '中午';
  13556         } else if (hm < 1800) {
  13557             return '下午';
  13558         } else {
  13559             return '晚上';
  13560         }
  13561     },
  13562     calendar : {
  13563         sameDay : '[今天]LT',
  13564         nextDay : '[明天]LT',
  13565         nextWeek : '[下]ddddLT',
  13566         lastDay : '[昨天]LT',
  13567         lastWeek : '[上]ddddLT',
  13568         sameElse : 'L'
  13569     },
  13570     dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
  13571     ordinal : function (number, period) {
  13572         switch (period) {
  13573             case 'd' :
  13574             case 'D' :
  13575             case 'DDD' :
  13576                 return number + '日';
  13577             case 'M' :
  13578                 return number + '月';
  13579             case 'w' :
  13580             case 'W' :
  13581                 return number + '週';
  13582             default :
  13583                 return number;
  13584         }
  13585     },
  13586     relativeTime : {
  13587         future : '%s內',
  13588         past : '%s前',
  13589         s : '幾秒',
  13590         m : '1 分鐘',
  13591         mm : '%d 分鐘',
  13592         h : '1 小時',
  13593         hh : '%d 小時',
  13594         d : '1 天',
  13595         dd : '%d 天',
  13596         M : '1 個月',
  13597         MM : '%d 個月',
  13598         y : '1 年',
  13599         yy : '%d 年'
  13600     }
  13601 });
  13602 
  13603 //! moment.js locale configuration
  13604 //! locale : Chinese (Taiwan) [zh-tw]
  13605 //! author : Ben : https://github.com/ben-lin
  13606 //! author : Chris Lam : https://github.com/hehachris
  13607 
  13608 hooks.defineLocale('zh-tw', {
  13609     months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
  13610     monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
  13611     weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
  13612     weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),
  13613     weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
  13614     longDateFormat : {
  13615         LT : 'HH:mm',
  13616         LTS : 'HH:mm:ss',
  13617         L : 'YYYY年MMMD日',
  13618         LL : 'YYYY年MMMD日',
  13619         LLL : 'YYYY年MMMD日 HH:mm',
  13620         LLLL : 'YYYY年MMMD日dddd HH:mm',
  13621         l : 'YYYY年MMMD日',
  13622         ll : 'YYYY年MMMD日',
  13623         lll : 'YYYY年MMMD日 HH:mm',
  13624         llll : 'YYYY年MMMD日dddd HH:mm'
  13625     },
  13626     meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
  13627     meridiemHour : function (hour, meridiem) {
  13628         if (hour === 12) {
  13629             hour = 0;
  13630         }
  13631         if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
  13632             return hour;
  13633         } else if (meridiem === '中午') {
  13634             return hour >= 11 ? hour : hour + 12;
  13635         } else if (meridiem === '下午' || meridiem === '晚上') {
  13636             return hour + 12;
  13637         }
  13638     },
  13639     meridiem : function (hour, minute, isLower) {
  13640         var hm = hour * 100 + minute;
  13641         if (hm < 600) {
  13642             return '凌晨';
  13643         } else if (hm < 900) {
  13644             return '早上';
  13645         } else if (hm < 1130) {
  13646             return '上午';
  13647         } else if (hm < 1230) {
  13648             return '中午';
  13649         } else if (hm < 1800) {
  13650             return '下午';
  13651         } else {
  13652             return '晚上';
  13653         }
  13654     },
  13655     calendar : {
  13656         sameDay : '[今天]LT',
  13657         nextDay : '[明天]LT',
  13658         nextWeek : '[下]ddddLT',
  13659         lastDay : '[昨天]LT',
  13660         lastWeek : '[上]ddddLT',
  13661         sameElse : 'L'
  13662     },
  13663     dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
  13664     ordinal : function (number, period) {
  13665         switch (period) {
  13666             case 'd' :
  13667             case 'D' :
  13668             case 'DDD' :
  13669                 return number + '日';
  13670             case 'M' :
  13671                 return number + '月';
  13672             case 'w' :
  13673             case 'W' :
  13674                 return number + '週';
  13675             default :
  13676                 return number;
  13677         }
  13678     },
  13679     relativeTime : {
  13680         future : '%s內',
  13681         past : '%s前',
  13682         s : '幾秒',
  13683         m : '1 分鐘',
  13684         mm : '%d 分鐘',
  13685         h : '1 小時',
  13686         hh : '%d 小時',
  13687         d : '1 天',
  13688         dd : '%d 天',
  13689         M : '1 個月',
  13690         MM : '%d 個月',
  13691         y : '1 年',
  13692         yy : '%d 年'
  13693     }
  13694 });
  13695 
  13696 hooks.locale('en');
  13697 
  13698 return hooks;
  13699 
  13700 })));