{"version":3,"sources":["webpack://jrs-ui/./runtime_dependencies/jquery-ui/ui/ie.js","webpack://jrs-ui/./runtime_dependencies/jquery-ui/ui/version.js","webpack://jrs-ui/./runtime_dependencies/jquery-ui/ui/widget.js","webpack://jrs-ui/./runtime_dependencies/jquery-ui/ui/widgets/mouse.js","webpack://jrs-ui/./runtime_dependencies/moment/moment.js"],"names":["factory","define","$","ui","ie","exec","navigator","userAgent","toLowerCase","version","widgetUuid","widgetHasOwnProperty","Array","prototype","hasOwnProperty","widgetSlice","slice","cleanData","orig","elems","events","elem","i","_data","remove","triggerHandler","widget","name","base","existingConstructor","constructor","basePrototype","proxiedPrototype","namespace","split","fullName","Widget","isArray","extend","apply","concat","expr","pseudos","data","options","element","this","_createWidget","arguments","length","_proto","_childConstructors","each","prop","value","_super","_superApply","args","returnValue","__super","__superApply","widgetEventPrefix","widgetName","widgetFullName","child","childPrototype","push","bridge","target","key","input","call","inputIndex","inputLength","undefined","isPlainObject","object","fn","isMethodCall","methodValue","instance","charAt","error","jquery","pushStack","get","option","_init","defaultElement","classes","disabled","create","uuid","eventNamespace","bindings","hoverable","focusable","classesElementLookup","_on","event","destroy","document","style","ownerDocument","window","defaultView","parentWindow","_getCreateOptions","_create","_setOptionDisabled","_trigger","_getCreateEventData","noop","that","_destroy","_removeClass","off","removeData","removeAttr","parts","curOption","shift","pop","_setOptions","_setOption","_setOptionClasses","classKey","elements","currentElements","addClass","_classes","keys","add","_toggleClass","enable","disable","full","bindRemoveEvent","nodesToBind","_","map","some","is","processClassString","checkOption","current","uniqueSort","not","match","extra","join","_untrackClassesElement","inArray","_off","_addClass","toggleClass","suppressDisabledCheck","handlers","delegateElement","handler","handlerProxy","hasClass","guid","eventName","selector","on","_delay","delay","setTimeout","_hoverable","mouseenter","currentTarget","mouseleave","_focusable","focusin","focusout","type","callback","Event","originalEvent","trigger","isDefaultPrevented","show","hide","method","defaultEffect","hasOptions","effect","effectName","duration","isEmptyObject","complete","effects","easing","queue","next","mouseHandled","cancel","distance","_mouseInit","_mouseDown","stopImmediatePropagation","started","_mouseDestroy","_mouseMoveDelegate","_mouseUpDelegate","_mouseMoved","_mouseStarted","_mouseUp","_mouseDownEvent","btnIsLeft","which","elIsCancel","nodeName","closest","_mouseCapture","mouseDelayMet","_mouseDelayTimer","_mouseDistanceMet","_mouseDelayMet","_mouseStart","preventDefault","_mouseMove","documentMode","button","altKey","ctrlKey","metaKey","shiftKey","ignoreMissingWhich","_mouseDrag","_mouseStop","clearTimeout","Math","max","abs","pageX","pageY","hookCallback","hooks","Object","toString","isObject","hasOwnProp","a","b","isObjectEmpty","obj","getOwnPropertyNames","k","isUndefined","isNumber","isDate","Date","arr","res","arrLen","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","m","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","t","len","momentProperties","updateInProgress","copyConfig","to","from","val","momentPropertiesLen","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","arg","argLen","Error","stack","deprecations","deprecateSimple","isFunction","Function","mergeConfigs","parentConfig","childConfig","Locale","set","zeroFill","number","targetLength","forceSign","absNumber","zerosToFill","pow","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","func","localeData","formatMoment","expandFormat","array","replace","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","aliases","addUnitAlias","unit","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","isLeapYear","year","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","isFinite","makeGetSet","keepTime","set$1","month","date","daysInMonth","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p1","p2","p3","p4","s","indexOf","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","x","modMonth","o","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","min","getSetMonth","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","daysInYear","y","parseTwoDigitYear","parseInt","getSetYear","createDate","d","h","M","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","n","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","day","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","w","ww","MM","yy","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","loadLocale","oldLocale","module","exports","isLocaleNameSane","_abbr","aliasedRequire","getSetGlobalLocale","e","values","getLocale","defineLocale","abbr","_config","parentLocale","forEach","names","j","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","string","isoDatesLen","isoTimesLen","configFromStringAndFormat","untruncateYear","yearStr","configFromRFC2822","parsedArray","monthStr","dayStr","hourStr","minuteStr","secondStr","result","weekdayStr","parsedInput","getDay","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","setUTCMinutes","getUTCMinutes","defaults","c","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","now","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","currentDateArray","weekYear","temp","weekdayOverflow","curWeek","GG","W","E","createLocal","_week","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromStringAndArray","createFromInputFallback","configFromString","dayOrDate","minute","second","millisecond","configFromObject","configFromInput","isUTC","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","orderLen","parseFloat","isDurationValid","_milliseconds","_days","_months","_bubble","isDuration","absRound","round","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","matches","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","isString","String","isMomentInput","arrayTest","dataTypeTest","filter","item","isNumberOrStringArray","property","objectTest","propertyTest","properties","propertyLen","isMomentInputObject","isCalendarSpec","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","proto","preParsePostFormat","time","formats","sod","startOf","calendarFormat","asFloat","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","prioritizedLen","toArray","toObject","toDate","toISOString","keepOffset","inspect","prefix","suffix","zone","isLocal","Symbol","toJSON","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","dir","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","array1","array2","dontConvert","lengthDiff","diffs","compareArrays","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","_calendar","_longDateFormat","formatUpper","toUpperCase","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","source","_eras","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","assign","posNegDuration","relativeTime$1","toIsoString","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","DATE","TIME","TIME_SECONDS","TIME_MS","WEEK","MONTH"],"mappings":"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","file":"_chunks/chunk.1023.js","sourcesContent":["( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n// This file is deprecated\nreturn $.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\n} );\n","( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n$.ui = $.ui || {};\n\nreturn $.ui.version = \"1.13.2\";\n\n} );\n","/*!\n * jQuery UI Widget 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: http://api.jqueryui.com/jQuery.widget/\n//>>demos: http://jqueryui.com/widget/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nvar widgetUuid = 0;\nvar widgetHasOwnProperty = Array.prototype.hasOwnProperty;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\n\t\t\t// Only trigger remove when necessary to save time\n\t\t\tevents = $._data( elem, \"events\" );\n\t\t\tif ( events && events.remove ) {\n\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( Array.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr.pseudos[ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this || !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( widgetHasOwnProperty.call( input[ inputIndex ], key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof instance[ options ] !== \"function\" ||\n\t\t\t\t\t\toptions.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"
\",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction bindRemoveEvent() {\n\t\t\tvar nodesToBind = [];\n\n\t\t\toptions.element.each( function( _, element ) {\n\t\t\t\tvar isTracked = $.map( that.classesElementLookup, function( elements ) {\n\t\t\t\t\treturn elements;\n\t\t\t\t} )\n\t\t\t\t\t.some( function( elements ) {\n\t\t\t\t\t\treturn elements.is( element );\n\t\t\t\t\t} );\n\n\t\t\t\tif ( !isTracked ) {\n\t\t\t\t\tnodesToBind.push( element );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthat._on( $( nodesToBind ), {\n\t\t\t\tremove: \"_untrackClassesElement\"\n\t\t\t} );\n\t\t}\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tbindRemoveEvent();\n\t\t\t\t\tcurrent = $( $.uniqueSort( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\n\t\tthis._off( $( event.target ) );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( typeof callback === \"function\" &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t} else if ( options === true ) {\n\t\t\toptions = {};\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nreturn $.widget;\n\n} );\n","/*!\n * jQuery UI Mouse 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Mouse\n//>>group: Widgets\n//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.\n//>>docs: http://api.jqueryui.com/mouse/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"../ie\",\n\t\t\t\"../version\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nvar mouseHandled = false;\n$( document ).on( \"mouseup\", function() {\n\tmouseHandled = false;\n} );\n\nreturn $.widget( \"ui.mouse\", {\n\tversion: \"1.13.2\",\n\toptions: {\n\t\tcancel: \"input, textarea, button, select, option\",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.on( \"mousedown.\" + this.widgetName, function( event ) {\n\t\t\t\treturn that._mouseDown( event );\n\t\t\t} )\n\t\t\t.on( \"click.\" + this.widgetName, function( event ) {\n\t\t\t\tif ( true === $.data( event.target, that.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t\t\t$.removeData( event.target, that.widgetName + \".preventClickEvent\" );\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.off( \".\" + this.widgetName );\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\t\t}\n\t},\n\n\t_mouseDown: function( event ) {\n\n\t\t// don't let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// We may have missed mouseup (out of window)\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseUp( event );\n\t\t}\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = ( event.which === 1 ),\n\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = ( typeof this.options.cancel === \"string\" && event.target.nodeName ?\n\t\t\t\t$( event.target ).closest( this.options.cancel ).length : false );\n\t\tif ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif ( !this.mouseDelayMet ) {\n\t\t\tthis._mouseDelayTimer = setTimeout( function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay );\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted = ( this._mouseStart( event ) !== false );\n\t\t\tif ( !this._mouseStarted ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif ( true === $.data( event.target, this.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t$.removeData( event.target, this.widgetName + \".preventClickEvent\" );\n\t\t}\n\n\t\t// These delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function( event ) {\n\t\t\treturn that._mouseMove( event );\n\t\t};\n\t\tthis._mouseUpDelegate = function( event ) {\n\t\t\treturn that._mouseUp( event );\n\t\t};\n\n\t\tthis.document\n\t\t\t.on( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.on( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function( event ) {\n\n\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\n\t\t// fire a mousemove event if content is placed under the cursor. See #7778\n\t\t// Support: IE <9\n\t\tif ( this._mouseMoved ) {\n\n\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\t\tif ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&\n\t\t\t\t\t!event.button ) {\n\t\t\t\treturn this._mouseUp( event );\n\n\t\t\t// Iframe mouseup check - mouseup occurred in another document\n\t\t\t} else if ( !event.which ) {\n\n\t\t\t\t// Support: Safari <=8 - 9\n\t\t\t\t// Safari sets which to 0 if you press any of the following keys\n\t\t\t\t// during a drag (#14461)\n\t\t\t\tif ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||\n\t\t\t\t\t\tevent.originalEvent.metaKey || event.originalEvent.shiftKey ) {\n\t\t\t\t\tthis.ignoreMissingWhich = true;\n\t\t\t\t} else if ( !this.ignoreMissingWhich ) {\n\t\t\t\t\treturn this._mouseUp( event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseDrag( event );\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t( this._mouseStart( this._mouseDownEvent, event ) !== false );\n\t\t\tif ( this._mouseStarted ) {\n\t\t\t\tthis._mouseDrag( event );\n\t\t\t} else {\n\t\t\t\tthis._mouseUp( event );\n\t\t\t}\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis.document\n\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif ( event.target === this._mouseDownEvent.target ) {\n\t\t\t\t$.data( event.target, this.widgetName + \".preventClickEvent\", true );\n\t\t\t}\n\n\t\t\tthis._mouseStop( event );\n\t\t}\n\n\t\tif ( this._mouseDelayTimer ) {\n\t\t\tclearTimeout( this._mouseDelayTimer );\n\t\t\tdelete this._mouseDelayTimer;\n\t\t}\n\n\t\tthis.ignoreMissingWhich = false;\n\t\tmouseHandled = false;\n\t\tevent.preventDefault();\n\t},\n\n\t_mouseDistanceMet: function( event ) {\n\t\treturn ( Math.max(\n\t\t\t\tMath.abs( this._mouseDownEvent.pageX - event.pageX ),\n\t\t\t\tMath.abs( this._mouseDownEvent.pageY - event.pageY )\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function( /* event */ ) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function( /* event */ ) {},\n\t_mouseDrag: function( /* event */ ) {},\n\t_mouseStop: function( /* event */ ) {},\n\t_mouseCapture: function( /* event */ ) {\n\t\treturn true;\n\t}\n} );\n\n} );\n","//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n return name.match('^[^/\\\\\\\\]*$') != null;\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.29.4';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM', // \n };\n\n return hooks;\n\n})));\n"],"sourceRoot":""}