vant/docs/build/build-docs.js
2017-02-10 16:04:57 +08:00

17760 lines
608 KiB
JavaScript

/******/ (function(modules) { // webpackBootstrap
/******/ // install a JSONP callback for chunk loading
/******/ var parentJsonpFunction = window["webpackJsonp"];
/******/ window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {
/******/ // add "moreModules" to the modules object,
/******/ // then flag all "chunkIds" as loaded and fire callback
/******/ var moduleId, chunkId, i = 0, resolves = [], result;
/******/ for(;i < chunkIds.length; i++) {
/******/ chunkId = chunkIds[i];
/******/ if(installedChunks[chunkId])
/******/ resolves.push(installedChunks[chunkId][0]);
/******/ installedChunks[chunkId] = 0;
/******/ }
/******/ for(moduleId in moreModules) {
/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
/******/ modules[moduleId] = moreModules[moduleId];
/******/ }
/******/ }
/******/ if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);
/******/ while(resolves.length)
/******/ resolves.shift()();
/******/
/******/ };
/******/
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // objects to store loaded and loading chunks
/******/ var installedChunks = {
/******/ 1: 0
/******/ };
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/ // This file contains only the entry chunk.
/******/ // The chunk loading function for additional chunks
/******/ __webpack_require__.e = function requireEnsure(chunkId) {
/******/ if(installedChunks[chunkId] === 0)
/******/ return Promise.resolve();
/******/
/******/ // an Promise means "currently loading".
/******/ if(installedChunks[chunkId]) {
/******/ return installedChunks[chunkId][2];
/******/ }
/******/ // start chunk loading
/******/ var head = document.getElementsByTagName('head')[0];
/******/ var script = document.createElement('script');
/******/ script.type = 'text/javascript';
/******/ script.charset = 'utf-8';
/******/ script.async = true;
/******/ script.timeout = 120000;
/******/
/******/ if (__webpack_require__.nc) {
/******/ script.setAttribute("nonce", __webpack_require__.nc);
/******/ }
/******/ script.src = __webpack_require__.p + "" + chunkId + ".js";
/******/ var timeout = setTimeout(onScriptComplete, 120000);
/******/ script.onerror = script.onload = onScriptComplete;
/******/ function onScriptComplete() {
/******/ // avoid mem leaks in IE.
/******/ script.onerror = script.onload = null;
/******/ clearTimeout(timeout);
/******/ var chunk = installedChunks[chunkId];
/******/ if(chunk !== 0) {
/******/ if(chunk) chunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));
/******/ installedChunks[chunkId] = undefined;
/******/ }
/******/ };
/******/
/******/ var promise = new Promise(function(resolve, reject) {
/******/ installedChunks[chunkId] = [resolve, reject];
/******/ });
/******/ installedChunks[chunkId][2] = promise;
/******/
/******/ head.appendChild(script);
/******/ return promise;
/******/ };
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // identity function for calling harmony imports with the correct context
/******/ __webpack_require__.i = function(value) { return value; };
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "docs/build";
/******/
/******/ // on error function for async loading
/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; };
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 211);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var bind = __webpack_require__(34);
/*global toString:true*/
// utils is a library of generic helper functions non-specific to axios
var toString = Object.prototype.toString;
/**
* Determine if a value is an Array
*
* @param {Object} val The value to test
* @returns {boolean} True if value is an Array, otherwise false
*/
function isArray(val) {
return toString.call(val) === '[object Array]';
}
/**
* Determine if a value is an ArrayBuffer
*
* @param {Object} val The value to test
* @returns {boolean} True if value is an ArrayBuffer, otherwise false
*/
function isArrayBuffer(val) {
return toString.call(val) === '[object ArrayBuffer]';
}
/**
* Determine if a value is a FormData
*
* @param {Object} val The value to test
* @returns {boolean} True if value is an FormData, otherwise false
*/
function isFormData(val) {
return (typeof FormData !== 'undefined') && (val instanceof FormData);
}
/**
* Determine if a value is a view on an ArrayBuffer
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
*/
function isArrayBufferView(val) {
var result;
if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
result = ArrayBuffer.isView(val);
} else {
result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);
}
return result;
}
/**
* Determine if a value is a String
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a String, otherwise false
*/
function isString(val) {
return typeof val === 'string';
}
/**
* Determine if a value is a Number
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a Number, otherwise false
*/
function isNumber(val) {
return typeof val === 'number';
}
/**
* Determine if a value is undefined
*
* @param {Object} val The value to test
* @returns {boolean} True if the value is undefined, otherwise false
*/
function isUndefined(val) {
return typeof val === 'undefined';
}
/**
* Determine if a value is an Object
*
* @param {Object} val The value to test
* @returns {boolean} True if value is an Object, otherwise false
*/
function isObject(val) {
return val !== null && typeof val === 'object';
}
/**
* Determine if a value is a Date
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a Date, otherwise false
*/
function isDate(val) {
return toString.call(val) === '[object Date]';
}
/**
* Determine if a value is a File
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a File, otherwise false
*/
function isFile(val) {
return toString.call(val) === '[object File]';
}
/**
* Determine if a value is a Blob
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a Blob, otherwise false
*/
function isBlob(val) {
return toString.call(val) === '[object Blob]';
}
/**
* Determine if a value is a Function
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a Function, otherwise false
*/
function isFunction(val) {
return toString.call(val) === '[object Function]';
}
/**
* Determine if a value is a Stream
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a Stream, otherwise false
*/
function isStream(val) {
return isObject(val) && isFunction(val.pipe);
}
/**
* Determine if a value is a URLSearchParams object
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a URLSearchParams object, otherwise false
*/
function isURLSearchParams(val) {
return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;
}
/**
* Trim excess whitespace off the beginning and end of a string
*
* @param {String} str The String to trim
* @returns {String} The String freed of excess whitespace
*/
function trim(str) {
return str.replace(/^\s*/, '').replace(/\s*$/, '');
}
/**
* Determine if we're running in a standard browser environment
*
* This allows axios to run in a web worker, and react-native.
* Both environments support XMLHttpRequest, but not fully standard globals.
*
* web workers:
* typeof window -> undefined
* typeof document -> undefined
*
* react-native:
* typeof document.createElement -> undefined
*/
function isStandardBrowserEnv() {
return (
typeof window !== 'undefined' &&
typeof document !== 'undefined' &&
typeof document.createElement === 'function'
);
}
/**
* Iterate over an Array or an Object invoking a function for each item.
*
* If `obj` is an Array callback will be called passing
* the value, index, and complete array for each item.
*
* If 'obj' is an Object callback will be called passing
* the value, key, and complete object for each property.
*
* @param {Object|Array} obj The object to iterate
* @param {Function} fn The callback to invoke for each item
*/
function forEach(obj, fn) {
// Don't bother if no value provided
if (obj === null || typeof obj === 'undefined') {
return;
}
// Force an array if not already something iterable
if (typeof obj !== 'object' && !isArray(obj)) {
/*eslint no-param-reassign:0*/
obj = [obj];
}
if (isArray(obj)) {
// Iterate over array values
for (var i = 0, l = obj.length; i < l; i++) {
fn.call(null, obj[i], i, obj);
}
} else {
// Iterate over object keys
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
fn.call(null, obj[key], key, obj);
}
}
}
}
/**
* Accepts varargs expecting each argument to be an object, then
* immutably merges the properties of each object and returns result.
*
* When multiple objects contain the same key the later object in
* the arguments list will take precedence.
*
* Example:
*
* ```js
* var result = merge({foo: 123}, {foo: 456});
* console.log(result.foo); // outputs 456
* ```
*
* @param {Object} obj1 Object to merge
* @returns {Object} Result of all merge properties
*/
function merge(/* obj1, obj2, obj3, ... */) {
var result = {};
function assignValue(val, key) {
if (typeof result[key] === 'object' && typeof val === 'object') {
result[key] = merge(result[key], val);
} else {
result[key] = val;
}
}
for (var i = 0, l = arguments.length; i < l; i++) {
forEach(arguments[i], assignValue);
}
return result;
}
/**
* Extends object a by mutably adding to it the properties of object b.
*
* @param {Object} a The object to be extended
* @param {Object} b The object to copy properties from
* @param {Object} thisArg The object to bind function to
* @return {Object} The resulting value of object a
*/
function extend(a, b, thisArg) {
forEach(b, function assignValue(val, key) {
if (thisArg && typeof val === 'function') {
a[key] = bind(val, thisArg);
} else {
a[key] = val;
}
});
return a;
}
module.exports = {
isArray: isArray,
isArrayBuffer: isArrayBuffer,
isFormData: isFormData,
isArrayBufferView: isArrayBufferView,
isString: isString,
isNumber: isNumber,
isObject: isObject,
isUndefined: isUndefined,
isDate: isDate,
isFile: isFile,
isBlob: isBlob,
isFunction: isFunction,
isStream: isStream,
isURLSearchParams: isURLSearchParams,
isStandardBrowserEnv: isStandardBrowserEnv,
forEach: forEach,
merge: merge,
extend: extend,
trim: trim
};
/***/ }),
/* 1 */
/***/ (function(module, exports) {
/**
* Checks if `value` is classified as an `Array` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an array, else `false`.
* @example
*
* _.isArray([1, 2, 3]);
* // => true
*
* _.isArray(document.body.children);
* // => false
*
* _.isArray('abc');
* // => false
*
* _.isArray(_.noop);
* // => false
*/
var isArray = Array.isArray;
module.exports = isArray;
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
var freeGlobal = __webpack_require__(42);
/** Detect free variable `self`. */
var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
/** Used as a reference to the global object. */
var root = freeGlobal || freeSelf || Function('return this')();
module.exports = root;
/***/ }),
/* 3 */
/***/ (function(module, exports) {
module.exports = function normalizeComponent (
rawScriptExports,
compiledTemplate,
scopeId,
cssModules
) {
var esModule
var scriptExports = rawScriptExports = rawScriptExports || {}
// ES6 modules interop
var type = typeof rawScriptExports.default
if (type === 'object' || type === 'function') {
esModule = rawScriptExports
scriptExports = rawScriptExports.default
}
// Vue.extend constructor export interop
var options = typeof scriptExports === 'function'
? scriptExports.options
: scriptExports
// render functions
if (compiledTemplate) {
options.render = compiledTemplate.render
options.staticRenderFns = compiledTemplate.staticRenderFns
}
// scopedId
if (scopeId) {
options._scopeId = scopeId
}
// inject cssModules
if (cssModules) {
var computed = options.computed || (options.computed = {})
Object.keys(cssModules).forEach(function (key) {
var module = cssModules[key]
computed[key] = function () { return module }
})
}
return {
esModule: esModule,
exports: scriptExports,
options: options
}
}
/***/ }),
/* 4 */
/***/ (function(module, exports) {
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
// css base code, injected by the css-loader
module.exports = function() {
var list = [];
// return the list of modules as css string
list.toString = function toString() {
var result = [];
for(var i = 0; i < this.length; i++) {
var item = this[i];
if(item[2]) {
result.push("@media " + item[2] + "{" + item[1] + "}");
} else {
result.push(item[1]);
}
}
return result.join("");
};
// import a list of modules into the list
list.i = function(modules, mediaQuery) {
if(typeof modules === "string")
modules = [[null, modules, ""]];
var alreadyImportedModules = {};
for(var i = 0; i < this.length; i++) {
var id = this[i][0];
if(typeof id === "number")
alreadyImportedModules[id] = true;
}
for(i = 0; i < modules.length; i++) {
var item = modules[i];
// skip already imported module
// this implementation is not 100% perfect for weird media query combinations
// when a module is imported multiple times with different media queries.
// I hope this will never occur (Hey this way we have smaller bundles)
if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
if(mediaQuery && !item[2]) {
item[2] = mediaQuery;
} else if(mediaQuery) {
item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
}
list.push(item);
}
}
};
return list;
};
/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {
var baseIsNative = __webpack_require__(118),
getValue = __webpack_require__(142);
/**
* Gets the native function at `key` of `object`.
*
* @private
* @param {Object} object The object to query.
* @param {string} key The key of the method to get.
* @returns {*} Returns the function if it's native, else `undefined`.
*/
function getNative(object, key) {
var value = getValue(object, key);
return baseIsNative(value) ? value : undefined;
}
module.exports = getNative;
/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {
var Symbol = __webpack_require__(10),
getRawTag = __webpack_require__(139),
objectToString = __webpack_require__(166);
/** `Object#toString` result references. */
var nullTag = '[object Null]',
undefinedTag = '[object Undefined]';
/** Built-in value references. */
var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
/**
* The base implementation of `getTag` without fallbacks for buggy environments.
*
* @private
* @param {*} value The value to query.
* @returns {string} Returns the `toStringTag`.
*/
function baseGetTag(value) {
if (value == null) {
return value === undefined ? undefinedTag : nullTag;
}
return (symToStringTag && symToStringTag in Object(value))
? getRawTag(value)
: objectToString(value);
}
module.exports = baseGetTag;
/***/ }),
/* 7 */
/***/ (function(module, exports) {
/**
* Checks if `value` is object-like. A value is object-like if it's not `null`
* and has a `typeof` result of "object".
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is object-like, else `false`.
* @example
*
* _.isObjectLike({});
* // => true
*
* _.isObjectLike([1, 2, 3]);
* // => true
*
* _.isObjectLike(_.noop);
* // => false
*
* _.isObjectLike(null);
* // => false
*/
function isObjectLike(value) {
return value != null && typeof value == 'object';
}
module.exports = isObjectLike;
/***/ }),
/* 8 */
/***/ (function(module, exports) {
// shim for using process in browser
var process = module.exports = {};
// cached from whatever global is present so that test runners that stub it
// don't break things. But we need to wrap it in a try catch in case it is
// wrapped in strict mode code which doesn't define any globals. It's inside a
// function because try/catches deoptimize in certain engines.
var cachedSetTimeout;
var cachedClearTimeout;
function defaultSetTimout() {
throw new Error('setTimeout has not been defined');
}
function defaultClearTimeout () {
throw new Error('clearTimeout has not been defined');
}
(function () {
try {
if (typeof setTimeout === 'function') {
cachedSetTimeout = setTimeout;
} else {
cachedSetTimeout = defaultSetTimout;
}
} catch (e) {
cachedSetTimeout = defaultSetTimout;
}
try {
if (typeof clearTimeout === 'function') {
cachedClearTimeout = clearTimeout;
} else {
cachedClearTimeout = defaultClearTimeout;
}
} catch (e) {
cachedClearTimeout = defaultClearTimeout;
}
} ())
function runTimeout(fun) {
if (cachedSetTimeout === setTimeout) {
//normal enviroments in sane situations
return setTimeout(fun, 0);
}
// if setTimeout wasn't available but was latter defined
if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
cachedSetTimeout = setTimeout;
return setTimeout(fun, 0);
}
try {
// when when somebody has screwed with setTimeout but no I.E. maddness
return cachedSetTimeout(fun, 0);
} catch(e){
try {
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
return cachedSetTimeout.call(null, fun, 0);
} catch(e){
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
return cachedSetTimeout.call(this, fun, 0);
}
}
}
function runClearTimeout(marker) {
if (cachedClearTimeout === clearTimeout) {
//normal enviroments in sane situations
return clearTimeout(marker);
}
// if clearTimeout wasn't available but was latter defined
if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
cachedClearTimeout = clearTimeout;
return clearTimeout(marker);
}
try {
// when when somebody has screwed with setTimeout but no I.E. maddness
return cachedClearTimeout(marker);
} catch (e){
try {
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
return cachedClearTimeout.call(null, marker);
} catch (e){
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
// Some versions of I.E. have different rules for clearTimeout vs setTimeout
return cachedClearTimeout.call(this, marker);
}
}
}
var queue = [];
var draining = false;
var currentQueue;
var queueIndex = -1;
function cleanUpNextTick() {
if (!draining || !currentQueue) {
return;
}
draining = false;
if (currentQueue.length) {
queue = currentQueue.concat(queue);
} else {
queueIndex = -1;
}
if (queue.length) {
drainQueue();
}
}
function drainQueue() {
if (draining) {
return;
}
var timeout = runTimeout(cleanUpNextTick);
draining = true;
var len = queue.length;
while(len) {
currentQueue = queue;
queue = [];
while (++queueIndex < len) {
if (currentQueue) {
currentQueue[queueIndex].run();
}
}
queueIndex = -1;
len = queue.length;
}
currentQueue = null;
draining = false;
runClearTimeout(timeout);
}
process.nextTick = function (fun) {
var args = new Array(arguments.length - 1);
if (arguments.length > 1) {
for (var i = 1; i < arguments.length; i++) {
args[i - 1] = arguments[i];
}
}
queue.push(new Item(fun, args));
if (queue.length === 1 && !draining) {
runTimeout(drainQueue);
}
};
// v8 likes predictible objects
function Item(fun, array) {
this.fun = fun;
this.array = array;
}
Item.prototype.run = function () {
this.fun.apply(null, this.array);
};
process.title = 'browser';
process.browser = true;
process.env = {};
process.argv = [];
process.version = ''; // empty string to avoid regexp issues
process.versions = {};
function noop() {}
process.on = noop;
process.addListener = noop;
process.once = noop;
process.off = noop;
process.removeListener = noop;
process.removeAllListeners = noop;
process.emit = noop;
process.binding = function (name) {
throw new Error('process.binding is not supported');
};
process.cwd = function () { return '/' };
process.chdir = function (dir) {
throw new Error('process.chdir is not supported');
};
process.umask = function() { return 0; };
/***/ }),
/* 9 */
/***/ (function(module, exports, __webpack_require__) {
var listCacheClear = __webpack_require__(152),
listCacheDelete = __webpack_require__(153),
listCacheGet = __webpack_require__(154),
listCacheHas = __webpack_require__(155),
listCacheSet = __webpack_require__(156);
/**
* Creates an list cache object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function ListCache(entries) {
var index = -1,
length = entries == null ? 0 : entries.length;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
// Add methods to `ListCache`.
ListCache.prototype.clear = listCacheClear;
ListCache.prototype['delete'] = listCacheDelete;
ListCache.prototype.get = listCacheGet;
ListCache.prototype.has = listCacheHas;
ListCache.prototype.set = listCacheSet;
module.exports = ListCache;
/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {
var root = __webpack_require__(2);
/** Built-in value references. */
var Symbol = root.Symbol;
module.exports = Symbol;
/***/ }),
/* 11 */
/***/ (function(module, exports, __webpack_require__) {
var eq = __webpack_require__(47);
/**
* Gets the index at which the `key` is found in `array` of key-value pairs.
*
* @private
* @param {Array} array The array to inspect.
* @param {*} key The key to search for.
* @returns {number} Returns the index of the matched value, else `-1`.
*/
function assocIndexOf(array, key) {
var length = array.length;
while (length--) {
if (eq(array[length][0], key)) {
return length;
}
}
return -1;
}
module.exports = assocIndexOf;
/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {
var baseMatches = __webpack_require__(122),
baseMatchesProperty = __webpack_require__(123),
identity = __webpack_require__(48),
isArray = __webpack_require__(1),
property = __webpack_require__(185);
/**
* The base implementation of `_.iteratee`.
*
* @private
* @param {*} [value=_.identity] The value to convert to an iteratee.
* @returns {Function} Returns the iteratee.
*/
function baseIteratee(value) {
// Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
// See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
if (typeof value == 'function') {
return value;
}
if (value == null) {
return identity;
}
if (typeof value == 'object') {
return isArray(value)
? baseMatchesProperty(value[0], value[1])
: baseMatches(value);
}
return property(value);
}
module.exports = baseIteratee;
/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {
var isKeyable = __webpack_require__(149);
/**
* Gets the data for `map`.
*
* @private
* @param {Object} map The map to query.
* @param {string} key The reference key.
* @returns {*} Returns the map data.
*/
function getMapData(map, key) {
var data = map.__data__;
return isKeyable(key)
? data[typeof key == 'string' ? 'string' : 'hash']
: data.map;
}
module.exports = getMapData;
/***/ }),
/* 14 */
/***/ (function(module, exports, __webpack_require__) {
var getNative = __webpack_require__(5);
/* Built-in method references that are verified to be native. */
var nativeCreate = getNative(Object, 'create');
module.exports = nativeCreate;
/***/ }),
/* 15 */
/***/ (function(module, exports, __webpack_require__) {
var isSymbol = __webpack_require__(18);
/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0;
/**
* Converts `value` to a string key if it's not a string or symbol.
*
* @private
* @param {*} value The value to inspect.
* @returns {string|symbol} Returns the key.
*/
function toKey(value) {
if (typeof value == 'string' || isSymbol(value)) {
return value;
}
var result = (value + '');
return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
}
module.exports = toKey;
/***/ }),
/* 16 */
/***/ (function(module, exports, __webpack_require__) {
var isFunction = __webpack_require__(51),
isLength = __webpack_require__(26);
/**
* Checks if `value` is array-like. A value is considered array-like if it's
* not a function and has a `value.length` that's an integer greater than or
* equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is array-like, else `false`.
* @example
*
* _.isArrayLike([1, 2, 3]);
* // => true
*
* _.isArrayLike(document.body.children);
* // => true
*
* _.isArrayLike('abc');
* // => true
*
* _.isArrayLike(_.noop);
* // => false
*/
function isArrayLike(value) {
return value != null && isLength(value.length) && !isFunction(value);
}
module.exports = isArrayLike;
/***/ }),
/* 17 */
/***/ (function(module, exports) {
/**
* Checks if `value` is the
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an object, else `false`.
* @example
*
* _.isObject({});
* // => true
*
* _.isObject([1, 2, 3]);
* // => true
*
* _.isObject(_.noop);
* // => true
*
* _.isObject(null);
* // => false
*/
function isObject(value) {
var type = typeof value;
return value != null && (type == 'object' || type == 'function');
}
module.exports = isObject;
/***/ }),
/* 18 */
/***/ (function(module, exports, __webpack_require__) {
var baseGetTag = __webpack_require__(6),
isObjectLike = __webpack_require__(7);
/** `Object#toString` result references. */
var symbolTag = '[object Symbol]';
/**
* Checks if `value` is classified as a `Symbol` primitive or object.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
* @example
*
* _.isSymbol(Symbol.iterator);
* // => true
*
* _.isSymbol('abc');
* // => false
*/
function isSymbol(value) {
return typeof value == 'symbol' ||
(isObjectLike(value) && baseGetTag(value) == symbolTag);
}
module.exports = isSymbol;
/***/ }),
/* 19 */
/***/ (function(module, exports, __webpack_require__) {
var arrayLikeKeys = __webpack_require__(106),
baseKeys = __webpack_require__(120),
isArrayLike = __webpack_require__(16);
/**
* Creates an array of the own enumerable property names of `object`.
*
* **Note:** Non-object values are coerced to objects. See the
* [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
* for more details.
*
* @static
* @since 0.1.0
* @memberOf _
* @category Object
* @param {Object} object The object to query.
* @returns {Array} Returns the array of property names.
* @example
*
* function Foo() {
* this.a = 1;
* this.b = 2;
* }
*
* Foo.prototype.c = 3;
*
* _.keys(new Foo);
* // => ['a', 'b'] (iteration order is not guaranteed)
*
* _.keys('hi');
* // => ['0', '1']
*/
function keys(object) {
return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
}
module.exports = keys;
/***/ }),
/* 20 */
/***/ (function(module, exports, __webpack_require__) {
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
Modified by Evan You @yyx990803
*/
var hasDocument = typeof document !== 'undefined'
if (typeof DEBUG !== 'undefined' && DEBUG) {
if (!hasDocument) {
throw new Error(
'vue-style-loader cannot be used in a non-browser environment. ' +
"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment."
) }
}
var listToStyles = __webpack_require__(209)
/*
type StyleObject = {
id: number;
parts: Array<StyleObjectPart>
}
type StyleObjectPart = {
css: string;
media: string;
sourceMap: ?string
}
*/
var stylesInDom = {/*
[id: number]: {
id: number,
refs: number,
parts: Array<(obj?: StyleObjectPart) => void>
}
*/}
var head = hasDocument && (document.head || document.getElementsByTagName('head')[0])
var singletonElement = null
var singletonCounter = 0
var isProduction = false
var noop = function () {}
// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
// tags it will allow on a page
var isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\b/.test(navigator.userAgent.toLowerCase())
module.exports = function (parentId, list, _isProduction) {
isProduction = _isProduction
var styles = listToStyles(parentId, list)
addStylesToDom(styles)
return function update (newList) {
var mayRemove = []
for (var i = 0; i < styles.length; i++) {
var item = styles[i]
var domStyle = stylesInDom[item.id]
domStyle.refs--
mayRemove.push(domStyle)
}
if (newList) {
styles = listToStyles(parentId, newList)
addStylesToDom(styles)
} else {
styles = []
}
for (var i = 0; i < mayRemove.length; i++) {
var domStyle = mayRemove[i]
if (domStyle.refs === 0) {
for (var j = 0; j < domStyle.parts.length; j++) {
domStyle.parts[j]()
}
delete stylesInDom[domStyle.id]
}
}
}
}
function addStylesToDom (styles /* Array<StyleObject> */) {
for (var i = 0; i < styles.length; i++) {
var item = styles[i]
var domStyle = stylesInDom[item.id]
if (domStyle) {
domStyle.refs++
for (var j = 0; j < domStyle.parts.length; j++) {
domStyle.parts[j](item.parts[j])
}
for (; j < item.parts.length; j++) {
domStyle.parts.push(addStyle(item.parts[j]))
}
if (domStyle.parts.length > item.parts.length) {
domStyle.parts.length = item.parts.length
}
} else {
var parts = []
for (var j = 0; j < item.parts.length; j++) {
parts.push(addStyle(item.parts[j]))
}
stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }
}
}
}
function listToStyles (parentId, list) {
var styles = []
var newStyles = {}
for (var i = 0; i < list.length; i++) {
var item = list[i]
var id = item[0]
var css = item[1]
var media = item[2]
var sourceMap = item[3]
var part = { css: css, media: media, sourceMap: sourceMap }
if (!newStyles[id]) {
part.id = parentId + ':0'
styles.push(newStyles[id] = { id: id, parts: [part] })
} else {
part.id = parentId + ':' + newStyles[id].parts.length
newStyles[id].parts.push(part)
}
}
return styles
}
function createStyleElement () {
var styleElement = document.createElement('style')
styleElement.type = 'text/css'
head.appendChild(styleElement)
return styleElement
}
function addStyle (obj /* StyleObjectPart */) {
var update, remove
var styleElement = document.querySelector('style[data-vue-ssr-id~="' + obj.id + '"]')
var hasSSR = styleElement != null
// if in production mode and style is already provided by SSR,
// simply do nothing.
if (hasSSR && isProduction) {
return noop
}
if (isOldIE) {
// use singleton mode for IE9.
var styleIndex = singletonCounter++
styleElement = singletonElement || (singletonElement = createStyleElement())
update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)
remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)
} else {
// use multi-style-tag mode in all other cases
styleElement = styleElement || createStyleElement()
update = applyToTag.bind(null, styleElement)
remove = function () {
styleElement.parentNode.removeChild(styleElement)
}
}
if (!hasSSR) {
update(obj)
}
return function updateStyle (newObj /* StyleObjectPart */) {
if (newObj) {
if (newObj.css === obj.css &&
newObj.media === obj.media &&
newObj.sourceMap === obj.sourceMap) {
return
}
update(obj = newObj)
} else {
remove()
}
}
}
var replaceText = (function () {
var textStore = []
return function (index, replacement) {
textStore[index] = replacement
return textStore.filter(Boolean).join('\n')
}
})()
function applyToSingletonTag (styleElement, index, remove, obj) {
var css = remove ? '' : obj.css
if (styleElement.styleSheet) {
styleElement.styleSheet.cssText = replaceText(index, css)
} else {
var cssNode = document.createTextNode(css)
var childNodes = styleElement.childNodes
if (childNodes[index]) styleElement.removeChild(childNodes[index])
if (childNodes.length) {
styleElement.insertBefore(cssNode, childNodes[index])
} else {
styleElement.appendChild(cssNode)
}
}
}
function applyToTag (styleElement, obj) {
var css = obj.css
var media = obj.media
var sourceMap = obj.sourceMap
if (media) {
styleElement.setAttribute('media', media)
}
if (sourceMap) {
// https://developer.chrome.com/devtools/docs/javascript-debugging
// this makes source maps inside style tags work properly in Chrome
css += '\n/*# sourceURL=' + sourceMap.sources[0] + ' */'
// http://stackoverflow.com/a/26603875
css += '\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'
}
if (styleElement.styleSheet) {
styleElement.styleSheet.cssText = css
} else {
while (styleElement.firstChild) {
styleElement.removeChild(styleElement.firstChild)
}
styleElement.appendChild(document.createTextNode(css))
}
}
/***/ }),
/* 21 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(process) {
var utils = __webpack_require__(0);
var normalizeHeaderName = __webpack_require__(78);
var PROTECTION_PREFIX = /^\)\]\}',?\n/;
var DEFAULT_CONTENT_TYPE = {
'Content-Type': 'application/x-www-form-urlencoded'
};
function setContentTypeIfUnset(headers, value) {
if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
headers['Content-Type'] = value;
}
}
function getDefaultAdapter() {
var adapter;
if (typeof XMLHttpRequest !== 'undefined') {
// For browsers use XHR adapter
adapter = __webpack_require__(30);
} else if (typeof process !== 'undefined') {
// For node use HTTP adapter
adapter = __webpack_require__(30);
}
return adapter;
}
var defaults = {
adapter: getDefaultAdapter(),
transformRequest: [function transformRequest(data, headers) {
normalizeHeaderName(headers, 'Content-Type');
if (utils.isFormData(data) ||
utils.isArrayBuffer(data) ||
utils.isStream(data) ||
utils.isFile(data) ||
utils.isBlob(data)
) {
return data;
}
if (utils.isArrayBufferView(data)) {
return data.buffer;
}
if (utils.isURLSearchParams(data)) {
setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
return data.toString();
}
if (utils.isObject(data)) {
setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
return JSON.stringify(data);
}
return data;
}],
transformResponse: [function transformResponse(data) {
/*eslint no-param-reassign:0*/
if (typeof data === 'string') {
data = data.replace(PROTECTION_PREFIX, '');
try {
data = JSON.parse(data);
} catch (e) { /* Ignore */ }
}
return data;
}],
timeout: 0,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
validateStatus: function validateStatus(status) {
return status >= 200 && status < 300;
}
};
defaults.headers = {
common: {
'Accept': 'application/json, text/plain, */*'
}
};
utils.forEach(['delete', 'get', 'head'], function forEachMehtodNoData(method) {
defaults.headers[method] = {};
});
utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
});
module.exports = defaults;
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(8)))
/***/ }),
/* 22 */
/***/ (function(module, exports, __webpack_require__) {
var getNative = __webpack_require__(5),
root = __webpack_require__(2);
/* Built-in method references that are verified to be native. */
var Map = getNative(root, 'Map');
module.exports = Map;
/***/ }),
/* 23 */
/***/ (function(module, exports, __webpack_require__) {
var mapCacheClear = __webpack_require__(157),
mapCacheDelete = __webpack_require__(158),
mapCacheGet = __webpack_require__(159),
mapCacheHas = __webpack_require__(160),
mapCacheSet = __webpack_require__(161);
/**
* Creates a map cache object to store key-value pairs.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function MapCache(entries) {
var index = -1,
length = entries == null ? 0 : entries.length;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
// Add methods to `MapCache`.
MapCache.prototype.clear = mapCacheClear;
MapCache.prototype['delete'] = mapCacheDelete;
MapCache.prototype.get = mapCacheGet;
MapCache.prototype.has = mapCacheHas;
MapCache.prototype.set = mapCacheSet;
module.exports = MapCache;
/***/ }),
/* 24 */
/***/ (function(module, exports, __webpack_require__) {
var baseForOwn = __webpack_require__(112),
createBaseEach = __webpack_require__(132);
/**
* The base implementation of `_.forEach` without support for iteratee shorthands.
*
* @private
* @param {Array|Object} collection The collection to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @returns {Array|Object} Returns `collection`.
*/
var baseEach = createBaseEach(baseForOwn);
module.exports = baseEach;
/***/ }),
/* 25 */
/***/ (function(module, exports, __webpack_require__) {
var isArray = __webpack_require__(1),
isSymbol = __webpack_require__(18);
/** Used to match property names within property paths. */
var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
reIsPlainProp = /^\w*$/;
/**
* Checks if `value` is a property name and not a property path.
*
* @private
* @param {*} value The value to check.
* @param {Object} [object] The object to query keys on.
* @returns {boolean} Returns `true` if `value` is a property name, else `false`.
*/
function isKey(value, object) {
if (isArray(value)) {
return false;
}
var type = typeof value;
if (type == 'number' || type == 'symbol' || type == 'boolean' ||
value == null || isSymbol(value)) {
return true;
}
return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
(object != null && value in Object(object));
}
module.exports = isKey;
/***/ }),
/* 26 */
/***/ (function(module, exports) {
/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER = 9007199254740991;
/**
* Checks if `value` is a valid array-like length.
*
* **Note:** This method is loosely based on
* [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
* @example
*
* _.isLength(3);
* // => true
*
* _.isLength(Number.MIN_VALUE);
* // => false
*
* _.isLength(Infinity);
* // => false
*
* _.isLength('3');
* // => false
*/
function isLength(value) {
return typeof value == 'number' &&
value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
}
module.exports = isLength;
/***/ }),
/* 27 */
/***/ (function(module, exports) {
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
var stylesInDom = {},
memoize = function(fn) {
var memo;
return function () {
if (typeof memo === "undefined") memo = fn.apply(this, arguments);
return memo;
};
},
isOldIE = memoize(function() {
return /msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase());
}),
getHeadElement = memoize(function () {
return document.head || document.getElementsByTagName("head")[0];
}),
singletonElement = null,
singletonCounter = 0,
styleElementsInsertedAtTop = [];
module.exports = function(list, options) {
if(typeof DEBUG !== "undefined" && DEBUG) {
if(typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
}
options = options || {};
// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
// tags it will allow on a page
if (typeof options.singleton === "undefined") options.singleton = isOldIE();
// By default, add <style> tags to the bottom of <head>.
if (typeof options.insertAt === "undefined") options.insertAt = "bottom";
var styles = listToStyles(list);
addStylesToDom(styles, options);
return function update(newList) {
var mayRemove = [];
for(var i = 0; i < styles.length; i++) {
var item = styles[i];
var domStyle = stylesInDom[item.id];
domStyle.refs--;
mayRemove.push(domStyle);
}
if(newList) {
var newStyles = listToStyles(newList);
addStylesToDom(newStyles, options);
}
for(var i = 0; i < mayRemove.length; i++) {
var domStyle = mayRemove[i];
if(domStyle.refs === 0) {
for(var j = 0; j < domStyle.parts.length; j++)
domStyle.parts[j]();
delete stylesInDom[domStyle.id];
}
}
};
}
function addStylesToDom(styles, options) {
for(var i = 0; i < styles.length; i++) {
var item = styles[i];
var domStyle = stylesInDom[item.id];
if(domStyle) {
domStyle.refs++;
for(var j = 0; j < domStyle.parts.length; j++) {
domStyle.parts[j](item.parts[j]);
}
for(; j < item.parts.length; j++) {
domStyle.parts.push(addStyle(item.parts[j], options));
}
} else {
var parts = [];
for(var j = 0; j < item.parts.length; j++) {
parts.push(addStyle(item.parts[j], options));
}
stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
}
}
}
function listToStyles(list) {
var styles = [];
var newStyles = {};
for(var i = 0; i < list.length; i++) {
var item = list[i];
var id = item[0];
var css = item[1];
var media = item[2];
var sourceMap = item[3];
var part = {css: css, media: media, sourceMap: sourceMap};
if(!newStyles[id])
styles.push(newStyles[id] = {id: id, parts: [part]});
else
newStyles[id].parts.push(part);
}
return styles;
}
function insertStyleElement(options, styleElement) {
var head = getHeadElement();
var lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];
if (options.insertAt === "top") {
if(!lastStyleElementInsertedAtTop) {
head.insertBefore(styleElement, head.firstChild);
} else if(lastStyleElementInsertedAtTop.nextSibling) {
head.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);
} else {
head.appendChild(styleElement);
}
styleElementsInsertedAtTop.push(styleElement);
} else if (options.insertAt === "bottom") {
head.appendChild(styleElement);
} else {
throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");
}
}
function removeStyleElement(styleElement) {
styleElement.parentNode.removeChild(styleElement);
var idx = styleElementsInsertedAtTop.indexOf(styleElement);
if(idx >= 0) {
styleElementsInsertedAtTop.splice(idx, 1);
}
}
function createStyleElement(options) {
var styleElement = document.createElement("style");
styleElement.type = "text/css";
insertStyleElement(options, styleElement);
return styleElement;
}
function createLinkElement(options) {
var linkElement = document.createElement("link");
linkElement.rel = "stylesheet";
insertStyleElement(options, linkElement);
return linkElement;
}
function addStyle(obj, options) {
var styleElement, update, remove;
if (options.singleton) {
var styleIndex = singletonCounter++;
styleElement = singletonElement || (singletonElement = createStyleElement(options));
update = applyToSingletonTag.bind(null, styleElement, styleIndex, false);
remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);
} else if(obj.sourceMap &&
typeof URL === "function" &&
typeof URL.createObjectURL === "function" &&
typeof URL.revokeObjectURL === "function" &&
typeof Blob === "function" &&
typeof btoa === "function") {
styleElement = createLinkElement(options);
update = updateLink.bind(null, styleElement);
remove = function() {
removeStyleElement(styleElement);
if(styleElement.href)
URL.revokeObjectURL(styleElement.href);
};
} else {
styleElement = createStyleElement(options);
update = applyToTag.bind(null, styleElement);
remove = function() {
removeStyleElement(styleElement);
};
}
update(obj);
return function updateStyle(newObj) {
if(newObj) {
if(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)
return;
update(obj = newObj);
} else {
remove();
}
};
}
var replaceText = (function () {
var textStore = [];
return function (index, replacement) {
textStore[index] = replacement;
return textStore.filter(Boolean).join('\n');
};
})();
function applyToSingletonTag(styleElement, index, remove, obj) {
var css = remove ? "" : obj.css;
if (styleElement.styleSheet) {
styleElement.styleSheet.cssText = replaceText(index, css);
} else {
var cssNode = document.createTextNode(css);
var childNodes = styleElement.childNodes;
if (childNodes[index]) styleElement.removeChild(childNodes[index]);
if (childNodes.length) {
styleElement.insertBefore(cssNode, childNodes[index]);
} else {
styleElement.appendChild(cssNode);
}
}
}
function applyToTag(styleElement, obj) {
var css = obj.css;
var media = obj.media;
if(media) {
styleElement.setAttribute("media", media)
}
if(styleElement.styleSheet) {
styleElement.styleSheet.cssText = css;
} else {
while(styleElement.firstChild) {
styleElement.removeChild(styleElement.firstChild);
}
styleElement.appendChild(document.createTextNode(css));
}
}
function updateLink(linkElement, obj) {
var css = obj.css;
var sourceMap = obj.sourceMap;
if(sourceMap) {
// http://stackoverflow.com/a/26603875
css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */";
}
var blob = new Blob([css], { type: "text/css" });
var oldSrc = linkElement.href;
linkElement.href = URL.createObjectURL(blob);
if(oldSrc)
URL.revokeObjectURL(oldSrc);
}
/***/ }),
/* 28 */
/***/ (function(module, exports) {
var g;
// This works in non-strict mode
g = (function() {
return this;
})();
try {
// This works if eval is allowed (see CSP)
g = g || Function("return this")() || (1,eval)("this");
} catch(e) {
// This works if the window reference is available
if(typeof window === "object")
g = window;
}
// g can still be undefined, but nothing to do about it...
// We return undefined, instead of nothing here, so it's
// easier to handle this case. if(!global) { ...}
module.exports = g;
/***/ }),
/* 29 */
/***/ (function(module, exports) {
module.exports = {
"zh-CN": [
{
"name": "基础组件",
"groups": [
{
"groupName": "Basic",
"list": [
{
"path": "/sample",
"title": "Sample组件"
},
{
"path": "/button",
"title": "Button组件"
},
{
"path": "/switch",
"title": "Switch组件"
}
]
}
]
}
]
};
/***/ }),
/* 30 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(process) {
var utils = __webpack_require__(0);
var settle = __webpack_require__(70);
var buildURL = __webpack_require__(73);
var parseHeaders = __webpack_require__(79);
var isURLSameOrigin = __webpack_require__(77);
var createError = __webpack_require__(33);
var btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || __webpack_require__(72);
module.exports = function xhrAdapter(config) {
return new Promise(function dispatchXhrRequest(resolve, reject) {
var requestData = config.data;
var requestHeaders = config.headers;
if (utils.isFormData(requestData)) {
delete requestHeaders['Content-Type']; // Let the browser set it
}
var request = new XMLHttpRequest();
var loadEvent = 'onreadystatechange';
var xDomain = false;
// For IE 8/9 CORS support
// Only supports POST and GET calls and doesn't returns the response headers.
// DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.
if (process.env.NODE_ENV !== 'test' &&
typeof window !== 'undefined' &&
window.XDomainRequest && !('withCredentials' in request) &&
!isURLSameOrigin(config.url)) {
request = new window.XDomainRequest();
loadEvent = 'onload';
xDomain = true;
request.onprogress = function handleProgress() {};
request.ontimeout = function handleTimeout() {};
}
// HTTP basic authentication
if (config.auth) {
var username = config.auth.username || '';
var password = config.auth.password || '';
requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
}
request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);
// Set the request timeout in MS
request.timeout = config.timeout;
// Listen for ready state
request[loadEvent] = function handleLoad() {
if (!request || (request.readyState !== 4 && !xDomain)) {
return;
}
// The request errored out and we didn't get a response, this will be
// handled by onerror instead
// With one exception: request that using file: protocol, most browsers
// will return status as 0 even though it's a successful request
if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
return;
}
// Prepare the response
var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;
var response = {
data: responseData,
// IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)
status: request.status === 1223 ? 204 : request.status,
statusText: request.status === 1223 ? 'No Content' : request.statusText,
headers: responseHeaders,
config: config,
request: request
};
settle(resolve, reject, response);
// Clean up request
request = null;
};
// Handle low level network errors
request.onerror = function handleError() {
// Real errors are hidden from us by the browser
// onerror should only fire if it's a network error
reject(createError('Network Error', config));
// Clean up request
request = null;
};
// Handle timeout
request.ontimeout = function handleTimeout() {
reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED'));
// Clean up request
request = null;
};
// Add xsrf header
// This is only done if running in a standard browser environment.
// Specifically not if we're in a web worker, or react-native.
if (utils.isStandardBrowserEnv()) {
var cookies = __webpack_require__(75);
// Add xsrf header
var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?
cookies.read(config.xsrfCookieName) :
undefined;
if (xsrfValue) {
requestHeaders[config.xsrfHeaderName] = xsrfValue;
}
}
// Add headers to the request
if ('setRequestHeader' in request) {
utils.forEach(requestHeaders, function setRequestHeader(val, key) {
if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
// Remove Content-Type if data is undefined
delete requestHeaders[key];
} else {
// Otherwise add header to the request
request.setRequestHeader(key, val);
}
});
}
// Add withCredentials to request if needed
if (config.withCredentials) {
request.withCredentials = true;
}
// Add responseType to request if needed
if (config.responseType) {
try {
request.responseType = config.responseType;
} catch (e) {
if (request.responseType !== 'json') {
throw e;
}
}
}
// Handle progress if needed
if (typeof config.onDownloadProgress === 'function') {
request.addEventListener('progress', config.onDownloadProgress);
}
// Not all browsers support upload events
if (typeof config.onUploadProgress === 'function' && request.upload) {
request.upload.addEventListener('progress', config.onUploadProgress);
}
if (config.cancelToken) {
// Handle cancellation
config.cancelToken.promise.then(function onCanceled(cancel) {
if (!request) {
return;
}
request.abort();
reject(cancel);
// Clean up request
request = null;
});
}
if (requestData === undefined) {
requestData = null;
}
// Send the request
request.send(requestData);
});
};
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(8)))
/***/ }),
/* 31 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/**
* A `Cancel` is an object that is thrown when an operation is canceled.
*
* @class
* @param {string=} message The message.
*/
function Cancel(message) {
this.message = message;
}
Cancel.prototype.toString = function toString() {
return 'Cancel' + (this.message ? ': ' + this.message : '');
};
Cancel.prototype.__CANCEL__ = true;
module.exports = Cancel;
/***/ }),
/* 32 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
module.exports = function isCancel(value) {
return !!(value && value.__CANCEL__);
};
/***/ }),
/* 33 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var enhanceError = __webpack_require__(69);
/**
* Create an Error with the specified message, config, error code, and response.
*
* @param {string} message The error message.
* @param {Object} config The config.
* @param {string} [code] The error code (for example, 'ECONNABORTED').
@ @param {Object} [response] The response.
* @returns {Error} The created error.
*/
module.exports = function createError(message, config, code, response) {
var error = new Error(message);
return enhanceError(error, config, code, response);
};
/***/ }),
/* 34 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
module.exports = function bind(fn, thisArg) {
return function wrap() {
var args = new Array(arguments.length);
for (var i = 0; i < args.length; i++) {
args[i] = arguments[i];
}
return fn.apply(thisArg, args);
};
};
/***/ }),
/* 35 */
/***/ (function(module, exports, __webpack_require__) {
var ListCache = __webpack_require__(9),
stackClear = __webpack_require__(171),
stackDelete = __webpack_require__(172),
stackGet = __webpack_require__(173),
stackHas = __webpack_require__(174),
stackSet = __webpack_require__(175);
/**
* Creates a stack cache object to store key-value pairs.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function Stack(entries) {
var data = this.__data__ = new ListCache(entries);
this.size = data.size;
}
// Add methods to `Stack`.
Stack.prototype.clear = stackClear;
Stack.prototype['delete'] = stackDelete;
Stack.prototype.get = stackGet;
Stack.prototype.has = stackHas;
Stack.prototype.set = stackSet;
module.exports = Stack;
/***/ }),
/* 36 */
/***/ (function(module, exports) {
/**
* A specialized version of `_.filter` for arrays without support for
* iteratee shorthands.
*
* @private
* @param {Array} [array] The array to iterate over.
* @param {Function} predicate The function invoked per iteration.
* @returns {Array} Returns the new filtered array.
*/
function arrayFilter(array, predicate) {
var index = -1,
length = array == null ? 0 : array.length,
resIndex = 0,
result = [];
while (++index < length) {
var value = array[index];
if (predicate(value, index, array)) {
result[resIndex++] = value;
}
}
return result;
}
module.exports = arrayFilter;
/***/ }),
/* 37 */
/***/ (function(module, exports) {
/**
* A specialized version of `_.map` for arrays without support for iteratee
* shorthands.
*
* @private
* @param {Array} [array] The array to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @returns {Array} Returns the new mapped array.
*/
function arrayMap(array, iteratee) {
var index = -1,
length = array == null ? 0 : array.length,
result = Array(length);
while (++index < length) {
result[index] = iteratee(array[index], index, array);
}
return result;
}
module.exports = arrayMap;
/***/ }),
/* 38 */
/***/ (function(module, exports, __webpack_require__) {
var castPath = __webpack_require__(40),
toKey = __webpack_require__(15);
/**
* The base implementation of `_.get` without support for default values.
*
* @private
* @param {Object} object The object to query.
* @param {Array|string} path The path of the property to get.
* @returns {*} Returns the resolved value.
*/
function baseGet(object, path) {
path = castPath(path, object);
var index = 0,
length = path.length;
while (object != null && index < length) {
object = object[toKey(path[index++])];
}
return (index && index == length) ? object : undefined;
}
module.exports = baseGet;
/***/ }),
/* 39 */
/***/ (function(module, exports, __webpack_require__) {
var baseIsEqualDeep = __webpack_require__(116),
isObjectLike = __webpack_require__(7);
/**
* The base implementation of `_.isEqual` which supports partial comparisons
* and tracks traversed objects.
*
* @private
* @param {*} value The value to compare.
* @param {*} other The other value to compare.
* @param {boolean} bitmask The bitmask flags.
* 1 - Unordered comparison
* 2 - Partial comparison
* @param {Function} [customizer] The function to customize comparisons.
* @param {Object} [stack] Tracks traversed `value` and `other` objects.
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
*/
function baseIsEqual(value, other, bitmask, customizer, stack) {
if (value === other) {
return true;
}
if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
return value !== value && other !== other;
}
return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
}
module.exports = baseIsEqual;
/***/ }),
/* 40 */
/***/ (function(module, exports, __webpack_require__) {
var isArray = __webpack_require__(1),
isKey = __webpack_require__(25),
stringToPath = __webpack_require__(176),
toString = __webpack_require__(191);
/**
* Casts `value` to a path array if it's not one.
*
* @private
* @param {*} value The value to inspect.
* @param {Object} [object] The object to query keys on.
* @returns {Array} Returns the cast property path array.
*/
function castPath(value, object) {
if (isArray(value)) {
return value;
}
return isKey(value, object) ? [value] : stringToPath(toString(value));
}
module.exports = castPath;
/***/ }),
/* 41 */
/***/ (function(module, exports, __webpack_require__) {
var SetCache = __webpack_require__(102),
arraySome = __webpack_require__(108),
cacheHas = __webpack_require__(129);
/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG = 1,
COMPARE_UNORDERED_FLAG = 2;
/**
* A specialized version of `baseIsEqualDeep` for arrays with support for
* partial deep comparisons.
*
* @private
* @param {Array} array The array to compare.
* @param {Array} other The other array to compare.
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
* @param {Function} customizer The function to customize comparisons.
* @param {Function} equalFunc The function to determine equivalents of values.
* @param {Object} stack Tracks traversed `array` and `other` objects.
* @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
*/
function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
arrLength = array.length,
othLength = other.length;
if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
return false;
}
// Assume cyclic values are equal.
var stacked = stack.get(array);
if (stacked && stack.get(other)) {
return stacked == other;
}
var index = -1,
result = true,
seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
stack.set(array, other);
stack.set(other, array);
// Ignore non-index properties.
while (++index < arrLength) {
var arrValue = array[index],
othValue = other[index];
if (customizer) {
var compared = isPartial
? customizer(othValue, arrValue, index, other, array, stack)
: customizer(arrValue, othValue, index, array, other, stack);
}
if (compared !== undefined) {
if (compared) {
continue;
}
result = false;
break;
}
// Recursively compare arrays (susceptible to call stack limits).
if (seen) {
if (!arraySome(other, function(othValue, othIndex) {
if (!cacheHas(seen, othIndex) &&
(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
return seen.push(othIndex);
}
})) {
result = false;
break;
}
} else if (!(
arrValue === othValue ||
equalFunc(arrValue, othValue, bitmask, customizer, stack)
)) {
result = false;
break;
}
}
stack['delete'](array);
stack['delete'](other);
return result;
}
module.exports = equalArrays;
/***/ }),
/* 42 */
/***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */
var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
module.exports = freeGlobal;
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(28)))
/***/ }),
/* 43 */
/***/ (function(module, exports) {
/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER = 9007199254740991;
/** Used to detect unsigned integer values. */
var reIsUint = /^(?:0|[1-9]\d*)$/;
/**
* Checks if `value` is a valid array-like index.
*
* @private
* @param {*} value The value to check.
* @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
* @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
*/
function isIndex(value, length) {
length = length == null ? MAX_SAFE_INTEGER : length;
return !!length &&
(typeof value == 'number' || reIsUint.test(value)) &&
(value > -1 && value % 1 == 0 && value < length);
}
module.exports = isIndex;
/***/ }),
/* 44 */
/***/ (function(module, exports, __webpack_require__) {
var isObject = __webpack_require__(17);
/**
* Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` if suitable for strict
* equality comparisons, else `false`.
*/
function isStrictComparable(value) {
return value === value && !isObject(value);
}
module.exports = isStrictComparable;
/***/ }),
/* 45 */
/***/ (function(module, exports) {
/**
* A specialized version of `matchesProperty` for source values suitable
* for strict equality comparisons, i.e. `===`.
*
* @private
* @param {string} key The key of the property to get.
* @param {*} srcValue The value to match.
* @returns {Function} Returns the new spec function.
*/
function matchesStrictComparable(key, srcValue) {
return function(object) {
if (object == null) {
return false;
}
return object[key] === srcValue &&
(srcValue !== undefined || (key in Object(object)));
};
}
module.exports = matchesStrictComparable;
/***/ }),
/* 46 */
/***/ (function(module, exports) {
/** Used for built-in method references. */
var funcProto = Function.prototype;
/** Used to resolve the decompiled source of functions. */
var funcToString = funcProto.toString;
/**
* Converts `func` to its source code.
*
* @private
* @param {Function} func The function to convert.
* @returns {string} Returns the source code.
*/
function toSource(func) {
if (func != null) {
try {
return funcToString.call(func);
} catch (e) {}
try {
return (func + '');
} catch (e) {}
}
return '';
}
module.exports = toSource;
/***/ }),
/* 47 */
/***/ (function(module, exports) {
/**
* Performs a
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
* comparison between two values to determine if they are equivalent.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to compare.
* @param {*} other The other value to compare.
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
* @example
*
* var object = { 'a': 1 };
* var other = { 'a': 1 };
*
* _.eq(object, object);
* // => true
*
* _.eq(object, other);
* // => false
*
* _.eq('a', 'a');
* // => true
*
* _.eq('a', Object('a'));
* // => false
*
* _.eq(NaN, NaN);
* // => true
*/
function eq(value, other) {
return value === other || (value !== value && other !== other);
}
module.exports = eq;
/***/ }),
/* 48 */
/***/ (function(module, exports) {
/**
* This method returns the first argument it receives.
*
* @static
* @since 0.1.0
* @memberOf _
* @category Util
* @param {*} value Any value.
* @returns {*} Returns `value`.
* @example
*
* var object = { 'a': 1 };
*
* console.log(_.identity(object) === object);
* // => true
*/
function identity(value) {
return value;
}
module.exports = identity;
/***/ }),
/* 49 */
/***/ (function(module, exports, __webpack_require__) {
var baseIsArguments = __webpack_require__(115),
isObjectLike = __webpack_require__(7);
/** Used for built-in method references. */
var objectProto = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;
/** Built-in value references. */
var propertyIsEnumerable = objectProto.propertyIsEnumerable;
/**
* Checks if `value` is likely an `arguments` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an `arguments` object,
* else `false`.
* @example
*
* _.isArguments(function() { return arguments; }());
* // => true
*
* _.isArguments([1, 2, 3]);
* // => false
*/
var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
!propertyIsEnumerable.call(value, 'callee');
};
module.exports = isArguments;
/***/ }),
/* 50 */
/***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(2),
stubFalse = __webpack_require__(187);
/** Detect free variable `exports`. */
var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
/** Detect free variable `module`. */
var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
/** Detect the popular CommonJS extension `module.exports`. */
var moduleExports = freeModule && freeModule.exports === freeExports;
/** Built-in value references. */
var Buffer = moduleExports ? root.Buffer : undefined;
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;
/**
* Checks if `value` is a buffer.
*
* @static
* @memberOf _
* @since 4.3.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
* @example
*
* _.isBuffer(new Buffer(2));
* // => true
*
* _.isBuffer(new Uint8Array(2));
* // => false
*/
var isBuffer = nativeIsBuffer || stubFalse;
module.exports = isBuffer;
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(54)(module)))
/***/ }),
/* 51 */
/***/ (function(module, exports, __webpack_require__) {
var baseGetTag = __webpack_require__(6),
isObject = __webpack_require__(17);
/** `Object#toString` result references. */
var asyncTag = '[object AsyncFunction]',
funcTag = '[object Function]',
genTag = '[object GeneratorFunction]',
proxyTag = '[object Proxy]';
/**
* Checks if `value` is classified as a `Function` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a function, else `false`.
* @example
*
* _.isFunction(_);
* // => true
*
* _.isFunction(/abc/);
* // => false
*/
function isFunction(value) {
if (!isObject(value)) {
return false;
}
// The use of `Object#toString` avoids issues with the `typeof` operator
// in Safari 9 which returns 'object' for typed arrays and other constructors.
var tag = baseGetTag(value);
return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
}
module.exports = isFunction;
/***/ }),
/* 52 */
/***/ (function(module, exports, __webpack_require__) {
var baseIsTypedArray = __webpack_require__(119),
baseUnary = __webpack_require__(128),
nodeUtil = __webpack_require__(165);
/* Node.js helper references. */
var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
/**
* Checks if `value` is classified as a typed array.
*
* @static
* @memberOf _
* @since 3.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
* @example
*
* _.isTypedArray(new Uint8Array);
* // => true
*
* _.isTypedArray([]);
* // => false
*/
var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
module.exports = isTypedArray;
/***/ }),
/* 53 */
/***/ (function(module, exports) {
module.exports = "data:application/vnd.ms-fontobject;base64,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AAEAAgBbAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwEoASkBKgErASwBLQEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYB3VuaUU2MDAHdW5pRTYwMQd1bmlFNjAyB3VuaUU2MDMHdW5pRTYwNAd1bmlFNjA1B3VuaUU2MDYHdW5pRTYwNwd1bmlFNjA4B3VuaUU2MDkHdW5pRTYwQQd1bmlFNjBCB3VuaUU2MEMHdW5pRTYwRAd1bmlFNjBFB3VuaUU2MEYHdW5pRTYxMAd1bmlFNjExB3VuaUU2MTIHdW5pRTYxMwd1bmlFNjE0B3VuaUU2MTUHdW5pRTYxNgd1bmlFNjE3B3VuaUU2MTgHdW5pRTYxOQd1bmlFNjFBB3VuaUU2MUIHdW5pRTYxQwd1bmlFNjFEB3VuaUU2MUUHdW5pRTYxRgd1bmlFNjIwB3VuaUU2MjEHdW5pRTYyMgd1bmlFNjIzB3VuaUU2MjQHdW5pRTYyNQd1bmlFNjI2B3VuaUU2MjcHdW5pRTYyOAd1bmlFNjI5B3VuaUU2MkEHdW5pRTYyQgd1bmlFNjJDB3VuaUU2MkQHdW5pRTYyRQd1bmlFNjJGB3VuaUU2MzAHdW5pRTYzMQd1bmlFNjMyB3VuaUU2MzMHdW5pRTYzNAd1bmlFNjM1B3VuaUU2MzYHdW5pRTYzNwd1bmlFNjM4B3VuaUU2MzkHdW5pRTYzQQd1bmlFNjNCB3VuaUU2M0MHdW5pRTYzRAd1bmlFNjNFB3VuaUU2M0YHdW5pRTY0MAd1bmlFNjQxB3VuaUU2NDIHdW5pRTY0Mwd1bmlFNjQ0B3VuaUU2NDUHdW5pRTY0Ngd1bmlFNjQ3B3VuaUU2NDgHdW5pRTY0OQd1bmlFNjRBB3VuaUU2NEIHdW5pRTY0Qwd1bmlFNjREB3VuaUU2NEUHdW5pRTY0Rgd1bmlFNjUwB3VuaUU2NTEHdW5pRTY1Mgd1bmlFNjUzB3VuaUU2NTQHdW5pRTY1NQd1bmlFNjU2AAEAAf//AA8AAAAAAAAAAAAAAAAAAAAA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"
/***/ }),
/* 54 */
/***/ (function(module, exports) {
module.exports = function(module) {
if(!module.webpackPolyfill) {
module.deprecate = function() {};
module.paths = [];
// module.parent = undefined by default
if(!module.children) module.children = [];
Object.defineProperty(module, "loaded", {
enumerable: true,
get: function() {
return module.l;
}
});
Object.defineProperty(module, "id", {
enumerable: true,
get: function() {
return module.i;
}
});
module.webpackPolyfill = 1;
}
return module;
};
/***/ }),
/* 55 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _navConfig = __webpack_require__(29);
var _navConfig2 = _interopRequireDefault(_navConfig);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var registerRoute = function registerRoute(navConfig) {
var route = [];
var navs = navConfig['zh-CN'];
navs.forEach(function (nav) {
if (nav.groups) {
nav.groups.forEach(function (group) {
group.list.forEach(function (nav) {
addRoute(nav);
});
});
} else if (nav.children) {
nav.children.forEach(function (nav) {
addRoute(nav);
});
} else {
addRoute(nav);
}
});
function addRoute(page) {
route.push({
path: '/component' + page.path,
component: function component(resolve) {
__webpack_require__.e/* require */(0).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(212)("./examples" + page.path + '.md')]; (resolve.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}.bind(this)).catch(__webpack_require__.oe);
}
});
}
return route;
};
var route = registerRoute(_navConfig2.default);
exports.default = route;
/***/ }),
/* 56 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var _index = __webpack_require__(88);
var _index2 = _interopRequireDefault(_index);
var _index3 = __webpack_require__(87);
var _index4 = _interopRequireDefault(_index3);
var _index5 = __webpack_require__(89);
var _index6 = _interopRequireDefault(_index5);
__webpack_require__(96);
var _axios = __webpack_require__(63);
var _axios2 = _interopRequireDefault(_axios);
var _foreach = __webpack_require__(180);
var _foreach2 = _interopRequireDefault(_foreach);
var _filter = __webpack_require__(177);
var _filter2 = _interopRequireDefault(_filter);
var _find = __webpack_require__(178);
var _find2 = _interopRequireDefault(_find);
var _map = __webpack_require__(183);
var _map2 = _interopRequireDefault(_map);
__webpack_require__(192);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var install = function install(Vue) {
if (install.installed) return;
Vue.component(_index2.default.name, _index2.default);
Vue.component(_index4.default.name, _index4.default);
Vue.component(_index6.default.name, _index6.default);
};
// auto install
// zenui
if (typeof window !== 'undefined' && window.Vue) {
install(window.Vue);
};
module.exports = {
install: install,
version: '0.0.1',
axios: _axios2.default,
_: {
foreach: _foreach2.default,
filter: _filter2.default,
find: _find2.default,
map: _map2.default
},
Sample: _index2.default,
Button: _index4.default,
Switch: _index6.default
};
/***/ }),
/* 57 */
/***/ (function(module, exports, __webpack_require__) {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(90);
if(typeof content === 'string') content = [[module.i, content, '']];
// add the styles to the DOM
var update = __webpack_require__(27)(content, {});
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept("!!./../../node_modules/css-loader/index.js!./../../node_modules/less-loader/index.js!./docs.less", function() {
var newContent = require("!!./../../node_modules/css-loader/index.js!./../../node_modules/less-loader/index.js!./docs.less");
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ }),
/* 58 */
/***/ (function(module, exports, __webpack_require__) {
/* styles */
__webpack_require__(207)
var Component = __webpack_require__(3)(
/* script */
__webpack_require__(81),
/* template */
__webpack_require__(202),
/* scopeId */
null,
/* cssModules */
null
)
module.exports = Component.exports
/***/ }),
/* 59 */
/***/ (function(module, exports, __webpack_require__) {
/* styles */
__webpack_require__(208)
var Component = __webpack_require__(3)(
/* script */
__webpack_require__(82),
/* template */
__webpack_require__(203),
/* scopeId */
null,
/* cssModules */
null
)
module.exports = Component.exports
/***/ }),
/* 60 */
/***/ (function(module, exports, __webpack_require__) {
/* styles */
__webpack_require__(206)
var Component = __webpack_require__(3)(
/* script */
__webpack_require__(83),
/* template */
__webpack_require__(201),
/* scopeId */
null,
/* cssModules */
null
)
module.exports = Component.exports
/***/ }),
/* 61 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(process) {/**
* vue-router v2.2.0
* (c) 2017 Evan You
* @license MIT
*/
/* */
function assert (condition, message) {
if (!condition) {
throw new Error(("[vue-router] " + message))
}
}
function warn (condition, message) {
if (!condition) {
typeof console !== 'undefined' && console.warn(("[vue-router] " + message));
}
}
var View = {
name: 'router-view',
functional: true,
props: {
name: {
type: String,
default: 'default'
}
},
render: function render (h, ref) {
var props = ref.props;
var children = ref.children;
var parent = ref.parent;
var data = ref.data;
data.routerView = true;
var name = props.name;
var route = parent.$route;
var cache = parent._routerViewCache || (parent._routerViewCache = {});
// determine current view depth, also check to see if the tree
// has been toggled inactive but kept-alive.
var depth = 0;
var inactive = false;
while (parent) {
if (parent.$vnode && parent.$vnode.data.routerView) {
depth++;
}
if (parent._inactive) {
inactive = true;
}
parent = parent.$parent;
}
data.routerViewDepth = depth;
// render previous view if the tree is inactive and kept-alive
if (inactive) {
return h(cache[name], data, children)
}
var matched = route.matched[depth];
// render empty node if no matched route
if (!matched) {
cache[name] = null;
return h()
}
var component = cache[name] = matched.components[name];
// inject instance registration hooks
var hooks = data.hook || (data.hook = {});
hooks.init = function (vnode) {
matched.instances[name] = vnode.child;
};
hooks.prepatch = function (oldVnode, vnode) {
matched.instances[name] = vnode.child;
};
hooks.destroy = function (vnode) {
if (matched.instances[name] === vnode.child) {
matched.instances[name] = undefined;
}
};
// resolve props
data.props = resolveProps(route, matched.props && matched.props[name]);
return h(component, data, children)
}
};
function resolveProps (route, config) {
switch (typeof config) {
case 'undefined':
return
case 'object':
return config
case 'function':
return config(route)
case 'boolean':
return config ? route.params : undefined
default:
warn(false, ("props in \"" + (route.path) + "\" is a " + (typeof config) + ", expecting an object, function or boolean."));
}
}
/* */
var encodeReserveRE = /[!'()*]/g;
var encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };
var commaRE = /%2C/g;
// fixed encodeURIComponent which is more comformant to RFC3986:
// - escapes [!'()*]
// - preserve commas
var encode = function (str) { return encodeURIComponent(str)
.replace(encodeReserveRE, encodeReserveReplacer)
.replace(commaRE, ','); };
var decode = decodeURIComponent;
function resolveQuery (
query,
extraQuery
) {
if ( extraQuery === void 0 ) extraQuery = {};
if (query) {
var parsedQuery;
try {
parsedQuery = parseQuery(query);
} catch (e) {
process.env.NODE_ENV !== 'production' && warn(false, e.message);
parsedQuery = {};
}
for (var key in extraQuery) {
parsedQuery[key] = extraQuery[key];
}
return parsedQuery
} else {
return extraQuery
}
}
function parseQuery (query) {
var res = {};
query = query.trim().replace(/^(\?|#|&)/, '');
if (!query) {
return res
}
query.split('&').forEach(function (param) {
var parts = param.replace(/\+/g, ' ').split('=');
var key = decode(parts.shift());
var val = parts.length > 0
? decode(parts.join('='))
: null;
if (res[key] === undefined) {
res[key] = val;
} else if (Array.isArray(res[key])) {
res[key].push(val);
} else {
res[key] = [res[key], val];
}
});
return res
}
function stringifyQuery (obj) {
var res = obj ? Object.keys(obj).map(function (key) {
var val = obj[key];
if (val === undefined) {
return ''
}
if (val === null) {
return encode(key)
}
if (Array.isArray(val)) {
var result = [];
val.slice().forEach(function (val2) {
if (val2 === undefined) {
return
}
if (val2 === null) {
result.push(encode(key));
} else {
result.push(encode(key) + '=' + encode(val2));
}
});
return result.join('&')
}
return encode(key) + '=' + encode(val)
}).filter(function (x) { return x.length > 0; }).join('&') : null;
return res ? ("?" + res) : ''
}
/* */
var trailingSlashRE = /\/?$/;
function createRoute (
record,
location,
redirectedFrom
) {
var route = {
name: location.name || (record && record.name),
meta: (record && record.meta) || {},
path: location.path || '/',
hash: location.hash || '',
query: location.query || {},
params: location.params || {},
fullPath: getFullPath(location),
matched: record ? formatMatch(record) : []
};
if (redirectedFrom) {
route.redirectedFrom = getFullPath(redirectedFrom);
}
return Object.freeze(route)
}
// the starting route that represents the initial state
var START = createRoute(null, {
path: '/'
});
function formatMatch (record) {
var res = [];
while (record) {
res.unshift(record);
record = record.parent;
}
return res
}
function getFullPath (ref) {
var path = ref.path;
var query = ref.query; if ( query === void 0 ) query = {};
var hash = ref.hash; if ( hash === void 0 ) hash = '';
return (path || '/') + stringifyQuery(query) + hash
}
function isSameRoute (a, b) {
if (b === START) {
return a === b
} else if (!b) {
return false
} else if (a.path && b.path) {
return (
a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') &&
a.hash === b.hash &&
isObjectEqual(a.query, b.query)
)
} else if (a.name && b.name) {
return (
a.name === b.name &&
a.hash === b.hash &&
isObjectEqual(a.query, b.query) &&
isObjectEqual(a.params, b.params)
)
} else {
return false
}
}
function isObjectEqual (a, b) {
if ( a === void 0 ) a = {};
if ( b === void 0 ) b = {};
var aKeys = Object.keys(a);
var bKeys = Object.keys(b);
if (aKeys.length !== bKeys.length) {
return false
}
return aKeys.every(function (key) { return String(a[key]) === String(b[key]); })
}
function isIncludedRoute (current, target) {
return (
current.path.replace(trailingSlashRE, '/').indexOf(
target.path.replace(trailingSlashRE, '/')
) === 0 &&
(!target.hash || current.hash === target.hash) &&
queryIncludes(current.query, target.query)
)
}
function queryIncludes (current, target) {
for (var key in target) {
if (!(key in current)) {
return false
}
}
return true
}
/* */
// work around weird flow bug
var toTypes = [String, Object];
var eventTypes = [String, Array];
var Link = {
name: 'router-link',
props: {
to: {
type: toTypes,
required: true
},
tag: {
type: String,
default: 'a'
},
exact: Boolean,
append: Boolean,
replace: Boolean,
activeClass: String,
event: {
type: eventTypes,
default: 'click'
}
},
render: function render (h) {
var this$1 = this;
var router = this.$router;
var current = this.$route;
var ref = router.resolve(this.to, current, this.append);
var location = ref.location;
var route = ref.route;
var href = ref.href;
var classes = {};
var activeClass = this.activeClass || router.options.linkActiveClass || 'router-link-active';
var compareTarget = location.path ? createRoute(null, location) : route;
classes[activeClass] = this.exact
? isSameRoute(current, compareTarget)
: isIncludedRoute(current, compareTarget);
var handler = function (e) {
if (guardEvent(e)) {
if (this$1.replace) {
router.replace(location);
} else {
router.push(location);
}
}
};
var on = { click: guardEvent };
if (Array.isArray(this.event)) {
this.event.forEach(function (e) { on[e] = handler; });
} else {
on[this.event] = handler;
}
var data = {
class: classes
};
if (this.tag === 'a') {
data.on = on;
data.attrs = { href: href };
} else {
// find the first <a> child and apply listener and href
var a = findAnchor(this.$slots.default);
if (a) {
// in case the <a> is a static node
a.isStatic = false;
var extend = _Vue.util.extend;
var aData = a.data = extend({}, a.data);
aData.on = on;
var aAttrs = a.data.attrs = extend({}, a.data.attrs);
aAttrs.href = href;
} else {
// doesn't have <a> child, apply listener to self
data.on = on;
}
}
return h(this.tag, data, this.$slots.default)
}
};
function guardEvent (e) {
// don't redirect with control keys
if (e.metaKey || e.ctrlKey || e.shiftKey) { return }
// don't redirect when preventDefault called
if (e.defaultPrevented) { return }
// don't redirect on right click
if (e.button !== undefined && e.button !== 0) { return }
// don't redirect if `target="_blank"`
if (e.target && e.target.getAttribute) {
var target = e.target.getAttribute('target');
if (/\b_blank\b/i.test(target)) { return }
}
// this may be a Weex event which doesn't have this method
if (e.preventDefault) {
e.preventDefault();
}
return true
}
function findAnchor (children) {
if (children) {
var child;
for (var i = 0; i < children.length; i++) {
child = children[i];
if (child.tag === 'a') {
return child
}
if (child.children && (child = findAnchor(child.children))) {
return child
}
}
}
}
var _Vue;
function install (Vue) {
if (install.installed) { return }
install.installed = true;
_Vue = Vue;
Object.defineProperty(Vue.prototype, '$router', {
get: function get () { return this.$root._router }
});
Object.defineProperty(Vue.prototype, '$route', {
get: function get () { return this.$root._route }
});
Vue.mixin({
beforeCreate: function beforeCreate () {
if (this.$options.router) {
this._router = this.$options.router;
this._router.init(this);
Vue.util.defineReactive(this, '_route', this._router.history.current);
}
}
});
Vue.component('router-view', View);
Vue.component('router-link', Link);
var strats = Vue.config.optionMergeStrategies;
// use the same hook merging strategy for route hooks
strats.beforeRouteEnter = strats.beforeRouteLeave = strats.created;
}
/* */
var inBrowser = typeof window !== 'undefined';
/* */
function resolvePath (
relative,
base,
append
) {
if (relative.charAt(0) === '/') {
return relative
}
if (relative.charAt(0) === '?' || relative.charAt(0) === '#') {
return base + relative
}
var stack = base.split('/');
// remove trailing segment if:
// - not appending
// - appending to trailing slash (last segment is empty)
if (!append || !stack[stack.length - 1]) {
stack.pop();
}
// resolve relative path
var segments = relative.replace(/^\//, '').split('/');
for (var i = 0; i < segments.length; i++) {
var segment = segments[i];
if (segment === '.') {
continue
} else if (segment === '..') {
stack.pop();
} else {
stack.push(segment);
}
}
// ensure leading slash
if (stack[0] !== '') {
stack.unshift('');
}
return stack.join('/')
}
function parsePath (path) {
var hash = '';
var query = '';
var hashIndex = path.indexOf('#');
if (hashIndex >= 0) {
hash = path.slice(hashIndex);
path = path.slice(0, hashIndex);
}
var queryIndex = path.indexOf('?');
if (queryIndex >= 0) {
query = path.slice(queryIndex + 1);
path = path.slice(0, queryIndex);
}
return {
path: path,
query: query,
hash: hash
}
}
function cleanPath (path) {
return path.replace(/\/\//g, '/')
}
/* */
function createRouteMap (
routes,
oldPathMap,
oldNameMap
) {
var pathMap = oldPathMap || Object.create(null);
var nameMap = oldNameMap || Object.create(null);
routes.forEach(function (route) {
addRouteRecord(pathMap, nameMap, route);
});
return {
pathMap: pathMap,
nameMap: nameMap
}
}
function addRouteRecord (
pathMap,
nameMap,
route,
parent,
matchAs
) {
var path = route.path;
var name = route.name;
if (process.env.NODE_ENV !== 'production') {
assert(path != null, "\"path\" is required in a route configuration.");
assert(
typeof route.component !== 'string',
"route config \"component\" for path: " + (String(path || name)) + " cannot be a " +
"string id. Use an actual component instead."
);
}
var record = {
path: normalizePath(path, parent),
components: route.components || { default: route.component },
instances: {},
name: name,
parent: parent,
matchAs: matchAs,
redirect: route.redirect,
beforeEnter: route.beforeEnter,
meta: route.meta || {},
props: route.props == null
? {}
: route.components
? route.props
: { default: route.props }
};
if (route.children) {
// Warn if route is named and has a default child route.
// If users navigate to this route by name, the default child will
// not be rendered (GH Issue #629)
if (process.env.NODE_ENV !== 'production') {
if (route.name && route.children.some(function (child) { return /^\/?$/.test(child.path); })) {
warn(
false,
"Named Route '" + (route.name) + "' has a default child route. " +
"When navigating to this named route (:to=\"{name: '" + (route.name) + "'\"), " +
"the default child route will not be rendered. Remove the name from " +
"this route and use the name of the default child route for named " +
"links instead."
);
}
}
route.children.forEach(function (child) {
var childMatchAs = matchAs
? cleanPath((matchAs + "/" + (child.path)))
: undefined;
addRouteRecord(pathMap, nameMap, child, record, childMatchAs);
});
}
if (route.alias !== undefined) {
if (Array.isArray(route.alias)) {
route.alias.forEach(function (alias) {
var aliasRoute = {
path: alias,
children: route.children
};
addRouteRecord(pathMap, nameMap, aliasRoute, parent, record.path);
});
} else {
var aliasRoute = {
path: route.alias,
children: route.children
};
addRouteRecord(pathMap, nameMap, aliasRoute, parent, record.path);
}
}
if (!pathMap[record.path]) {
pathMap[record.path] = record;
}
if (name) {
if (!nameMap[name]) {
nameMap[name] = record;
} else if (process.env.NODE_ENV !== 'production' && !matchAs) {
warn(
false,
"Duplicate named routes definition: " +
"{ name: \"" + name + "\", path: \"" + (record.path) + "\" }"
);
}
}
}
function normalizePath (path, parent) {
path = path.replace(/\/$/, '');
if (path[0] === '/') { return path }
if (parent == null) { return path }
return cleanPath(((parent.path) + "/" + path))
}
var index$1 = Array.isArray || function (arr) {
return Object.prototype.toString.call(arr) == '[object Array]';
};
var isarray = index$1;
/**
* Expose `pathToRegexp`.
*/
var index = pathToRegexp;
var parse_1 = parse;
var compile_1 = compile;
var tokensToFunction_1 = tokensToFunction;
var tokensToRegExp_1 = tokensToRegExp;
/**
* The main path matching regexp utility.
*
* @type {RegExp}
*/
var PATH_REGEXP = new RegExp([
// Match escaped characters that would otherwise appear in future matches.
// This allows the user to escape special characters that won't transform.
'(\\\\.)',
// Match Express-style parameters and un-named parameters with a prefix
// and optional suffixes. Matches appear as:
//
// "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined]
// "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined]
// "/*" => ["/", undefined, undefined, undefined, undefined, "*"]
'([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))'
].join('|'), 'g');
/**
* Parse a string for the raw tokens.
*
* @param {string} str
* @param {Object=} options
* @return {!Array}
*/
function parse (str, options) {
var tokens = [];
var key = 0;
var index = 0;
var path = '';
var defaultDelimiter = options && options.delimiter || '/';
var res;
while ((res = PATH_REGEXP.exec(str)) != null) {
var m = res[0];
var escaped = res[1];
var offset = res.index;
path += str.slice(index, offset);
index = offset + m.length;
// Ignore already escaped sequences.
if (escaped) {
path += escaped[1];
continue
}
var next = str[index];
var prefix = res[2];
var name = res[3];
var capture = res[4];
var group = res[5];
var modifier = res[6];
var asterisk = res[7];
// Push the current path onto the tokens.
if (path) {
tokens.push(path);
path = '';
}
var partial = prefix != null && next != null && next !== prefix;
var repeat = modifier === '+' || modifier === '*';
var optional = modifier === '?' || modifier === '*';
var delimiter = res[2] || defaultDelimiter;
var pattern = capture || group;
tokens.push({
name: name || key++,
prefix: prefix || '',
delimiter: delimiter,
optional: optional,
repeat: repeat,
partial: partial,
asterisk: !!asterisk,
pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')
});
}
// Match any characters still remaining.
if (index < str.length) {
path += str.substr(index);
}
// If the path exists, push it onto the end.
if (path) {
tokens.push(path);
}
return tokens
}
/**
* Compile a string to a template function for the path.
*
* @param {string} str
* @param {Object=} options
* @return {!function(Object=, Object=)}
*/
function compile (str, options) {
return tokensToFunction(parse(str, options))
}
/**
* Prettier encoding of URI path segments.
*
* @param {string}
* @return {string}
*/
function encodeURIComponentPretty (str) {
return encodeURI(str).replace(/[\/?#]/g, function (c) {
return '%' + c.charCodeAt(0).toString(16).toUpperCase()
})
}
/**
* Encode the asterisk parameter. Similar to `pretty`, but allows slashes.
*
* @param {string}
* @return {string}
*/
function encodeAsterisk (str) {
return encodeURI(str).replace(/[?#]/g, function (c) {
return '%' + c.charCodeAt(0).toString(16).toUpperCase()
})
}
/**
* Expose a method for transforming tokens into the path function.
*/
function tokensToFunction (tokens) {
// Compile all the tokens into regexps.
var matches = new Array(tokens.length);
// Compile all the patterns before compilation.
for (var i = 0; i < tokens.length; i++) {
if (typeof tokens[i] === 'object') {
matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$');
}
}
return function (obj, opts) {
var path = '';
var data = obj || {};
var options = opts || {};
var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;
for (var i = 0; i < tokens.length; i++) {
var token = tokens[i];
if (typeof token === 'string') {
path += token;
continue
}
var value = data[token.name];
var segment;
if (value == null) {
if (token.optional) {
// Prepend partial segment prefixes.
if (token.partial) {
path += token.prefix;
}
continue
} else {
throw new TypeError('Expected "' + token.name + '" to be defined')
}
}
if (isarray(value)) {
if (!token.repeat) {
throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`')
}
if (value.length === 0) {
if (token.optional) {
continue
} else {
throw new TypeError('Expected "' + token.name + '" to not be empty')
}
}
for (var j = 0; j < value.length; j++) {
segment = encode(value[j]);
if (!matches[i].test(segment)) {
throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`')
}
path += (j === 0 ? token.prefix : token.delimiter) + segment;
}
continue
}
segment = token.asterisk ? encodeAsterisk(value) : encode(value);
if (!matches[i].test(segment)) {
throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"')
}
path += token.prefix + segment;
}
return path
}
}
/**
* Escape a regular expression string.
*
* @param {string} str
* @return {string}
*/
function escapeString (str) {
return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1')
}
/**
* Escape the capturing group by escaping special characters and meaning.
*
* @param {string} group
* @return {string}
*/
function escapeGroup (group) {
return group.replace(/([=!:$\/()])/g, '\\$1')
}
/**
* Attach the keys as a property of the regexp.
*
* @param {!RegExp} re
* @param {Array} keys
* @return {!RegExp}
*/
function attachKeys (re, keys) {
re.keys = keys;
return re
}
/**
* Get the flags for a regexp from the options.
*
* @param {Object} options
* @return {string}
*/
function flags (options) {
return options.sensitive ? '' : 'i'
}
/**
* Pull out keys from a regexp.
*
* @param {!RegExp} path
* @param {!Array} keys
* @return {!RegExp}
*/
function regexpToRegexp (path, keys) {
// Use a negative lookahead to match only capturing groups.
var groups = path.source.match(/\((?!\?)/g);
if (groups) {
for (var i = 0; i < groups.length; i++) {
keys.push({
name: i,
prefix: null,
delimiter: null,
optional: false,
repeat: false,
partial: false,
asterisk: false,
pattern: null
});
}
}
return attachKeys(path, keys)
}
/**
* Transform an array into a regexp.
*
* @param {!Array} path
* @param {Array} keys
* @param {!Object} options
* @return {!RegExp}
*/
function arrayToRegexp (path, keys, options) {
var parts = [];
for (var i = 0; i < path.length; i++) {
parts.push(pathToRegexp(path[i], keys, options).source);
}
var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));
return attachKeys(regexp, keys)
}
/**
* Create a path regexp from string input.
*
* @param {string} path
* @param {!Array} keys
* @param {!Object} options
* @return {!RegExp}
*/
function stringToRegexp (path, keys, options) {
return tokensToRegExp(parse(path, options), keys, options)
}
/**
* Expose a function for taking tokens and returning a RegExp.
*
* @param {!Array} tokens
* @param {(Array|Object)=} keys
* @param {Object=} options
* @return {!RegExp}
*/
function tokensToRegExp (tokens, keys, options) {
if (!isarray(keys)) {
options = /** @type {!Object} */ (keys || options);
keys = [];
}
options = options || {};
var strict = options.strict;
var end = options.end !== false;
var route = '';
// Iterate over the tokens and create our regexp string.
for (var i = 0; i < tokens.length; i++) {
var token = tokens[i];
if (typeof token === 'string') {
route += escapeString(token);
} else {
var prefix = escapeString(token.prefix);
var capture = '(?:' + token.pattern + ')';
keys.push(token);
if (token.repeat) {
capture += '(?:' + prefix + capture + ')*';
}
if (token.optional) {
if (!token.partial) {
capture = '(?:' + prefix + '(' + capture + '))?';
} else {
capture = prefix + '(' + capture + ')?';
}
} else {
capture = prefix + '(' + capture + ')';
}
route += capture;
}
}
var delimiter = escapeString(options.delimiter || '/');
var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;
// In non-strict mode we allow a slash at the end of match. If the path to
// match already ends with a slash, we remove it for consistency. The slash
// is valid at the end of a path match, not in the middle. This is important
// in non-ending mode, where "/test/" shouldn't match "/test//route".
if (!strict) {
route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';
}
if (end) {
route += '$';
} else {
// In non-ending mode, we need the capturing groups to match as much as
// possible by using a positive lookahead to the end or next path segment.
route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';
}
return attachKeys(new RegExp('^' + route, flags(options)), keys)
}
/**
* Normalize the given path string, returning a regular expression.
*
* An empty array can be passed in for the keys, which will hold the
* placeholder key descriptions. For example, using `/user/:id`, `keys` will
* contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.
*
* @param {(string|RegExp|Array)} path
* @param {(Array|Object)=} keys
* @param {Object=} options
* @return {!RegExp}
*/
function pathToRegexp (path, keys, options) {
if (!isarray(keys)) {
options = /** @type {!Object} */ (keys || options);
keys = [];
}
options = options || {};
if (path instanceof RegExp) {
return regexpToRegexp(path, /** @type {!Array} */ (keys))
}
if (isarray(path)) {
return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)
}
return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)
}
index.parse = parse_1;
index.compile = compile_1;
index.tokensToFunction = tokensToFunction_1;
index.tokensToRegExp = tokensToRegExp_1;
/* */
var regexpCache = Object.create(null);
function getRouteRegex (path) {
var hit = regexpCache[path];
var keys, regexp;
if (hit) {
keys = hit.keys;
regexp = hit.regexp;
} else {
keys = [];
regexp = index(path, keys);
regexpCache[path] = { keys: keys, regexp: regexp };
}
return { keys: keys, regexp: regexp }
}
var regexpCompileCache = Object.create(null);
function fillParams (
path,
params,
routeMsg
) {
try {
var filler =
regexpCompileCache[path] ||
(regexpCompileCache[path] = index.compile(path));
return filler(params || {}, { pretty: true })
} catch (e) {
if (process.env.NODE_ENV !== 'production') {
warn(false, ("missing param for " + routeMsg + ": " + (e.message)));
}
return ''
}
}
/* */
function normalizeLocation (
raw,
current,
append
) {
var next = typeof raw === 'string' ? { path: raw } : raw;
// named target
if (next.name || next._normalized) {
return next
}
// relative params
if (!next.path && next.params && current) {
next = assign({}, next);
next._normalized = true;
var params = assign(assign({}, current.params), next.params);
if (current.name) {
next.name = current.name;
next.params = params;
} else if (current.matched) {
var rawPath = current.matched[current.matched.length - 1].path;
next.path = fillParams(rawPath, params, ("path " + (current.path)));
} else if (process.env.NODE_ENV !== 'production') {
warn(false, "relative params navigation requires a current route.");
}
return next
}
var parsedPath = parsePath(next.path || '');
var basePath = (current && current.path) || '/';
var path = parsedPath.path
? resolvePath(parsedPath.path, basePath, append || next.append)
: (current && current.path) || '/';
var query = resolveQuery(parsedPath.query, next.query);
var hash = next.hash || parsedPath.hash;
if (hash && hash.charAt(0) !== '#') {
hash = "#" + hash;
}
return {
_normalized: true,
path: path,
query: query,
hash: hash
}
}
function assign (a, b) {
for (var key in b) {
a[key] = b[key];
}
return a
}
/* */
function createMatcher (routes) {
var ref = createRouteMap(routes);
var pathMap = ref.pathMap;
var nameMap = ref.nameMap;
function addRoutes (routes) {
createRouteMap(routes, pathMap, nameMap);
}
function match (
raw,
currentRoute,
redirectedFrom
) {
var location = normalizeLocation(raw, currentRoute);
var name = location.name;
if (name) {
var record = nameMap[name];
if (process.env.NODE_ENV !== 'production') {
warn(record, ("Route with name '" + name + "' does not exist"));
}
var paramNames = getRouteRegex(record.path).keys
.filter(function (key) { return !key.optional; })
.map(function (key) { return key.name; });
if (typeof location.params !== 'object') {
location.params = {};
}
if (currentRoute && typeof currentRoute.params === 'object') {
for (var key in currentRoute.params) {
if (!(key in location.params) && paramNames.indexOf(key) > -1) {
location.params[key] = currentRoute.params[key];
}
}
}
if (record) {
location.path = fillParams(record.path, location.params, ("named route \"" + name + "\""));
return _createRoute(record, location, redirectedFrom)
}
} else if (location.path) {
location.params = {};
for (var path in pathMap) {
if (matchRoute(path, location.params, location.path)) {
return _createRoute(pathMap[path], location, redirectedFrom)
}
}
}
// no match
return _createRoute(null, location)
}
function redirect (
record,
location
) {
var originalRedirect = record.redirect;
var redirect = typeof originalRedirect === 'function'
? originalRedirect(createRoute(record, location))
: originalRedirect;
if (typeof redirect === 'string') {
redirect = { path: redirect };
}
if (!redirect || typeof redirect !== 'object') {
process.env.NODE_ENV !== 'production' && warn(
false, ("invalid redirect option: " + (JSON.stringify(redirect)))
);
return _createRoute(null, location)
}
var re = redirect;
var name = re.name;
var path = re.path;
var query = location.query;
var hash = location.hash;
var params = location.params;
query = re.hasOwnProperty('query') ? re.query : query;
hash = re.hasOwnProperty('hash') ? re.hash : hash;
params = re.hasOwnProperty('params') ? re.params : params;
if (name) {
// resolved named direct
var targetRecord = nameMap[name];
if (process.env.NODE_ENV !== 'production') {
assert(targetRecord, ("redirect failed: named route \"" + name + "\" not found."));
}
return match({
_normalized: true,
name: name,
query: query,
hash: hash,
params: params
}, undefined, location)
} else if (path) {
// 1. resolve relative redirect
var rawPath = resolveRecordPath(path, record);
// 2. resolve params
var resolvedPath = fillParams(rawPath, params, ("redirect route with path \"" + rawPath + "\""));
// 3. rematch with existing query and hash
return match({
_normalized: true,
path: resolvedPath,
query: query,
hash: hash
}, undefined, location)
} else {
warn(false, ("invalid redirect option: " + (JSON.stringify(redirect))));
return _createRoute(null, location)
}
}
function alias (
record,
location,
matchAs
) {
var aliasedPath = fillParams(matchAs, location.params, ("aliased route with path \"" + matchAs + "\""));
var aliasedMatch = match({
_normalized: true,
path: aliasedPath
});
if (aliasedMatch) {
var matched = aliasedMatch.matched;
var aliasedRecord = matched[matched.length - 1];
location.params = aliasedMatch.params;
return _createRoute(aliasedRecord, location)
}
return _createRoute(null, location)
}
function _createRoute (
record,
location,
redirectedFrom
) {
if (record && record.redirect) {
return redirect(record, redirectedFrom || location)
}
if (record && record.matchAs) {
return alias(record, location, record.matchAs)
}
return createRoute(record, location, redirectedFrom)
}
return {
match: match,
addRoutes: addRoutes
}
}
function matchRoute (
path,
params,
pathname
) {
var ref = getRouteRegex(path);
var regexp = ref.regexp;
var keys = ref.keys;
var m = pathname.match(regexp);
if (!m) {
return false
} else if (!params) {
return true
}
for (var i = 1, len = m.length; i < len; ++i) {
var key = keys[i - 1];
var val = typeof m[i] === 'string' ? decodeURIComponent(m[i]) : m[i];
if (key) { params[key.name] = val; }
}
return true
}
function resolveRecordPath (path, record) {
return resolvePath(path, record.parent ? record.parent.path : '/', true)
}
/* */
var positionStore = Object.create(null);
function setupScroll () {
window.addEventListener('popstate', function (e) {
if (e.state && e.state.key) {
setStateKey(e.state.key);
}
});
window.addEventListener('scroll', saveScrollPosition);
}
function handleScroll (
router,
to,
from,
isPop
) {
if (!router.app) {
return
}
var behavior = router.options.scrollBehavior;
if (!behavior) {
return
}
if (process.env.NODE_ENV !== 'production') {
assert(typeof behavior === 'function', "scrollBehavior must be a function");
}
// wait until re-render finishes before scrolling
router.app.$nextTick(function () {
var position = getScrollPosition();
var shouldScroll = behavior(to, from, isPop ? position : null);
if (!shouldScroll) {
return
}
var isObject = typeof shouldScroll === 'object';
if (isObject && typeof shouldScroll.selector === 'string') {
var el = document.querySelector(shouldScroll.selector);
if (el) {
position = getElementPosition(el);
} else if (isValidPosition(shouldScroll)) {
position = normalizePosition(shouldScroll);
}
} else if (isObject && isValidPosition(shouldScroll)) {
position = normalizePosition(shouldScroll);
}
if (position) {
window.scrollTo(position.x, position.y);
}
});
}
function saveScrollPosition () {
var key = getStateKey();
if (key) {
positionStore[key] = {
x: window.pageXOffset,
y: window.pageYOffset
};
}
}
function getScrollPosition () {
var key = getStateKey();
if (key) {
return positionStore[key]
}
}
function getElementPosition (el) {
var docRect = document.documentElement.getBoundingClientRect();
var elRect = el.getBoundingClientRect();
return {
x: elRect.left - docRect.left,
y: elRect.top - docRect.top
}
}
function isValidPosition (obj) {
return isNumber(obj.x) || isNumber(obj.y)
}
function normalizePosition (obj) {
return {
x: isNumber(obj.x) ? obj.x : window.pageXOffset,
y: isNumber(obj.y) ? obj.y : window.pageYOffset
}
}
function isNumber (v) {
return typeof v === 'number'
}
/* */
var supportsPushState = inBrowser && (function () {
var ua = window.navigator.userAgent;
if (
(ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&
ua.indexOf('Mobile Safari') !== -1 &&
ua.indexOf('Chrome') === -1 &&
ua.indexOf('Windows Phone') === -1
) {
return false
}
return window.history && 'pushState' in window.history
})();
// use User Timing api (if present) for more accurate key precision
var Time = inBrowser && window.performance && window.performance.now
? window.performance
: Date;
var _key = genKey();
function genKey () {
return Time.now().toFixed(3)
}
function getStateKey () {
return _key
}
function setStateKey (key) {
_key = key;
}
function pushState (url, replace) {
// try...catch the pushState call to get around Safari
// DOM Exception 18 where it limits to 100 pushState calls
var history = window.history;
try {
if (replace) {
history.replaceState({ key: _key }, '', url);
} else {
_key = genKey();
history.pushState({ key: _key }, '', url);
}
saveScrollPosition();
} catch (e) {
window.location[replace ? 'replace' : 'assign'](url);
}
}
function replaceState (url) {
pushState(url, true);
}
/* */
function runQueue (queue, fn, cb) {
var step = function (index) {
if (index >= queue.length) {
cb();
} else {
if (queue[index]) {
fn(queue[index], function () {
step(index + 1);
});
} else {
step(index + 1);
}
}
};
step(0);
}
/* */
var History = function History (router, base) {
this.router = router;
this.base = normalizeBase(base);
// start with a route object that stands for "nowhere"
this.current = START;
this.pending = null;
this.ready = false;
this.readyCbs = [];
};
History.prototype.listen = function listen (cb) {
this.cb = cb;
};
History.prototype.onReady = function onReady (cb) {
if (this.ready) {
cb();
} else {
this.readyCbs.push(cb);
}
};
History.prototype.transitionTo = function transitionTo (location, onComplete, onAbort) {
var this$1 = this;
var route = this.router.match(location, this.current);
this.confirmTransition(route, function () {
this$1.updateRoute(route);
onComplete && onComplete(route);
this$1.ensureURL();
// fire ready cbs once
if (!this$1.ready) {
this$1.ready = true;
this$1.readyCbs.forEach(function (cb) {
cb(route);
});
}
}, onAbort);
};
History.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {
var this$1 = this;
var current = this.current;
var abort = function () { onAbort && onAbort(); };
if (
isSameRoute(route, current) &&
// in the case the route map has been dynamically appended to
route.matched.length === current.matched.length
) {
this.ensureURL();
return abort()
}
var ref = resolveQueue(this.current.matched, route.matched);
var updated = ref.updated;
var deactivated = ref.deactivated;
var activated = ref.activated;
var queue = [].concat(
// in-component leave guards
extractLeaveGuards(deactivated),
// global before hooks
this.router.beforeHooks,
// in-component update hooks
extractUpdateHooks(updated),
// in-config enter guards
activated.map(function (m) { return m.beforeEnter; }),
// async components
resolveAsyncComponents(activated)
);
this.pending = route;
var iterator = function (hook, next) {
if (this$1.pending !== route) {
return abort()
}
hook(route, current, function (to) {
if (to === false) {
// next(false) -> abort navigation, ensure current URL
this$1.ensureURL(true);
abort();
} else if (typeof to === 'string' || typeof to === 'object') {
// next('/') or next({ path: '/' }) -> redirect
(typeof to === 'object' && to.replace) ? this$1.replace(to) : this$1.push(to);
abort();
} else {
// confirm transition and pass on the value
next(to);
}
});
};
runQueue(queue, iterator, function () {
var postEnterCbs = [];
var isValid = function () { return this$1.current === route; };
var enterGuards = extractEnterGuards(activated, postEnterCbs, isValid);
// wait until async components are resolved before
// extracting in-component enter guards
runQueue(enterGuards, iterator, function () {
if (this$1.pending !== route) {
return abort()
}
this$1.pending = null;
onComplete(route);
if (this$1.router.app) {
this$1.router.app.$nextTick(function () {
postEnterCbs.forEach(function (cb) { return cb(); });
});
}
});
});
};
History.prototype.updateRoute = function updateRoute (route) {
var prev = this.current;
this.current = route;
this.cb && this.cb(route);
this.router.afterHooks.forEach(function (hook) {
hook && hook(route, prev);
});
};
function normalizeBase (base) {
if (!base) {
if (inBrowser) {
// respect <base> tag
var baseEl = document.querySelector('base');
base = baseEl ? baseEl.getAttribute('href') : '/';
} else {
base = '/';
}
}
// make sure there's the starting slash
if (base.charAt(0) !== '/') {
base = '/' + base;
}
// remove trailing slash
return base.replace(/\/$/, '')
}
function resolveQueue (
current,
next
) {
var i;
var max = Math.max(current.length, next.length);
for (i = 0; i < max; i++) {
if (current[i] !== next[i]) {
break
}
}
return {
updated: next.slice(0, i),
activated: next.slice(i),
deactivated: current.slice(i)
}
}
function extractGuards (
records,
name,
bind,
reverse
) {
var guards = flatMapComponents(records, function (def, instance, match, key) {
var guard = extractGuard(def, name);
if (guard) {
return Array.isArray(guard)
? guard.map(function (guard) { return bind(guard, instance, match, key); })
: bind(guard, instance, match, key)
}
});
return flatten(reverse ? guards.reverse() : guards)
}
function extractGuard (
def,
key
) {
if (typeof def !== 'function') {
// extend now so that global mixins are applied.
def = _Vue.extend(def);
}
return def.options[key]
}
function extractLeaveGuards (deactivated) {
return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)
}
function extractUpdateHooks (updated) {
return extractGuards(updated, 'beforeRouteUpdate', bindGuard)
}
function bindGuard (guard, instance) {
return function boundRouteGuard () {
return guard.apply(instance, arguments)
}
}
function extractEnterGuards (
activated,
cbs,
isValid
) {
return extractGuards(activated, 'beforeRouteEnter', function (guard, _, match, key) {
return bindEnterGuard(guard, match, key, cbs, isValid)
})
}
function bindEnterGuard (
guard,
match,
key,
cbs,
isValid
) {
return function routeEnterGuard (to, from, next) {
return guard(to, from, function (cb) {
next(cb);
if (typeof cb === 'function') {
cbs.push(function () {
// #750
// if a router-view is wrapped with an out-in transition,
// the instance may not have been registered at this time.
// we will need to poll for registration until current route
// is no longer valid.
poll(cb, match.instances, key, isValid);
});
}
})
}
}
function poll (
cb, // somehow flow cannot infer this is a function
instances,
key,
isValid
) {
if (instances[key]) {
cb(instances[key]);
} else if (isValid()) {
setTimeout(function () {
poll(cb, instances, key, isValid);
}, 16);
}
}
function resolveAsyncComponents (matched) {
return flatMapComponents(matched, function (def, _, match, key) {
// if it's a function and doesn't have Vue options attached,
// assume it's an async component resolve function.
// we are not using Vue's default async resolving mechanism because
// we want to halt the navigation until the incoming component has been
// resolved.
if (typeof def === 'function' && !def.options) {
return function (to, from, next) {
var resolve = once(function (resolvedDef) {
match.components[key] = resolvedDef;
next();
});
var reject = once(function (reason) {
warn(false, ("Failed to resolve async component " + key + ": " + reason));
next(false);
});
var res = def(resolve, reject);
if (res && typeof res.then === 'function') {
res.then(resolve, reject);
}
}
}
})
}
function flatMapComponents (
matched,
fn
) {
return flatten(matched.map(function (m) {
return Object.keys(m.components).map(function (key) { return fn(
m.components[key],
m.instances[key],
m, key
); })
}))
}
function flatten (arr) {
return Array.prototype.concat.apply([], arr)
}
// in Webpack 2, require.ensure now also returns a Promise
// so the resolve/reject functions may get called an extra time
// if the user uses an arrow function shorthand that happens to
// return that Promise.
function once (fn) {
var called = false;
return function () {
if (called) { return }
called = true;
return fn.apply(this, arguments)
}
}
/* */
var HTML5History = (function (History$$1) {
function HTML5History (router, base) {
var this$1 = this;
History$$1.call(this, router, base);
var expectScroll = router.options.scrollBehavior;
if (expectScroll) {
setupScroll();
}
window.addEventListener('popstate', function (e) {
this$1.transitionTo(getLocation(this$1.base), function (route) {
if (expectScroll) {
handleScroll(router, route, this$1.current, true);
}
});
});
}
if ( History$$1 ) HTML5History.__proto__ = History$$1;
HTML5History.prototype = Object.create( History$$1 && History$$1.prototype );
HTML5History.prototype.constructor = HTML5History;
HTML5History.prototype.go = function go (n) {
window.history.go(n);
};
HTML5History.prototype.push = function push (location, onComplete, onAbort) {
var this$1 = this;
this.transitionTo(location, function (route) {
pushState(cleanPath(this$1.base + route.fullPath));
handleScroll(this$1.router, route, this$1.current, false);
onComplete && onComplete(route);
}, onAbort);
};
HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {
var this$1 = this;
this.transitionTo(location, function (route) {
replaceState(cleanPath(this$1.base + route.fullPath));
handleScroll(this$1.router, route, this$1.current, false);
onComplete && onComplete(route);
}, onAbort);
};
HTML5History.prototype.ensureURL = function ensureURL (push) {
if (getLocation(this.base) !== this.current.fullPath) {
var current = cleanPath(this.base + this.current.fullPath);
push ? pushState(current) : replaceState(current);
}
};
HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {
return getLocation(this.base)
};
return HTML5History;
}(History));
function getLocation (base) {
var path = window.location.pathname;
if (base && path.indexOf(base) === 0) {
path = path.slice(base.length);
}
return (path || '/') + window.location.search + window.location.hash
}
/* */
var HashHistory = (function (History$$1) {
function HashHistory (router, base, fallback) {
History$$1.call(this, router, base);
// check history fallback deeplinking
if (fallback && checkFallback(this.base)) {
return
}
ensureSlash();
}
if ( History$$1 ) HashHistory.__proto__ = History$$1;
HashHistory.prototype = Object.create( History$$1 && History$$1.prototype );
HashHistory.prototype.constructor = HashHistory;
// this is delayed until the app mounts
// to avoid the hashchange listener being fired too early
HashHistory.prototype.setupListeners = function setupListeners () {
var this$1 = this;
window.addEventListener('hashchange', function () {
if (!ensureSlash()) {
return
}
this$1.transitionTo(getHash(), function (route) {
replaceHash(route.fullPath);
});
});
};
HashHistory.prototype.push = function push (location, onComplete, onAbort) {
this.transitionTo(location, function (route) {
pushHash(route.fullPath);
onComplete && onComplete(route);
}, onAbort);
};
HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {
this.transitionTo(location, function (route) {
replaceHash(route.fullPath);
onComplete && onComplete(route);
}, onAbort);
};
HashHistory.prototype.go = function go (n) {
window.history.go(n);
};
HashHistory.prototype.ensureURL = function ensureURL (push) {
var current = this.current.fullPath;
if (getHash() !== current) {
push ? pushHash(current) : replaceHash(current);
}
};
HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {
return getHash()
};
return HashHistory;
}(History));
function checkFallback (base) {
var location = getLocation(base);
if (!/^\/#/.test(location)) {
window.location.replace(
cleanPath(base + '/#' + location)
);
return true
}
}
function ensureSlash () {
var path = getHash();
if (path.charAt(0) === '/') {
return true
}
replaceHash('/' + path);
return false
}
function getHash () {
// We can't use window.location.hash here because it's not
// consistent across browsers - Firefox will pre-decode it!
var href = window.location.href;
var index = href.indexOf('#');
return index === -1 ? '' : href.slice(index + 1)
}
function pushHash (path) {
window.location.hash = path;
}
function replaceHash (path) {
var i = window.location.href.indexOf('#');
window.location.replace(
window.location.href.slice(0, i >= 0 ? i : 0) + '#' + path
);
}
/* */
var AbstractHistory = (function (History$$1) {
function AbstractHistory (router, base) {
History$$1.call(this, router, base);
this.stack = [];
this.index = -1;
}
if ( History$$1 ) AbstractHistory.__proto__ = History$$1;
AbstractHistory.prototype = Object.create( History$$1 && History$$1.prototype );
AbstractHistory.prototype.constructor = AbstractHistory;
AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {
var this$1 = this;
this.transitionTo(location, function (route) {
this$1.stack = this$1.stack.slice(0, this$1.index + 1).concat(route);
this$1.index++;
onComplete && onComplete(route);
}, onAbort);
};
AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {
var this$1 = this;
this.transitionTo(location, function (route) {
this$1.stack = this$1.stack.slice(0, this$1.index).concat(route);
onComplete && onComplete(route);
}, onAbort);
};
AbstractHistory.prototype.go = function go (n) {
var this$1 = this;
var targetIndex = this.index + n;
if (targetIndex < 0 || targetIndex >= this.stack.length) {
return
}
var route = this.stack[targetIndex];
this.confirmTransition(route, function () {
this$1.index = targetIndex;
this$1.updateRoute(route);
});
};
AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {
var current = this.stack[this.stack.length - 1];
return current ? current.fullPath : '/'
};
AbstractHistory.prototype.ensureURL = function ensureURL () {
// noop
};
return AbstractHistory;
}(History));
/* */
var VueRouter = function VueRouter (options) {
if ( options === void 0 ) options = {};
this.app = null;
this.apps = [];
this.options = options;
this.beforeHooks = [];
this.afterHooks = [];
this.matcher = createMatcher(options.routes || []);
var mode = options.mode || 'hash';
this.fallback = mode === 'history' && !supportsPushState;
if (this.fallback) {
mode = 'hash';
}
if (!inBrowser) {
mode = 'abstract';
}
this.mode = mode;
switch (mode) {
case 'history':
this.history = new HTML5History(this, options.base);
break
case 'hash':
this.history = new HashHistory(this, options.base, this.fallback);
break
case 'abstract':
this.history = new AbstractHistory(this, options.base);
break
default:
if (process.env.NODE_ENV !== 'production') {
assert(false, ("invalid mode: " + mode));
}
}
};
var prototypeAccessors = { currentRoute: {} };
VueRouter.prototype.match = function match (
raw,
current,
redirectedFrom
) {
return this.matcher.match(raw, current, redirectedFrom)
};
prototypeAccessors.currentRoute.get = function () {
return this.history && this.history.current
};
VueRouter.prototype.init = function init (app /* Vue component instance */) {
var this$1 = this;
process.env.NODE_ENV !== 'production' && assert(
install.installed,
"not installed. Make sure to call `Vue.use(VueRouter)` " +
"before creating root instance."
);
this.apps.push(app);
// main app already initialized.
if (this.app) {
return
}
this.app = app;
var history = this.history;
if (history instanceof HTML5History) {
history.transitionTo(history.getCurrentLocation());
} else if (history instanceof HashHistory) {
var setupHashListener = function () {
history.setupListeners();
};
history.transitionTo(
history.getCurrentLocation(),
setupHashListener,
setupHashListener
);
}
history.listen(function (route) {
this$1.apps.forEach(function (app) {
app._route = route;
});
});
};
VueRouter.prototype.beforeEach = function beforeEach (fn) {
this.beforeHooks.push(fn);
};
VueRouter.prototype.afterEach = function afterEach (fn) {
this.afterHooks.push(fn);
};
VueRouter.prototype.onReady = function onReady (cb) {
this.history.onReady(cb);
};
VueRouter.prototype.push = function push (location, onComplete, onAbort) {
this.history.push(location, onComplete, onAbort);
};
VueRouter.prototype.replace = function replace (location, onComplete, onAbort) {
this.history.replace(location, onComplete, onAbort);
};
VueRouter.prototype.go = function go (n) {
this.history.go(n);
};
VueRouter.prototype.back = function back () {
this.go(-1);
};
VueRouter.prototype.forward = function forward () {
this.go(1);
};
VueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {
var route = to
? this.resolve(to).route
: this.currentRoute;
if (!route) {
return []
}
return [].concat.apply([], route.matched.map(function (m) {
return Object.keys(m.components).map(function (key) {
return m.components[key]
})
}))
};
VueRouter.prototype.resolve = function resolve (
to,
current,
append
) {
var location = normalizeLocation(to, current || this.history.current, append);
var route = this.match(location, current);
var fullPath = route.redirectedFrom || route.fullPath;
var base = this.history.base;
var href = createHref(base, fullPath, this.mode);
return {
location: location,
route: route,
href: href,
// for backwards compat
normalizedTo: location,
resolved: route
}
};
VueRouter.prototype.addRoutes = function addRoutes (routes) {
this.matcher.addRoutes(routes);
if (this.history.current !== START) {
this.history.transitionTo(this.history.getCurrentLocation());
}
};
Object.defineProperties( VueRouter.prototype, prototypeAccessors );
function createHref (base, fullPath, mode) {
var path = mode === 'hash' ? '#' + fullPath : fullPath;
return base ? cleanPath(base + '/' + path) : path
}
VueRouter.install = install;
VueRouter.version = '2.2.0';
if (inBrowser && window.Vue) {
window.Vue.use(VueRouter);
}
module.exports = VueRouter;
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(8)))
/***/ }),
/* 62 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(process, global) {/*!
* Vue.js v2.1.8
* (c) 2014-2016 Evan You
* Released under the MIT License.
*/
/* */
/**
* Convert a value to a string that is actually rendered.
*/
function _toString (val) {
return val == null
? ''
: typeof val === 'object'
? JSON.stringify(val, null, 2)
: String(val)
}
/**
* Convert a input value to a number for persistence.
* If the conversion fails, return original string.
*/
function toNumber (val) {
var n = parseFloat(val, 10);
return (n || n === 0) ? n : val
}
/**
* Make a map and return a function for checking if a key
* is in that map.
*/
function makeMap (
str,
expectsLowerCase
) {
var map = Object.create(null);
var list = str.split(',');
for (var i = 0; i < list.length; i++) {
map[list[i]] = true;
}
return expectsLowerCase
? function (val) { return map[val.toLowerCase()]; }
: function (val) { return map[val]; }
}
/**
* Check if a tag is a built-in tag.
*/
var isBuiltInTag = makeMap('slot,component', true);
/**
* Remove an item from an array
*/
function remove$1 (arr, item) {
if (arr.length) {
var index = arr.indexOf(item);
if (index > -1) {
return arr.splice(index, 1)
}
}
}
/**
* Check whether the object has the property.
*/
var hasOwnProperty = Object.prototype.hasOwnProperty;
function hasOwn (obj, key) {
return hasOwnProperty.call(obj, key)
}
/**
* Check if value is primitive
*/
function isPrimitive (value) {
return typeof value === 'string' || typeof value === 'number'
}
/**
* Create a cached version of a pure function.
*/
function cached (fn) {
var cache = Object.create(null);
return (function cachedFn (str) {
var hit = cache[str];
return hit || (cache[str] = fn(str))
})
}
/**
* Camelize a hyphen-delmited string.
*/
var camelizeRE = /-(\w)/g;
var camelize = cached(function (str) {
return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })
});
/**
* Capitalize a string.
*/
var capitalize = cached(function (str) {
return str.charAt(0).toUpperCase() + str.slice(1)
});
/**
* Hyphenate a camelCase string.
*/
var hyphenateRE = /([^-])([A-Z])/g;
var hyphenate = cached(function (str) {
return str
.replace(hyphenateRE, '$1-$2')
.replace(hyphenateRE, '$1-$2')
.toLowerCase()
});
/**
* Simple bind, faster than native
*/
function bind$1 (fn, ctx) {
function boundFn (a) {
var l = arguments.length;
return l
? l > 1
? fn.apply(ctx, arguments)
: fn.call(ctx, a)
: fn.call(ctx)
}
// record original fn length
boundFn._length = fn.length;
return boundFn
}
/**
* Convert an Array-like object to a real Array.
*/
function toArray (list, start) {
start = start || 0;
var i = list.length - start;
var ret = new Array(i);
while (i--) {
ret[i] = list[i + start];
}
return ret
}
/**
* Mix properties into target object.
*/
function extend (to, _from) {
for (var key in _from) {
to[key] = _from[key];
}
return to
}
/**
* Quick object check - this is primarily used to tell
* Objects from primitive values when we know the value
* is a JSON-compliant type.
*/
function isObject (obj) {
return obj !== null && typeof obj === 'object'
}
/**
* Strict object type check. Only returns true
* for plain JavaScript objects.
*/
var toString = Object.prototype.toString;
var OBJECT_STRING = '[object Object]';
function isPlainObject (obj) {
return toString.call(obj) === OBJECT_STRING
}
/**
* Merge an Array of Objects into a single Object.
*/
function toObject (arr) {
var res = {};
for (var i = 0; i < arr.length; i++) {
if (arr[i]) {
extend(res, arr[i]);
}
}
return res
}
/**
* Perform no operation.
*/
function noop () {}
/**
* Always return false.
*/
var no = function () { return false; };
/**
* Return same value
*/
var identity = function (_) { return _; };
/**
* Generate a static keys string from compiler modules.
*/
function genStaticKeys (modules) {
return modules.reduce(function (keys, m) {
return keys.concat(m.staticKeys || [])
}, []).join(',')
}
/**
* Check if two values are loosely equal - that is,
* if they are plain objects, do they have the same shape?
*/
function looseEqual (a, b) {
var isObjectA = isObject(a);
var isObjectB = isObject(b);
if (isObjectA && isObjectB) {
return JSON.stringify(a) === JSON.stringify(b)
} else if (!isObjectA && !isObjectB) {
return String(a) === String(b)
} else {
return false
}
}
function looseIndexOf (arr, val) {
for (var i = 0; i < arr.length; i++) {
if (looseEqual(arr[i], val)) { return i }
}
return -1
}
/* */
var config = {
/**
* Option merge strategies (used in core/util/options)
*/
optionMergeStrategies: Object.create(null),
/**
* Whether to suppress warnings.
*/
silent: false,
/**
* Whether to enable devtools
*/
devtools: process.env.NODE_ENV !== 'production',
/**
* Error handler for watcher errors
*/
errorHandler: null,
/**
* Ignore certain custom elements
*/
ignoredElements: [],
/**
* Custom user key aliases for v-on
*/
keyCodes: Object.create(null),
/**
* Check if a tag is reserved so that it cannot be registered as a
* component. This is platform-dependent and may be overwritten.
*/
isReservedTag: no,
/**
* Check if a tag is an unknown element.
* Platform-dependent.
*/
isUnknownElement: no,
/**
* Get the namespace of an element
*/
getTagNamespace: noop,
/**
* Parse the real tag name for the specific platform.
*/
parsePlatformTagName: identity,
/**
* Check if an attribute must be bound using property, e.g. value
* Platform-dependent.
*/
mustUseProp: no,
/**
* List of asset types that a component can own.
*/
_assetTypes: [
'component',
'directive',
'filter'
],
/**
* List of lifecycle hooks.
*/
_lifecycleHooks: [
'beforeCreate',
'created',
'beforeMount',
'mounted',
'beforeUpdate',
'updated',
'beforeDestroy',
'destroyed',
'activated',
'deactivated'
],
/**
* Max circular updates allowed in a scheduler flush cycle.
*/
_maxUpdateCount: 100
};
/* */
/**
* Check if a string starts with $ or _
*/
function isReserved (str) {
var c = (str + '').charCodeAt(0);
return c === 0x24 || c === 0x5F
}
/**
* Define a property.
*/
function def (obj, key, val, enumerable) {
Object.defineProperty(obj, key, {
value: val,
enumerable: !!enumerable,
writable: true,
configurable: true
});
}
/**
* Parse simple path.
*/
var bailRE = /[^\w.$]/;
function parsePath (path) {
if (bailRE.test(path)) {
return
} else {
var segments = path.split('.');
return function (obj) {
for (var i = 0; i < segments.length; i++) {
if (!obj) { return }
obj = obj[segments[i]];
}
return obj
}
}
}
/* */
/* globals MutationObserver */
// can we use __proto__?
var hasProto = '__proto__' in {};
// Browser environment sniffing
var inBrowser = typeof window !== 'undefined';
var UA = inBrowser && window.navigator.userAgent.toLowerCase();
var isIE = UA && /msie|trident/.test(UA);
var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
var isEdge = UA && UA.indexOf('edge/') > 0;
var isAndroid = UA && UA.indexOf('android') > 0;
var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);
// this needs to be lazy-evaled because vue may be required before
// vue-server-renderer can set VUE_ENV
var _isServer;
var isServerRendering = function () {
if (_isServer === undefined) {
/* istanbul ignore if */
if (!inBrowser && typeof global !== 'undefined') {
// detect presence of vue-server-renderer and avoid
// Webpack shimming the process
_isServer = global['process'].env.VUE_ENV === 'server';
} else {
_isServer = false;
}
}
return _isServer
};
// detect devtools
var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
/* istanbul ignore next */
function isNative (Ctor) {
return /native code/.test(Ctor.toString())
}
/**
* Defer a task to execute it asynchronously.
*/
var nextTick = (function () {
var callbacks = [];
var pending = false;
var timerFunc;
function nextTickHandler () {
pending = false;
var copies = callbacks.slice(0);
callbacks.length = 0;
for (var i = 0; i < copies.length; i++) {
copies[i]();
}
}
// the nextTick behavior leverages the microtask queue, which can be accessed
// via either native Promise.then or MutationObserver.
// MutationObserver has wider support, however it is seriously bugged in
// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
// completely stops working after triggering a few times... so, if native
// Promise is available, we will use it:
/* istanbul ignore if */
if (typeof Promise !== 'undefined' && isNative(Promise)) {
var p = Promise.resolve();
var logError = function (err) { console.error(err); };
timerFunc = function () {
p.then(nextTickHandler).catch(logError);
// in problematic UIWebViews, Promise.then doesn't completely break, but
// it can get stuck in a weird state where callbacks are pushed into the
// microtask queue but the queue isn't being flushed, until the browser
// needs to do some other work, e.g. handle a timer. Therefore we can
// "force" the microtask queue to be flushed by adding an empty timer.
if (isIOS) { setTimeout(noop); }
};
} else if (typeof MutationObserver !== 'undefined' && (
isNative(MutationObserver) ||
// PhantomJS and iOS 7.x
MutationObserver.toString() === '[object MutationObserverConstructor]'
)) {
// use MutationObserver where native Promise is not available,
// e.g. PhantomJS IE11, iOS7, Android 4.4
var counter = 1;
var observer = new MutationObserver(nextTickHandler);
var textNode = document.createTextNode(String(counter));
observer.observe(textNode, {
characterData: true
});
timerFunc = function () {
counter = (counter + 1) % 2;
textNode.data = String(counter);
};
} else {
// fallback to setTimeout
/* istanbul ignore next */
timerFunc = function () {
setTimeout(nextTickHandler, 0);
};
}
return function queueNextTick (cb, ctx) {
var _resolve;
callbacks.push(function () {
if (cb) { cb.call(ctx); }
if (_resolve) { _resolve(ctx); }
});
if (!pending) {
pending = true;
timerFunc();
}
if (!cb && typeof Promise !== 'undefined') {
return new Promise(function (resolve) {
_resolve = resolve;
})
}
}
})();
var _Set;
/* istanbul ignore if */
if (typeof Set !== 'undefined' && isNative(Set)) {
// use native Set when available.
_Set = Set;
} else {
// a non-standard Set polyfill that only works with primitive keys.
_Set = (function () {
function Set () {
this.set = Object.create(null);
}
Set.prototype.has = function has (key) {
return this.set[key] === true
};
Set.prototype.add = function add (key) {
this.set[key] = true;
};
Set.prototype.clear = function clear () {
this.set = Object.create(null);
};
return Set;
}());
}
var warn = noop;
var formatComponentName;
if (process.env.NODE_ENV !== 'production') {
var hasConsole = typeof console !== 'undefined';
warn = function (msg, vm) {
if (hasConsole && (!config.silent)) {
console.error("[Vue warn]: " + msg + " " + (
vm ? formatLocation(formatComponentName(vm)) : ''
));
}
};
formatComponentName = function (vm) {
if (vm.$root === vm) {
return 'root instance'
}
var name = vm._isVue
? vm.$options.name || vm.$options._componentTag
: vm.name;
return (
(name ? ("component <" + name + ">") : "anonymous component") +
(vm._isVue && vm.$options.__file ? (" at " + (vm.$options.__file)) : '')
)
};
var formatLocation = function (str) {
if (str === 'anonymous component') {
str += " - use the \"name\" option for better debugging messages.";
}
return ("\n(found in " + str + ")")
};
}
/* */
var uid$1 = 0;
/**
* A dep is an observable that can have multiple
* directives subscribing to it.
*/
var Dep = function Dep () {
this.id = uid$1++;
this.subs = [];
};
Dep.prototype.addSub = function addSub (sub) {
this.subs.push(sub);
};
Dep.prototype.removeSub = function removeSub (sub) {
remove$1(this.subs, sub);
};
Dep.prototype.depend = function depend () {
if (Dep.target) {
Dep.target.addDep(this);
}
};
Dep.prototype.notify = function notify () {
// stablize the subscriber list first
var subs = this.subs.slice();
for (var i = 0, l = subs.length; i < l; i++) {
subs[i].update();
}
};
// the current target watcher being evaluated.
// this is globally unique because there could be only one
// watcher being evaluated at any time.
Dep.target = null;
var targetStack = [];
function pushTarget (_target) {
if (Dep.target) { targetStack.push(Dep.target); }
Dep.target = _target;
}
function popTarget () {
Dep.target = targetStack.pop();
}
/*
* not type checking this file because flow doesn't play well with
* dynamically accessing methods on Array prototype
*/
var arrayProto = Array.prototype;
var arrayMethods = Object.create(arrayProto);[
'push',
'pop',
'shift',
'unshift',
'splice',
'sort',
'reverse'
]
.forEach(function (method) {
// cache original method
var original = arrayProto[method];
def(arrayMethods, method, function mutator () {
var arguments$1 = arguments;
// avoid leaking arguments:
// http://jsperf.com/closure-with-arguments
var i = arguments.length;
var args = new Array(i);
while (i--) {
args[i] = arguments$1[i];
}
var result = original.apply(this, args);
var ob = this.__ob__;
var inserted;
switch (method) {
case 'push':
inserted = args;
break
case 'unshift':
inserted = args;
break
case 'splice':
inserted = args.slice(2);
break
}
if (inserted) { ob.observeArray(inserted); }
// notify change
ob.dep.notify();
return result
});
});
/* */
var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
/**
* By default, when a reactive property is set, the new value is
* also converted to become reactive. However when passing down props,
* we don't want to force conversion because the value may be a nested value
* under a frozen data structure. Converting it would defeat the optimization.
*/
var observerState = {
shouldConvert: true,
isSettingProps: false
};
/**
* Observer class that are attached to each observed
* object. Once attached, the observer converts target
* object's property keys into getter/setters that
* collect dependencies and dispatches updates.
*/
var Observer = function Observer (value) {
this.value = value;
this.dep = new Dep();
this.vmCount = 0;
def(value, '__ob__', this);
if (Array.isArray(value)) {
var augment = hasProto
? protoAugment
: copyAugment;
augment(value, arrayMethods, arrayKeys);
this.observeArray(value);
} else {
this.walk(value);
}
};
/**
* Walk through each property and convert them into
* getter/setters. This method should only be called when
* value type is Object.
*/
Observer.prototype.walk = function walk (obj) {
var keys = Object.keys(obj);
for (var i = 0; i < keys.length; i++) {
defineReactive$$1(obj, keys[i], obj[keys[i]]);
}
};
/**
* Observe a list of Array items.
*/
Observer.prototype.observeArray = function observeArray (items) {
for (var i = 0, l = items.length; i < l; i++) {
observe(items[i]);
}
};
// helpers
/**
* Augment an target Object or Array by intercepting
* the prototype chain using __proto__
*/
function protoAugment (target, src) {
/* eslint-disable no-proto */
target.__proto__ = src;
/* eslint-enable no-proto */
}
/**
* Augment an target Object or Array by defining
* hidden properties.
*/
/* istanbul ignore next */
function copyAugment (target, src, keys) {
for (var i = 0, l = keys.length; i < l; i++) {
var key = keys[i];
def(target, key, src[key]);
}
}
/**
* Attempt to create an observer instance for a value,
* returns the new observer if successfully observed,
* or the existing observer if the value already has one.
*/
function observe (value, asRootData) {
if (!isObject(value)) {
return
}
var ob;
if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
ob = value.__ob__;
} else if (
observerState.shouldConvert &&
!isServerRendering() &&
(Array.isArray(value) || isPlainObject(value)) &&
Object.isExtensible(value) &&
!value._isVue
) {
ob = new Observer(value);
}
if (asRootData && ob) {
ob.vmCount++;
}
return ob
}
/**
* Define a reactive property on an Object.
*/
function defineReactive$$1 (
obj,
key,
val,
customSetter
) {
var dep = new Dep();
var property = Object.getOwnPropertyDescriptor(obj, key);
if (property && property.configurable === false) {
return
}
// cater for pre-defined getter/setters
var getter = property && property.get;
var setter = property && property.set;
var childOb = observe(val);
Object.defineProperty(obj, key, {
enumerable: true,
configurable: true,
get: function reactiveGetter () {
var value = getter ? getter.call(obj) : val;
if (Dep.target) {
dep.depend();
if (childOb) {
childOb.dep.depend();
}
if (Array.isArray(value)) {
dependArray(value);
}
}
return value
},
set: function reactiveSetter (newVal) {
var value = getter ? getter.call(obj) : val;
/* eslint-disable no-self-compare */
if (newVal === value || (newVal !== newVal && value !== value)) {
return
}
/* eslint-enable no-self-compare */
if (process.env.NODE_ENV !== 'production' && customSetter) {
customSetter();
}
if (setter) {
setter.call(obj, newVal);
} else {
val = newVal;
}
childOb = observe(newVal);
dep.notify();
}
});
}
/**
* Set a property on an object. Adds the new property and
* triggers change notification if the property doesn't
* already exist.
*/
function set$1 (obj, key, val) {
if (Array.isArray(obj)) {
obj.length = Math.max(obj.length, key);
obj.splice(key, 1, val);
return val
}
if (hasOwn(obj, key)) {
obj[key] = val;
return
}
var ob = obj.__ob__;
if (obj._isVue || (ob && ob.vmCount)) {
process.env.NODE_ENV !== 'production' && warn(
'Avoid adding reactive properties to a Vue instance or its root $data ' +
'at runtime - declare it upfront in the data option.'
);
return
}
if (!ob) {
obj[key] = val;
return
}
defineReactive$$1(ob.value, key, val);
ob.dep.notify();
return val
}
/**
* Delete a property and trigger change if necessary.
*/
function del (obj, key) {
var ob = obj.__ob__;
if (obj._isVue || (ob && ob.vmCount)) {
process.env.NODE_ENV !== 'production' && warn(
'Avoid deleting properties on a Vue instance or its root $data ' +
'- just set it to null.'
);
return
}
if (!hasOwn(obj, key)) {
return
}
delete obj[key];
if (!ob) {
return
}
ob.dep.notify();
}
/**
* Collect dependencies on array elements when the array is touched, since
* we cannot intercept array element access like property getters.
*/
function dependArray (value) {
for (var e = (void 0), i = 0, l = value.length; i < l; i++) {
e = value[i];
e && e.__ob__ && e.__ob__.dep.depend();
if (Array.isArray(e)) {
dependArray(e);
}
}
}
/* */
/**
* Option overwriting strategies are functions that handle
* how to merge a parent option value and a child option
* value into the final value.
*/
var strats = config.optionMergeStrategies;
/**
* Options with restrictions
*/
if (process.env.NODE_ENV !== 'production') {
strats.el = strats.propsData = function (parent, child, vm, key) {
if (!vm) {
warn(
"option \"" + key + "\" can only be used during instance " +
'creation with the `new` keyword.'
);
}
return defaultStrat(parent, child)
};
}
/**
* Helper that recursively merges two data objects together.
*/
function mergeData (to, from) {
if (!from) { return to }
var key, toVal, fromVal;
var keys = Object.keys(from);
for (var i = 0; i < keys.length; i++) {
key = keys[i];
toVal = to[key];
fromVal = from[key];
if (!hasOwn(to, key)) {
set$1(to, key, fromVal);
} else if (isPlainObject(toVal) && isPlainObject(fromVal)) {
mergeData(toVal, fromVal);
}
}
return to
}
/**
* Data
*/
strats.data = function (
parentVal,
childVal,
vm
) {
if (!vm) {
// in a Vue.extend merge, both should be functions
if (!childVal) {
return parentVal
}
if (typeof childVal !== 'function') {
process.env.NODE_ENV !== 'production' && warn(
'The "data" option should be a function ' +
'that returns a per-instance value in component ' +
'definitions.',
vm
);
return parentVal
}
if (!parentVal) {
return childVal
}
// when parentVal & childVal are both present,
// we need to return a function that returns the
// merged result of both functions... no need to
// check if parentVal is a function here because
// it has to be a function to pass previous merges.
return function mergedDataFn () {
return mergeData(
childVal.call(this),
parentVal.call(this)
)
}
} else if (parentVal || childVal) {
return function mergedInstanceDataFn () {
// instance merge
var instanceData = typeof childVal === 'function'
? childVal.call(vm)
: childVal;
var defaultData = typeof parentVal === 'function'
? parentVal.call(vm)
: undefined;
if (instanceData) {
return mergeData(instanceData, defaultData)
} else {
return defaultData
}
}
}
};
/**
* Hooks and param attributes are merged as arrays.
*/
function mergeHook (
parentVal,
childVal
) {
return childVal
? parentVal
? parentVal.concat(childVal)
: Array.isArray(childVal)
? childVal
: [childVal]
: parentVal
}
config._lifecycleHooks.forEach(function (hook) {
strats[hook] = mergeHook;
});
/**
* Assets
*
* When a vm is present (instance creation), we need to do
* a three-way merge between constructor options, instance
* options and parent options.
*/
function mergeAssets (parentVal, childVal) {
var res = Object.create(parentVal || null);
return childVal
? extend(res, childVal)
: res
}
config._assetTypes.forEach(function (type) {
strats[type + 's'] = mergeAssets;
});
/**
* Watchers.
*
* Watchers hashes should not overwrite one
* another, so we merge them as arrays.
*/
strats.watch = function (parentVal, childVal) {
/* istanbul ignore if */
if (!childVal) { return parentVal }
if (!parentVal) { return childVal }
var ret = {};
extend(ret, parentVal);
for (var key in childVal) {
var parent = ret[key];
var child = childVal[key];
if (parent && !Array.isArray(parent)) {
parent = [parent];
}
ret[key] = parent
? parent.concat(child)
: [child];
}
return ret
};
/**
* Other object hashes.
*/
strats.props =
strats.methods =
strats.computed = function (parentVal, childVal) {
if (!childVal) { return parentVal }
if (!parentVal) { return childVal }
var ret = Object.create(null);
extend(ret, parentVal);
extend(ret, childVal);
return ret
};
/**
* Default strategy.
*/
var defaultStrat = function (parentVal, childVal) {
return childVal === undefined
? parentVal
: childVal
};
/**
* Validate component names
*/
function checkComponents (options) {
for (var key in options.components) {
var lower = key.toLowerCase();
if (isBuiltInTag(lower) || config.isReservedTag(lower)) {
warn(
'Do not use built-in or reserved HTML elements as component ' +
'id: ' + key
);
}
}
}
/**
* Ensure all props option syntax are normalized into the
* Object-based format.
*/
function normalizeProps (options) {
var props = options.props;
if (!props) { return }
var res = {};
var i, val, name;
if (Array.isArray(props)) {
i = props.length;
while (i--) {
val = props[i];
if (typeof val === 'string') {
name = camelize(val);
res[name] = { type: null };
} else if (process.env.NODE_ENV !== 'production') {
warn('props must be strings when using array syntax.');
}
}
} else if (isPlainObject(props)) {
for (var key in props) {
val = props[key];
name = camelize(key);
res[name] = isPlainObject(val)
? val
: { type: val };
}
}
options.props = res;
}
/**
* Normalize raw function directives into object format.
*/
function normalizeDirectives (options) {
var dirs = options.directives;
if (dirs) {
for (var key in dirs) {
var def = dirs[key];
if (typeof def === 'function') {
dirs[key] = { bind: def, update: def };
}
}
}
}
/**
* Merge two option objects into a new one.
* Core utility used in both instantiation and inheritance.
*/
function mergeOptions (
parent,
child,
vm
) {
if (process.env.NODE_ENV !== 'production') {
checkComponents(child);
}
normalizeProps(child);
normalizeDirectives(child);
var extendsFrom = child.extends;
if (extendsFrom) {
parent = typeof extendsFrom === 'function'
? mergeOptions(parent, extendsFrom.options, vm)
: mergeOptions(parent, extendsFrom, vm);
}
if (child.mixins) {
for (var i = 0, l = child.mixins.length; i < l; i++) {
var mixin = child.mixins[i];
if (mixin.prototype instanceof Vue$2) {
mixin = mixin.options;
}
parent = mergeOptions(parent, mixin, vm);
}
}
var options = {};
var key;
for (key in parent) {
mergeField(key);
}
for (key in child) {
if (!hasOwn(parent, key)) {
mergeField(key);
}
}
function mergeField (key) {
var strat = strats[key] || defaultStrat;
options[key] = strat(parent[key], child[key], vm, key);
}
return options
}
/**
* Resolve an asset.
* This function is used because child instances need access
* to assets defined in its ancestor chain.
*/
function resolveAsset (
options,
type,
id,
warnMissing
) {
/* istanbul ignore if */
if (typeof id !== 'string') {
return
}
var assets = options[type];
// check local registration variations first
if (hasOwn(assets, id)) { return assets[id] }
var camelizedId = camelize(id);
if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }
var PascalCaseId = capitalize(camelizedId);
if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }
// fallback to prototype chain
var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
if (process.env.NODE_ENV !== 'production' && warnMissing && !res) {
warn(
'Failed to resolve ' + type.slice(0, -1) + ': ' + id,
options
);
}
return res
}
/* */
function validateProp (
key,
propOptions,
propsData,
vm
) {
var prop = propOptions[key];
var absent = !hasOwn(propsData, key);
var value = propsData[key];
// handle boolean props
if (isType(Boolean, prop.type)) {
if (absent && !hasOwn(prop, 'default')) {
value = false;
} else if (!isType(String, prop.type) && (value === '' || value === hyphenate(key))) {
value = true;
}
}
// check default value
if (value === undefined) {
value = getPropDefaultValue(vm, prop, key);
// since the default value is a fresh copy,
// make sure to observe it.
var prevShouldConvert = observerState.shouldConvert;
observerState.shouldConvert = true;
observe(value);
observerState.shouldConvert = prevShouldConvert;
}
if (process.env.NODE_ENV !== 'production') {
assertProp(prop, key, value, vm, absent);
}
return value
}
/**
* Get the default value of a prop.
*/
function getPropDefaultValue (vm, prop, key) {
// no default, return undefined
if (!hasOwn(prop, 'default')) {
return undefined
}
var def = prop.default;
// warn against non-factory defaults for Object & Array
if (isObject(def)) {
process.env.NODE_ENV !== 'production' && warn(
'Invalid default value for prop "' + key + '": ' +
'Props with type Object/Array must use a factory function ' +
'to return the default value.',
vm
);
}
// the raw prop value was also undefined from previous render,
// return previous default value to avoid unnecessary watcher trigger
if (vm && vm.$options.propsData &&
vm.$options.propsData[key] === undefined &&
vm[key] !== undefined) {
return vm[key]
}
// call factory function for non-Function types
return typeof def === 'function' && prop.type !== Function
? def.call(vm)
: def
}
/**
* Assert whether a prop is valid.
*/
function assertProp (
prop,
name,
value,
vm,
absent
) {
if (prop.required && absent) {
warn(
'Missing required prop: "' + name + '"',
vm
);
return
}
if (value == null && !prop.required) {
return
}
var type = prop.type;
var valid = !type || type === true;
var expectedTypes = [];
if (type) {
if (!Array.isArray(type)) {
type = [type];
}
for (var i = 0; i < type.length && !valid; i++) {
var assertedType = assertType(value, type[i]);
expectedTypes.push(assertedType.expectedType || '');
valid = assertedType.valid;
}
}
if (!valid) {
warn(
'Invalid prop: type check failed for prop "' + name + '".' +
' Expected ' + expectedTypes.map(capitalize).join(', ') +
', got ' + Object.prototype.toString.call(value).slice(8, -1) + '.',
vm
);
return
}
var validator = prop.validator;
if (validator) {
if (!validator(value)) {
warn(
'Invalid prop: custom validator check failed for prop "' + name + '".',
vm
);
}
}
}
/**
* Assert the type of a value
*/
function assertType (value, type) {
var valid;
var expectedType = getType(type);
if (expectedType === 'String') {
valid = typeof value === (expectedType = 'string');
} else if (expectedType === 'Number') {
valid = typeof value === (expectedType = 'number');
} else if (expectedType === 'Boolean') {
valid = typeof value === (expectedType = 'boolean');
} else if (expectedType === 'Function') {
valid = typeof value === (expectedType = 'function');
} else if (expectedType === 'Object') {
valid = isPlainObject(value);
} else if (expectedType === 'Array') {
valid = Array.isArray(value);
} else {
valid = value instanceof type;
}
return {
valid: valid,
expectedType: expectedType
}
}
/**
* Use function string name to check built-in types,
* because a simple equality check will fail when running
* across different vms / iframes.
*/
function getType (fn) {
var match = fn && fn.toString().match(/^\s*function (\w+)/);
return match && match[1]
}
function isType (type, fn) {
if (!Array.isArray(fn)) {
return getType(fn) === getType(type)
}
for (var i = 0, len = fn.length; i < len; i++) {
if (getType(fn[i]) === getType(type)) {
return true
}
}
/* istanbul ignore next */
return false
}
var util = Object.freeze({
defineReactive: defineReactive$$1,
_toString: _toString,
toNumber: toNumber,
makeMap: makeMap,
isBuiltInTag: isBuiltInTag,
remove: remove$1,
hasOwn: hasOwn,
isPrimitive: isPrimitive,
cached: cached,
camelize: camelize,
capitalize: capitalize,
hyphenate: hyphenate,
bind: bind$1,
toArray: toArray,
extend: extend,
isObject: isObject,
isPlainObject: isPlainObject,
toObject: toObject,
noop: noop,
no: no,
identity: identity,
genStaticKeys: genStaticKeys,
looseEqual: looseEqual,
looseIndexOf: looseIndexOf,
isReserved: isReserved,
def: def,
parsePath: parsePath,
hasProto: hasProto,
inBrowser: inBrowser,
UA: UA,
isIE: isIE,
isIE9: isIE9,
isEdge: isEdge,
isAndroid: isAndroid,
isIOS: isIOS,
isServerRendering: isServerRendering,
devtools: devtools,
nextTick: nextTick,
get _Set () { return _Set; },
mergeOptions: mergeOptions,
resolveAsset: resolveAsset,
get warn () { return warn; },
get formatComponentName () { return formatComponentName; },
validateProp: validateProp
});
/* not type checking this file because flow doesn't play well with Proxy */
var initProxy;
if (process.env.NODE_ENV !== 'production') {
var allowedGlobals = makeMap(
'Infinity,undefined,NaN,isFinite,isNaN,' +
'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +
'require' // for Webpack/Browserify
);
var warnNonPresent = function (target, key) {
warn(
"Property or method \"" + key + "\" is not defined on the instance but " +
"referenced during render. Make sure to declare reactive data " +
"properties in the data option.",
target
);
};
var hasProxy =
typeof Proxy !== 'undefined' &&
Proxy.toString().match(/native code/);
if (hasProxy) {
var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta');
config.keyCodes = new Proxy(config.keyCodes, {
set: function set (target, key, value) {
if (isBuiltInModifier(key)) {
warn(("Avoid overwriting built-in modifier in config.keyCodes: ." + key));
return false
} else {
target[key] = value;
return true
}
}
});
}
var hasHandler = {
has: function has (target, key) {
var has = key in target;
var isAllowed = allowedGlobals(key) || key.charAt(0) === '_';
if (!has && !isAllowed) {
warnNonPresent(target, key);
}
return has || !isAllowed
}
};
var getHandler = {
get: function get (target, key) {
if (typeof key === 'string' && !(key in target)) {
warnNonPresent(target, key);
}
return target[key]
}
};
initProxy = function initProxy (vm) {
if (hasProxy) {
// determine which proxy handler to use
var options = vm.$options;
var handlers = options.render && options.render._withStripped
? getHandler
: hasHandler;
vm._renderProxy = new Proxy(vm, handlers);
} else {
vm._renderProxy = vm;
}
};
}
/* */
var queue = [];
var has$1 = {};
var circular = {};
var waiting = false;
var flushing = false;
var index = 0;
/**
* Reset the scheduler's state.
*/
function resetSchedulerState () {
queue.length = 0;
has$1 = {};
if (process.env.NODE_ENV !== 'production') {
circular = {};
}
waiting = flushing = false;
}
/**
* Flush both queues and run the watchers.
*/
function flushSchedulerQueue () {
flushing = true;
// Sort queue before flush.
// This ensures that:
// 1. Components are updated from parent to child. (because parent is always
// created before the child)
// 2. A component's user watchers are run before its render watcher (because
// user watchers are created before the render watcher)
// 3. If a component is destroyed during a parent component's watcher run,
// its watchers can be skipped.
queue.sort(function (a, b) { return a.id - b.id; });
// do not cache length because more watchers might be pushed
// as we run existing watchers
for (index = 0; index < queue.length; index++) {
var watcher = queue[index];
var id = watcher.id;
has$1[id] = null;
watcher.run();
// in dev build, check and stop circular updates.
if (process.env.NODE_ENV !== 'production' && has$1[id] != null) {
circular[id] = (circular[id] || 0) + 1;
if (circular[id] > config._maxUpdateCount) {
warn(
'You may have an infinite update loop ' + (
watcher.user
? ("in watcher with expression \"" + (watcher.expression) + "\"")
: "in a component render function."
),
watcher.vm
);
break
}
}
}
// devtool hook
/* istanbul ignore if */
if (devtools && config.devtools) {
devtools.emit('flush');
}
resetSchedulerState();
}
/**
* Push a watcher into the watcher queue.
* Jobs with duplicate IDs will be skipped unless it's
* pushed when the queue is being flushed.
*/
function queueWatcher (watcher) {
var id = watcher.id;
if (has$1[id] == null) {
has$1[id] = true;
if (!flushing) {
queue.push(watcher);
} else {
// if already flushing, splice the watcher based on its id
// if already past its id, it will be run next immediately.
var i = queue.length - 1;
while (i >= 0 && queue[i].id > watcher.id) {
i--;
}
queue.splice(Math.max(i, index) + 1, 0, watcher);
}
// queue the flush
if (!waiting) {
waiting = true;
nextTick(flushSchedulerQueue);
}
}
}
/* */
var uid$2 = 0;
/**
* A watcher parses an expression, collects dependencies,
* and fires callback when the expression value changes.
* This is used for both the $watch() api and directives.
*/
var Watcher = function Watcher (
vm,
expOrFn,
cb,
options
) {
this.vm = vm;
vm._watchers.push(this);
// options
if (options) {
this.deep = !!options.deep;
this.user = !!options.user;
this.lazy = !!options.lazy;
this.sync = !!options.sync;
} else {
this.deep = this.user = this.lazy = this.sync = false;
}
this.cb = cb;
this.id = ++uid$2; // uid for batching
this.active = true;
this.dirty = this.lazy; // for lazy watchers
this.deps = [];
this.newDeps = [];
this.depIds = new _Set();
this.newDepIds = new _Set();
this.expression = process.env.NODE_ENV !== 'production'
? expOrFn.toString()
: '';
// parse expression for getter
if (typeof expOrFn === 'function') {
this.getter = expOrFn;
} else {
this.getter = parsePath(expOrFn);
if (!this.getter) {
this.getter = function () {};
process.env.NODE_ENV !== 'production' && warn(
"Failed watching path: \"" + expOrFn + "\" " +
'Watcher only accepts simple dot-delimited paths. ' +
'For full control, use a function instead.',
vm
);
}
}
this.value = this.lazy
? undefined
: this.get();
};
/**
* Evaluate the getter, and re-collect dependencies.
*/
Watcher.prototype.get = function get () {
pushTarget(this);
var value = this.getter.call(this.vm, this.vm);
// "touch" every property so they are all tracked as
// dependencies for deep watching
if (this.deep) {
traverse(value);
}
popTarget();
this.cleanupDeps();
return value
};
/**
* Add a dependency to this directive.
*/
Watcher.prototype.addDep = function addDep (dep) {
var id = dep.id;
if (!this.newDepIds.has(id)) {
this.newDepIds.add(id);
this.newDeps.push(dep);
if (!this.depIds.has(id)) {
dep.addSub(this);
}
}
};
/**
* Clean up for dependency collection.
*/
Watcher.prototype.cleanupDeps = function cleanupDeps () {
var this$1 = this;
var i = this.deps.length;
while (i--) {
var dep = this$1.deps[i];
if (!this$1.newDepIds.has(dep.id)) {
dep.removeSub(this$1);
}
}
var tmp = this.depIds;
this.depIds = this.newDepIds;
this.newDepIds = tmp;
this.newDepIds.clear();
tmp = this.deps;
this.deps = this.newDeps;
this.newDeps = tmp;
this.newDeps.length = 0;
};
/**
* Subscriber interface.
* Will be called when a dependency changes.
*/
Watcher.prototype.update = function update () {
/* istanbul ignore else */
if (this.lazy) {
this.dirty = true;
} else if (this.sync) {
this.run();
} else {
queueWatcher(this);
}
};
/**
* Scheduler job interface.
* Will be called by the scheduler.
*/
Watcher.prototype.run = function run () {
if (this.active) {
var value = this.get();
if (
value !== this.value ||
// Deep watchers and watchers on Object/Arrays should fire even
// when the value is the same, because the value may
// have mutated.
isObject(value) ||
this.deep
) {
// set new value
var oldValue = this.value;
this.value = value;
if (this.user) {
try {
this.cb.call(this.vm, value, oldValue);
} catch (e) {
/* istanbul ignore else */
if (config.errorHandler) {
config.errorHandler.call(null, e, this.vm);
} else {
process.env.NODE_ENV !== 'production' && warn(
("Error in watcher \"" + (this.expression) + "\""),
this.vm
);
throw e
}
}
} else {
this.cb.call(this.vm, value, oldValue);
}
}
}
};
/**
* Evaluate the value of the watcher.
* This only gets called for lazy watchers.
*/
Watcher.prototype.evaluate = function evaluate () {
this.value = this.get();
this.dirty = false;
};
/**
* Depend on all deps collected by this watcher.
*/
Watcher.prototype.depend = function depend () {
var this$1 = this;
var i = this.deps.length;
while (i--) {
this$1.deps[i].depend();
}
};
/**
* Remove self from all dependencies' subscriber list.
*/
Watcher.prototype.teardown = function teardown () {
var this$1 = this;
if (this.active) {
// remove self from vm's watcher list
// this is a somewhat expensive operation so we skip it
// if the vm is being destroyed.
if (!this.vm._isBeingDestroyed) {
remove$1(this.vm._watchers, this);
}
var i = this.deps.length;
while (i--) {
this$1.deps[i].removeSub(this$1);
}
this.active = false;
}
};
/**
* Recursively traverse an object to evoke all converted
* getters, so that every nested property inside the object
* is collected as a "deep" dependency.
*/
var seenObjects = new _Set();
function traverse (val) {
seenObjects.clear();
_traverse(val, seenObjects);
}
function _traverse (val, seen) {
var i, keys;
var isA = Array.isArray(val);
if ((!isA && !isObject(val)) || !Object.isExtensible(val)) {
return
}
if (val.__ob__) {
var depId = val.__ob__.dep.id;
if (seen.has(depId)) {
return
}
seen.add(depId);
}
if (isA) {
i = val.length;
while (i--) { _traverse(val[i], seen); }
} else {
keys = Object.keys(val);
i = keys.length;
while (i--) { _traverse(val[keys[i]], seen); }
}
}
/* */
function initState (vm) {
vm._watchers = [];
var opts = vm.$options;
if (opts.props) { initProps(vm, opts.props); }
if (opts.methods) { initMethods(vm, opts.methods); }
if (opts.data) {
initData(vm);
} else {
observe(vm._data = {}, true /* asRootData */);
}
if (opts.computed) { initComputed(vm, opts.computed); }
if (opts.watch) { initWatch(vm, opts.watch); }
}
var isReservedProp = { key: 1, ref: 1, slot: 1 };
function initProps (vm, props) {
var propsData = vm.$options.propsData || {};
var keys = vm.$options._propKeys = Object.keys(props);
var isRoot = !vm.$parent;
// root instance props should be converted
observerState.shouldConvert = isRoot;
var loop = function ( i ) {
var key = keys[i];
/* istanbul ignore else */
if (process.env.NODE_ENV !== 'production') {
if (isReservedProp[key]) {
warn(
("\"" + key + "\" is a reserved attribute and cannot be used as component prop."),
vm
);
}
defineReactive$$1(vm, key, validateProp(key, props, propsData, vm), function () {
if (vm.$parent && !observerState.isSettingProps) {
warn(
"Avoid mutating a prop directly since the value will be " +
"overwritten whenever the parent component re-renders. " +
"Instead, use a data or computed property based on the prop's " +
"value. Prop being mutated: \"" + key + "\"",
vm
);
}
});
} else {
defineReactive$$1(vm, key, validateProp(key, props, propsData, vm));
}
};
for (var i = 0; i < keys.length; i++) loop( i );
observerState.shouldConvert = true;
}
function initData (vm) {
var data = vm.$options.data;
data = vm._data = typeof data === 'function'
? data.call(vm)
: data || {};
if (!isPlainObject(data)) {
data = {};
process.env.NODE_ENV !== 'production' && warn(
'data functions should return an object:\n' +
'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',
vm
);
}
// proxy data on instance
var keys = Object.keys(data);
var props = vm.$options.props;
var i = keys.length;
while (i--) {
if (props && hasOwn(props, keys[i])) {
process.env.NODE_ENV !== 'production' && warn(
"The data property \"" + (keys[i]) + "\" is already declared as a prop. " +
"Use prop default value instead.",
vm
);
} else {
proxy(vm, keys[i]);
}
}
// observe data
observe(data, true /* asRootData */);
}
var computedSharedDefinition = {
enumerable: true,
configurable: true,
get: noop,
set: noop
};
function initComputed (vm, computed) {
for (var key in computed) {
/* istanbul ignore if */
if (process.env.NODE_ENV !== 'production' && key in vm) {
warn(
"existing instance property \"" + key + "\" will be " +
"overwritten by a computed property with the same name.",
vm
);
}
var userDef = computed[key];
if (typeof userDef === 'function') {
computedSharedDefinition.get = makeComputedGetter(userDef, vm);
computedSharedDefinition.set = noop;
} else {
computedSharedDefinition.get = userDef.get
? userDef.cache !== false
? makeComputedGetter(userDef.get, vm)
: bind$1(userDef.get, vm)
: noop;
computedSharedDefinition.set = userDef.set
? bind$1(userDef.set, vm)
: noop;
}
Object.defineProperty(vm, key, computedSharedDefinition);
}
}
function makeComputedGetter (getter, owner) {
var watcher = new Watcher(owner, getter, noop, {
lazy: true
});
return function computedGetter () {
if (watcher.dirty) {
watcher.evaluate();
}
if (Dep.target) {
watcher.depend();
}
return watcher.value
}
}
function initMethods (vm, methods) {
for (var key in methods) {
vm[key] = methods[key] == null ? noop : bind$1(methods[key], vm);
if (process.env.NODE_ENV !== 'production' && methods[key] == null) {
warn(
"method \"" + key + "\" has an undefined value in the component definition. " +
"Did you reference the function correctly?",
vm
);
}
}
}
function initWatch (vm, watch) {
for (var key in watch) {
var handler = watch[key];
if (Array.isArray(handler)) {
for (var i = 0; i < handler.length; i++) {
createWatcher(vm, key, handler[i]);
}
} else {
createWatcher(vm, key, handler);
}
}
}
function createWatcher (vm, key, handler) {
var options;
if (isPlainObject(handler)) {
options = handler;
handler = handler.handler;
}
if (typeof handler === 'string') {
handler = vm[handler];
}
vm.$watch(key, handler, options);
}
function stateMixin (Vue) {
// flow somehow has problems with directly declared definition object
// when using Object.defineProperty, so we have to procedurally build up
// the object here.
var dataDef = {};
dataDef.get = function () {
return this._data
};
if (process.env.NODE_ENV !== 'production') {
dataDef.set = function (newData) {
warn(
'Avoid replacing instance root $data. ' +
'Use nested data properties instead.',
this
);
};
}
Object.defineProperty(Vue.prototype, '$data', dataDef);
Vue.prototype.$set = set$1;
Vue.prototype.$delete = del;
Vue.prototype.$watch = function (
expOrFn,
cb,
options
) {
var vm = this;
options = options || {};
options.user = true;
var watcher = new Watcher(vm, expOrFn, cb, options);
if (options.immediate) {
cb.call(vm, watcher.value);
}
return function unwatchFn () {
watcher.teardown();
}
};
}
function proxy (vm, key) {
if (!isReserved(key)) {
Object.defineProperty(vm, key, {
configurable: true,
enumerable: true,
get: function proxyGetter () {
return vm._data[key]
},
set: function proxySetter (val) {
vm._data[key] = val;
}
});
}
}
/* */
var VNode = function VNode (
tag,
data,
children,
text,
elm,
context,
componentOptions
) {
this.tag = tag;
this.data = data;
this.children = children;
this.text = text;
this.elm = elm;
this.ns = undefined;
this.context = context;
this.functionalContext = undefined;
this.key = data && data.key;
this.componentOptions = componentOptions;
this.child = undefined;
this.parent = undefined;
this.raw = false;
this.isStatic = false;
this.isRootInsert = true;
this.isComment = false;
this.isCloned = false;
this.isOnce = false;
};
var createEmptyVNode = function () {
var node = new VNode();
node.text = '';
node.isComment = true;
return node
};
function createTextVNode (val) {
return new VNode(undefined, undefined, undefined, String(val))
}
// optimized shallow clone
// used for static nodes and slot nodes because they may be reused across
// multiple renders, cloning them avoids errors when DOM manipulations rely
// on their elm reference.
function cloneVNode (vnode) {
var cloned = new VNode(
vnode.tag,
vnode.data,
vnode.children,
vnode.text,
vnode.elm,
vnode.context,
vnode.componentOptions
);
cloned.ns = vnode.ns;
cloned.isStatic = vnode.isStatic;
cloned.key = vnode.key;
cloned.isCloned = true;
return cloned
}
function cloneVNodes (vnodes) {
var res = new Array(vnodes.length);
for (var i = 0; i < vnodes.length; i++) {
res[i] = cloneVNode(vnodes[i]);
}
return res
}
/* */
function mergeVNodeHook (def, hookKey, hook, key) {
key = key + hookKey;
var injectedHash = def.__injected || (def.__injected = {});
if (!injectedHash[key]) {
injectedHash[key] = true;
var oldHook = def[hookKey];
if (oldHook) {
def[hookKey] = function () {
oldHook.apply(this, arguments);
hook.apply(this, arguments);
};
} else {
def[hookKey] = hook;
}
}
}
/* */
function updateListeners (
on,
oldOn,
add,
remove$$1,
vm
) {
var name, cur, old, fn, event, capture, once;
for (name in on) {
cur = on[name];
old = oldOn[name];
if (!cur) {
process.env.NODE_ENV !== 'production' && warn(
"Invalid handler for event \"" + name + "\": got " + String(cur),
vm
);
} else if (!old) {
once = name.charAt(0) === '~'; // Prefixed last, checked first
event = once ? name.slice(1) : name;
capture = event.charAt(0) === '!';
event = capture ? event.slice(1) : event;
if (Array.isArray(cur)) {
add(event, (cur.invoker = arrInvoker(cur)), once, capture);
} else {
if (!cur.invoker) {
fn = cur;
cur = on[name] = {};
cur.fn = fn;
cur.invoker = fnInvoker(cur);
}
add(event, cur.invoker, once, capture);
}
} else if (cur !== old) {
if (Array.isArray(old)) {
old.length = cur.length;
for (var i = 0; i < old.length; i++) { old[i] = cur[i]; }
on[name] = old;
} else {
old.fn = cur;
on[name] = old;
}
}
}
for (name in oldOn) {
if (!on[name]) {
once = name.charAt(0) === '~'; // Prefixed last, checked first
event = once ? name.slice(1) : name;
capture = event.charAt(0) === '!';
event = capture ? event.slice(1) : event;
remove$$1(event, oldOn[name].invoker, capture);
}
}
}
function arrInvoker (arr) {
return function (ev) {
var arguments$1 = arguments;
var single = arguments.length === 1;
for (var i = 0; i < arr.length; i++) {
single ? arr[i](ev) : arr[i].apply(null, arguments$1);
}
}
}
function fnInvoker (o) {
return function (ev) {
var single = arguments.length === 1;
single ? o.fn(ev) : o.fn.apply(null, arguments);
}
}
/* */
// The template compiler attempts to minimize the need for normalization by
// statically analyzing the template at compile time.
//
// For plain HTML markup, normalization can be completely skipped because the
// generated render function is guaranteed to return Array<VNode>. There are
// two cases where extra normalization is needed:
// 1. When the children contains components - because a functional component
// may return an Array instead of a single root. In this case, just a simple
// nomralization is needed - if any child is an Array, we flatten the whole
// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
// because functional components already normalize their own children.
function simpleNormalizeChildren (children) {
for (var i = 0; i < children.length; i++) {
if (Array.isArray(children[i])) {
return Array.prototype.concat.apply([], children)
}
}
return children
}
// 2. When the children contains constrcuts that always generated nested Arrays,
// e.g. <template>, <slot>, v-for, or when the children is provided by user
// with hand-written render functions / JSX. In such cases a full normalization
// is needed to cater to all possible types of children values.
function normalizeChildren (children) {
return isPrimitive(children)
? [createTextVNode(children)]
: Array.isArray(children)
? normalizeArrayChildren(children)
: undefined
}
function normalizeArrayChildren (children, nestedIndex) {
var res = [];
var i, c, last;
for (i = 0; i < children.length; i++) {
c = children[i];
if (c == null || typeof c === 'boolean') { continue }
last = res[res.length - 1];
// nested
if (Array.isArray(c)) {
res.push.apply(res, normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i)));
} else if (isPrimitive(c)) {
if (last && last.text) {
last.text += String(c);
} else if (c !== '') {
// convert primitive to vnode
res.push(createTextVNode(c));
}
} else {
if (c.text && last && last.text) {
res[res.length - 1] = createTextVNode(last.text + c.text);
} else {
// default key for nested array children (likely generated by v-for)
if (c.tag && c.key == null && nestedIndex != null) {
c.key = "__vlist" + nestedIndex + "_" + i + "__";
}
res.push(c);
}
}
}
return res
}
/* */
function getFirstComponentChild (children) {
return children && children.filter(function (c) { return c && c.componentOptions; })[0]
}
/* */
function initEvents (vm) {
vm._events = Object.create(null);
vm._hasHookEvent = false;
// init parent attached events
var listeners = vm.$options._parentListeners;
if (listeners) {
updateComponentListeners(vm, listeners);
}
}
var target;
function add$1 (event, fn, once) {
if (once) {
target.$once(event, fn);
} else {
target.$on(event, fn);
}
}
function remove$2 (event, fn) {
target.$off(event, fn);
}
function updateComponentListeners (
vm,
listeners,
oldListeners
) {
target = vm;
updateListeners(listeners, oldListeners || {}, add$1, remove$2, vm);
}
function eventsMixin (Vue) {
var hookRE = /^hook:/;
Vue.prototype.$on = function (event, fn) {
var vm = this;(vm._events[event] || (vm._events[event] = [])).push(fn);
// optimize hook:event cost by using a boolean flag marked at registration
// instead of a hash lookup
if (hookRE.test(event)) {
vm._hasHookEvent = true;
}
return vm
};
Vue.prototype.$once = function (event, fn) {
var vm = this;
function on () {
vm.$off(event, on);
fn.apply(vm, arguments);
}
on.fn = fn;
vm.$on(event, on);
return vm
};
Vue.prototype.$off = function (event, fn) {
var vm = this;
// all
if (!arguments.length) {
vm._events = Object.create(null);
return vm
}
// specific event
var cbs = vm._events[event];
if (!cbs) {
return vm
}
if (arguments.length === 1) {
vm._events[event] = null;
return vm
}
// specific handler
var cb;
var i = cbs.length;
while (i--) {
cb = cbs[i];
if (cb === fn || cb.fn === fn) {
cbs.splice(i, 1);
break
}
}
return vm
};
Vue.prototype.$emit = function (event) {
var vm = this;
var cbs = vm._events[event];
if (cbs) {
cbs = cbs.length > 1 ? toArray(cbs) : cbs;
var args = toArray(arguments, 1);
for (var i = 0, l = cbs.length; i < l; i++) {
cbs[i].apply(vm, args);
}
}
return vm
};
}
/* */
var activeInstance = null;
function initLifecycle (vm) {
var options = vm.$options;
// locate first non-abstract parent
var parent = options.parent;
if (parent && !options.abstract) {
while (parent.$options.abstract && parent.$parent) {
parent = parent.$parent;
}
parent.$children.push(vm);
}
vm.$parent = parent;
vm.$root = parent ? parent.$root : vm;
vm.$children = [];
vm.$refs = {};
vm._watcher = null;
vm._inactive = false;
vm._isMounted = false;
vm._isDestroyed = false;
vm._isBeingDestroyed = false;
}
function lifecycleMixin (Vue) {
Vue.prototype._mount = function (
el,
hydrating
) {
var vm = this;
vm.$el = el;
if (!vm.$options.render) {
vm.$options.render = createEmptyVNode;
if (process.env.NODE_ENV !== 'production') {
/* istanbul ignore if */
if (vm.$options.template && vm.$options.template.charAt(0) !== '#') {
warn(
'You are using the runtime-only build of Vue where the template ' +
'option is not available. Either pre-compile the templates into ' +
'render functions, or use the compiler-included build.',
vm
);
} else {
warn(
'Failed to mount component: template or render function not defined.',
vm
);
}
}
}
callHook(vm, 'beforeMount');
vm._watcher = new Watcher(vm, function () {
vm._update(vm._render(), hydrating);
}, noop);
hydrating = false;
// manually mounted instance, call mounted on self
// mounted is called for render-created child components in its inserted hook
if (vm.$vnode == null) {
vm._isMounted = true;
callHook(vm, 'mounted');
}
return vm
};
Vue.prototype._update = function (vnode, hydrating) {
var vm = this;
if (vm._isMounted) {
callHook(vm, 'beforeUpdate');
}
var prevEl = vm.$el;
var prevVnode = vm._vnode;
var prevActiveInstance = activeInstance;
activeInstance = vm;
vm._vnode = vnode;
// Vue.prototype.__patch__ is injected in entry points
// based on the rendering backend used.
if (!prevVnode) {
// initial render
vm.$el = vm.__patch__(
vm.$el, vnode, hydrating, false /* removeOnly */,
vm.$options._parentElm,
vm.$options._refElm
);
} else {
// updates
vm.$el = vm.__patch__(prevVnode, vnode);
}
activeInstance = prevActiveInstance;
// update __vue__ reference
if (prevEl) {
prevEl.__vue__ = null;
}
if (vm.$el) {
vm.$el.__vue__ = vm;
}
// if parent is an HOC, update its $el as well
if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {
vm.$parent.$el = vm.$el;
}
if (vm._isMounted) {
callHook(vm, 'updated');
}
};
Vue.prototype._updateFromParent = function (
propsData,
listeners,
parentVnode,
renderChildren
) {
var vm = this;
var hasChildren = !!(vm.$options._renderChildren || renderChildren);
vm.$options._parentVnode = parentVnode;
vm.$vnode = parentVnode; // update vm's placeholder node without re-render
if (vm._vnode) { // update child tree's parent
vm._vnode.parent = parentVnode;
}
vm.$options._renderChildren = renderChildren;
// update props
if (propsData && vm.$options.props) {
observerState.shouldConvert = false;
if (process.env.NODE_ENV !== 'production') {
observerState.isSettingProps = true;
}
var propKeys = vm.$options._propKeys || [];
for (var i = 0; i < propKeys.length; i++) {
var key = propKeys[i];
vm[key] = validateProp(key, vm.$options.props, propsData, vm);
}
observerState.shouldConvert = true;
if (process.env.NODE_ENV !== 'production') {
observerState.isSettingProps = false;
}
vm.$options.propsData = propsData;
}
// update listeners
if (listeners) {
var oldListeners = vm.$options._parentListeners;
vm.$options._parentListeners = listeners;
updateComponentListeners(vm, listeners, oldListeners);
}
// resolve slots + force update if has children
if (hasChildren) {
vm.$slots = resolveSlots(renderChildren, parentVnode.context);
vm.$forceUpdate();
}
};
Vue.prototype.$forceUpdate = function () {
var vm = this;
if (vm._watcher) {
vm._watcher.update();
}
};
Vue.prototype.$destroy = function () {
var vm = this;
if (vm._isBeingDestroyed) {
return
}
callHook(vm, 'beforeDestroy');
vm._isBeingDestroyed = true;
// remove self from parent
var parent = vm.$parent;
if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
remove$1(parent.$children, vm);
}
// teardown watchers
if (vm._watcher) {
vm._watcher.teardown();
}
var i = vm._watchers.length;
while (i--) {
vm._watchers[i].teardown();
}
// remove reference from data ob
// frozen object may not have observer.
if (vm._data.__ob__) {
vm._data.__ob__.vmCount--;
}
// call the last hook...
vm._isDestroyed = true;
callHook(vm, 'destroyed');
// turn off all instance listeners.
vm.$off();
// remove __vue__ reference
if (vm.$el) {
vm.$el.__vue__ = null;
}
// invoke destroy hooks on current rendered tree
vm.__patch__(vm._vnode, null);
};
}
function callHook (vm, hook) {
var handlers = vm.$options[hook];
if (handlers) {
for (var i = 0, j = handlers.length; i < j; i++) {
handlers[i].call(vm);
}
}
if (vm._hasHookEvent) {
vm.$emit('hook:' + hook);
}
}
/* */
var hooks = { init: init, prepatch: prepatch, insert: insert, destroy: destroy$1 };
var hooksToMerge = Object.keys(hooks);
function createComponent (
Ctor,
data,
context,
children,
tag
) {
if (!Ctor) {
return
}
var baseCtor = context.$options._base;
if (isObject(Ctor)) {
Ctor = baseCtor.extend(Ctor);
}
if (typeof Ctor !== 'function') {
if (process.env.NODE_ENV !== 'production') {
warn(("Invalid Component definition: " + (String(Ctor))), context);
}
return
}
// async component
if (!Ctor.cid) {
if (Ctor.resolved) {
Ctor = Ctor.resolved;
} else {
Ctor = resolveAsyncComponent(Ctor, baseCtor, function () {
// it's ok to queue this on every render because
// $forceUpdate is buffered by the scheduler.
context.$forceUpdate();
});
if (!Ctor) {
// return nothing if this is indeed an async component
// wait for the callback to trigger parent update.
return
}
}
}
// resolve constructor options in case global mixins are applied after
// component constructor creation
resolveConstructorOptions(Ctor);
data = data || {};
// extract props
var propsData = extractProps(data, Ctor);
// functional component
if (Ctor.options.functional) {
return createFunctionalComponent(Ctor, propsData, data, context, children)
}
// extract listeners, since these needs to be treated as
// child component listeners instead of DOM listeners
var listeners = data.on;
// replace with listeners with .native modifier
data.on = data.nativeOn;
if (Ctor.options.abstract) {
// abstract components do not keep anything
// other than props & listeners
data = {};
}
// merge component management hooks onto the placeholder node
mergeHooks(data);
// return a placeholder vnode
var name = Ctor.options.name || tag;
var vnode = new VNode(
("vue-component-" + (Ctor.cid) + (name ? ("-" + name) : '')),
data, undefined, undefined, undefined, context,
{ Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }
);
return vnode
}
function createFunctionalComponent (
Ctor,
propsData,
data,
context,
children
) {
var props = {};
var propOptions = Ctor.options.props;
if (propOptions) {
for (var key in propOptions) {
props[key] = validateProp(key, propOptions, propsData);
}
}
// ensure the createElement function in functional components
// gets a unique context - this is necessary for correct named slot check
var _context = Object.create(context);
var h = function (a, b, c, d) { return createElement(_context, a, b, c, d, true); };
var vnode = Ctor.options.render.call(null, h, {
props: props,
data: data,
parent: context,
children: children,
slots: function () { return resolveSlots(children, context); }
});
if (vnode instanceof VNode) {
vnode.functionalContext = context;
if (data.slot) {
(vnode.data || (vnode.data = {})).slot = data.slot;
}
}
return vnode
}
function createComponentInstanceForVnode (
vnode, // we know it's MountedComponentVNode but flow doesn't
parent, // activeInstance in lifecycle state
parentElm,
refElm
) {
var vnodeComponentOptions = vnode.componentOptions;
var options = {
_isComponent: true,
parent: parent,
propsData: vnodeComponentOptions.propsData,
_componentTag: vnodeComponentOptions.tag,
_parentVnode: vnode,
_parentListeners: vnodeComponentOptions.listeners,
_renderChildren: vnodeComponentOptions.children,
_parentElm: parentElm || null,
_refElm: refElm || null
};
// check inline-template render functions
var inlineTemplate = vnode.data.inlineTemplate;
if (inlineTemplate) {
options.render = inlineTemplate.render;
options.staticRenderFns = inlineTemplate.staticRenderFns;
}
return new vnodeComponentOptions.Ctor(options)
}
function init (
vnode,
hydrating,
parentElm,
refElm
) {
if (!vnode.child || vnode.child._isDestroyed) {
var child = vnode.child = createComponentInstanceForVnode(
vnode,
activeInstance,
parentElm,
refElm
);
child.$mount(hydrating ? vnode.elm : undefined, hydrating);
} else if (vnode.data.keepAlive) {
// kept-alive components, treat as a patch
var mountedNode = vnode; // work around flow
prepatch(mountedNode, mountedNode);
}
}
function prepatch (
oldVnode,
vnode
) {
var options = vnode.componentOptions;
var child = vnode.child = oldVnode.child;
child._updateFromParent(
options.propsData, // updated props
options.listeners, // updated listeners
vnode, // new parent vnode
options.children // new children
);
}
function insert (vnode) {
if (!vnode.child._isMounted) {
vnode.child._isMounted = true;
callHook(vnode.child, 'mounted');
}
if (vnode.data.keepAlive) {
vnode.child._inactive = false;
callHook(vnode.child, 'activated');
}
}
function destroy$1 (vnode) {
if (!vnode.child._isDestroyed) {
if (!vnode.data.keepAlive) {
vnode.child.$destroy();
} else {
vnode.child._inactive = true;
callHook(vnode.child, 'deactivated');
}
}
}
function resolveAsyncComponent (
factory,
baseCtor,
cb
) {
if (factory.requested) {
// pool callbacks
factory.pendingCallbacks.push(cb);
} else {
factory.requested = true;
var cbs = factory.pendingCallbacks = [cb];
var sync = true;
var resolve = function (res) {
if (isObject(res)) {
res = baseCtor.extend(res);
}
// cache resolved
factory.resolved = res;
// invoke callbacks only if this is not a synchronous resolve
// (async resolves are shimmed as synchronous during SSR)
if (!sync) {
for (var i = 0, l = cbs.length; i < l; i++) {
cbs[i](res);
}
}
};
var reject = function (reason) {
process.env.NODE_ENV !== 'production' && warn(
"Failed to resolve async component: " + (String(factory)) +
(reason ? ("\nReason: " + reason) : '')
);
};
var res = factory(resolve, reject);
// handle promise
if (res && typeof res.then === 'function' && !factory.resolved) {
res.then(resolve, reject);
}
sync = false;
// return in case resolved synchronously
return factory.resolved
}
}
function extractProps (data, Ctor) {
// we are only extracting raw values here.
// validation and default values are handled in the child
// component itself.
var propOptions = Ctor.options.props;
if (!propOptions) {
return
}
var res = {};
var attrs = data.attrs;
var props = data.props;
var domProps = data.domProps;
if (attrs || props || domProps) {
for (var key in propOptions) {
var altKey = hyphenate(key);
checkProp(res, props, key, altKey, true) ||
checkProp(res, attrs, key, altKey) ||
checkProp(res, domProps, key, altKey);
}
}
return res
}
function checkProp (
res,
hash,
key,
altKey,
preserve
) {
if (hash) {
if (hasOwn(hash, key)) {
res[key] = hash[key];
if (!preserve) {
delete hash[key];
}
return true
} else if (hasOwn(hash, altKey)) {
res[key] = hash[altKey];
if (!preserve) {
delete hash[altKey];
}
return true
}
}
return false
}
function mergeHooks (data) {
if (!data.hook) {
data.hook = {};
}
for (var i = 0; i < hooksToMerge.length; i++) {
var key = hooksToMerge[i];
var fromParent = data.hook[key];
var ours = hooks[key];
data.hook[key] = fromParent ? mergeHook$1(ours, fromParent) : ours;
}
}
function mergeHook$1 (one, two) {
return function (a, b, c, d) {
one(a, b, c, d);
two(a, b, c, d);
}
}
/* */
var SIMPLE_NORMALIZE = 1;
var ALWAYS_NORMALIZE = 2;
// wrapper function for providing a more flexible interface
// without getting yelled at by flow
function createElement (
context,
tag,
data,
children,
normalizationType,
alwaysNormalize
) {
if (Array.isArray(data) || isPrimitive(data)) {
normalizationType = children;
children = data;
data = undefined;
}
if (alwaysNormalize) { normalizationType = ALWAYS_NORMALIZE; }
return _createElement(context, tag, data, children, normalizationType)
}
function _createElement (
context,
tag,
data,
children,
normalizationType
) {
if (data && data.__ob__) {
process.env.NODE_ENV !== 'production' && warn(
"Avoid using observed data object as vnode data: " + (JSON.stringify(data)) + "\n" +
'Always create fresh vnode data objects in each render!',
context
);
return createEmptyVNode()
}
if (!tag) {
// in case of component :is set to falsy value
return createEmptyVNode()
}
// support single function children as default scoped slot
if (Array.isArray(children) &&
typeof children[0] === 'function') {
data = data || {};
data.scopedSlots = { default: children[0] };
children.length = 0;
}
if (normalizationType === ALWAYS_NORMALIZE) {
children = normalizeChildren(children);
} else if (normalizationType === SIMPLE_NORMALIZE) {
children = simpleNormalizeChildren(children);
}
var vnode, ns;
if (typeof tag === 'string') {
var Ctor;
ns = config.getTagNamespace(tag);
if (config.isReservedTag(tag)) {
// platform built-in elements
vnode = new VNode(
config.parsePlatformTagName(tag), data, children,
undefined, undefined, context
);
} else if ((Ctor = resolveAsset(context.$options, 'components', tag))) {
// component
vnode = createComponent(Ctor, data, context, children, tag);
} else {
// unknown or unlisted namespaced elements
// check at runtime because it may get assigned a namespace when its
// parent normalizes children
vnode = new VNode(
tag, data, children,
undefined, undefined, context
);
}
} else {
// direct component options / constructor
vnode = createComponent(tag, data, context, children);
}
if (vnode) {
if (ns) { applyNS(vnode, ns); }
return vnode
} else {
return createEmptyVNode()
}
}
function applyNS (vnode, ns) {
vnode.ns = ns;
if (vnode.tag === 'foreignObject') {
// use default namespace inside foreignObject
return
}
if (vnode.children) {
for (var i = 0, l = vnode.children.length; i < l; i++) {
var child = vnode.children[i];
if (child.tag && !child.ns) {
applyNS(child, ns);
}
}
}
}
/* */
function initRender (vm) {
vm.$vnode = null; // the placeholder node in parent tree
vm._vnode = null; // the root of the child tree
vm._staticTrees = null;
var parentVnode = vm.$options._parentVnode;
var renderContext = parentVnode && parentVnode.context;
vm.$slots = resolveSlots(vm.$options._renderChildren, renderContext);
vm.$scopedSlots = {};
// bind the createElement fn to this instance
// so that we get proper render context inside it.
// args order: tag, data, children, normalizationType, alwaysNormalize
// internal version is used by render functions compiled from templates
vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };
// normalization is always applied for the public version, used in
// user-written render functions.
vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };
if (vm.$options.el) {
vm.$mount(vm.$options.el);
}
}
function renderMixin (Vue) {
Vue.prototype.$nextTick = function (fn) {
return nextTick(fn, this)
};
Vue.prototype._render = function () {
var vm = this;
var ref = vm.$options;
var render = ref.render;
var staticRenderFns = ref.staticRenderFns;
var _parentVnode = ref._parentVnode;
if (vm._isMounted) {
// clone slot nodes on re-renders
for (var key in vm.$slots) {
vm.$slots[key] = cloneVNodes(vm.$slots[key]);
}
}
if (_parentVnode && _parentVnode.data.scopedSlots) {
vm.$scopedSlots = _parentVnode.data.scopedSlots;
}
if (staticRenderFns && !vm._staticTrees) {
vm._staticTrees = [];
}
// set parent vnode. this allows render functions to have access
// to the data on the placeholder node.
vm.$vnode = _parentVnode;
// render self
var vnode;
try {
vnode = render.call(vm._renderProxy, vm.$createElement);
} catch (e) {
/* istanbul ignore else */
if (config.errorHandler) {
config.errorHandler.call(null, e, vm);
} else {
if (process.env.NODE_ENV !== 'production') {
warn(("Error when rendering " + (formatComponentName(vm)) + ":"));
}
throw e
}
// return previous vnode to prevent render error causing blank component
vnode = vm._vnode;
}
// return empty vnode in case the render function errored out
if (!(vnode instanceof VNode)) {
if (process.env.NODE_ENV !== 'production' && Array.isArray(vnode)) {
warn(
'Multiple root nodes returned from render function. Render function ' +
'should return a single root node.',
vm
);
}
vnode = createEmptyVNode();
}
// set parent
vnode.parent = _parentVnode;
return vnode
};
// toString for mustaches
Vue.prototype._s = _toString;
// convert text to vnode
Vue.prototype._v = createTextVNode;
// number conversion
Vue.prototype._n = toNumber;
// empty vnode
Vue.prototype._e = createEmptyVNode;
// loose equal
Vue.prototype._q = looseEqual;
// loose indexOf
Vue.prototype._i = looseIndexOf;
// render static tree by index
Vue.prototype._m = function renderStatic (
index,
isInFor
) {
var tree = this._staticTrees[index];
// if has already-rendered static tree and not inside v-for,
// we can reuse the same tree by doing a shallow clone.
if (tree && !isInFor) {
return Array.isArray(tree)
? cloneVNodes(tree)
: cloneVNode(tree)
}
// otherwise, render a fresh tree.
tree = this._staticTrees[index] = this.$options.staticRenderFns[index].call(this._renderProxy);
markStatic(tree, ("__static__" + index), false);
return tree
};
// mark node as static (v-once)
Vue.prototype._o = function markOnce (
tree,
index,
key
) {
markStatic(tree, ("__once__" + index + (key ? ("_" + key) : "")), true);
return tree
};
function markStatic (tree, key, isOnce) {
if (Array.isArray(tree)) {
for (var i = 0; i < tree.length; i++) {
if (tree[i] && typeof tree[i] !== 'string') {
markStaticNode(tree[i], (key + "_" + i), isOnce);
}
}
} else {
markStaticNode(tree, key, isOnce);
}
}
function markStaticNode (node, key, isOnce) {
node.isStatic = true;
node.key = key;
node.isOnce = isOnce;
}
// filter resolution helper
Vue.prototype._f = function resolveFilter (id) {
return resolveAsset(this.$options, 'filters', id, true) || identity
};
// render v-for
Vue.prototype._l = function renderList (
val,
render
) {
var ret, i, l, keys, key;
if (Array.isArray(val) || typeof val === 'string') {
ret = new Array(val.length);
for (i = 0, l = val.length; i < l; i++) {
ret[i] = render(val[i], i);
}
} else if (typeof val === 'number') {
ret = new Array(val);
for (i = 0; i < val; i++) {
ret[i] = render(i + 1, i);
}
} else if (isObject(val)) {
keys = Object.keys(val);
ret = new Array(keys.length);
for (i = 0, l = keys.length; i < l; i++) {
key = keys[i];
ret[i] = render(val[key], key, i);
}
}
return ret
};
// renderSlot
Vue.prototype._t = function (
name,
fallback,
props,
bindObject
) {
var scopedSlotFn = this.$scopedSlots[name];
if (scopedSlotFn) { // scoped slot
props = props || {};
if (bindObject) {
extend(props, bindObject);
}
return scopedSlotFn(props) || fallback
} else {
var slotNodes = this.$slots[name];
// warn duplicate slot usage
if (slotNodes && process.env.NODE_ENV !== 'production') {
slotNodes._rendered && warn(
"Duplicate presence of slot \"" + name + "\" found in the same render tree " +
"- this will likely cause render errors.",
this
);
slotNodes._rendered = true;
}
return slotNodes || fallback
}
};
// apply v-bind object
Vue.prototype._b = function bindProps (
data,
tag,
value,
asProp
) {
if (value) {
if (!isObject(value)) {
process.env.NODE_ENV !== 'production' && warn(
'v-bind without argument expects an Object or Array value',
this
);
} else {
if (Array.isArray(value)) {
value = toObject(value);
}
for (var key in value) {
if (key === 'class' || key === 'style') {
data[key] = value[key];
} else {
var hash = asProp || config.mustUseProp(tag, key)
? data.domProps || (data.domProps = {})
: data.attrs || (data.attrs = {});
hash[key] = value[key];
}
}
}
}
return data
};
// check v-on keyCodes
Vue.prototype._k = function checkKeyCodes (
eventKeyCode,
key,
builtInAlias
) {
var keyCodes = config.keyCodes[key] || builtInAlias;
if (Array.isArray(keyCodes)) {
return keyCodes.indexOf(eventKeyCode) === -1
} else {
return keyCodes !== eventKeyCode
}
};
}
function resolveSlots (
children,
context
) {
var slots = {};
if (!children) {
return slots
}
var defaultSlot = [];
var name, child;
for (var i = 0, l = children.length; i < l; i++) {
child = children[i];
// named slots should only be respected if the vnode was rendered in the
// same context.
if ((child.context === context || child.functionalContext === context) &&
child.data && (name = child.data.slot)) {
var slot = (slots[name] || (slots[name] = []));
if (child.tag === 'template') {
slot.push.apply(slot, child.children);
} else {
slot.push(child);
}
} else {
defaultSlot.push(child);
}
}
// ignore single whitespace
if (defaultSlot.length && !(
defaultSlot.length === 1 &&
(defaultSlot[0].text === ' ' || defaultSlot[0].isComment)
)) {
slots.default = defaultSlot;
}
return slots
}
/* */
var uid = 0;
function initMixin (Vue) {
Vue.prototype._init = function (options) {
var vm = this;
// a uid
vm._uid = uid++;
// a flag to avoid this being observed
vm._isVue = true;
// merge options
if (options && options._isComponent) {
// optimize internal component instantiation
// since dynamic options merging is pretty slow, and none of the
// internal component options needs special treatment.
initInternalComponent(vm, options);
} else {
vm.$options = mergeOptions(
resolveConstructorOptions(vm.constructor),
options || {},
vm
);
}
/* istanbul ignore else */
if (process.env.NODE_ENV !== 'production') {
initProxy(vm);
} else {
vm._renderProxy = vm;
}
// expose real self
vm._self = vm;
initLifecycle(vm);
initEvents(vm);
callHook(vm, 'beforeCreate');
initState(vm);
callHook(vm, 'created');
initRender(vm);
};
}
function initInternalComponent (vm, options) {
var opts = vm.$options = Object.create(vm.constructor.options);
// doing this because it's faster than dynamic enumeration.
opts.parent = options.parent;
opts.propsData = options.propsData;
opts._parentVnode = options._parentVnode;
opts._parentListeners = options._parentListeners;
opts._renderChildren = options._renderChildren;
opts._componentTag = options._componentTag;
opts._parentElm = options._parentElm;
opts._refElm = options._refElm;
if (options.render) {
opts.render = options.render;
opts.staticRenderFns = options.staticRenderFns;
}
}
function resolveConstructorOptions (Ctor) {
var options = Ctor.options;
if (Ctor.super) {
var superOptions = Ctor.super.options;
var cachedSuperOptions = Ctor.superOptions;
var extendOptions = Ctor.extendOptions;
if (superOptions !== cachedSuperOptions) {
// super option changed
Ctor.superOptions = superOptions;
extendOptions.render = options.render;
extendOptions.staticRenderFns = options.staticRenderFns;
extendOptions._scopeId = options._scopeId;
options = Ctor.options = mergeOptions(superOptions, extendOptions);
if (options.name) {
options.components[options.name] = Ctor;
}
}
}
return options
}
function Vue$2 (options) {
if (process.env.NODE_ENV !== 'production' &&
!(this instanceof Vue$2)) {
warn('Vue is a constructor and should be called with the `new` keyword');
}
this._init(options);
}
initMixin(Vue$2);
stateMixin(Vue$2);
eventsMixin(Vue$2);
lifecycleMixin(Vue$2);
renderMixin(Vue$2);
/* */
function initUse (Vue) {
Vue.use = function (plugin) {
/* istanbul ignore if */
if (plugin.installed) {
return
}
// additional parameters
var args = toArray(arguments, 1);
args.unshift(this);
if (typeof plugin.install === 'function') {
plugin.install.apply(plugin, args);
} else {
plugin.apply(null, args);
}
plugin.installed = true;
return this
};
}
/* */
function initMixin$1 (Vue) {
Vue.mixin = function (mixin) {
this.options = mergeOptions(this.options, mixin);
};
}
/* */
function initExtend (Vue) {
/**
* Each instance constructor, including Vue, has a unique
* cid. This enables us to create wrapped "child
* constructors" for prototypal inheritance and cache them.
*/
Vue.cid = 0;
var cid = 1;
/**
* Class inheritance
*/
Vue.extend = function (extendOptions) {
extendOptions = extendOptions || {};
var Super = this;
var SuperId = Super.cid;
var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
if (cachedCtors[SuperId]) {
return cachedCtors[SuperId]
}
var name = extendOptions.name || Super.options.name;
if (process.env.NODE_ENV !== 'production') {
if (!/^[a-zA-Z][\w-]*$/.test(name)) {
warn(
'Invalid component name: "' + name + '". Component names ' +
'can only contain alphanumeric characters and the hyphen, ' +
'and must start with a letter.'
);
}
}
var Sub = function VueComponent (options) {
this._init(options);
};
Sub.prototype = Object.create(Super.prototype);
Sub.prototype.constructor = Sub;
Sub.cid = cid++;
Sub.options = mergeOptions(
Super.options,
extendOptions
);
Sub['super'] = Super;
// allow further extension/mixin/plugin usage
Sub.extend = Super.extend;
Sub.mixin = Super.mixin;
Sub.use = Super.use;
// create asset registers, so extended classes
// can have their private assets too.
config._assetTypes.forEach(function (type) {
Sub[type] = Super[type];
});
// enable recursive self-lookup
if (name) {
Sub.options.components[name] = Sub;
}
// keep a reference to the super options at extension time.
// later at instantiation we can check if Super's options have
// been updated.
Sub.superOptions = Super.options;
Sub.extendOptions = extendOptions;
// cache constructor
cachedCtors[SuperId] = Sub;
return Sub
};
}
/* */
function initAssetRegisters (Vue) {
/**
* Create asset registration methods.
*/
config._assetTypes.forEach(function (type) {
Vue[type] = function (
id,
definition
) {
if (!definition) {
return this.options[type + 's'][id]
} else {
/* istanbul ignore if */
if (process.env.NODE_ENV !== 'production') {
if (type === 'component' && config.isReservedTag(id)) {
warn(
'Do not use built-in or reserved HTML elements as component ' +
'id: ' + id
);
}
}
if (type === 'component' && isPlainObject(definition)) {
definition.name = definition.name || id;
definition = this.options._base.extend(definition);
}
if (type === 'directive' && typeof definition === 'function') {
definition = { bind: definition, update: definition };
}
this.options[type + 's'][id] = definition;
return definition
}
};
});
}
/* */
var patternTypes = [String, RegExp];
function matches (pattern, name) {
if (typeof pattern === 'string') {
return pattern.split(',').indexOf(name) > -1
} else {
return pattern.test(name)
}
}
var KeepAlive = {
name: 'keep-alive',
abstract: true,
props: {
include: patternTypes,
exclude: patternTypes
},
created: function created () {
this.cache = Object.create(null);
},
render: function render () {
var vnode = getFirstComponentChild(this.$slots.default);
if (vnode && vnode.componentOptions) {
var opts = vnode.componentOptions;
// check pattern
var name = opts.Ctor.options.name || opts.tag;
if (name && (
(this.include && !matches(this.include, name)) ||
(this.exclude && matches(this.exclude, name))
)) {
return vnode
}
var key = vnode.key == null
// same constructor may get registered as different local components
// so cid alone is not enough (#3269)
? opts.Ctor.cid + (opts.tag ? ("::" + (opts.tag)) : '')
: vnode.key;
if (this.cache[key]) {
vnode.child = this.cache[key].child;
} else {
this.cache[key] = vnode;
}
vnode.data.keepAlive = true;
}
return vnode
},
destroyed: function destroyed () {
var this$1 = this;
for (var key in this.cache) {
var vnode = this$1.cache[key];
callHook(vnode.child, 'deactivated');
vnode.child.$destroy();
}
}
};
var builtInComponents = {
KeepAlive: KeepAlive
};
/* */
function initGlobalAPI (Vue) {
// config
var configDef = {};
configDef.get = function () { return config; };
if (process.env.NODE_ENV !== 'production') {
configDef.set = function () {
warn(
'Do not replace the Vue.config object, set individual fields instead.'
);
};
}
Object.defineProperty(Vue, 'config', configDef);
Vue.util = util;
Vue.set = set$1;
Vue.delete = del;
Vue.nextTick = nextTick;
Vue.options = Object.create(null);
config._assetTypes.forEach(function (type) {
Vue.options[type + 's'] = Object.create(null);
});
// this is used to identify the "base" constructor to extend all plain-object
// components with in Weex's multi-instance scenarios.
Vue.options._base = Vue;
extend(Vue.options.components, builtInComponents);
initUse(Vue);
initMixin$1(Vue);
initExtend(Vue);
initAssetRegisters(Vue);
}
initGlobalAPI(Vue$2);
Object.defineProperty(Vue$2.prototype, '$isServer', {
get: isServerRendering
});
Vue$2.version = '2.1.8';
/* */
// attributes that should be using props for binding
var acceptValue = makeMap('input,textarea,option,select');
var mustUseProp = function (tag, attr) {
return (
(attr === 'value' && acceptValue(tag)) ||
(attr === 'selected' && tag === 'option') ||
(attr === 'checked' && tag === 'input') ||
(attr === 'muted' && tag === 'video')
)
};
var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
var isBooleanAttr = makeMap(
'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
'required,reversed,scoped,seamless,selected,sortable,translate,' +
'truespeed,typemustmatch,visible'
);
var xlinkNS = 'http://www.w3.org/1999/xlink';
var isXlink = function (name) {
return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'
};
var getXlinkProp = function (name) {
return isXlink(name) ? name.slice(6, name.length) : ''
};
var isFalsyAttrValue = function (val) {
return val == null || val === false
};
/* */
function genClassForVnode (vnode) {
var data = vnode.data;
var parentNode = vnode;
var childNode = vnode;
while (childNode.child) {
childNode = childNode.child._vnode;
if (childNode.data) {
data = mergeClassData(childNode.data, data);
}
}
while ((parentNode = parentNode.parent)) {
if (parentNode.data) {
data = mergeClassData(data, parentNode.data);
}
}
return genClassFromData(data)
}
function mergeClassData (child, parent) {
return {
staticClass: concat(child.staticClass, parent.staticClass),
class: child.class
? [child.class, parent.class]
: parent.class
}
}
function genClassFromData (data) {
var dynamicClass = data.class;
var staticClass = data.staticClass;
if (staticClass || dynamicClass) {
return concat(staticClass, stringifyClass(dynamicClass))
}
/* istanbul ignore next */
return ''
}
function concat (a, b) {
return a ? b ? (a + ' ' + b) : a : (b || '')
}
function stringifyClass (value) {
var res = '';
if (!value) {
return res
}
if (typeof value === 'string') {
return value
}
if (Array.isArray(value)) {
var stringified;
for (var i = 0, l = value.length; i < l; i++) {
if (value[i]) {
if ((stringified = stringifyClass(value[i]))) {
res += stringified + ' ';
}
}
}
return res.slice(0, -1)
}
if (isObject(value)) {
for (var key in value) {
if (value[key]) { res += key + ' '; }
}
return res.slice(0, -1)
}
/* istanbul ignore next */
return res
}
/* */
var namespaceMap = {
svg: 'http://www.w3.org/2000/svg',
math: 'http://www.w3.org/1998/Math/MathML'
};
var isHTMLTag = makeMap(
'html,body,base,head,link,meta,style,title,' +
'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
'div,dd,dl,dt,figcaption,figure,hr,img,li,main,ol,p,pre,ul,' +
'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
'embed,object,param,source,canvas,script,noscript,del,ins,' +
'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
'output,progress,select,textarea,' +
'details,dialog,menu,menuitem,summary,' +
'content,element,shadow,template'
);
// this map is intentionally selective, only covering SVG elements that may
// contain child elements.
var isSVG = makeMap(
'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,' +
'font-face,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',
true
);
var isReservedTag = function (tag) {
return isHTMLTag(tag) || isSVG(tag)
};
function getTagNamespace (tag) {
if (isSVG(tag)) {
return 'svg'
}
// basic support for MathML
// note it doesn't support other MathML elements being component roots
if (tag === 'math') {
return 'math'
}
}
var unknownElementCache = Object.create(null);
function isUnknownElement (tag) {
/* istanbul ignore if */
if (!inBrowser) {
return true
}
if (isReservedTag(tag)) {
return false
}
tag = tag.toLowerCase();
/* istanbul ignore if */
if (unknownElementCache[tag] != null) {
return unknownElementCache[tag]
}
var el = document.createElement(tag);
if (tag.indexOf('-') > -1) {
// http://stackoverflow.com/a/28210364/1070244
return (unknownElementCache[tag] = (
el.constructor === window.HTMLUnknownElement ||
el.constructor === window.HTMLElement
))
} else {
return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))
}
}
/* */
/**
* Query an element selector if it's not an element already.
*/
function query (el) {
if (typeof el === 'string') {
var selector = el;
el = document.querySelector(el);
if (!el) {
process.env.NODE_ENV !== 'production' && warn(
'Cannot find element: ' + selector
);
return document.createElement('div')
}
}
return el
}
/* */
function createElement$1 (tagName, vnode) {
var elm = document.createElement(tagName);
if (tagName !== 'select') {
return elm
}
if (vnode.data && vnode.data.attrs && 'multiple' in vnode.data.attrs) {
elm.setAttribute('multiple', 'multiple');
}
return elm
}
function createElementNS (namespace, tagName) {
return document.createElementNS(namespaceMap[namespace], tagName)
}
function createTextNode (text) {
return document.createTextNode(text)
}
function createComment (text) {
return document.createComment(text)
}
function insertBefore (parentNode, newNode, referenceNode) {
parentNode.insertBefore(newNode, referenceNode);
}
function removeChild (node, child) {
node.removeChild(child);
}
function appendChild (node, child) {
node.appendChild(child);
}
function parentNode (node) {
return node.parentNode
}
function nextSibling (node) {
return node.nextSibling
}
function tagName (node) {
return node.tagName
}
function setTextContent (node, text) {
node.textContent = text;
}
function setAttribute (node, key, val) {
node.setAttribute(key, val);
}
var nodeOps = Object.freeze({
createElement: createElement$1,
createElementNS: createElementNS,
createTextNode: createTextNode,
createComment: createComment,
insertBefore: insertBefore,
removeChild: removeChild,
appendChild: appendChild,
parentNode: parentNode,
nextSibling: nextSibling,
tagName: tagName,
setTextContent: setTextContent,
setAttribute: setAttribute
});
/* */
var ref = {
create: function create (_, vnode) {
registerRef(vnode);
},
update: function update (oldVnode, vnode) {
if (oldVnode.data.ref !== vnode.data.ref) {
registerRef(oldVnode, true);
registerRef(vnode);
}
},
destroy: function destroy (vnode) {
registerRef(vnode, true);
}
};
function registerRef (vnode, isRemoval) {
var key = vnode.data.ref;
if (!key) { return }
var vm = vnode.context;
var ref = vnode.child || vnode.elm;
var refs = vm.$refs;
if (isRemoval) {
if (Array.isArray(refs[key])) {
remove$1(refs[key], ref);
} else if (refs[key] === ref) {
refs[key] = undefined;
}
} else {
if (vnode.data.refInFor) {
if (Array.isArray(refs[key]) && refs[key].indexOf(ref) < 0) {
refs[key].push(ref);
} else {
refs[key] = [ref];
}
} else {
refs[key] = ref;
}
}
}
/**
* Virtual DOM patching algorithm based on Snabbdom by
* Simon Friis Vindum (@paldepind)
* Licensed under the MIT License
* https://github.com/paldepind/snabbdom/blob/master/LICENSE
*
* modified by Evan You (@yyx990803)
*
/*
* Not type-checking this because this file is perf-critical and the cost
* of making flow understand it is not worth it.
*/
var emptyNode = new VNode('', {}, []);
var hooks$1 = ['create', 'activate', 'update', 'remove', 'destroy'];
function isUndef (s) {
return s == null
}
function isDef (s) {
return s != null
}
function sameVnode (vnode1, vnode2) {
return (
vnode1.key === vnode2.key &&
vnode1.tag === vnode2.tag &&
vnode1.isComment === vnode2.isComment &&
!vnode1.data === !vnode2.data
)
}
function createKeyToOldIdx (children, beginIdx, endIdx) {
var i, key;
var map = {};
for (i = beginIdx; i <= endIdx; ++i) {
key = children[i].key;
if (isDef(key)) { map[key] = i; }
}
return map
}
function createPatchFunction (backend) {
var i, j;
var cbs = {};
var modules = backend.modules;
var nodeOps = backend.nodeOps;
for (i = 0; i < hooks$1.length; ++i) {
cbs[hooks$1[i]] = [];
for (j = 0; j < modules.length; ++j) {
if (modules[j][hooks$1[i]] !== undefined) { cbs[hooks$1[i]].push(modules[j][hooks$1[i]]); }
}
}
function emptyNodeAt (elm) {
return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)
}
function createRmCb (childElm, listeners) {
function remove$$1 () {
if (--remove$$1.listeners === 0) {
removeNode(childElm);
}
}
remove$$1.listeners = listeners;
return remove$$1
}
function removeNode (el) {
var parent = nodeOps.parentNode(el);
// element may have already been removed due to v-html / v-text
if (parent) {
nodeOps.removeChild(parent, el);
}
}
var inPre = 0;
function createElm (vnode, insertedVnodeQueue, parentElm, refElm, nested) {
vnode.isRootInsert = !nested; // for transition enter check
if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
return
}
var data = vnode.data;
var children = vnode.children;
var tag = vnode.tag;
if (isDef(tag)) {
if (process.env.NODE_ENV !== 'production') {
if (data && data.pre) {
inPre++;
}
if (
!inPre &&
!vnode.ns &&
!(config.ignoredElements.length && config.ignoredElements.indexOf(tag) > -1) &&
config.isUnknownElement(tag)
) {
warn(
'Unknown custom element: <' + tag + '> - did you ' +
'register the component correctly? For recursive components, ' +
'make sure to provide the "name" option.',
vnode.context
);
}
}
vnode.elm = vnode.ns
? nodeOps.createElementNS(vnode.ns, tag)
: nodeOps.createElement(tag, vnode);
setScope(vnode);
/* istanbul ignore if */
{
createChildren(vnode, children, insertedVnodeQueue);
if (isDef(data)) {
invokeCreateHooks(vnode, insertedVnodeQueue);
}
insert(parentElm, vnode.elm, refElm);
}
if (process.env.NODE_ENV !== 'production' && data && data.pre) {
inPre--;
}
} else if (vnode.isComment) {
vnode.elm = nodeOps.createComment(vnode.text);
insert(parentElm, vnode.elm, refElm);
} else {
vnode.elm = nodeOps.createTextNode(vnode.text);
insert(parentElm, vnode.elm, refElm);
}
}
function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {
var i = vnode.data;
if (isDef(i)) {
var isReactivated = isDef(vnode.child) && i.keepAlive;
if (isDef(i = i.hook) && isDef(i = i.init)) {
i(vnode, false /* hydrating */, parentElm, refElm);
}
// after calling the init hook, if the vnode is a child component
// it should've created a child instance and mounted it. the child
// component also has set the placeholder vnode's elm.
// in that case we can just return the element and be done.
if (isDef(vnode.child)) {
initComponent(vnode, insertedVnodeQueue);
if (isReactivated) {
reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
}
return true
}
}
}
function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {
var i;
// hack for #4339: a reactivated component with inner transition
// does not trigger because the inner node's created hooks are not called
// again. It's not ideal to involve module-specific logic in here but
// there doesn't seem to be a better way to do it.
var innerNode = vnode;
while (innerNode.child) {
innerNode = innerNode.child._vnode;
if (isDef(i = innerNode.data) && isDef(i = i.transition)) {
for (i = 0; i < cbs.activate.length; ++i) {
cbs.activate[i](emptyNode, innerNode);
}
insertedVnodeQueue.push(innerNode);
break
}
}
// unlike a newly created component,
// a reactivated keep-alive component doesn't insert itself
insert(parentElm, vnode.elm, refElm);
}
function insert (parent, elm, ref) {
if (parent) {
if (ref) {
nodeOps.insertBefore(parent, elm, ref);
} else {
nodeOps.appendChild(parent, elm);
}
}
}
function createChildren (vnode, children, insertedVnodeQueue) {
if (Array.isArray(children)) {
for (var i = 0; i < children.length; ++i) {
createElm(children[i], insertedVnodeQueue, vnode.elm, null, true);
}
} else if (isPrimitive(vnode.text)) {
nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(vnode.text));
}
}
function isPatchable (vnode) {
while (vnode.child) {
vnode = vnode.child._vnode;
}
return isDef(vnode.tag)
}
function invokeCreateHooks (vnode, insertedVnodeQueue) {
for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {
cbs.create[i$1](emptyNode, vnode);
}
i = vnode.data.hook; // Reuse variable
if (isDef(i)) {
if (i.create) { i.create(emptyNode, vnode); }
if (i.insert) { insertedVnodeQueue.push(vnode); }
}
}
function initComponent (vnode, insertedVnodeQueue) {
if (vnode.data.pendingInsert) {
insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
}
vnode.elm = vnode.child.$el;
if (isPatchable(vnode)) {
invokeCreateHooks(vnode, insertedVnodeQueue);
setScope(vnode);
} else {
// empty component root.
// skip all element-related modules except for ref (#3455)
registerRef(vnode);
// make sure to invoke the insert hook
insertedVnodeQueue.push(vnode);
}
}
// set scope id attribute for scoped CSS.
// this is implemented as a special case to avoid the overhead
// of going through the normal attribute patching process.
function setScope (vnode) {
var i;
if (isDef(i = vnode.context) && isDef(i = i.$options._scopeId)) {
nodeOps.setAttribute(vnode.elm, i, '');
}
if (isDef(i = activeInstance) &&
i !== vnode.context &&
isDef(i = i.$options._scopeId)) {
nodeOps.setAttribute(vnode.elm, i, '');
}
}
function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
for (; startIdx <= endIdx; ++startIdx) {
createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm);
}
}
function invokeDestroyHook (vnode) {
var i, j;
var data = vnode.data;
if (isDef(data)) {
if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }
for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }
}
if (isDef(i = vnode.children)) {
for (j = 0; j < vnode.children.length; ++j) {
invokeDestroyHook(vnode.children[j]);
}
}
}
function removeVnodes (parentElm, vnodes, startIdx, endIdx) {
for (; startIdx <= endIdx; ++startIdx) {
var ch = vnodes[startIdx];
if (isDef(ch)) {
if (isDef(ch.tag)) {
removeAndInvokeRemoveHook(ch);
invokeDestroyHook(ch);
} else { // Text node
removeNode(ch.elm);
}
}
}
}
function removeAndInvokeRemoveHook (vnode, rm) {
if (rm || isDef(vnode.data)) {
var listeners = cbs.remove.length + 1;
if (!rm) {
// directly removing
rm = createRmCb(vnode.elm, listeners);
} else {
// we have a recursively passed down rm callback
// increase the listeners count
rm.listeners += listeners;
}
// recursively invoke hooks on child component root node
if (isDef(i = vnode.child) && isDef(i = i._vnode) && isDef(i.data)) {
removeAndInvokeRemoveHook(i, rm);
}
for (i = 0; i < cbs.remove.length; ++i) {
cbs.remove[i](vnode, rm);
}
if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {
i(vnode, rm);
} else {
rm();
}
} else {
removeNode(vnode.elm);
}
}
function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {
var oldStartIdx = 0;
var newStartIdx = 0;
var oldEndIdx = oldCh.length - 1;
var oldStartVnode = oldCh[0];
var oldEndVnode = oldCh[oldEndIdx];
var newEndIdx = newCh.length - 1;
var newStartVnode = newCh[0];
var newEndVnode = newCh[newEndIdx];
var oldKeyToIdx, idxInOld, elmToMove, refElm;
// removeOnly is a special flag used only by <transition-group>
// to ensure removed elements stay in correct relative positions
// during leaving transitions
var canMove = !removeOnly;
while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
if (isUndef(oldStartVnode)) {
oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left
} else if (isUndef(oldEndVnode)) {
oldEndVnode = oldCh[--oldEndIdx];
} else if (sameVnode(oldStartVnode, newStartVnode)) {
patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue);
oldStartVnode = oldCh[++oldStartIdx];
newStartVnode = newCh[++newStartIdx];
} else if (sameVnode(oldEndVnode, newEndVnode)) {
patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue);
oldEndVnode = oldCh[--oldEndIdx];
newEndVnode = newCh[--newEndIdx];
} else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right
patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue);
canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
oldStartVnode = oldCh[++oldStartIdx];
newEndVnode = newCh[--newEndIdx];
} else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left
patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue);
canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
oldEndVnode = oldCh[--oldEndIdx];
newStartVnode = newCh[++newStartIdx];
} else {
if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }
idxInOld = isDef(newStartVnode.key) ? oldKeyToIdx[newStartVnode.key] : null;
if (isUndef(idxInOld)) { // New element
createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm);
newStartVnode = newCh[++newStartIdx];
} else {
elmToMove = oldCh[idxInOld];
/* istanbul ignore if */
if (process.env.NODE_ENV !== 'production' && !elmToMove) {
warn(
'It seems there are duplicate keys that is causing an update error. ' +
'Make sure each v-for item has a unique key.'
);
}
if (sameVnode(elmToMove, newStartVnode)) {
patchVnode(elmToMove, newStartVnode, insertedVnodeQueue);
oldCh[idxInOld] = undefined;
canMove && nodeOps.insertBefore(parentElm, newStartVnode.elm, oldStartVnode.elm);
newStartVnode = newCh[++newStartIdx];
} else {
// same key but different element. treat as new element
createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm);
newStartVnode = newCh[++newStartIdx];
}
}
}
}
if (oldStartIdx > oldEndIdx) {
refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
} else if (newStartIdx > newEndIdx) {
removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);
}
}
function patchVnode (oldVnode, vnode, insertedVnodeQueue, removeOnly) {
if (oldVnode === vnode) {
return
}
// reuse element for static trees.
// note we only do this if the vnode is cloned -
// if the new node is not cloned it means the render functions have been
// reset by the hot-reload-api and we need to do a proper re-render.
if (vnode.isStatic &&
oldVnode.isStatic &&
vnode.key === oldVnode.key &&
(vnode.isCloned || vnode.isOnce)) {
vnode.elm = oldVnode.elm;
vnode.child = oldVnode.child;
return
}
var i;
var data = vnode.data;
var hasData = isDef(data);
if (hasData && isDef(i = data.hook) && isDef(i = i.prepatch)) {
i(oldVnode, vnode);
}
var elm = vnode.elm = oldVnode.elm;
var oldCh = oldVnode.children;
var ch = vnode.children;
if (hasData && isPatchable(vnode)) {
for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }
if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }
}
if (isUndef(vnode.text)) {
if (isDef(oldCh) && isDef(ch)) {
if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }
} else if (isDef(ch)) {
if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }
addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
} else if (isDef(oldCh)) {
removeVnodes(elm, oldCh, 0, oldCh.length - 1);
} else if (isDef(oldVnode.text)) {
nodeOps.setTextContent(elm, '');
}
} else if (oldVnode.text !== vnode.text) {
nodeOps.setTextContent(elm, vnode.text);
}
if (hasData) {
if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }
}
}
function invokeInsertHook (vnode, queue, initial) {
// delay insert hooks for component root nodes, invoke them after the
// element is really inserted
if (initial && vnode.parent) {
vnode.parent.data.pendingInsert = queue;
} else {
for (var i = 0; i < queue.length; ++i) {
queue[i].data.hook.insert(queue[i]);
}
}
}
var bailed = false;
// list of modules that can skip create hook during hydration because they
// are already rendered on the client or has no need for initialization
var isRenderedModule = makeMap('attrs,style,class,staticClass,staticStyle,key');
// Note: this is a browser-only function so we can assume elms are DOM nodes.
function hydrate (elm, vnode, insertedVnodeQueue) {
if (process.env.NODE_ENV !== 'production') {
if (!assertNodeMatch(elm, vnode)) {
return false
}
}
vnode.elm = elm;
var tag = vnode.tag;
var data = vnode.data;
var children = vnode.children;
if (isDef(data)) {
if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }
if (isDef(i = vnode.child)) {
// child component. it should have hydrated its own tree.
initComponent(vnode, insertedVnodeQueue);
return true
}
}
if (isDef(tag)) {
if (isDef(children)) {
// empty element, allow client to pick up and populate children
if (!elm.hasChildNodes()) {
createChildren(vnode, children, insertedVnodeQueue);
} else {
var childrenMatch = true;
var childNode = elm.firstChild;
for (var i$1 = 0; i$1 < children.length; i$1++) {
if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue)) {
childrenMatch = false;
break
}
childNode = childNode.nextSibling;
}
// if childNode is not null, it means the actual childNodes list is
// longer than the virtual children list.
if (!childrenMatch || childNode) {
if (process.env.NODE_ENV !== 'production' &&
typeof console !== 'undefined' &&
!bailed) {
bailed = true;
console.warn('Parent: ', elm);
console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
}
return false
}
}
}
if (isDef(data)) {
for (var key in data) {
if (!isRenderedModule(key)) {
invokeCreateHooks(vnode, insertedVnodeQueue);
break
}
}
}
} else if (elm.data !== vnode.text) {
elm.data = vnode.text;
}
return true
}
function assertNodeMatch (node, vnode) {
if (vnode.tag) {
return (
vnode.tag.indexOf('vue-component') === 0 ||
vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())
)
} else {
return node.nodeType === (vnode.isComment ? 8 : 3)
}
}
return function patch (oldVnode, vnode, hydrating, removeOnly, parentElm, refElm) {
if (!vnode) {
if (oldVnode) { invokeDestroyHook(oldVnode); }
return
}
var elm, parent;
var isInitialPatch = false;
var insertedVnodeQueue = [];
if (!oldVnode) {
// empty mount (likely as component), create new root element
isInitialPatch = true;
createElm(vnode, insertedVnodeQueue, parentElm, refElm);
} else {
var isRealElement = isDef(oldVnode.nodeType);
if (!isRealElement && sameVnode(oldVnode, vnode)) {
// patch existing root node
patchVnode(oldVnode, vnode, insertedVnodeQueue, removeOnly);
} else {
if (isRealElement) {
// mounting to a real element
// check if this is server-rendered content and if we can perform
// a successful hydration.
if (oldVnode.nodeType === 1 && oldVnode.hasAttribute('server-rendered')) {
oldVnode.removeAttribute('server-rendered');
hydrating = true;
}
if (hydrating) {
if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
invokeInsertHook(vnode, insertedVnodeQueue, true);
return oldVnode
} else if (process.env.NODE_ENV !== 'production') {
warn(
'The client-side rendered virtual DOM tree is not matching ' +
'server-rendered content. This is likely caused by incorrect ' +
'HTML markup, for example nesting block-level elements inside ' +
'<p>, or missing <tbody>. Bailing hydration and performing ' +
'full client-side render.'
);
}
}
// either not server-rendered, or hydration failed.
// create an empty node and replace it
oldVnode = emptyNodeAt(oldVnode);
}
// replacing existing element
elm = oldVnode.elm;
parent = nodeOps.parentNode(elm);
createElm(vnode, insertedVnodeQueue, parent, nodeOps.nextSibling(elm));
if (vnode.parent) {
// component root element replaced.
// update parent placeholder node element, recursively
var ancestor = vnode.parent;
while (ancestor) {
ancestor.elm = vnode.elm;
ancestor = ancestor.parent;
}
if (isPatchable(vnode)) {
for (var i = 0; i < cbs.create.length; ++i) {
cbs.create[i](emptyNode, vnode.parent);
}
}
}
if (parent !== null) {
removeVnodes(parent, [oldVnode], 0, 0);
} else if (isDef(oldVnode.tag)) {
invokeDestroyHook(oldVnode);
}
}
}
invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);
return vnode.elm
}
}
/* */
var directives = {
create: updateDirectives,
update: updateDirectives,
destroy: function unbindDirectives (vnode) {
updateDirectives(vnode, emptyNode);
}
};
function updateDirectives (oldVnode, vnode) {
if (oldVnode.data.directives || vnode.data.directives) {
_update(oldVnode, vnode);
}
}
function _update (oldVnode, vnode) {
var isCreate = oldVnode === emptyNode;
var isDestroy = vnode === emptyNode;
var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);
var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);
var dirsWithInsert = [];
var dirsWithPostpatch = [];
var key, oldDir, dir;
for (key in newDirs) {
oldDir = oldDirs[key];
dir = newDirs[key];
if (!oldDir) {
// new directive, bind
callHook$1(dir, 'bind', vnode, oldVnode);
if (dir.def && dir.def.inserted) {
dirsWithInsert.push(dir);
}
} else {
// existing directive, update
dir.oldValue = oldDir.value;
callHook$1(dir, 'update', vnode, oldVnode);
if (dir.def && dir.def.componentUpdated) {
dirsWithPostpatch.push(dir);
}
}
}
if (dirsWithInsert.length) {
var callInsert = function () {
for (var i = 0; i < dirsWithInsert.length; i++) {
callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);
}
};
if (isCreate) {
mergeVNodeHook(vnode.data.hook || (vnode.data.hook = {}), 'insert', callInsert, 'dir-insert');
} else {
callInsert();
}
}
if (dirsWithPostpatch.length) {
mergeVNodeHook(vnode.data.hook || (vnode.data.hook = {}), 'postpatch', function () {
for (var i = 0; i < dirsWithPostpatch.length; i++) {
callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
}
}, 'dir-postpatch');
}
if (!isCreate) {
for (key in oldDirs) {
if (!newDirs[key]) {
// no longer present, unbind
callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
}
}
}
}
var emptyModifiers = Object.create(null);
function normalizeDirectives$1 (
dirs,
vm
) {
var res = Object.create(null);
if (!dirs) {
return res
}
var i, dir;
for (i = 0; i < dirs.length; i++) {
dir = dirs[i];
if (!dir.modifiers) {
dir.modifiers = emptyModifiers;
}
res[getRawDirName(dir)] = dir;
dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);
}
return res
}
function getRawDirName (dir) {
return dir.rawName || ((dir.name) + "." + (Object.keys(dir.modifiers || {}).join('.')))
}
function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {
var fn = dir.def && dir.def[hook];
if (fn) {
fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
}
}
var baseModules = [
ref,
directives
];
/* */
function updateAttrs (oldVnode, vnode) {
if (!oldVnode.data.attrs && !vnode.data.attrs) {
return
}
var key, cur, old;
var elm = vnode.elm;
var oldAttrs = oldVnode.data.attrs || {};
var attrs = vnode.data.attrs || {};
// clone observed objects, as the user probably wants to mutate it
if (attrs.__ob__) {
attrs = vnode.data.attrs = extend({}, attrs);
}
for (key in attrs) {
cur = attrs[key];
old = oldAttrs[key];
if (old !== cur) {
setAttr(elm, key, cur);
}
}
// #4391: in IE9, setting type can reset value for input[type=radio]
/* istanbul ignore if */
if (isIE9 && attrs.value !== oldAttrs.value) {
setAttr(elm, 'value', attrs.value);
}
for (key in oldAttrs) {
if (attrs[key] == null) {
if (isXlink(key)) {
elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
} else if (!isEnumeratedAttr(key)) {
elm.removeAttribute(key);
}
}
}
}
function setAttr (el, key, value) {
if (isBooleanAttr(key)) {
// set attribute for blank value
// e.g. <option disabled>Select one</option>
if (isFalsyAttrValue(value)) {
el.removeAttribute(key);
} else {
el.setAttribute(key, key);
}
} else if (isEnumeratedAttr(key)) {
el.setAttribute(key, isFalsyAttrValue(value) || value === 'false' ? 'false' : 'true');
} else if (isXlink(key)) {
if (isFalsyAttrValue(value)) {
el.removeAttributeNS(xlinkNS, getXlinkProp(key));
} else {
el.setAttributeNS(xlinkNS, key, value);
}
} else {
if (isFalsyAttrValue(value)) {
el.removeAttribute(key);
} else {
el.setAttribute(key, value);
}
}
}
var attrs = {
create: updateAttrs,
update: updateAttrs
};
/* */
function updateClass (oldVnode, vnode) {
var el = vnode.elm;
var data = vnode.data;
var oldData = oldVnode.data;
if (!data.staticClass && !data.class &&
(!oldData || (!oldData.staticClass && !oldData.class))) {
return
}
var cls = genClassForVnode(vnode);
// handle transition classes
var transitionClass = el._transitionClasses;
if (transitionClass) {
cls = concat(cls, stringifyClass(transitionClass));
}
// set the class
if (cls !== el._prevClass) {
el.setAttribute('class', cls);
el._prevClass = cls;
}
}
var klass = {
create: updateClass,
update: updateClass
};
/* */
var target$1;
function add$2 (event, handler, once, capture) {
if (once) {
var oldHandler = handler;
handler = function (ev) {
remove$3(event, handler, capture);
arguments.length === 1
? oldHandler(ev)
: oldHandler.apply(null, arguments);
};
}
target$1.addEventListener(event, handler, capture);
}
function remove$3 (event, handler, capture) {
target$1.removeEventListener(event, handler, capture);
}
function updateDOMListeners (oldVnode, vnode) {
if (!oldVnode.data.on && !vnode.data.on) {
return
}
var on = vnode.data.on || {};
var oldOn = oldVnode.data.on || {};
target$1 = vnode.elm;
updateListeners(on, oldOn, add$2, remove$3, vnode.context);
}
var events = {
create: updateDOMListeners,
update: updateDOMListeners
};
/* */
function updateDOMProps (oldVnode, vnode) {
if (!oldVnode.data.domProps && !vnode.data.domProps) {
return
}
var key, cur;
var elm = vnode.elm;
var oldProps = oldVnode.data.domProps || {};
var props = vnode.data.domProps || {};
// clone observed objects, as the user probably wants to mutate it
if (props.__ob__) {
props = vnode.data.domProps = extend({}, props);
}
for (key in oldProps) {
if (props[key] == null) {
elm[key] = '';
}
}
for (key in props) {
cur = props[key];
// ignore children if the node has textContent or innerHTML,
// as these will throw away existing DOM nodes and cause removal errors
// on subsequent patches (#3360)
if (key === 'textContent' || key === 'innerHTML') {
if (vnode.children) { vnode.children.length = 0; }
if (cur === oldProps[key]) { continue }
}
// #4521: if a click event triggers update before the change event is
// dispatched on a checkbox/radio input, the input's checked state will
// be reset and fail to trigger another update.
/* istanbul ignore next */
if (key === 'checked' && !isDirty(elm, cur)) {
continue
}
if (key === 'value') {
// store value as _value as well since
// non-string values will be stringified
elm._value = cur;
// avoid resetting cursor position when value is the same
var strCur = cur == null ? '' : String(cur);
if (shouldUpdateValue(elm, vnode, strCur)) {
elm.value = strCur;
}
} else {
elm[key] = cur;
}
}
}
// check platforms/web/util/attrs.js acceptValue
function shouldUpdateValue (
elm,
vnode,
checkVal
) {
if (!elm.composing && (
vnode.tag === 'option' ||
isDirty(elm, checkVal) ||
isInputChanged(vnode, checkVal)
)) {
return true
}
return false
}
function isDirty (elm, checkVal) {
return document.activeElement !== elm && elm.value !== checkVal
}
function isInputChanged (vnode, newVal) {
var value = vnode.elm.value;
var modifiers = vnode.elm._vModifiers; // injected by v-model runtime
if ((modifiers && modifiers.number) || vnode.elm.type === 'number') {
return toNumber(value) !== toNumber(newVal)
}
if (modifiers && modifiers.trim) {
return value.trim() !== newVal.trim()
}
return value !== newVal
}
var domProps = {
create: updateDOMProps,
update: updateDOMProps
};
/* */
var parseStyleText = cached(function (cssText) {
var res = {};
var listDelimiter = /;(?![^(]*\))/g;
var propertyDelimiter = /:(.+)/;
cssText.split(listDelimiter).forEach(function (item) {
if (item) {
var tmp = item.split(propertyDelimiter);
tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
}
});
return res
});
// merge static and dynamic style data on the same vnode
function normalizeStyleData (data) {
var style = normalizeStyleBinding(data.style);
// static style is pre-processed into an object during compilation
// and is always a fresh object, so it's safe to merge into it
return data.staticStyle
? extend(data.staticStyle, style)
: style
}
// normalize possible array / string values into Object
function normalizeStyleBinding (bindingStyle) {
if (Array.isArray(bindingStyle)) {
return toObject(bindingStyle)
}
if (typeof bindingStyle === 'string') {
return parseStyleText(bindingStyle)
}
return bindingStyle
}
/**
* parent component style should be after child's
* so that parent component's style could override it
*/
function getStyle (vnode, checkChild) {
var res = {};
var styleData;
if (checkChild) {
var childNode = vnode;
while (childNode.child) {
childNode = childNode.child._vnode;
if (childNode.data && (styleData = normalizeStyleData(childNode.data))) {
extend(res, styleData);
}
}
}
if ((styleData = normalizeStyleData(vnode.data))) {
extend(res, styleData);
}
var parentNode = vnode;
while ((parentNode = parentNode.parent)) {
if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
extend(res, styleData);
}
}
return res
}
/* */
var cssVarRE = /^--/;
var importantRE = /\s*!important$/;
var setProp = function (el, name, val) {
/* istanbul ignore if */
if (cssVarRE.test(name)) {
el.style.setProperty(name, val);
} else if (importantRE.test(val)) {
el.style.setProperty(name, val.replace(importantRE, ''), 'important');
} else {
el.style[normalize(name)] = val;
}
};
var prefixes = ['Webkit', 'Moz', 'ms'];
var testEl;
var normalize = cached(function (prop) {
testEl = testEl || document.createElement('div');
prop = camelize(prop);
if (prop !== 'filter' && (prop in testEl.style)) {
return prop
}
var upper = prop.charAt(0).toUpperCase() + prop.slice(1);
for (var i = 0; i < prefixes.length; i++) {
var prefixed = prefixes[i] + upper;
if (prefixed in testEl.style) {
return prefixed
}
}
});
function updateStyle (oldVnode, vnode) {
var data = vnode.data;
var oldData = oldVnode.data;
if (!data.staticStyle && !data.style &&
!oldData.staticStyle && !oldData.style) {
return
}
var cur, name;
var el = vnode.elm;
var oldStaticStyle = oldVnode.data.staticStyle;
var oldStyleBinding = oldVnode.data.style || {};
// if static style exists, stylebinding already merged into it when doing normalizeStyleData
var oldStyle = oldStaticStyle || oldStyleBinding;
var style = normalizeStyleBinding(vnode.data.style) || {};
vnode.data.style = style.__ob__ ? extend({}, style) : style;
var newStyle = getStyle(vnode, true);
for (name in oldStyle) {
if (newStyle[name] == null) {
setProp(el, name, '');
}
}
for (name in newStyle) {
cur = newStyle[name];
if (cur !== oldStyle[name]) {
// ie9 setting to null has no effect, must use empty string
setProp(el, name, cur == null ? '' : cur);
}
}
}
var style = {
create: updateStyle,
update: updateStyle
};
/* */
/**
* Add class with compatibility for SVG since classList is not supported on
* SVG elements in IE
*/
function addClass (el, cls) {
/* istanbul ignore if */
if (!cls || !cls.trim()) {
return
}
/* istanbul ignore else */
if (el.classList) {
if (cls.indexOf(' ') > -1) {
cls.split(/\s+/).forEach(function (c) { return el.classList.add(c); });
} else {
el.classList.add(cls);
}
} else {
var cur = ' ' + el.getAttribute('class') + ' ';
if (cur.indexOf(' ' + cls + ' ') < 0) {
el.setAttribute('class', (cur + cls).trim());
}
}
}
/**
* Remove class with compatibility for SVG since classList is not supported on
* SVG elements in IE
*/
function removeClass (el, cls) {
/* istanbul ignore if */
if (!cls || !cls.trim()) {
return
}
/* istanbul ignore else */
if (el.classList) {
if (cls.indexOf(' ') > -1) {
cls.split(/\s+/).forEach(function (c) { return el.classList.remove(c); });
} else {
el.classList.remove(cls);
}
} else {
var cur = ' ' + el.getAttribute('class') + ' ';
var tar = ' ' + cls + ' ';
while (cur.indexOf(tar) >= 0) {
cur = cur.replace(tar, ' ');
}
el.setAttribute('class', cur.trim());
}
}
/* */
var hasTransition = inBrowser && !isIE9;
var TRANSITION = 'transition';
var ANIMATION = 'animation';
// Transition property/event sniffing
var transitionProp = 'transition';
var transitionEndEvent = 'transitionend';
var animationProp = 'animation';
var animationEndEvent = 'animationend';
if (hasTransition) {
/* istanbul ignore if */
if (window.ontransitionend === undefined &&
window.onwebkittransitionend !== undefined) {
transitionProp = 'WebkitTransition';
transitionEndEvent = 'webkitTransitionEnd';
}
if (window.onanimationend === undefined &&
window.onwebkitanimationend !== undefined) {
animationProp = 'WebkitAnimation';
animationEndEvent = 'webkitAnimationEnd';
}
}
var raf = (inBrowser && window.requestAnimationFrame) || setTimeout;
function nextFrame (fn) {
raf(function () {
raf(fn);
});
}
function addTransitionClass (el, cls) {
(el._transitionClasses || (el._transitionClasses = [])).push(cls);
addClass(el, cls);
}
function removeTransitionClass (el, cls) {
if (el._transitionClasses) {
remove$1(el._transitionClasses, cls);
}
removeClass(el, cls);
}
function whenTransitionEnds (
el,
expectedType,
cb
) {
var ref = getTransitionInfo(el, expectedType);
var type = ref.type;
var timeout = ref.timeout;
var propCount = ref.propCount;
if (!type) { return cb() }
var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;
var ended = 0;
var end = function () {
el.removeEventListener(event, onEnd);
cb();
};
var onEnd = function (e) {
if (e.target === el) {
if (++ended >= propCount) {
end();
}
}
};
setTimeout(function () {
if (ended < propCount) {
end();
}
}, timeout + 1);
el.addEventListener(event, onEnd);
}
var transformRE = /\b(transform|all)(,|$)/;
function getTransitionInfo (el, expectedType) {
var styles = window.getComputedStyle(el);
var transitioneDelays = styles[transitionProp + 'Delay'].split(', ');
var transitionDurations = styles[transitionProp + 'Duration'].split(', ');
var transitionTimeout = getTimeout(transitioneDelays, transitionDurations);
var animationDelays = styles[animationProp + 'Delay'].split(', ');
var animationDurations = styles[animationProp + 'Duration'].split(', ');
var animationTimeout = getTimeout(animationDelays, animationDurations);
var type;
var timeout = 0;
var propCount = 0;
/* istanbul ignore if */
if (expectedType === TRANSITION) {
if (transitionTimeout > 0) {
type = TRANSITION;
timeout = transitionTimeout;
propCount = transitionDurations.length;
}
} else if (expectedType === ANIMATION) {
if (animationTimeout > 0) {
type = ANIMATION;
timeout = animationTimeout;
propCount = animationDurations.length;
}
} else {
timeout = Math.max(transitionTimeout, animationTimeout);
type = timeout > 0
? transitionTimeout > animationTimeout
? TRANSITION
: ANIMATION
: null;
propCount = type
? type === TRANSITION
? transitionDurations.length
: animationDurations.length
: 0;
}
var hasTransform =
type === TRANSITION &&
transformRE.test(styles[transitionProp + 'Property']);
return {
type: type,
timeout: timeout,
propCount: propCount,
hasTransform: hasTransform
}
}
function getTimeout (delays, durations) {
/* istanbul ignore next */
while (delays.length < durations.length) {
delays = delays.concat(delays);
}
return Math.max.apply(null, durations.map(function (d, i) {
return toMs(d) + toMs(delays[i])
}))
}
function toMs (s) {
return Number(s.slice(0, -1)) * 1000
}
/* */
function enter (vnode, toggleDisplay) {
var el = vnode.elm;
// call leave callback now
if (el._leaveCb) {
el._leaveCb.cancelled = true;
el._leaveCb();
}
var data = resolveTransition(vnode.data.transition);
if (!data) {
return
}
/* istanbul ignore if */
if (el._enterCb || el.nodeType !== 1) {
return
}
var css = data.css;
var type = data.type;
var enterClass = data.enterClass;
var enterToClass = data.enterToClass;
var enterActiveClass = data.enterActiveClass;
var appearClass = data.appearClass;
var appearToClass = data.appearToClass;
var appearActiveClass = data.appearActiveClass;
var beforeEnter = data.beforeEnter;
var enter = data.enter;
var afterEnter = data.afterEnter;
var enterCancelled = data.enterCancelled;
var beforeAppear = data.beforeAppear;
var appear = data.appear;
var afterAppear = data.afterAppear;
var appearCancelled = data.appearCancelled;
// activeInstance will always be the <transition> component managing this
// transition. One edge case to check is when the <transition> is placed
// as the root node of a child component. In that case we need to check
// <transition>'s parent for appear check.
var context = activeInstance;
var transitionNode = activeInstance.$vnode;
while (transitionNode && transitionNode.parent) {
transitionNode = transitionNode.parent;
context = transitionNode.context;
}
var isAppear = !context._isMounted || !vnode.isRootInsert;
if (isAppear && !appear && appear !== '') {
return
}
var startClass = isAppear ? appearClass : enterClass;
var activeClass = isAppear ? appearActiveClass : enterActiveClass;
var toClass = isAppear ? appearToClass : enterToClass;
var beforeEnterHook = isAppear ? (beforeAppear || beforeEnter) : beforeEnter;
var enterHook = isAppear ? (typeof appear === 'function' ? appear : enter) : enter;
var afterEnterHook = isAppear ? (afterAppear || afterEnter) : afterEnter;
var enterCancelledHook = isAppear ? (appearCancelled || enterCancelled) : enterCancelled;
var expectsCSS = css !== false && !isIE9;
var userWantsControl =
enterHook &&
// enterHook may be a bound method which exposes
// the length of original fn as _length
(enterHook._length || enterHook.length) > 1;
var cb = el._enterCb = once(function () {
if (expectsCSS) {
removeTransitionClass(el, toClass);
removeTransitionClass(el, activeClass);
}
if (cb.cancelled) {
if (expectsCSS) {
removeTransitionClass(el, startClass);
}
enterCancelledHook && enterCancelledHook(el);
} else {
afterEnterHook && afterEnterHook(el);
}
el._enterCb = null;
});
if (!vnode.data.show) {
// remove pending leave element on enter by injecting an insert hook
mergeVNodeHook(vnode.data.hook || (vnode.data.hook = {}), 'insert', function () {
var parent = el.parentNode;
var pendingNode = parent && parent._pending && parent._pending[vnode.key];
if (pendingNode &&
pendingNode.context === vnode.context &&
pendingNode.tag === vnode.tag &&
pendingNode.elm._leaveCb) {
pendingNode.elm._leaveCb();
}
enterHook && enterHook(el, cb);
}, 'transition-insert');
}
// start enter transition
beforeEnterHook && beforeEnterHook(el);
if (expectsCSS) {
addTransitionClass(el, startClass);
addTransitionClass(el, activeClass);
nextFrame(function () {
addTransitionClass(el, toClass);
removeTransitionClass(el, startClass);
if (!cb.cancelled && !userWantsControl) {
whenTransitionEnds(el, type, cb);
}
});
}
if (vnode.data.show) {
toggleDisplay && toggleDisplay();
enterHook && enterHook(el, cb);
}
if (!expectsCSS && !userWantsControl) {
cb();
}
}
function leave (vnode, rm) {
var el = vnode.elm;
// call enter callback now
if (el._enterCb) {
el._enterCb.cancelled = true;
el._enterCb();
}
var data = resolveTransition(vnode.data.transition);
if (!data) {
return rm()
}
/* istanbul ignore if */
if (el._leaveCb || el.nodeType !== 1) {
return
}
var css = data.css;
var type = data.type;
var leaveClass = data.leaveClass;
var leaveToClass = data.leaveToClass;
var leaveActiveClass = data.leaveActiveClass;
var beforeLeave = data.beforeLeave;
var leave = data.leave;
var afterLeave = data.afterLeave;
var leaveCancelled = data.leaveCancelled;
var delayLeave = data.delayLeave;
var expectsCSS = css !== false && !isIE9;
var userWantsControl =
leave &&
// leave hook may be a bound method which exposes
// the length of original fn as _length
(leave._length || leave.length) > 1;
var cb = el._leaveCb = once(function () {
if (el.parentNode && el.parentNode._pending) {
el.parentNode._pending[vnode.key] = null;
}
if (expectsCSS) {
removeTransitionClass(el, leaveToClass);
removeTransitionClass(el, leaveActiveClass);
}
if (cb.cancelled) {
if (expectsCSS) {
removeTransitionClass(el, leaveClass);
}
leaveCancelled && leaveCancelled(el);
} else {
rm();
afterLeave && afterLeave(el);
}
el._leaveCb = null;
});
if (delayLeave) {
delayLeave(performLeave);
} else {
performLeave();
}
function performLeave () {
// the delayed leave may have already been cancelled
if (cb.cancelled) {
return
}
// record leaving element
if (!vnode.data.show) {
(el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] = vnode;
}
beforeLeave && beforeLeave(el);
if (expectsCSS) {
addTransitionClass(el, leaveClass);
addTransitionClass(el, leaveActiveClass);
nextFrame(function () {
addTransitionClass(el, leaveToClass);
removeTransitionClass(el, leaveClass);
if (!cb.cancelled && !userWantsControl) {
whenTransitionEnds(el, type, cb);
}
});
}
leave && leave(el, cb);
if (!expectsCSS && !userWantsControl) {
cb();
}
}
}
function resolveTransition (def$$1) {
if (!def$$1) {
return
}
/* istanbul ignore else */
if (typeof def$$1 === 'object') {
var res = {};
if (def$$1.css !== false) {
extend(res, autoCssTransition(def$$1.name || 'v'));
}
extend(res, def$$1);
return res
} else if (typeof def$$1 === 'string') {
return autoCssTransition(def$$1)
}
}
var autoCssTransition = cached(function (name) {
return {
enterClass: (name + "-enter"),
leaveClass: (name + "-leave"),
appearClass: (name + "-enter"),
enterToClass: (name + "-enter-to"),
leaveToClass: (name + "-leave-to"),
appearToClass: (name + "-enter-to"),
enterActiveClass: (name + "-enter-active"),
leaveActiveClass: (name + "-leave-active"),
appearActiveClass: (name + "-enter-active")
}
});
function once (fn) {
var called = false;
return function () {
if (!called) {
called = true;
fn();
}
}
}
function _enter (_, vnode) {
if (!vnode.data.show) {
enter(vnode);
}
}
var transition = inBrowser ? {
create: _enter,
activate: _enter,
remove: function remove (vnode, rm) {
/* istanbul ignore else */
if (!vnode.data.show) {
leave(vnode, rm);
} else {
rm();
}
}
} : {};
var platformModules = [
attrs,
klass,
events,
domProps,
style,
transition
];
/* */
// the directive module should be applied last, after all
// built-in modules have been applied.
var modules = platformModules.concat(baseModules);
var patch$1 = createPatchFunction({ nodeOps: nodeOps, modules: modules });
/**
* Not type checking this file because flow doesn't like attaching
* properties to Elements.
*/
var modelableTagRE = /^input|select|textarea|vue-component-[0-9]+(-[0-9a-zA-Z_-]*)?$/;
/* istanbul ignore if */
if (isIE9) {
// http://www.matts411.com/post/internet-explorer-9-oninput/
document.addEventListener('selectionchange', function () {
var el = document.activeElement;
if (el && el.vmodel) {
trigger(el, 'input');
}
});
}
var model = {
inserted: function inserted (el, binding, vnode) {
if (process.env.NODE_ENV !== 'production') {
if (!modelableTagRE.test(vnode.tag)) {
warn(
"v-model is not supported on element type: <" + (vnode.tag) + ">. " +
'If you are working with contenteditable, it\'s recommended to ' +
'wrap a library dedicated for that purpose inside a custom component.',
vnode.context
);
}
}
if (vnode.tag === 'select') {
var cb = function () {
setSelected(el, binding, vnode.context);
};
cb();
/* istanbul ignore if */
if (isIE || isEdge) {
setTimeout(cb, 0);
}
} else if (vnode.tag === 'textarea' || el.type === 'text') {
el._vModifiers = binding.modifiers;
if (!binding.modifiers.lazy) {
if (!isAndroid) {
el.addEventListener('compositionstart', onCompositionStart);
el.addEventListener('compositionend', onCompositionEnd);
}
/* istanbul ignore if */
if (isIE9) {
el.vmodel = true;
}
}
}
},
componentUpdated: function componentUpdated (el, binding, vnode) {
if (vnode.tag === 'select') {
setSelected(el, binding, vnode.context);
// in case the options rendered by v-for have changed,
// it's possible that the value is out-of-sync with the rendered options.
// detect such cases and filter out values that no longer has a matching
// option in the DOM.
var needReset = el.multiple
? binding.value.some(function (v) { return hasNoMatchingOption(v, el.options); })
: binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, el.options);
if (needReset) {
trigger(el, 'change');
}
}
}
};
function setSelected (el, binding, vm) {
var value = binding.value;
var isMultiple = el.multiple;
if (isMultiple && !Array.isArray(value)) {
process.env.NODE_ENV !== 'production' && warn(
"<select multiple v-model=\"" + (binding.expression) + "\"> " +
"expects an Array value for its binding, but got " + (Object.prototype.toString.call(value).slice(8, -1)),
vm
);
return
}
var selected, option;
for (var i = 0, l = el.options.length; i < l; i++) {
option = el.options[i];
if (isMultiple) {
selected = looseIndexOf(value, getValue(option)) > -1;
if (option.selected !== selected) {
option.selected = selected;
}
} else {
if (looseEqual(getValue(option), value)) {
if (el.selectedIndex !== i) {
el.selectedIndex = i;
}
return
}
}
}
if (!isMultiple) {
el.selectedIndex = -1;
}
}
function hasNoMatchingOption (value, options) {
for (var i = 0, l = options.length; i < l; i++) {
if (looseEqual(getValue(options[i]), value)) {
return false
}
}
return true
}
function getValue (option) {
return '_value' in option
? option._value
: option.value
}
function onCompositionStart (e) {
e.target.composing = true;
}
function onCompositionEnd (e) {
e.target.composing = false;
trigger(e.target, 'input');
}
function trigger (el, type) {
var e = document.createEvent('HTMLEvents');
e.initEvent(type, true, true);
el.dispatchEvent(e);
}
/* */
// recursively search for possible transition defined inside the component root
function locateNode (vnode) {
return vnode.child && (!vnode.data || !vnode.data.transition)
? locateNode(vnode.child._vnode)
: vnode
}
var show = {
bind: function bind (el, ref, vnode) {
var value = ref.value;
vnode = locateNode(vnode);
var transition = vnode.data && vnode.data.transition;
var originalDisplay = el.__vOriginalDisplay =
el.style.display === 'none' ? '' : el.style.display;
if (value && transition && !isIE9) {
vnode.data.show = true;
enter(vnode, function () {
el.style.display = originalDisplay;
});
} else {
el.style.display = value ? originalDisplay : 'none';
}
},
update: function update (el, ref, vnode) {
var value = ref.value;
var oldValue = ref.oldValue;
/* istanbul ignore if */
if (value === oldValue) { return }
vnode = locateNode(vnode);
var transition = vnode.data && vnode.data.transition;
if (transition && !isIE9) {
vnode.data.show = true;
if (value) {
enter(vnode, function () {
el.style.display = el.__vOriginalDisplay;
});
} else {
leave(vnode, function () {
el.style.display = 'none';
});
}
} else {
el.style.display = value ? el.__vOriginalDisplay : 'none';
}
},
unbind: function unbind (
el,
binding,
vnode,
oldVnode,
isDestroy
) {
if (!isDestroy) {
el.style.display = el.__vOriginalDisplay;
}
}
};
var platformDirectives = {
model: model,
show: show
};
/* */
// Provides transition support for a single element/component.
// supports transition mode (out-in / in-out)
var transitionProps = {
name: String,
appear: Boolean,
css: Boolean,
mode: String,
type: String,
enterClass: String,
leaveClass: String,
enterToClass: String,
leaveToClass: String,
enterActiveClass: String,
leaveActiveClass: String,
appearClass: String,
appearActiveClass: String,
appearToClass: String
};
// in case the child is also an abstract component, e.g. <keep-alive>
// we want to recursively retrieve the real component to be rendered
function getRealChild (vnode) {
var compOptions = vnode && vnode.componentOptions;
if (compOptions && compOptions.Ctor.options.abstract) {
return getRealChild(getFirstComponentChild(compOptions.children))
} else {
return vnode
}
}
function extractTransitionData (comp) {
var data = {};
var options = comp.$options;
// props
for (var key in options.propsData) {
data[key] = comp[key];
}
// events.
// extract listeners and pass them directly to the transition methods
var listeners = options._parentListeners;
for (var key$1 in listeners) {
data[camelize(key$1)] = listeners[key$1].fn;
}
return data
}
function placeholder (h, rawChild) {
return /\d-keep-alive$/.test(rawChild.tag)
? h('keep-alive')
: null
}
function hasParentTransition (vnode) {
while ((vnode = vnode.parent)) {
if (vnode.data.transition) {
return true
}
}
}
function isSameChild (child, oldChild) {
return oldChild.key === child.key && oldChild.tag === child.tag
}
var Transition = {
name: 'transition',
props: transitionProps,
abstract: true,
render: function render (h) {
var this$1 = this;
var children = this.$slots.default;
if (!children) {
return
}
// filter out text nodes (possible whitespaces)
children = children.filter(function (c) { return c.tag; });
/* istanbul ignore if */
if (!children.length) {
return
}
// warn multiple elements
if (process.env.NODE_ENV !== 'production' && children.length > 1) {
warn(
'<transition> can only be used on a single element. Use ' +
'<transition-group> for lists.',
this.$parent
);
}
var mode = this.mode;
// warn invalid mode
if (process.env.NODE_ENV !== 'production' &&
mode && mode !== 'in-out' && mode !== 'out-in') {
warn(
'invalid <transition> mode: ' + mode,
this.$parent
);
}
var rawChild = children[0];
// if this is a component root node and the component's
// parent container node also has transition, skip.
if (hasParentTransition(this.$vnode)) {
return rawChild
}
// apply transition data to child
// use getRealChild() to ignore abstract components e.g. keep-alive
var child = getRealChild(rawChild);
/* istanbul ignore if */
if (!child) {
return rawChild
}
if (this._leaving) {
return placeholder(h, rawChild)
}
var key = child.key = child.key == null || child.isStatic
? ("__v" + (child.tag + this._uid) + "__")
: child.key;
var data = (child.data || (child.data = {})).transition = extractTransitionData(this);
var oldRawChild = this._vnode;
var oldChild = getRealChild(oldRawChild);
// mark v-show
// so that the transition module can hand over the control to the directive
if (child.data.directives && child.data.directives.some(function (d) { return d.name === 'show'; })) {
child.data.show = true;
}
if (oldChild && oldChild.data && !isSameChild(child, oldChild)) {
// replace old child transition data with fresh one
// important for dynamic transitions!
var oldData = oldChild && (oldChild.data.transition = extend({}, data));
// handle transition mode
if (mode === 'out-in') {
// return placeholder node and queue update when leave finishes
this._leaving = true;
mergeVNodeHook(oldData, 'afterLeave', function () {
this$1._leaving = false;
this$1.$forceUpdate();
}, key);
return placeholder(h, rawChild)
} else if (mode === 'in-out') {
var delayedLeave;
var performLeave = function () { delayedLeave(); };
mergeVNodeHook(data, 'afterEnter', performLeave, key);
mergeVNodeHook(data, 'enterCancelled', performLeave, key);
mergeVNodeHook(oldData, 'delayLeave', function (leave) {
delayedLeave = leave;
}, key);
}
}
return rawChild
}
};
/* */
// Provides transition support for list items.
// supports move transitions using the FLIP technique.
// Because the vdom's children update algorithm is "unstable" - i.e.
// it doesn't guarantee the relative positioning of removed elements,
// we force transition-group to update its children into two passes:
// in the first pass, we remove all nodes that need to be removed,
// triggering their leaving transition; in the second pass, we insert/move
// into the final disired state. This way in the second pass removed
// nodes will remain where they should be.
var props = extend({
tag: String,
moveClass: String
}, transitionProps);
delete props.mode;
var TransitionGroup = {
props: props,
render: function render (h) {
var tag = this.tag || this.$vnode.data.tag || 'span';
var map = Object.create(null);
var prevChildren = this.prevChildren = this.children;
var rawChildren = this.$slots.default || [];
var children = this.children = [];
var transitionData = extractTransitionData(this);
for (var i = 0; i < rawChildren.length; i++) {
var c = rawChildren[i];
if (c.tag) {
if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
children.push(c);
map[c.key] = c
;(c.data || (c.data = {})).transition = transitionData;
} else if (process.env.NODE_ENV !== 'production') {
var opts = c.componentOptions;
var name = opts
? (opts.Ctor.options.name || opts.tag)
: c.tag;
warn(("<transition-group> children must be keyed: <" + name + ">"));
}
}
}
if (prevChildren) {
var kept = [];
var removed = [];
for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {
var c$1 = prevChildren[i$1];
c$1.data.transition = transitionData;
c$1.data.pos = c$1.elm.getBoundingClientRect();
if (map[c$1.key]) {
kept.push(c$1);
} else {
removed.push(c$1);
}
}
this.kept = h(tag, null, kept);
this.removed = removed;
}
return h(tag, null, children)
},
beforeUpdate: function beforeUpdate () {
// force removing pass
this.__patch__(
this._vnode,
this.kept,
false, // hydrating
true // removeOnly (!important, avoids unnecessary moves)
);
this._vnode = this.kept;
},
updated: function updated () {
var children = this.prevChildren;
var moveClass = this.moveClass || ((this.name || 'v') + '-move');
if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
return
}
// we divide the work into three loops to avoid mixing DOM reads and writes
// in each iteration - which helps prevent layout thrashing.
children.forEach(callPendingCbs);
children.forEach(recordPosition);
children.forEach(applyTranslation);
// force reflow to put everything in position
var f = document.body.offsetHeight; // eslint-disable-line
children.forEach(function (c) {
if (c.data.moved) {
var el = c.elm;
var s = el.style;
addTransitionClass(el, moveClass);
s.transform = s.WebkitTransform = s.transitionDuration = '';
el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {
if (!e || /transform$/.test(e.propertyName)) {
el.removeEventListener(transitionEndEvent, cb);
el._moveCb = null;
removeTransitionClass(el, moveClass);
}
});
}
});
},
methods: {
hasMove: function hasMove (el, moveClass) {
/* istanbul ignore if */
if (!hasTransition) {
return false
}
if (this._hasMove != null) {
return this._hasMove
}
addTransitionClass(el, moveClass);
var info = getTransitionInfo(el);
removeTransitionClass(el, moveClass);
return (this._hasMove = info.hasTransform)
}
}
};
function callPendingCbs (c) {
/* istanbul ignore if */
if (c.elm._moveCb) {
c.elm._moveCb();
}
/* istanbul ignore if */
if (c.elm._enterCb) {
c.elm._enterCb();
}
}
function recordPosition (c) {
c.data.newPos = c.elm.getBoundingClientRect();
}
function applyTranslation (c) {
var oldPos = c.data.pos;
var newPos = c.data.newPos;
var dx = oldPos.left - newPos.left;
var dy = oldPos.top - newPos.top;
if (dx || dy) {
c.data.moved = true;
var s = c.elm.style;
s.transform = s.WebkitTransform = "translate(" + dx + "px," + dy + "px)";
s.transitionDuration = '0s';
}
}
var platformComponents = {
Transition: Transition,
TransitionGroup: TransitionGroup
};
/* */
// install platform specific utils
Vue$2.config.isUnknownElement = isUnknownElement;
Vue$2.config.isReservedTag = isReservedTag;
Vue$2.config.getTagNamespace = getTagNamespace;
Vue$2.config.mustUseProp = mustUseProp;
// install platform runtime directives & components
extend(Vue$2.options.directives, platformDirectives);
extend(Vue$2.options.components, platformComponents);
// install platform patch function
Vue$2.prototype.__patch__ = inBrowser ? patch$1 : noop;
// wrap mount
Vue$2.prototype.$mount = function (
el,
hydrating
) {
el = el && inBrowser ? query(el) : undefined;
return this._mount(el, hydrating)
};
if (process.env.NODE_ENV !== 'production' &&
inBrowser && typeof console !== 'undefined') {
console[console.info ? 'info' : 'log'](
"You are running Vue in development mode.\n" +
"Make sure to turn on production mode when deploying for production.\n" +
"See more tips at https://vuejs.org/guide/deployment.html"
);
}
// devtools global hook
/* istanbul ignore next */
setTimeout(function () {
if (config.devtools) {
if (devtools) {
devtools.emit('init', Vue$2);
} else if (
process.env.NODE_ENV !== 'production' &&
inBrowser && !isEdge && /Chrome\/\d+/.test(window.navigator.userAgent)
) {
console[console.info ? 'info' : 'log'](
'Download the Vue Devtools extension for a better development experience:\n' +
'https://github.com/vuejs/vue-devtools'
);
}
}
}, 0);
module.exports = Vue$2;
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(8), __webpack_require__(28)))
/***/ }),
/* 63 */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(64);
/***/ }),
/* 64 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var utils = __webpack_require__(0);
var bind = __webpack_require__(34);
var Axios = __webpack_require__(66);
var defaults = __webpack_require__(21);
/**
* Create an instance of Axios
*
* @param {Object} defaultConfig The default config for the instance
* @return {Axios} A new instance of Axios
*/
function createInstance(defaultConfig) {
var context = new Axios(defaultConfig);
var instance = bind(Axios.prototype.request, context);
// Copy axios.prototype to instance
utils.extend(instance, Axios.prototype, context);
// Copy context to instance
utils.extend(instance, context);
return instance;
}
// Create the default instance to be exported
var axios = createInstance(defaults);
// Expose Axios class to allow class inheritance
axios.Axios = Axios;
// Factory for creating new instances
axios.create = function create(instanceConfig) {
return createInstance(utils.merge(defaults, instanceConfig));
};
// Expose Cancel & CancelToken
axios.Cancel = __webpack_require__(31);
axios.CancelToken = __webpack_require__(65);
axios.isCancel = __webpack_require__(32);
// Expose all/spread
axios.all = function all(promises) {
return Promise.all(promises);
};
axios.spread = __webpack_require__(80);
module.exports = axios;
// Allow use of default import syntax in TypeScript
module.exports.default = axios;
/***/ }),
/* 65 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var Cancel = __webpack_require__(31);
/**
* A `CancelToken` is an object that can be used to request cancellation of an operation.
*
* @class
* @param {Function} executor The executor function.
*/
function CancelToken(executor) {
if (typeof executor !== 'function') {
throw new TypeError('executor must be a function.');
}
var resolvePromise;
this.promise = new Promise(function promiseExecutor(resolve) {
resolvePromise = resolve;
});
var token = this;
executor(function cancel(message) {
if (token.reason) {
// Cancellation has already been requested
return;
}
token.reason = new Cancel(message);
resolvePromise(token.reason);
});
}
/**
* Throws a `Cancel` if cancellation has been requested.
*/
CancelToken.prototype.throwIfRequested = function throwIfRequested() {
if (this.reason) {
throw this.reason;
}
};
/**
* Returns an object that contains a new `CancelToken` and a function that, when called,
* cancels the `CancelToken`.
*/
CancelToken.source = function source() {
var cancel;
var token = new CancelToken(function executor(c) {
cancel = c;
});
return {
token: token,
cancel: cancel
};
};
module.exports = CancelToken;
/***/ }),
/* 66 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var defaults = __webpack_require__(21);
var utils = __webpack_require__(0);
var InterceptorManager = __webpack_require__(67);
var dispatchRequest = __webpack_require__(68);
var isAbsoluteURL = __webpack_require__(76);
var combineURLs = __webpack_require__(74);
/**
* Create a new instance of Axios
*
* @param {Object} instanceConfig The default config for the instance
*/
function Axios(instanceConfig) {
this.defaults = instanceConfig;
this.interceptors = {
request: new InterceptorManager(),
response: new InterceptorManager()
};
}
/**
* Dispatch a request
*
* @param {Object} config The config specific for this request (merged with this.defaults)
*/
Axios.prototype.request = function request(config) {
/*eslint no-param-reassign:0*/
// Allow for axios('example/url'[, config]) a la fetch API
if (typeof config === 'string') {
config = utils.merge({
url: arguments[0]
}, arguments[1]);
}
config = utils.merge(defaults, this.defaults, { method: 'get' }, config);
// Support baseURL config
if (config.baseURL && !isAbsoluteURL(config.url)) {
config.url = combineURLs(config.baseURL, config.url);
}
// Hook up interceptors middleware
var chain = [dispatchRequest, undefined];
var promise = Promise.resolve(config);
this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
chain.unshift(interceptor.fulfilled, interceptor.rejected);
});
this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
chain.push(interceptor.fulfilled, interceptor.rejected);
});
while (chain.length) {
promise = promise.then(chain.shift(), chain.shift());
}
return promise;
};
// Provide aliases for supported request methods
utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
/*eslint func-names:0*/
Axios.prototype[method] = function(url, config) {
return this.request(utils.merge(config || {}, {
method: method,
url: url
}));
};
});
utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
/*eslint func-names:0*/
Axios.prototype[method] = function(url, data, config) {
return this.request(utils.merge(config || {}, {
method: method,
url: url,
data: data
}));
};
});
module.exports = Axios;
/***/ }),
/* 67 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var utils = __webpack_require__(0);
function InterceptorManager() {
this.handlers = [];
}
/**
* Add a new interceptor to the stack
*
* @param {Function} fulfilled The function to handle `then` for a `Promise`
* @param {Function} rejected The function to handle `reject` for a `Promise`
*
* @return {Number} An ID used to remove interceptor later
*/
InterceptorManager.prototype.use = function use(fulfilled, rejected) {
this.handlers.push({
fulfilled: fulfilled,
rejected: rejected
});
return this.handlers.length - 1;
};
/**
* Remove an interceptor from the stack
*
* @param {Number} id The ID that was returned by `use`
*/
InterceptorManager.prototype.eject = function eject(id) {
if (this.handlers[id]) {
this.handlers[id] = null;
}
};
/**
* Iterate over all the registered interceptors
*
* This method is particularly useful for skipping over any
* interceptors that may have become `null` calling `eject`.
*
* @param {Function} fn The function to call for each interceptor
*/
InterceptorManager.prototype.forEach = function forEach(fn) {
utils.forEach(this.handlers, function forEachHandler(h) {
if (h !== null) {
fn(h);
}
});
};
module.exports = InterceptorManager;
/***/ }),
/* 68 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var utils = __webpack_require__(0);
var transformData = __webpack_require__(71);
var isCancel = __webpack_require__(32);
var defaults = __webpack_require__(21);
/**
* Throws a `Cancel` if cancellation has been requested.
*/
function throwIfCancellationRequested(config) {
if (config.cancelToken) {
config.cancelToken.throwIfRequested();
}
}
/**
* Dispatch a request to the server using the configured adapter.
*
* @param {object} config The config that is to be used for the request
* @returns {Promise} The Promise to be fulfilled
*/
module.exports = function dispatchRequest(config) {
throwIfCancellationRequested(config);
// Ensure headers exist
config.headers = config.headers || {};
// Transform request data
config.data = transformData(
config.data,
config.headers,
config.transformRequest
);
// Flatten headers
config.headers = utils.merge(
config.headers.common || {},
config.headers[config.method] || {},
config.headers || {}
);
utils.forEach(
['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
function cleanHeaderConfig(method) {
delete config.headers[method];
}
);
var adapter = config.adapter || defaults.adapter;
return adapter(config).then(function onAdapterResolution(response) {
throwIfCancellationRequested(config);
// Transform response data
response.data = transformData(
response.data,
response.headers,
config.transformResponse
);
return response;
}, function onAdapterRejection(reason) {
if (!isCancel(reason)) {
throwIfCancellationRequested(config);
// Transform response data
if (reason && reason.response) {
reason.response.data = transformData(
reason.response.data,
reason.response.headers,
config.transformResponse
);
}
}
return Promise.reject(reason);
});
};
/***/ }),
/* 69 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/**
* Update an Error with the specified config, error code, and response.
*
* @param {Error} error The error to update.
* @param {Object} config The config.
* @param {string} [code] The error code (for example, 'ECONNABORTED').
@ @param {Object} [response] The response.
* @returns {Error} The error.
*/
module.exports = function enhanceError(error, config, code, response) {
error.config = config;
if (code) {
error.code = code;
}
error.response = response;
return error;
};
/***/ }),
/* 70 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var createError = __webpack_require__(33);
/**
* Resolve or reject a Promise based on response status.
*
* @param {Function} resolve A function that resolves the promise.
* @param {Function} reject A function that rejects the promise.
* @param {object} response The response.
*/
module.exports = function settle(resolve, reject, response) {
var validateStatus = response.config.validateStatus;
// Note: status is not exposed by XDomainRequest
if (!response.status || !validateStatus || validateStatus(response.status)) {
resolve(response);
} else {
reject(createError(
'Request failed with status code ' + response.status,
response.config,
null,
response
));
}
};
/***/ }),
/* 71 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var utils = __webpack_require__(0);
/**
* Transform the data for a request or a response
*
* @param {Object|String} data The data to be transformed
* @param {Array} headers The headers for the request or response
* @param {Array|Function} fns A single function or Array of functions
* @returns {*} The resulting transformed data
*/
module.exports = function transformData(data, headers, fns) {
/*eslint no-param-reassign:0*/
utils.forEach(fns, function transform(fn) {
data = fn(data, headers);
});
return data;
};
/***/ }),
/* 72 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
function E() {
this.message = 'String contains an invalid character';
}
E.prototype = new Error;
E.prototype.code = 5;
E.prototype.name = 'InvalidCharacterError';
function btoa(input) {
var str = String(input);
var output = '';
for (
// initialize result and counter
var block, charCode, idx = 0, map = chars;
// if the next str index does not exist:
// change the mapping table to "="
// check if d has no fractional digits
str.charAt(idx | 0) || (map = '=', idx % 1);
// "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8
output += map.charAt(63 & block >> 8 - idx % 1 * 8)
) {
charCode = str.charCodeAt(idx += 3 / 4);
if (charCode > 0xFF) {
throw new E();
}
block = block << 8 | charCode;
}
return output;
}
module.exports = btoa;
/***/ }),
/* 73 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var utils = __webpack_require__(0);
function encode(val) {
return encodeURIComponent(val).
replace(/%40/gi, '@').
replace(/%3A/gi, ':').
replace(/%24/g, '$').
replace(/%2C/gi, ',').
replace(/%20/g, '+').
replace(/%5B/gi, '[').
replace(/%5D/gi, ']');
}
/**
* Build a URL by appending params to the end
*
* @param {string} url The base of the url (e.g., http://www.google.com)
* @param {object} [params] The params to be appended
* @returns {string} The formatted url
*/
module.exports = function buildURL(url, params, paramsSerializer) {
/*eslint no-param-reassign:0*/
if (!params) {
return url;
}
var serializedParams;
if (paramsSerializer) {
serializedParams = paramsSerializer(params);
} else if (utils.isURLSearchParams(params)) {
serializedParams = params.toString();
} else {
var parts = [];
utils.forEach(params, function serialize(val, key) {
if (val === null || typeof val === 'undefined') {
return;
}
if (utils.isArray(val)) {
key = key + '[]';
}
if (!utils.isArray(val)) {
val = [val];
}
utils.forEach(val, function parseValue(v) {
if (utils.isDate(v)) {
v = v.toISOString();
} else if (utils.isObject(v)) {
v = JSON.stringify(v);
}
parts.push(encode(key) + '=' + encode(v));
});
});
serializedParams = parts.join('&');
}
if (serializedParams) {
url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
}
return url;
};
/***/ }),
/* 74 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/**
* Creates a new URL by combining the specified URLs
*
* @param {string} baseURL The base URL
* @param {string} relativeURL The relative URL
* @returns {string} The combined URL
*/
module.exports = function combineURLs(baseURL, relativeURL) {
return baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '');
};
/***/ }),
/* 75 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var utils = __webpack_require__(0);
module.exports = (
utils.isStandardBrowserEnv() ?
// Standard browser envs support document.cookie
(function standardBrowserEnv() {
return {
write: function write(name, value, expires, path, domain, secure) {
var cookie = [];
cookie.push(name + '=' + encodeURIComponent(value));
if (utils.isNumber(expires)) {
cookie.push('expires=' + new Date(expires).toGMTString());
}
if (utils.isString(path)) {
cookie.push('path=' + path);
}
if (utils.isString(domain)) {
cookie.push('domain=' + domain);
}
if (secure === true) {
cookie.push('secure');
}
document.cookie = cookie.join('; ');
},
read: function read(name) {
var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
return (match ? decodeURIComponent(match[3]) : null);
},
remove: function remove(name) {
this.write(name, '', Date.now() - 86400000);
}
};
})() :
// Non standard browser env (web workers, react-native) lack needed support.
(function nonStandardBrowserEnv() {
return {
write: function write() {},
read: function read() { return null; },
remove: function remove() {}
};
})()
);
/***/ }),
/* 76 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/**
* Determines whether the specified URL is absolute
*
* @param {string} url The URL to test
* @returns {boolean} True if the specified URL is absolute, otherwise false
*/
module.exports = function isAbsoluteURL(url) {
// A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
// RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
// by any combination of letters, digits, plus, period, or hyphen.
return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
};
/***/ }),
/* 77 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var utils = __webpack_require__(0);
module.exports = (
utils.isStandardBrowserEnv() ?
// Standard browser envs have full support of the APIs needed to test
// whether the request URL is of the same origin as current location.
(function standardBrowserEnv() {
var msie = /(msie|trident)/i.test(navigator.userAgent);
var urlParsingNode = document.createElement('a');
var originURL;
/**
* Parse a URL to discover it's components
*
* @param {String} url The URL to be parsed
* @returns {Object}
*/
function resolveURL(url) {
var href = url;
if (msie) {
// IE needs attribute set twice to normalize properties
urlParsingNode.setAttribute('href', href);
href = urlParsingNode.href;
}
urlParsingNode.setAttribute('href', href);
// urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
return {
href: urlParsingNode.href,
protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
host: urlParsingNode.host,
search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
hostname: urlParsingNode.hostname,
port: urlParsingNode.port,
pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
urlParsingNode.pathname :
'/' + urlParsingNode.pathname
};
}
originURL = resolveURL(window.location.href);
/**
* Determine if a URL shares the same origin as the current location
*
* @param {String} requestURL The URL to test
* @returns {boolean} True if URL shares the same origin, otherwise false
*/
return function isURLSameOrigin(requestURL) {
var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
return (parsed.protocol === originURL.protocol &&
parsed.host === originURL.host);
};
})() :
// Non standard browser envs (web workers, react-native) lack needed support.
(function nonStandardBrowserEnv() {
return function isURLSameOrigin() {
return true;
};
})()
);
/***/ }),
/* 78 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var utils = __webpack_require__(0);
module.exports = function normalizeHeaderName(headers, normalizedName) {
utils.forEach(headers, function processHeader(value, name) {
if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
headers[normalizedName] = value;
delete headers[name];
}
});
};
/***/ }),
/* 79 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var utils = __webpack_require__(0);
/**
* Parse headers into an object
*
* ```
* Date: Wed, 27 Aug 2014 08:58:49 GMT
* Content-Type: application/json
* Connection: keep-alive
* Transfer-Encoding: chunked
* ```
*
* @param {String} headers Headers needing to be parsed
* @returns {Object} Headers parsed into an object
*/
module.exports = function parseHeaders(headers) {
var parsed = {};
var key;
var val;
var i;
if (!headers) { return parsed; }
utils.forEach(headers.split('\n'), function parser(line) {
i = line.indexOf(':');
key = utils.trim(line.substr(0, i)).toLowerCase();
val = utils.trim(line.substr(i + 1));
if (key) {
parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
}
});
return parsed;
};
/***/ }),
/* 80 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/**
* Syntactic sugar for invoking a function and expanding an array for arguments.
*
* Common use case would be to use `Function.prototype.apply`.
*
* ```js
* function f(x, y, z) {}
* var args = [1, 2, 3];
* f.apply(null, args);
* ```
*
* With `spread` this example can be re-written.
*
* ```js
* spread(function(x, y, z) {})([1, 2, 3]);
* ```
*
* @param {Function} callback
* @returns {Function}
*/
module.exports = function spread(callback) {
return function wrap(arr) {
return callback.apply(null, arr);
};
};
/***/ }),
/* 81 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
__webpack_require__(193);
var _navConfig = __webpack_require__(29);
var _navConfig2 = _interopRequireDefault(_navConfig);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//
//
//
//
//
//
//
//
//
exports.default = {
data: function data() {
return {
navConfig: _navConfig2.default
};
}
};
/***/ }),
/* 82 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
exports.default = {
data: function data() {
return {
hovering: false,
isExpanded: false
};
},
computed: {
blockClass: function blockClass() {
return 'demo-' + this.$route.path.split('/').pop();
},
controlText: function controlText() {
return this.isExpanded ? '隐藏代码' : '显示代码';
},
codeArea: function codeArea() {
return this.$el.getElementsByClassName('meta')[0];
},
codeAreaHeight: function codeAreaHeight() {
if (this.$el.getElementsByClassName('description').length > 0) {
return Math.max(this.$el.getElementsByClassName('description')[0].clientHeight, this.$el.getElementsByClassName('highlight')[0].clientHeight);
}
return this.$el.getElementsByClassName('highlight')[0].clientHeight;
}
},
watch: {
isExpanded: function isExpanded(val) {
this.codeArea.style.height = val ? this.codeAreaHeight + 1 + 'px' : '0';
}
},
mounted: function mounted() {
var _this = this;
this.$nextTick(function () {
var highlight = _this.$el.getElementsByClassName('highlight')[0];
if (_this.$el.getElementsByClassName('description').length === 0) {
highlight.style.width = '100%';
highlight.borderRight = 'none';
}
});
}
};
/***/ }),
/* 83 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
exports.default = {
props: {
data: Array,
base: {
type: String,
default: ''
}
},
data: function data() {
return {
highlights: [],
navState: []
};
}
};
/***/ }),
/* 84 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
/**
* o2-header
* @module components/button
* @desc 按钮
* @param {string} [type=default] - 显示类型,接受 default, primary, danger
* @param {boolean} [disabled=false] - 禁用
* @param {string} [size=normal] - 尺寸,接受 normal, mini, small, large
* @param {string} [native-type] - 原生 type 属性
* @param {slot} - 显示文本
*
* @example
* <o2-button size="large" type="primary">按钮</o2-button>
*/
exports.default = {
name: 'o2-button',
methods: {
handleClick: function handleClick(e) {
this.$emit('click', e);
}
},
props: {
disabled: Boolean,
loading: Boolean,
nativeType: String,
type: {
type: String,
default: 'default',
validator: function validator(value) {
return ['default', 'danger', 'primary'].indexOf(value) > -1;
}
},
size: {
type: String,
default: 'normal',
validator: function validator(value) {
return ['mini', 'small', 'normal', 'large'].indexOf(value) > -1;
}
}
}
};
/***/ }),
/* 85 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
//
//
//
//
//
//
//
exports.default = {
name: 'Sample',
props: ['author'],
data: function data() {
return {
name: 'World'
};
}
};
/***/ }),
/* 86 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
//
//
//
//
//
//
/**
* o2-switch
* @module components/switch
* @desc 开关
* @param {boolean} [checked=false] - 开关状态
* @param {boolean} [disabled=false] - 禁用
* @param {boolean} [loading=false] - loading状态
* @param {callback} [onChange] - 开关状态改变回调函数。
*
* @example
* <o2-switch checked="true" disabled="false"></o2-switch>
*/
exports.default = {
name: 'o2-switch',
props: {
checked: {
type: Boolean,
default: false
},
disabled: {
type: Boolean,
default: false
},
loading: {
type: Boolean,
default: false
},
onChange: {
type: Function,
default: function _default() {}
}
},
computed: {
switchState: function switchState() {
if (this.disabled) {
return 'disabled';
} else if (this.loading) {
return 'loading';
} else if (this.checked) {
return 'on';
} else {
return 'off';
}
}
},
methods: {
/*
* 开关状态交互。
*/
toggleState: function toggleState() {
if (this.disabled || this.loading) return;
this.onChange(!this.checked);
},
/*
*
*/
getState: function getState() {
return this.checked;
}
}
};
/***/ }),
/* 87 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _button = __webpack_require__(197);
var _button2 = _interopRequireDefault(_button);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = _button2.default;
/***/ }),
/* 88 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _main = __webpack_require__(198);
var _main2 = _interopRequireDefault(_main);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = _main2.default;
/***/ }),
/* 89 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _switch = __webpack_require__(199);
var _switch2 = _interopRequireDefault(_switch);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = _switch2.default;
/***/ }),
/* 90 */
/***/ (function(module, exports, __webpack_require__) {
exports = module.exports = __webpack_require__(4)();
// imports
// module
exports.push([module.i, "a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline}body{font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,SimSun,sans-serif;overflow:auto;font-weight:400;-webkit-font-smoothing:antialiased}a{color:#4078c0;text-decoration:none}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;color:inherit}ul{list-style:none}.hljs{line-height:1.8;font-family:Menlo,Monaco,Consolas,Courier,monospace;font-size:12px;padding:18px 24px;background-color:#f9fafc;border:1px solid #eaeefb;margin-bottom:25px;border-radius:4px;-webkit-font-smoothing:auto}@font-face{font-family:handle;src:url(" + __webpack_require__(53) + ");src:url(" + __webpack_require__(53) + "?#iefix) format(\"embedded-opentype\"),url(" + __webpack_require__(196) + ") format(\"woff\"),url(" + __webpack_require__(195) + ") format(\"truetype\"),url(" + __webpack_require__(194) + "#iconfont) format(\"svg\")}.iconhandle{font-family:handle;font-size:16px;font-style:normal}", ""]);
// exports
/***/ }),
/* 91 */
/***/ (function(module, exports, __webpack_require__) {
exports = module.exports = __webpack_require__(4)();
// imports
// module
exports.push([module.i, ".o2-button{position:relative;display:block;height:45px;border-radius:4px;border:0;box-sizing:border-box;font-size:16px;text-align:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:0;overflow:hidden}.o2-button:after{content:\" \";top:0;right:0;bottom:0;left:0;position:absolute;background-color:#000;opacity:0}.o2-button:not(.is-disabled):active:after{opacity:.3}.o2-button.is-disabled{opacity:.6}.o2-button--default{color:#fff;background-color:#4b0}.o2-button--primary{color:#333;background-color:#fff}.o2-button--danger{color:#fff;background-color:#f44}.o2-button--large{display:block;width:100%}.o2-button--normal,.o2-button--small{display:inline-block;padding:0 12px}.o2-button--small{font-size:14px;height:33px}.o2-switch{height:29px;width:49px;display:inline-block;border-radius:16px;position:relative;border:1px solid}.o2-switch.is-disabled{background-color:#f2f2f2;border-color:rgba(0,0,0,.1)}.o2-switch.is-off{background-color:#fff;border-color:rgba(0,0,0,.1)}.o2-switch.is-on{background-color:#44db5e;border-color:#44db5e}.o2-switch-node{width:27px;height:27px;border-radius:100%;background-color:#fff;border:.5px solid rgba(0,0,0,.1);position:absolute;box-shadow:0 3px 1px 0 rgba(0,0,0,.05),0 2px 2px 0 rgba(0,0,0,.1),0 3px 3px 0 rgba(0,0,0,.05)}.o2-switch-node.is-off{right:0}.o2-switch-node.is-on{left:0}", ""]);
// exports
/***/ }),
/* 92 */
/***/ (function(module, exports, __webpack_require__) {
exports = module.exports = __webpack_require__(4)();
// imports
// module
exports.push([module.i, ".side-nav{width:25%;box-sizing:border-box;padding-right:30px;float:left}.side-nav li{list-style:none}.side-nav ul{padding:0;margin:0;overflow:hidden}.side-nav .nav-item a{font-size:16px;color:#5e6d82;line-height:40px;height:40px;margin:0;padding:0;text-decoration:none;display:block;position:relative;-webkit-transition:all .3s;transition:all .3s}.side-nav .nav-item a.active{color:#20a0ff}.side-nav .nav-item .nav-item a{display:block;height:40px;line-height:40px;font-size:13px;padding-left:24px}.side-nav .nav-item .nav-item a:hover{color:#20a0ff}.side-nav .nav-group__title{font-size:12px;color:#99a9bf;padding-left:8px;line-height:26px;margin-top:10px}", ""]);
// exports
/***/ }),
/* 93 */
/***/ (function(module, exports, __webpack_require__) {
exports = module.exports = __webpack_require__(4)();
// imports
// module
exports.push([module.i, ".page-container{width:1140px;padding:0 30px;margin:0 auto}.page-container h2{font-size:28px;color:#1f2d3d;margin:20px 0;line-height:40px}.page-container h3{font-size:22px;margin:23px 0}.page-container h2,.page-container h3,.page-container h4,.page-container h5{font-weight:400;color:#1f2f3d}.page-container h2:hover a,.page-container h3:hover a,.page-container h4:hover a,.page-container h5:hover a{opacity:.4}.page-container h2 a,.page-container h3 a,.page-container h4 a,.page-container h5 a{float:left;margin-left:-20px;opacity:0;cursor:pointer}.page-container h2 a:hover,.page-container h3 a:hover,.page-container h4 a:hover,.page-container h5 a:hover{opacity:.4}.page-container p{font-size:14px;color:#5e6d82;margin:14px 0}.page-content{width:75%;float:left}.table{border-collapse:collapse;width:100%;background-color:#fff;color:#5e6d82;font-size:14px;margin-bottom:45px}.table th:first-child{padding-left:10px}.table th{text-align:left;border-top:1px solid #eaeefb;background-color:#eff2f7}.table td,.table th{border-bottom:1px solid #eaeefb;padding:10px}", ""]);
// exports
/***/ }),
/* 94 */
/***/ (function(module, exports, __webpack_require__) {
exports = module.exports = __webpack_require__(4)();
// imports
// module
exports.push([module.i, ".demo-block{border:1px solid #eaeefb;border-radius:4px;-webkit-transition:.2s;transition:.2s}.demo-block.hover{box-shadow:0 0 8px 0 rgba(232,237,250,.6),0 2px 4px 0 rgba(232,237,250,.5)}.demo-block code{font-family:Menlo,Monaco,Consolas,Courier,monospace}.demo-block p{margin:0}.demo-block .demo-button{float:right}.demo-block .source{padding:24px}.demo-block .meta{background-color:#f9fafc;border-top:1px solid #eaeefb;clear:both;overflow:hidden;height:0;-webkit-transition:height .2s;transition:height .2s}.demo-block .description{padding:18px 24px;width:40%;box-sizing:border-box;border-left:1px solid #eaeefb;float:right;font-size:14px;line-height:1.8;color:#5e6d82;word-break:break-word}.demo-block .description p{margin:0 0 12px}.demo-block .description code{color:#5e6d82;background-color:#e6effb;margin:0 4px;-webkit-transform:translateY(-2px);transform:translateY(-2px);display:inline-block;padding:1px 5px;font-size:12px;border-radius:3px}.demo-block .highlight{width:60%;border-right:1px solid #eaeefb}.demo-block .highlight pre{margin:0}.demo-block .highlight code.hljs{margin:0;border:none;max-height:none;border-radius:0}.demo-block .highlight code.hljs:before{content:none}.demo-block .demo-block-control{border-top:1px solid #eaeefb;height:36px;box-sizing:border-box;background-color:#fff;border-bottom-left-radius:4px;border-bottom-right-radius:4px;text-align:center;margin-top:-1px;color:#d3dce6;cursor:pointer;-webkit-transition:.2s;transition:.2s;position:relative}.demo-block .demo-block-control i{font-size:12px;line-height:36px;-webkit-transition:.3s;transition:.3s}.demo-block .demo-block-control i.hovering{-webkit-transform:translateX(-40px);transform:translateX(-40px)}.demo-block .demo-block-control span{position:absolute;-webkit-transform:translateX(-30px);transform:translateX(-30px);font-size:14px;line-height:36px;-webkit-transition:.3s;transition:.3s;display:inline-block}.demo-block .demo-block-control:hover{color:#20a0ff;background-color:#f9fafc}.demo-block .demo-block-control .text-slide-enter,.demo-block .demo-block-control .text-slide-leave-active{opacity:0;-webkit-transform:translateX(10px);transform:translateX(10px)}", ""]);
// exports
/***/ }),
/* 95 */
/***/ (function(module, exports, __webpack_require__) {
exports = module.exports = __webpack_require__(4)();
// imports
// module
exports.push([module.i, ".hljs{display:block;overflow-x:auto;padding:.5em;background:#fff}.hljs,.hljs-subst{color:#000}.hljs-addition,.hljs-meta,.hljs-string,.hljs-symbol,.hljs-template-tag,.hljs-template-variable{color:#756bb1}.hljs-comment,.hljs-quote{color:#636363}.hljs-bullet,.hljs-link,.hljs-literal,.hljs-number,.hljs-regexp{color:#31a354}.hljs-deletion,.hljs-variable{color:#88f}.hljs-built_in,.hljs-doctag,.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-selector-tag,.hljs-strong,.hljs-tag,.hljs-title,.hljs-type{color:#3182bd}.hljs-emphasis{font-style:italic}.hljs-attribute{color:#e6550d}", ""]);
// exports
/***/ }),
/* 96 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
// This file can be required in Browserify and Node.js for automatic polyfill
// To use it: require('es6-promise/auto');
module.exports = __webpack_require__(97).polyfill();
/***/ }),
/* 97 */
/***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(process, global) {var require;/*!
* @overview es6-promise - a tiny implementation of Promises/A+.
* @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
* @license Licensed under MIT license
* See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
* @version 4.0.5
*/
(function (global, factory) {
true ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global.ES6Promise = factory());
}(this, (function () { 'use strict';
function objectOrFunction(x) {
return typeof x === 'function' || typeof x === 'object' && x !== null;
}
function isFunction(x) {
return typeof x === 'function';
}
var _isArray = undefined;
if (!Array.isArray) {
_isArray = function (x) {
return Object.prototype.toString.call(x) === '[object Array]';
};
} else {
_isArray = Array.isArray;
}
var isArray = _isArray;
var len = 0;
var vertxNext = undefined;
var customSchedulerFn = undefined;
var asap = function asap(callback, arg) {
queue[len] = callback;
queue[len + 1] = arg;
len += 2;
if (len === 2) {
// If len is 2, that means that we need to schedule an async flush.
// If additional callbacks are queued before the queue is flushed, they
// will be processed by this flush that we are scheduling.
if (customSchedulerFn) {
customSchedulerFn(flush);
} else {
scheduleFlush();
}
}
};
function setScheduler(scheduleFn) {
customSchedulerFn = scheduleFn;
}
function setAsap(asapFn) {
asap = asapFn;
}
var browserWindow = typeof window !== 'undefined' ? window : undefined;
var browserGlobal = browserWindow || {};
var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;
var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]';
// test for web worker but not in IE10
var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';
// node
function useNextTick() {
// node version 0.10.x displays a deprecation warning when nextTick is used recursively
// see https://github.com/cujojs/when/issues/410 for details
return function () {
return process.nextTick(flush);
};
}
// vertx
function useVertxTimer() {
if (typeof vertxNext !== 'undefined') {
return function () {
vertxNext(flush);
};
}
return useSetTimeout();
}
function useMutationObserver() {
var iterations = 0;
var observer = new BrowserMutationObserver(flush);
var node = document.createTextNode('');
observer.observe(node, { characterData: true });
return function () {
node.data = iterations = ++iterations % 2;
};
}
// web worker
function useMessageChannel() {
var channel = new MessageChannel();
channel.port1.onmessage = flush;
return function () {
return channel.port2.postMessage(0);
};
}
function useSetTimeout() {
// Store setTimeout reference so es6-promise will be unaffected by
// other code modifying setTimeout (like sinon.useFakeTimers())
var globalSetTimeout = setTimeout;
return function () {
return globalSetTimeout(flush, 1);
};
}
var queue = new Array(1000);
function flush() {
for (var i = 0; i < len; i += 2) {
var callback = queue[i];
var arg = queue[i + 1];
callback(arg);
queue[i] = undefined;
queue[i + 1] = undefined;
}
len = 0;
}
function attemptVertx() {
try {
var r = require;
var vertx = __webpack_require__(210);
vertxNext = vertx.runOnLoop || vertx.runOnContext;
return useVertxTimer();
} catch (e) {
return useSetTimeout();
}
}
var scheduleFlush = undefined;
// Decide what async method to use to triggering processing of queued callbacks:
if (isNode) {
scheduleFlush = useNextTick();
} else if (BrowserMutationObserver) {
scheduleFlush = useMutationObserver();
} else if (isWorker) {
scheduleFlush = useMessageChannel();
} else if (browserWindow === undefined && "function" === 'function') {
scheduleFlush = attemptVertx();
} else {
scheduleFlush = useSetTimeout();
}
function then(onFulfillment, onRejection) {
var _arguments = arguments;
var parent = this;
var child = new this.constructor(noop);
if (child[PROMISE_ID] === undefined) {
makePromise(child);
}
var _state = parent._state;
if (_state) {
(function () {
var callback = _arguments[_state - 1];
asap(function () {
return invokeCallback(_state, child, callback, parent._result);
});
})();
} else {
subscribe(parent, child, onFulfillment, onRejection);
}
return child;
}
/**
`Promise.resolve` returns a promise that will become resolved with the
passed `value`. It is shorthand for the following:
```javascript
let promise = new Promise(function(resolve, reject){
resolve(1);
});
promise.then(function(value){
// value === 1
});
```
Instead of writing the above, your code now simply becomes the following:
```javascript
let promise = Promise.resolve(1);
promise.then(function(value){
// value === 1
});
```
@method resolve
@static
@param {Any} value value that the returned promise will be resolved with
Useful for tooling.
@return {Promise} a promise that will become fulfilled with the given
`value`
*/
function resolve(object) {
/*jshint validthis:true */
var Constructor = this;
if (object && typeof object === 'object' && object.constructor === Constructor) {
return object;
}
var promise = new Constructor(noop);
_resolve(promise, object);
return promise;
}
var PROMISE_ID = Math.random().toString(36).substring(16);
function noop() {}
var PENDING = void 0;
var FULFILLED = 1;
var REJECTED = 2;
var GET_THEN_ERROR = new ErrorObject();
function selfFulfillment() {
return new TypeError("You cannot resolve a promise with itself");
}
function cannotReturnOwn() {
return new TypeError('A promises callback cannot return that same promise.');
}
function getThen(promise) {
try {
return promise.then;
} catch (error) {
GET_THEN_ERROR.error = error;
return GET_THEN_ERROR;
}
}
function tryThen(then, value, fulfillmentHandler, rejectionHandler) {
try {
then.call(value, fulfillmentHandler, rejectionHandler);
} catch (e) {
return e;
}
}
function handleForeignThenable(promise, thenable, then) {
asap(function (promise) {
var sealed = false;
var error = tryThen(then, thenable, function (value) {
if (sealed) {
return;
}
sealed = true;
if (thenable !== value) {
_resolve(promise, value);
} else {
fulfill(promise, value);
}
}, function (reason) {
if (sealed) {
return;
}
sealed = true;
_reject(promise, reason);
}, 'Settle: ' + (promise._label || ' unknown promise'));
if (!sealed && error) {
sealed = true;
_reject(promise, error);
}
}, promise);
}
function handleOwnThenable(promise, thenable) {
if (thenable._state === FULFILLED) {
fulfill(promise, thenable._result);
} else if (thenable._state === REJECTED) {
_reject(promise, thenable._result);
} else {
subscribe(thenable, undefined, function (value) {
return _resolve(promise, value);
}, function (reason) {
return _reject(promise, reason);
});
}
}
function handleMaybeThenable(promise, maybeThenable, then$$) {
if (maybeThenable.constructor === promise.constructor && then$$ === then && maybeThenable.constructor.resolve === resolve) {
handleOwnThenable(promise, maybeThenable);
} else {
if (then$$ === GET_THEN_ERROR) {
_reject(promise, GET_THEN_ERROR.error);
} else if (then$$ === undefined) {
fulfill(promise, maybeThenable);
} else if (isFunction(then$$)) {
handleForeignThenable(promise, maybeThenable, then$$);
} else {
fulfill(promise, maybeThenable);
}
}
}
function _resolve(promise, value) {
if (promise === value) {
_reject(promise, selfFulfillment());
} else if (objectOrFunction(value)) {
handleMaybeThenable(promise, value, getThen(value));
} else {
fulfill(promise, value);
}
}
function publishRejection(promise) {
if (promise._onerror) {
promise._onerror(promise._result);
}
publish(promise);
}
function fulfill(promise, value) {
if (promise._state !== PENDING) {
return;
}
promise._result = value;
promise._state = FULFILLED;
if (promise._subscribers.length !== 0) {
asap(publish, promise);
}
}
function _reject(promise, reason) {
if (promise._state !== PENDING) {
return;
}
promise._state = REJECTED;
promise._result = reason;
asap(publishRejection, promise);
}
function subscribe(parent, child, onFulfillment, onRejection) {
var _subscribers = parent._subscribers;
var length = _subscribers.length;
parent._onerror = null;
_subscribers[length] = child;
_subscribers[length + FULFILLED] = onFulfillment;
_subscribers[length + REJECTED] = onRejection;
if (length === 0 && parent._state) {
asap(publish, parent);
}
}
function publish(promise) {
var subscribers = promise._subscribers;
var settled = promise._state;
if (subscribers.length === 0) {
return;
}
var child = undefined,
callback = undefined,
detail = promise._result;
for (var i = 0; i < subscribers.length; i += 3) {
child = subscribers[i];
callback = subscribers[i + settled];
if (child) {
invokeCallback(settled, child, callback, detail);
} else {
callback(detail);
}
}
promise._subscribers.length = 0;
}
function ErrorObject() {
this.error = null;
}
var TRY_CATCH_ERROR = new ErrorObject();
function tryCatch(callback, detail) {
try {
return callback(detail);
} catch (e) {
TRY_CATCH_ERROR.error = e;
return TRY_CATCH_ERROR;
}
}
function invokeCallback(settled, promise, callback, detail) {
var hasCallback = isFunction(callback),
value = undefined,
error = undefined,
succeeded = undefined,
failed = undefined;
if (hasCallback) {
value = tryCatch(callback, detail);
if (value === TRY_CATCH_ERROR) {
failed = true;
error = value.error;
value = null;
} else {
succeeded = true;
}
if (promise === value) {
_reject(promise, cannotReturnOwn());
return;
}
} else {
value = detail;
succeeded = true;
}
if (promise._state !== PENDING) {
// noop
} else if (hasCallback && succeeded) {
_resolve(promise, value);
} else if (failed) {
_reject(promise, error);
} else if (settled === FULFILLED) {
fulfill(promise, value);
} else if (settled === REJECTED) {
_reject(promise, value);
}
}
function initializePromise(promise, resolver) {
try {
resolver(function resolvePromise(value) {
_resolve(promise, value);
}, function rejectPromise(reason) {
_reject(promise, reason);
});
} catch (e) {
_reject(promise, e);
}
}
var id = 0;
function nextId() {
return id++;
}
function makePromise(promise) {
promise[PROMISE_ID] = id++;
promise._state = undefined;
promise._result = undefined;
promise._subscribers = [];
}
function Enumerator(Constructor, input) {
this._instanceConstructor = Constructor;
this.promise = new Constructor(noop);
if (!this.promise[PROMISE_ID]) {
makePromise(this.promise);
}
if (isArray(input)) {
this._input = input;
this.length = input.length;
this._remaining = input.length;
this._result = new Array(this.length);
if (this.length === 0) {
fulfill(this.promise, this._result);
} else {
this.length = this.length || 0;
this._enumerate();
if (this._remaining === 0) {
fulfill(this.promise, this._result);
}
}
} else {
_reject(this.promise, validationError());
}
}
function validationError() {
return new Error('Array Methods must be provided an Array');
};
Enumerator.prototype._enumerate = function () {
var length = this.length;
var _input = this._input;
for (var i = 0; this._state === PENDING && i < length; i++) {
this._eachEntry(_input[i], i);
}
};
Enumerator.prototype._eachEntry = function (entry, i) {
var c = this._instanceConstructor;
var resolve$$ = c.resolve;
if (resolve$$ === resolve) {
var _then = getThen(entry);
if (_then === then && entry._state !== PENDING) {
this._settledAt(entry._state, i, entry._result);
} else if (typeof _then !== 'function') {
this._remaining--;
this._result[i] = entry;
} else if (c === Promise) {
var promise = new c(noop);
handleMaybeThenable(promise, entry, _then);
this._willSettleAt(promise, i);
} else {
this._willSettleAt(new c(function (resolve$$) {
return resolve$$(entry);
}), i);
}
} else {
this._willSettleAt(resolve$$(entry), i);
}
};
Enumerator.prototype._settledAt = function (state, i, value) {
var promise = this.promise;
if (promise._state === PENDING) {
this._remaining--;
if (state === REJECTED) {
_reject(promise, value);
} else {
this._result[i] = value;
}
}
if (this._remaining === 0) {
fulfill(promise, this._result);
}
};
Enumerator.prototype._willSettleAt = function (promise, i) {
var enumerator = this;
subscribe(promise, undefined, function (value) {
return enumerator._settledAt(FULFILLED, i, value);
}, function (reason) {
return enumerator._settledAt(REJECTED, i, reason);
});
};
/**
`Promise.all` accepts an array of promises, and returns a new promise which
is fulfilled with an array of fulfillment values for the passed promises, or
rejected with the reason of the first passed promise to be rejected. It casts all
elements of the passed iterable to promises as it runs this algorithm.
Example:
```javascript
let promise1 = resolve(1);
let promise2 = resolve(2);
let promise3 = resolve(3);
let promises = [ promise1, promise2, promise3 ];
Promise.all(promises).then(function(array){
// The array here would be [ 1, 2, 3 ];
});
```
If any of the `promises` given to `all` are rejected, the first promise
that is rejected will be given as an argument to the returned promises's
rejection handler. For example:
Example:
```javascript
let promise1 = resolve(1);
let promise2 = reject(new Error("2"));
let promise3 = reject(new Error("3"));
let promises = [ promise1, promise2, promise3 ];
Promise.all(promises).then(function(array){
// Code here never runs because there are rejected promises!
}, function(error) {
// error.message === "2"
});
```
@method all
@static
@param {Array} entries array of promises
@param {String} label optional string for labeling the promise.
Useful for tooling.
@return {Promise} promise that is fulfilled when all `promises` have been
fulfilled, or rejected if any of them become rejected.
@static
*/
function all(entries) {
return new Enumerator(this, entries).promise;
}
/**
`Promise.race` returns a new promise which is settled in the same way as the
first passed promise to settle.
Example:
```javascript
let promise1 = new Promise(function(resolve, reject){
setTimeout(function(){
resolve('promise 1');
}, 200);
});
let promise2 = new Promise(function(resolve, reject){
setTimeout(function(){
resolve('promise 2');
}, 100);
});
Promise.race([promise1, promise2]).then(function(result){
// result === 'promise 2' because it was resolved before promise1
// was resolved.
});
```
`Promise.race` is deterministic in that only the state of the first
settled promise matters. For example, even if other promises given to the
`promises` array argument are resolved, but the first settled promise has
become rejected before the other promises became fulfilled, the returned
promise will become rejected:
```javascript
let promise1 = new Promise(function(resolve, reject){
setTimeout(function(){
resolve('promise 1');
}, 200);
});
let promise2 = new Promise(function(resolve, reject){
setTimeout(function(){
reject(new Error('promise 2'));
}, 100);
});
Promise.race([promise1, promise2]).then(function(result){
// Code here never runs
}, function(reason){
// reason.message === 'promise 2' because promise 2 became rejected before
// promise 1 became fulfilled
});
```
An example real-world use case is implementing timeouts:
```javascript
Promise.race([ajax('foo.json'), timeout(5000)])
```
@method race
@static
@param {Array} promises array of promises to observe
Useful for tooling.
@return {Promise} a promise which settles in the same way as the first passed
promise to settle.
*/
function race(entries) {
/*jshint validthis:true */
var Constructor = this;
if (!isArray(entries)) {
return new Constructor(function (_, reject) {
return reject(new TypeError('You must pass an array to race.'));
});
} else {
return new Constructor(function (resolve, reject) {
var length = entries.length;
for (var i = 0; i < length; i++) {
Constructor.resolve(entries[i]).then(resolve, reject);
}
});
}
}
/**
`Promise.reject` returns a promise rejected with the passed `reason`.
It is shorthand for the following:
```javascript
let promise = new Promise(function(resolve, reject){
reject(new Error('WHOOPS'));
});
promise.then(function(value){
// Code here doesn't run because the promise is rejected!
}, function(reason){
// reason.message === 'WHOOPS'
});
```
Instead of writing the above, your code now simply becomes the following:
```javascript
let promise = Promise.reject(new Error('WHOOPS'));
promise.then(function(value){
// Code here doesn't run because the promise is rejected!
}, function(reason){
// reason.message === 'WHOOPS'
});
```
@method reject
@static
@param {Any} reason value that the returned promise will be rejected with.
Useful for tooling.
@return {Promise} a promise rejected with the given `reason`.
*/
function reject(reason) {
/*jshint validthis:true */
var Constructor = this;
var promise = new Constructor(noop);
_reject(promise, reason);
return promise;
}
function needsResolver() {
throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');
}
function needsNew() {
throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");
}
/**
Promise objects represent the eventual result of an asynchronous operation. The
primary way of interacting with a promise is through its `then` method, which
registers callbacks to receive either a promise's eventual value or the reason
why the promise cannot be fulfilled.
Terminology
-----------
- `promise` is an object or function with a `then` method whose behavior conforms to this specification.
- `thenable` is an object or function that defines a `then` method.
- `value` is any legal JavaScript value (including undefined, a thenable, or a promise).
- `exception` is a value that is thrown using the throw statement.
- `reason` is a value that indicates why a promise was rejected.
- `settled` the final resting state of a promise, fulfilled or rejected.
A promise can be in one of three states: pending, fulfilled, or rejected.
Promises that are fulfilled have a fulfillment value and are in the fulfilled
state. Promises that are rejected have a rejection reason and are in the
rejected state. A fulfillment value is never a thenable.
Promises can also be said to *resolve* a value. If this value is also a
promise, then the original promise's settled state will match the value's
settled state. So a promise that *resolves* a promise that rejects will
itself reject, and a promise that *resolves* a promise that fulfills will
itself fulfill.
Basic Usage:
------------
```js
let promise = new Promise(function(resolve, reject) {
// on success
resolve(value);
// on failure
reject(reason);
});
promise.then(function(value) {
// on fulfillment
}, function(reason) {
// on rejection
});
```
Advanced Usage:
---------------
Promises shine when abstracting away asynchronous interactions such as
`XMLHttpRequest`s.
```js
function getJSON(url) {
return new Promise(function(resolve, reject){
let xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.onreadystatechange = handler;
xhr.responseType = 'json';
xhr.setRequestHeader('Accept', 'application/json');
xhr.send();
function handler() {
if (this.readyState === this.DONE) {
if (this.status === 200) {
resolve(this.response);
} else {
reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));
}
}
};
});
}
getJSON('/posts.json').then(function(json) {
// on fulfillment
}, function(reason) {
// on rejection
});
```
Unlike callbacks, promises are great composable primitives.
```js
Promise.all([
getJSON('/posts'),
getJSON('/comments')
]).then(function(values){
values[0] // => postsJSON
values[1] // => commentsJSON
return values;
});
```
@class Promise
@param {function} resolver
Useful for tooling.
@constructor
*/
function Promise(resolver) {
this[PROMISE_ID] = nextId();
this._result = this._state = undefined;
this._subscribers = [];
if (noop !== resolver) {
typeof resolver !== 'function' && needsResolver();
this instanceof Promise ? initializePromise(this, resolver) : needsNew();
}
}
Promise.all = all;
Promise.race = race;
Promise.resolve = resolve;
Promise.reject = reject;
Promise._setScheduler = setScheduler;
Promise._setAsap = setAsap;
Promise._asap = asap;
Promise.prototype = {
constructor: Promise,
/**
The primary way of interacting with a promise is through its `then` method,
which registers callbacks to receive either a promise's eventual value or the
reason why the promise cannot be fulfilled.
```js
findUser().then(function(user){
// user is available
}, function(reason){
// user is unavailable, and you are given the reason why
});
```
Chaining
--------
The return value of `then` is itself a promise. This second, 'downstream'
promise is resolved with the return value of the first promise's fulfillment
or rejection handler, or rejected if the handler throws an exception.
```js
findUser().then(function (user) {
return user.name;
}, function (reason) {
return 'default name';
}).then(function (userName) {
// If `findUser` fulfilled, `userName` will be the user's name, otherwise it
// will be `'default name'`
});
findUser().then(function (user) {
throw new Error('Found user, but still unhappy');
}, function (reason) {
throw new Error('`findUser` rejected and we're unhappy');
}).then(function (value) {
// never reached
}, function (reason) {
// if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.
// If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.
});
```
If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.
```js
findUser().then(function (user) {
throw new PedagogicalException('Upstream error');
}).then(function (value) {
// never reached
}).then(function (value) {
// never reached
}, function (reason) {
// The `PedgagocialException` is propagated all the way down to here
});
```
Assimilation
------------
Sometimes the value you want to propagate to a downstream promise can only be
retrieved asynchronously. This can be achieved by returning a promise in the
fulfillment or rejection handler. The downstream promise will then be pending
until the returned promise is settled. This is called *assimilation*.
```js
findUser().then(function (user) {
return findCommentsByAuthor(user);
}).then(function (comments) {
// The user's comments are now available
});
```
If the assimliated promise rejects, then the downstream promise will also reject.
```js
findUser().then(function (user) {
return findCommentsByAuthor(user);
}).then(function (comments) {
// If `findCommentsByAuthor` fulfills, we'll have the value here
}, function (reason) {
// If `findCommentsByAuthor` rejects, we'll have the reason here
});
```
Simple Example
--------------
Synchronous Example
```javascript
let result;
try {
result = findResult();
// success
} catch(reason) {
// failure
}
```
Errback Example
```js
findResult(function(result, err){
if (err) {
// failure
} else {
// success
}
});
```
Promise Example;
```javascript
findResult().then(function(result){
// success
}, function(reason){
// failure
});
```
Advanced Example
--------------
Synchronous Example
```javascript
let author, books;
try {
author = findAuthor();
books = findBooksByAuthor(author);
// success
} catch(reason) {
// failure
}
```
Errback Example
```js
function foundBooks(books) {
}
function failure(reason) {
}
findAuthor(function(author, err){
if (err) {
failure(err);
// failure
} else {
try {
findBoooksByAuthor(author, function(books, err) {
if (err) {
failure(err);
} else {
try {
foundBooks(books);
} catch(reason) {
failure(reason);
}
}
});
} catch(error) {
failure(err);
}
// success
}
});
```
Promise Example;
```javascript
findAuthor().
then(findBooksByAuthor).
then(function(books){
// found books
}).catch(function(reason){
// something went wrong
});
```
@method then
@param {Function} onFulfilled
@param {Function} onRejected
Useful for tooling.
@return {Promise}
*/
then: then,
/**
`catch` is simply sugar for `then(undefined, onRejection)` which makes it the same
as the catch block of a try/catch statement.
```js
function findAuthor(){
throw new Error('couldn't find that author');
}
// synchronous
try {
findAuthor();
} catch(reason) {
// something went wrong
}
// async with promises
findAuthor().catch(function(reason){
// something went wrong
});
```
@method catch
@param {Function} onRejection
Useful for tooling.
@return {Promise}
*/
'catch': function _catch(onRejection) {
return this.then(null, onRejection);
}
};
function polyfill() {
var local = undefined;
if (typeof global !== 'undefined') {
local = global;
} else if (typeof self !== 'undefined') {
local = self;
} else {
try {
local = Function('return this')();
} catch (e) {
throw new Error('polyfill failed because global object is unavailable in this environment');
}
}
var P = local.Promise;
if (P) {
var promiseToString = null;
try {
promiseToString = Object.prototype.toString.call(P.resolve());
} catch (e) {
// silently ignored
}
if (promiseToString === '[object Promise]' && !P.cast) {
return;
}
}
local.Promise = Promise;
}
// Strange compat..
Promise.polyfill = polyfill;
Promise.Promise = Promise;
return Promise;
})));
//# sourceMappingURL=es6-promise.map
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(8), __webpack_require__(28)))
/***/ }),
/* 98 */
/***/ (function(module, exports, __webpack_require__) {
var getNative = __webpack_require__(5),
root = __webpack_require__(2);
/* Built-in method references that are verified to be native. */
var DataView = getNative(root, 'DataView');
module.exports = DataView;
/***/ }),
/* 99 */
/***/ (function(module, exports, __webpack_require__) {
var hashClear = __webpack_require__(144),
hashDelete = __webpack_require__(145),
hashGet = __webpack_require__(146),
hashHas = __webpack_require__(147),
hashSet = __webpack_require__(148);
/**
* Creates a hash object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function Hash(entries) {
var index = -1,
length = entries == null ? 0 : entries.length;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
// Add methods to `Hash`.
Hash.prototype.clear = hashClear;
Hash.prototype['delete'] = hashDelete;
Hash.prototype.get = hashGet;
Hash.prototype.has = hashHas;
Hash.prototype.set = hashSet;
module.exports = Hash;
/***/ }),
/* 100 */
/***/ (function(module, exports, __webpack_require__) {
var getNative = __webpack_require__(5),
root = __webpack_require__(2);
/* Built-in method references that are verified to be native. */
var Promise = getNative(root, 'Promise');
module.exports = Promise;
/***/ }),
/* 101 */
/***/ (function(module, exports, __webpack_require__) {
var getNative = __webpack_require__(5),
root = __webpack_require__(2);
/* Built-in method references that are verified to be native. */
var Set = getNative(root, 'Set');
module.exports = Set;
/***/ }),
/* 102 */
/***/ (function(module, exports, __webpack_require__) {
var MapCache = __webpack_require__(23),
setCacheAdd = __webpack_require__(168),
setCacheHas = __webpack_require__(169);
/**
*
* Creates an array cache object to store unique values.
*
* @private
* @constructor
* @param {Array} [values] The values to cache.
*/
function SetCache(values) {
var index = -1,
length = values == null ? 0 : values.length;
this.__data__ = new MapCache;
while (++index < length) {
this.add(values[index]);
}
}
// Add methods to `SetCache`.
SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
SetCache.prototype.has = setCacheHas;
module.exports = SetCache;
/***/ }),
/* 103 */
/***/ (function(module, exports, __webpack_require__) {
var root = __webpack_require__(2);
/** Built-in value references. */
var Uint8Array = root.Uint8Array;
module.exports = Uint8Array;
/***/ }),
/* 104 */
/***/ (function(module, exports, __webpack_require__) {
var getNative = __webpack_require__(5),
root = __webpack_require__(2);
/* Built-in method references that are verified to be native. */
var WeakMap = getNative(root, 'WeakMap');
module.exports = WeakMap;
/***/ }),
/* 105 */
/***/ (function(module, exports) {
/**
* A specialized version of `_.forEach` for arrays without support for
* iteratee shorthands.
*
* @private
* @param {Array} [array] The array to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @returns {Array} Returns `array`.
*/
function arrayEach(array, iteratee) {
var index = -1,
length = array == null ? 0 : array.length;
while (++index < length) {
if (iteratee(array[index], index, array) === false) {
break;
}
}
return array;
}
module.exports = arrayEach;
/***/ }),
/* 106 */
/***/ (function(module, exports, __webpack_require__) {
var baseTimes = __webpack_require__(126),
isArguments = __webpack_require__(49),
isArray = __webpack_require__(1),
isBuffer = __webpack_require__(50),
isIndex = __webpack_require__(43),
isTypedArray = __webpack_require__(52);
/** Used for built-in method references. */
var objectProto = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;
/**
* Creates an array of the enumerable property names of the array-like `value`.
*
* @private
* @param {*} value The value to query.
* @param {boolean} inherited Specify returning inherited property names.
* @returns {Array} Returns the array of property names.
*/
function arrayLikeKeys(value, inherited) {
var isArr = isArray(value),
isArg = !isArr && isArguments(value),
isBuff = !isArr && !isArg && isBuffer(value),
isType = !isArr && !isArg && !isBuff && isTypedArray(value),
skipIndexes = isArr || isArg || isBuff || isType,
result = skipIndexes ? baseTimes(value.length, String) : [],
length = result.length;
for (var key in value) {
if ((inherited || hasOwnProperty.call(value, key)) &&
!(skipIndexes && (
// Safari 9 has enumerable `arguments.length` in strict mode.
key == 'length' ||
// Node.js 0.10 has enumerable non-index properties on buffers.
(isBuff && (key == 'offset' || key == 'parent')) ||
// PhantomJS 2 has enumerable non-index properties on typed arrays.
(isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
// Skip index properties.
isIndex(key, length)
))) {
result.push(key);
}
}
return result;
}
module.exports = arrayLikeKeys;
/***/ }),
/* 107 */
/***/ (function(module, exports) {
/**
* Appends the elements of `values` to `array`.
*
* @private
* @param {Array} array The array to modify.
* @param {Array} values The values to append.
* @returns {Array} Returns `array`.
*/
function arrayPush(array, values) {
var index = -1,
length = values.length,
offset = array.length;
while (++index < length) {
array[offset + index] = values[index];
}
return array;
}
module.exports = arrayPush;
/***/ }),
/* 108 */
/***/ (function(module, exports) {
/**
* A specialized version of `_.some` for arrays without support for iteratee
* shorthands.
*
* @private
* @param {Array} [array] The array to iterate over.
* @param {Function} predicate The function invoked per iteration.
* @returns {boolean} Returns `true` if any element passes the predicate check,
* else `false`.
*/
function arraySome(array, predicate) {
var index = -1,
length = array == null ? 0 : array.length;
while (++index < length) {
if (predicate(array[index], index, array)) {
return true;
}
}
return false;
}
module.exports = arraySome;
/***/ }),
/* 109 */
/***/ (function(module, exports, __webpack_require__) {
var baseEach = __webpack_require__(24);
/**
* The base implementation of `_.filter` without support for iteratee shorthands.
*
* @private
* @param {Array|Object} collection The collection to iterate over.
* @param {Function} predicate The function invoked per iteration.
* @returns {Array} Returns the new filtered array.
*/
function baseFilter(collection, predicate) {
var result = [];
baseEach(collection, function(value, index, collection) {
if (predicate(value, index, collection)) {
result.push(value);
}
});
return result;
}
module.exports = baseFilter;
/***/ }),
/* 110 */
/***/ (function(module, exports) {
/**
* The base implementation of `_.findIndex` and `_.findLastIndex` without
* support for iteratee shorthands.
*
* @private
* @param {Array} array The array to inspect.
* @param {Function} predicate The function invoked per iteration.
* @param {number} fromIndex The index to search from.
* @param {boolean} [fromRight] Specify iterating from right to left.
* @returns {number} Returns the index of the matched value, else `-1`.
*/
function baseFindIndex(array, predicate, fromIndex, fromRight) {
var length = array.length,
index = fromIndex + (fromRight ? 1 : -1);
while ((fromRight ? index-- : ++index < length)) {
if (predicate(array[index], index, array)) {
return index;
}
}
return -1;
}
module.exports = baseFindIndex;
/***/ }),
/* 111 */
/***/ (function(module, exports, __webpack_require__) {
var createBaseFor = __webpack_require__(133);
/**
* The base implementation of `baseForOwn` which iterates over `object`
* properties returned by `keysFunc` and invokes `iteratee` for each property.
* Iteratee functions may exit iteration early by explicitly returning `false`.
*
* @private
* @param {Object} object The object to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @param {Function} keysFunc The function to get the keys of `object`.
* @returns {Object} Returns `object`.
*/
var baseFor = createBaseFor();
module.exports = baseFor;
/***/ }),
/* 112 */
/***/ (function(module, exports, __webpack_require__) {
var baseFor = __webpack_require__(111),
keys = __webpack_require__(19);
/**
* The base implementation of `_.forOwn` without support for iteratee shorthands.
*
* @private
* @param {Object} object The object to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @returns {Object} Returns `object`.
*/
function baseForOwn(object, iteratee) {
return object && baseFor(object, iteratee, keys);
}
module.exports = baseForOwn;
/***/ }),
/* 113 */
/***/ (function(module, exports, __webpack_require__) {
var arrayPush = __webpack_require__(107),
isArray = __webpack_require__(1);
/**
* The base implementation of `getAllKeys` and `getAllKeysIn` which uses
* `keysFunc` and `symbolsFunc` to get the enumerable property names and
* symbols of `object`.
*
* @private
* @param {Object} object The object to query.
* @param {Function} keysFunc The function to get the keys of `object`.
* @param {Function} symbolsFunc The function to get the symbols of `object`.
* @returns {Array} Returns the array of property names and symbols.
*/
function baseGetAllKeys(object, keysFunc, symbolsFunc) {
var result = keysFunc(object);
return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
}
module.exports = baseGetAllKeys;
/***/ }),
/* 114 */
/***/ (function(module, exports) {
/**
* The base implementation of `_.hasIn` without support for deep paths.
*
* @private
* @param {Object} [object] The object to query.
* @param {Array|string} key The key to check.
* @returns {boolean} Returns `true` if `key` exists, else `false`.
*/
function baseHasIn(object, key) {
return object != null && key in Object(object);
}
module.exports = baseHasIn;
/***/ }),
/* 115 */
/***/ (function(module, exports, __webpack_require__) {
var baseGetTag = __webpack_require__(6),
isObjectLike = __webpack_require__(7);
/** `Object#toString` result references. */
var argsTag = '[object Arguments]';
/**
* The base implementation of `_.isArguments`.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an `arguments` object,
*/
function baseIsArguments(value) {
return isObjectLike(value) && baseGetTag(value) == argsTag;
}
module.exports = baseIsArguments;
/***/ }),
/* 116 */
/***/ (function(module, exports, __webpack_require__) {
var Stack = __webpack_require__(35),
equalArrays = __webpack_require__(41),
equalByTag = __webpack_require__(135),
equalObjects = __webpack_require__(136),
getTag = __webpack_require__(141),
isArray = __webpack_require__(1),
isBuffer = __webpack_require__(50),
isTypedArray = __webpack_require__(52);
/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG = 1;
/** `Object#toString` result references. */
var argsTag = '[object Arguments]',
arrayTag = '[object Array]',
objectTag = '[object Object]';
/** Used for built-in method references. */
var objectProto = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;
/**
* A specialized version of `baseIsEqual` for arrays and objects which performs
* deep comparisons and tracks traversed objects enabling objects with circular
* references to be compared.
*
* @private
* @param {Object} object The object to compare.
* @param {Object} other The other object to compare.
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
* @param {Function} customizer The function to customize comparisons.
* @param {Function} equalFunc The function to determine equivalents of values.
* @param {Object} [stack] Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
*/
function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
var objIsArr = isArray(object),
othIsArr = isArray(other),
objTag = objIsArr ? arrayTag : getTag(object),
othTag = othIsArr ? arrayTag : getTag(other);
objTag = objTag == argsTag ? objectTag : objTag;
othTag = othTag == argsTag ? objectTag : othTag;
var objIsObj = objTag == objectTag,
othIsObj = othTag == objectTag,
isSameTag = objTag == othTag;
if (isSameTag && isBuffer(object)) {
if (!isBuffer(other)) {
return false;
}
objIsArr = true;
objIsObj = false;
}
if (isSameTag && !objIsObj) {
stack || (stack = new Stack);
return (objIsArr || isTypedArray(object))
? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
: equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
}
if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
if (objIsWrapped || othIsWrapped) {
var objUnwrapped = objIsWrapped ? object.value() : object,
othUnwrapped = othIsWrapped ? other.value() : other;
stack || (stack = new Stack);
return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
}
}
if (!isSameTag) {
return false;
}
stack || (stack = new Stack);
return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
}
module.exports = baseIsEqualDeep;
/***/ }),
/* 117 */
/***/ (function(module, exports, __webpack_require__) {
var Stack = __webpack_require__(35),
baseIsEqual = __webpack_require__(39);
/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG = 1,
COMPARE_UNORDERED_FLAG = 2;
/**
* The base implementation of `_.isMatch` without support for iteratee shorthands.
*
* @private
* @param {Object} object The object to inspect.
* @param {Object} source The object of property values to match.
* @param {Array} matchData The property names, values, and compare flags to match.
* @param {Function} [customizer] The function to customize comparisons.
* @returns {boolean} Returns `true` if `object` is a match, else `false`.
*/
function baseIsMatch(object, source, matchData, customizer) {
var index = matchData.length,
length = index,
noCustomizer = !customizer;
if (object == null) {
return !length;
}
object = Object(object);
while (index--) {
var data = matchData[index];
if ((noCustomizer && data[2])
? data[1] !== object[data[0]]
: !(data[0] in object)
) {
return false;
}
}
while (++index < length) {
data = matchData[index];
var key = data[0],
objValue = object[key],
srcValue = data[1];
if (noCustomizer && data[2]) {
if (objValue === undefined && !(key in object)) {
return false;
}
} else {
var stack = new Stack;
if (customizer) {
var result = customizer(objValue, srcValue, key, object, source, stack);
}
if (!(result === undefined
? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
: result
)) {
return false;
}
}
}
return true;
}
module.exports = baseIsMatch;
/***/ }),
/* 118 */
/***/ (function(module, exports, __webpack_require__) {
var isFunction = __webpack_require__(51),
isMasked = __webpack_require__(150),
isObject = __webpack_require__(17),
toSource = __webpack_require__(46);
/**
* Used to match `RegExp`
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
*/
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
/** Used to detect host constructors (Safari). */
var reIsHostCtor = /^\[object .+?Constructor\]$/;
/** Used for built-in method references. */
var funcProto = Function.prototype,
objectProto = Object.prototype;
/** Used to resolve the decompiled source of functions. */
var funcToString = funcProto.toString;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;
/** Used to detect if a method is native. */
var reIsNative = RegExp('^' +
funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
.replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
);
/**
* The base implementation of `_.isNative` without bad shim checks.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a native function,
* else `false`.
*/
function baseIsNative(value) {
if (!isObject(value) || isMasked(value)) {
return false;
}
var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
return pattern.test(toSource(value));
}
module.exports = baseIsNative;
/***/ }),
/* 119 */
/***/ (function(module, exports, __webpack_require__) {
var baseGetTag = __webpack_require__(6),
isLength = __webpack_require__(26),
isObjectLike = __webpack_require__(7);
/** `Object#toString` result references. */
var argsTag = '[object Arguments]',
arrayTag = '[object Array]',
boolTag = '[object Boolean]',
dateTag = '[object Date]',
errorTag = '[object Error]',
funcTag = '[object Function]',
mapTag = '[object Map]',
numberTag = '[object Number]',
objectTag = '[object Object]',
regexpTag = '[object RegExp]',
setTag = '[object Set]',
stringTag = '[object String]',
weakMapTag = '[object WeakMap]';
var arrayBufferTag = '[object ArrayBuffer]',
dataViewTag = '[object DataView]',
float32Tag = '[object Float32Array]',
float64Tag = '[object Float64Array]',
int8Tag = '[object Int8Array]',
int16Tag = '[object Int16Array]',
int32Tag = '[object Int32Array]',
uint8Tag = '[object Uint8Array]',
uint8ClampedTag = '[object Uint8ClampedArray]',
uint16Tag = '[object Uint16Array]',
uint32Tag = '[object Uint32Array]';
/** Used to identify `toStringTag` values of typed arrays. */
var typedArrayTags = {};
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
typedArrayTags[uint32Tag] = true;
typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
typedArrayTags[errorTag] = typedArrayTags[funcTag] =
typedArrayTags[mapTag] = typedArrayTags[numberTag] =
typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
typedArrayTags[setTag] = typedArrayTags[stringTag] =
typedArrayTags[weakMapTag] = false;
/**
* The base implementation of `_.isTypedArray` without Node.js optimizations.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
*/
function baseIsTypedArray(value) {
return isObjectLike(value) &&
isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
}
module.exports = baseIsTypedArray;
/***/ }),
/* 120 */
/***/ (function(module, exports, __webpack_require__) {
var isPrototype = __webpack_require__(151),
nativeKeys = __webpack_require__(164);
/** Used for built-in method references. */
var objectProto = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;
/**
* The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the array of property names.
*/
function baseKeys(object) {
if (!isPrototype(object)) {
return nativeKeys(object);
}
var result = [];
for (var key in Object(object)) {
if (hasOwnProperty.call(object, key) && key != 'constructor') {
result.push(key);
}
}
return result;
}
module.exports = baseKeys;
/***/ }),
/* 121 */
/***/ (function(module, exports, __webpack_require__) {
var baseEach = __webpack_require__(24),
isArrayLike = __webpack_require__(16);
/**
* The base implementation of `_.map` without support for iteratee shorthands.
*
* @private
* @param {Array|Object} collection The collection to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @returns {Array} Returns the new mapped array.
*/
function baseMap(collection, iteratee) {
var index = -1,
result = isArrayLike(collection) ? Array(collection.length) : [];
baseEach(collection, function(value, key, collection) {
result[++index] = iteratee(value, key, collection);
});
return result;
}
module.exports = baseMap;
/***/ }),
/* 122 */
/***/ (function(module, exports, __webpack_require__) {
var baseIsMatch = __webpack_require__(117),
getMatchData = __webpack_require__(138),
matchesStrictComparable = __webpack_require__(45);
/**
* The base implementation of `_.matches` which doesn't clone `source`.
*
* @private
* @param {Object} source The object of property values to match.
* @returns {Function} Returns the new spec function.
*/
function baseMatches(source) {
var matchData = getMatchData(source);
if (matchData.length == 1 && matchData[0][2]) {
return matchesStrictComparable(matchData[0][0], matchData[0][1]);
}
return function(object) {
return object === source || baseIsMatch(object, source, matchData);
};
}
module.exports = baseMatches;
/***/ }),
/* 123 */
/***/ (function(module, exports, __webpack_require__) {
var baseIsEqual = __webpack_require__(39),
get = __webpack_require__(181),
hasIn = __webpack_require__(182),
isKey = __webpack_require__(25),
isStrictComparable = __webpack_require__(44),
matchesStrictComparable = __webpack_require__(45),
toKey = __webpack_require__(15);
/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG = 1,
COMPARE_UNORDERED_FLAG = 2;
/**
* The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
*
* @private
* @param {string} path The path of the property to get.
* @param {*} srcValue The value to match.
* @returns {Function} Returns the new spec function.
*/
function baseMatchesProperty(path, srcValue) {
if (isKey(path) && isStrictComparable(srcValue)) {
return matchesStrictComparable(toKey(path), srcValue);
}
return function(object) {
var objValue = get(object, path);
return (objValue === undefined && objValue === srcValue)
? hasIn(object, path)
: baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
};
}
module.exports = baseMatchesProperty;
/***/ }),
/* 124 */
/***/ (function(module, exports) {
/**
* The base implementation of `_.property` without support for deep paths.
*
* @private
* @param {string} key The key of the property to get.
* @returns {Function} Returns the new accessor function.
*/
function baseProperty(key) {
return function(object) {
return object == null ? undefined : object[key];
};
}
module.exports = baseProperty;
/***/ }),
/* 125 */
/***/ (function(module, exports, __webpack_require__) {
var baseGet = __webpack_require__(38);
/**
* A specialized version of `baseProperty` which supports deep paths.
*
* @private
* @param {Array|string} path The path of the property to get.
* @returns {Function} Returns the new accessor function.
*/
function basePropertyDeep(path) {
return function(object) {
return baseGet(object, path);
};
}
module.exports = basePropertyDeep;
/***/ }),
/* 126 */
/***/ (function(module, exports) {
/**
* The base implementation of `_.times` without support for iteratee shorthands
* or max array length checks.
*
* @private
* @param {number} n The number of times to invoke `iteratee`.
* @param {Function} iteratee The function invoked per iteration.
* @returns {Array} Returns the array of results.
*/
function baseTimes(n, iteratee) {
var index = -1,
result = Array(n);
while (++index < n) {
result[index] = iteratee(index);
}
return result;
}
module.exports = baseTimes;
/***/ }),
/* 127 */
/***/ (function(module, exports, __webpack_require__) {
var Symbol = __webpack_require__(10),
arrayMap = __webpack_require__(37),
isArray = __webpack_require__(1),
isSymbol = __webpack_require__(18);
/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0;
/** Used to convert symbols to primitives and strings. */
var symbolProto = Symbol ? Symbol.prototype : undefined,
symbolToString = symbolProto ? symbolProto.toString : undefined;
/**
* The base implementation of `_.toString` which doesn't convert nullish
* values to empty strings.
*
* @private
* @param {*} value The value to process.
* @returns {string} Returns the string.
*/
function baseToString(value) {
// Exit early for strings to avoid a performance hit in some environments.
if (typeof value == 'string') {
return value;
}
if (isArray(value)) {
// Recursively convert values (susceptible to call stack limits).
return arrayMap(value, baseToString) + '';
}
if (isSymbol(value)) {
return symbolToString ? symbolToString.call(value) : '';
}
var result = (value + '');
return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
}
module.exports = baseToString;
/***/ }),
/* 128 */
/***/ (function(module, exports) {
/**
* The base implementation of `_.unary` without support for storing metadata.
*
* @private
* @param {Function} func The function to cap arguments for.
* @returns {Function} Returns the new capped function.
*/
function baseUnary(func) {
return function(value) {
return func(value);
};
}
module.exports = baseUnary;
/***/ }),
/* 129 */
/***/ (function(module, exports) {
/**
* Checks if a `cache` value for `key` exists.
*
* @private
* @param {Object} cache The cache to query.
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function cacheHas(cache, key) {
return cache.has(key);
}
module.exports = cacheHas;
/***/ }),
/* 130 */
/***/ (function(module, exports, __webpack_require__) {
var identity = __webpack_require__(48);
/**
* Casts `value` to `identity` if it's not a function.
*
* @private
* @param {*} value The value to inspect.
* @returns {Function} Returns cast function.
*/
function castFunction(value) {
return typeof value == 'function' ? value : identity;
}
module.exports = castFunction;
/***/ }),
/* 131 */
/***/ (function(module, exports, __webpack_require__) {
var root = __webpack_require__(2);
/** Used to detect overreaching core-js shims. */
var coreJsData = root['__core-js_shared__'];
module.exports = coreJsData;
/***/ }),
/* 132 */
/***/ (function(module, exports, __webpack_require__) {
var isArrayLike = __webpack_require__(16);
/**
* Creates a `baseEach` or `baseEachRight` function.
*
* @private
* @param {Function} eachFunc The function to iterate over a collection.
* @param {boolean} [fromRight] Specify iterating from right to left.
* @returns {Function} Returns the new base function.
*/
function createBaseEach(eachFunc, fromRight) {
return function(collection, iteratee) {
if (collection == null) {
return collection;
}
if (!isArrayLike(collection)) {
return eachFunc(collection, iteratee);
}
var length = collection.length,
index = fromRight ? length : -1,
iterable = Object(collection);
while ((fromRight ? index-- : ++index < length)) {
if (iteratee(iterable[index], index, iterable) === false) {
break;
}
}
return collection;
};
}
module.exports = createBaseEach;
/***/ }),
/* 133 */
/***/ (function(module, exports) {
/**
* Creates a base function for methods like `_.forIn` and `_.forOwn`.
*
* @private
* @param {boolean} [fromRight] Specify iterating from right to left.
* @returns {Function} Returns the new base function.
*/
function createBaseFor(fromRight) {
return function(object, iteratee, keysFunc) {
var index = -1,
iterable = Object(object),
props = keysFunc(object),
length = props.length;
while (length--) {
var key = props[fromRight ? length : ++index];
if (iteratee(iterable[key], key, iterable) === false) {
break;
}
}
return object;
};
}
module.exports = createBaseFor;
/***/ }),
/* 134 */
/***/ (function(module, exports, __webpack_require__) {
var baseIteratee = __webpack_require__(12),
isArrayLike = __webpack_require__(16),
keys = __webpack_require__(19);
/**
* Creates a `_.find` or `_.findLast` function.
*
* @private
* @param {Function} findIndexFunc The function to find the collection index.
* @returns {Function} Returns the new find function.
*/
function createFind(findIndexFunc) {
return function(collection, predicate, fromIndex) {
var iterable = Object(collection);
if (!isArrayLike(collection)) {
var iteratee = baseIteratee(predicate, 3);
collection = keys(collection);
predicate = function(key) { return iteratee(iterable[key], key, iterable); };
}
var index = findIndexFunc(collection, predicate, fromIndex);
return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
};
}
module.exports = createFind;
/***/ }),
/* 135 */
/***/ (function(module, exports, __webpack_require__) {
var Symbol = __webpack_require__(10),
Uint8Array = __webpack_require__(103),
eq = __webpack_require__(47),
equalArrays = __webpack_require__(41),
mapToArray = __webpack_require__(162),
setToArray = __webpack_require__(170);
/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG = 1,
COMPARE_UNORDERED_FLAG = 2;
/** `Object#toString` result references. */
var boolTag = '[object Boolean]',
dateTag = '[object Date]',
errorTag = '[object Error]',
mapTag = '[object Map]',
numberTag = '[object Number]',
regexpTag = '[object RegExp]',
setTag = '[object Set]',
stringTag = '[object String]',
symbolTag = '[object Symbol]';
var arrayBufferTag = '[object ArrayBuffer]',
dataViewTag = '[object DataView]';
/** Used to convert symbols to primitives and strings. */
var symbolProto = Symbol ? Symbol.prototype : undefined,
symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
/**
* A specialized version of `baseIsEqualDeep` for comparing objects of
* the same `toStringTag`.
*
* **Note:** This function only supports comparing values with tags of
* `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
*
* @private
* @param {Object} object The object to compare.
* @param {Object} other The other object to compare.
* @param {string} tag The `toStringTag` of the objects to compare.
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
* @param {Function} customizer The function to customize comparisons.
* @param {Function} equalFunc The function to determine equivalents of values.
* @param {Object} stack Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
*/
function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
switch (tag) {
case dataViewTag:
if ((object.byteLength != other.byteLength) ||
(object.byteOffset != other.byteOffset)) {
return false;
}
object = object.buffer;
other = other.buffer;
case arrayBufferTag:
if ((object.byteLength != other.byteLength) ||
!equalFunc(new Uint8Array(object), new Uint8Array(other))) {
return false;
}
return true;
case boolTag:
case dateTag:
case numberTag:
// Coerce booleans to `1` or `0` and dates to milliseconds.
// Invalid dates are coerced to `NaN`.
return eq(+object, +other);
case errorTag:
return object.name == other.name && object.message == other.message;
case regexpTag:
case stringTag:
// Coerce regexes to strings and treat strings, primitives and objects,
// as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
// for more details.
return object == (other + '');
case mapTag:
var convert = mapToArray;
case setTag:
var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
convert || (convert = setToArray);
if (object.size != other.size && !isPartial) {
return false;
}
// Assume cyclic values are equal.
var stacked = stack.get(object);
if (stacked) {
return stacked == other;
}
bitmask |= COMPARE_UNORDERED_FLAG;
// Recursively compare objects (susceptible to call stack limits).
stack.set(object, other);
var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
stack['delete'](object);
return result;
case symbolTag:
if (symbolValueOf) {
return symbolValueOf.call(object) == symbolValueOf.call(other);
}
}
return false;
}
module.exports = equalByTag;
/***/ }),
/* 136 */
/***/ (function(module, exports, __webpack_require__) {
var getAllKeys = __webpack_require__(137);
/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG = 1;
/** Used for built-in method references. */
var objectProto = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;
/**
* A specialized version of `baseIsEqualDeep` for objects with support for
* partial deep comparisons.
*
* @private
* @param {Object} object The object to compare.
* @param {Object} other The other object to compare.
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
* @param {Function} customizer The function to customize comparisons.
* @param {Function} equalFunc The function to determine equivalents of values.
* @param {Object} stack Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
*/
function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
objProps = getAllKeys(object),
objLength = objProps.length,
othProps = getAllKeys(other),
othLength = othProps.length;
if (objLength != othLength && !isPartial) {
return false;
}
var index = objLength;
while (index--) {
var key = objProps[index];
if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
return false;
}
}
// Assume cyclic values are equal.
var stacked = stack.get(object);
if (stacked && stack.get(other)) {
return stacked == other;
}
var result = true;
stack.set(object, other);
stack.set(other, object);
var skipCtor = isPartial;
while (++index < objLength) {
key = objProps[index];
var objValue = object[key],
othValue = other[key];
if (customizer) {
var compared = isPartial
? customizer(othValue, objValue, key, other, object, stack)
: customizer(objValue, othValue, key, object, other, stack);
}
// Recursively compare objects (susceptible to call stack limits).
if (!(compared === undefined
? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
: compared
)) {
result = false;
break;
}
skipCtor || (skipCtor = key == 'constructor');
}
if (result && !skipCtor) {
var objCtor = object.constructor,
othCtor = other.constructor;
// Non `Object` object instances with different constructors are not equal.
if (objCtor != othCtor &&
('constructor' in object && 'constructor' in other) &&
!(typeof objCtor == 'function' && objCtor instanceof objCtor &&
typeof othCtor == 'function' && othCtor instanceof othCtor)) {
result = false;
}
}
stack['delete'](object);
stack['delete'](other);
return result;
}
module.exports = equalObjects;
/***/ }),
/* 137 */
/***/ (function(module, exports, __webpack_require__) {
var baseGetAllKeys = __webpack_require__(113),
getSymbols = __webpack_require__(140),
keys = __webpack_require__(19);
/**
* Creates an array of own enumerable property names and symbols of `object`.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the array of property names and symbols.
*/
function getAllKeys(object) {
return baseGetAllKeys(object, keys, getSymbols);
}
module.exports = getAllKeys;
/***/ }),
/* 138 */
/***/ (function(module, exports, __webpack_require__) {
var isStrictComparable = __webpack_require__(44),
keys = __webpack_require__(19);
/**
* Gets the property names, values, and compare flags of `object`.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the match data of `object`.
*/
function getMatchData(object) {
var result = keys(object),
length = result.length;
while (length--) {
var key = result[length],
value = object[key];
result[length] = [key, value, isStrictComparable(value)];
}
return result;
}
module.exports = getMatchData;
/***/ }),
/* 139 */
/***/ (function(module, exports, __webpack_require__) {
var Symbol = __webpack_require__(10);
/** Used for built-in method references. */
var objectProto = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;
/**
* Used to resolve the
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
* of values.
*/
var nativeObjectToString = objectProto.toString;
/** Built-in value references. */
var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
/**
* A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
*
* @private
* @param {*} value The value to query.
* @returns {string} Returns the raw `toStringTag`.
*/
function getRawTag(value) {
var isOwn = hasOwnProperty.call(value, symToStringTag),
tag = value[symToStringTag];
try {
value[symToStringTag] = undefined;
var unmasked = true;
} catch (e) {}
var result = nativeObjectToString.call(value);
if (unmasked) {
if (isOwn) {
value[symToStringTag] = tag;
} else {
delete value[symToStringTag];
}
}
return result;
}
module.exports = getRawTag;
/***/ }),
/* 140 */
/***/ (function(module, exports, __webpack_require__) {
var arrayFilter = __webpack_require__(36),
stubArray = __webpack_require__(186);
/** Used for built-in method references. */
var objectProto = Object.prototype;
/** Built-in value references. */
var propertyIsEnumerable = objectProto.propertyIsEnumerable;
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeGetSymbols = Object.getOwnPropertySymbols;
/**
* Creates an array of the own enumerable symbols of `object`.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the array of symbols.
*/
var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
if (object == null) {
return [];
}
object = Object(object);
return arrayFilter(nativeGetSymbols(object), function(symbol) {
return propertyIsEnumerable.call(object, symbol);
});
};
module.exports = getSymbols;
/***/ }),
/* 141 */
/***/ (function(module, exports, __webpack_require__) {
var DataView = __webpack_require__(98),
Map = __webpack_require__(22),
Promise = __webpack_require__(100),
Set = __webpack_require__(101),
WeakMap = __webpack_require__(104),
baseGetTag = __webpack_require__(6),
toSource = __webpack_require__(46);
/** `Object#toString` result references. */
var mapTag = '[object Map]',
objectTag = '[object Object]',
promiseTag = '[object Promise]',
setTag = '[object Set]',
weakMapTag = '[object WeakMap]';
var dataViewTag = '[object DataView]';
/** Used to detect maps, sets, and weakmaps. */
var dataViewCtorString = toSource(DataView),
mapCtorString = toSource(Map),
promiseCtorString = toSource(Promise),
setCtorString = toSource(Set),
weakMapCtorString = toSource(WeakMap);
/**
* Gets the `toStringTag` of `value`.
*
* @private
* @param {*} value The value to query.
* @returns {string} Returns the `toStringTag`.
*/
var getTag = baseGetTag;
// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
(Map && getTag(new Map) != mapTag) ||
(Promise && getTag(Promise.resolve()) != promiseTag) ||
(Set && getTag(new Set) != setTag) ||
(WeakMap && getTag(new WeakMap) != weakMapTag)) {
getTag = function(value) {
var result = baseGetTag(value),
Ctor = result == objectTag ? value.constructor : undefined,
ctorString = Ctor ? toSource(Ctor) : '';
if (ctorString) {
switch (ctorString) {
case dataViewCtorString: return dataViewTag;
case mapCtorString: return mapTag;
case promiseCtorString: return promiseTag;
case setCtorString: return setTag;
case weakMapCtorString: return weakMapTag;
}
}
return result;
};
}
module.exports = getTag;
/***/ }),
/* 142 */
/***/ (function(module, exports) {
/**
* Gets the value at `key` of `object`.
*
* @private
* @param {Object} [object] The object to query.
* @param {string} key The key of the property to get.
* @returns {*} Returns the property value.
*/
function getValue(object, key) {
return object == null ? undefined : object[key];
}
module.exports = getValue;
/***/ }),
/* 143 */
/***/ (function(module, exports, __webpack_require__) {
var castPath = __webpack_require__(40),
isArguments = __webpack_require__(49),
isArray = __webpack_require__(1),
isIndex = __webpack_require__(43),
isLength = __webpack_require__(26),
toKey = __webpack_require__(15);
/**
* Checks if `path` exists on `object`.
*
* @private
* @param {Object} object The object to query.
* @param {Array|string} path The path to check.
* @param {Function} hasFunc The function to check properties.
* @returns {boolean} Returns `true` if `path` exists, else `false`.
*/
function hasPath(object, path, hasFunc) {
path = castPath(path, object);
var index = -1,
length = path.length,
result = false;
while (++index < length) {
var key = toKey(path[index]);
if (!(result = object != null && hasFunc(object, key))) {
break;
}
object = object[key];
}
if (result || ++index != length) {
return result;
}
length = object == null ? 0 : object.length;
return !!length && isLength(length) && isIndex(key, length) &&
(isArray(object) || isArguments(object));
}
module.exports = hasPath;
/***/ }),
/* 144 */
/***/ (function(module, exports, __webpack_require__) {
var nativeCreate = __webpack_require__(14);
/**
* Removes all key-value entries from the hash.
*
* @private
* @name clear
* @memberOf Hash
*/
function hashClear() {
this.__data__ = nativeCreate ? nativeCreate(null) : {};
this.size = 0;
}
module.exports = hashClear;
/***/ }),
/* 145 */
/***/ (function(module, exports) {
/**
* Removes `key` and its value from the hash.
*
* @private
* @name delete
* @memberOf Hash
* @param {Object} hash The hash to modify.
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function hashDelete(key) {
var result = this.has(key) && delete this.__data__[key];
this.size -= result ? 1 : 0;
return result;
}
module.exports = hashDelete;
/***/ }),
/* 146 */
/***/ (function(module, exports, __webpack_require__) {
var nativeCreate = __webpack_require__(14);
/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED = '__lodash_hash_undefined__';
/** Used for built-in method references. */
var objectProto = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;
/**
* Gets the hash value for `key`.
*
* @private
* @name get
* @memberOf Hash
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function hashGet(key) {
var data = this.__data__;
if (nativeCreate) {
var result = data[key];
return result === HASH_UNDEFINED ? undefined : result;
}
return hasOwnProperty.call(data, key) ? data[key] : undefined;
}
module.exports = hashGet;
/***/ }),
/* 147 */
/***/ (function(module, exports, __webpack_require__) {
var nativeCreate = __webpack_require__(14);
/** Used for built-in method references. */
var objectProto = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;
/**
* Checks if a hash value for `key` exists.
*
* @private
* @name has
* @memberOf Hash
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function hashHas(key) {
var data = this.__data__;
return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
}
module.exports = hashHas;
/***/ }),
/* 148 */
/***/ (function(module, exports, __webpack_require__) {
var nativeCreate = __webpack_require__(14);
/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED = '__lodash_hash_undefined__';
/**
* Sets the hash `key` to `value`.
*
* @private
* @name set
* @memberOf Hash
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the hash instance.
*/
function hashSet(key, value) {
var data = this.__data__;
this.size += this.has(key) ? 0 : 1;
data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
return this;
}
module.exports = hashSet;
/***/ }),
/* 149 */
/***/ (function(module, exports) {
/**
* Checks if `value` is suitable for use as unique object key.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is suitable, else `false`.
*/
function isKeyable(value) {
var type = typeof value;
return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
? (value !== '__proto__')
: (value === null);
}
module.exports = isKeyable;
/***/ }),
/* 150 */
/***/ (function(module, exports, __webpack_require__) {
var coreJsData = __webpack_require__(131);
/** Used to detect methods masquerading as native. */
var maskSrcKey = (function() {
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
return uid ? ('Symbol(src)_1.' + uid) : '';
}());
/**
* Checks if `func` has its source masked.
*
* @private
* @param {Function} func The function to check.
* @returns {boolean} Returns `true` if `func` is masked, else `false`.
*/
function isMasked(func) {
return !!maskSrcKey && (maskSrcKey in func);
}
module.exports = isMasked;
/***/ }),
/* 151 */
/***/ (function(module, exports) {
/** Used for built-in method references. */
var objectProto = Object.prototype;
/**
* Checks if `value` is likely a prototype object.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
*/
function isPrototype(value) {
var Ctor = value && value.constructor,
proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
return value === proto;
}
module.exports = isPrototype;
/***/ }),
/* 152 */
/***/ (function(module, exports) {
/**
* Removes all key-value entries from the list cache.
*
* @private
* @name clear
* @memberOf ListCache
*/
function listCacheClear() {
this.__data__ = [];
this.size = 0;
}
module.exports = listCacheClear;
/***/ }),
/* 153 */
/***/ (function(module, exports, __webpack_require__) {
var assocIndexOf = __webpack_require__(11);
/** Used for built-in method references. */
var arrayProto = Array.prototype;
/** Built-in value references. */
var splice = arrayProto.splice;
/**
* Removes `key` and its value from the list cache.
*
* @private
* @name delete
* @memberOf ListCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function listCacheDelete(key) {
var data = this.__data__,
index = assocIndexOf(data, key);
if (index < 0) {
return false;
}
var lastIndex = data.length - 1;
if (index == lastIndex) {
data.pop();
} else {
splice.call(data, index, 1);
}
--this.size;
return true;
}
module.exports = listCacheDelete;
/***/ }),
/* 154 */
/***/ (function(module, exports, __webpack_require__) {
var assocIndexOf = __webpack_require__(11);
/**
* Gets the list cache value for `key`.
*
* @private
* @name get
* @memberOf ListCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function listCacheGet(key) {
var data = this.__data__,
index = assocIndexOf(data, key);
return index < 0 ? undefined : data[index][1];
}
module.exports = listCacheGet;
/***/ }),
/* 155 */
/***/ (function(module, exports, __webpack_require__) {
var assocIndexOf = __webpack_require__(11);
/**
* Checks if a list cache value for `key` exists.
*
* @private
* @name has
* @memberOf ListCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function listCacheHas(key) {
return assocIndexOf(this.__data__, key) > -1;
}
module.exports = listCacheHas;
/***/ }),
/* 156 */
/***/ (function(module, exports, __webpack_require__) {
var assocIndexOf = __webpack_require__(11);
/**
* Sets the list cache `key` to `value`.
*
* @private
* @name set
* @memberOf ListCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the list cache instance.
*/
function listCacheSet(key, value) {
var data = this.__data__,
index = assocIndexOf(data, key);
if (index < 0) {
++this.size;
data.push([key, value]);
} else {
data[index][1] = value;
}
return this;
}
module.exports = listCacheSet;
/***/ }),
/* 157 */
/***/ (function(module, exports, __webpack_require__) {
var Hash = __webpack_require__(99),
ListCache = __webpack_require__(9),
Map = __webpack_require__(22);
/**
* Removes all key-value entries from the map.
*
* @private
* @name clear
* @memberOf MapCache
*/
function mapCacheClear() {
this.size = 0;
this.__data__ = {
'hash': new Hash,
'map': new (Map || ListCache),
'string': new Hash
};
}
module.exports = mapCacheClear;
/***/ }),
/* 158 */
/***/ (function(module, exports, __webpack_require__) {
var getMapData = __webpack_require__(13);
/**
* Removes `key` and its value from the map.
*
* @private
* @name delete
* @memberOf MapCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function mapCacheDelete(key) {
var result = getMapData(this, key)['delete'](key);
this.size -= result ? 1 : 0;
return result;
}
module.exports = mapCacheDelete;
/***/ }),
/* 159 */
/***/ (function(module, exports, __webpack_require__) {
var getMapData = __webpack_require__(13);
/**
* Gets the map value for `key`.
*
* @private
* @name get
* @memberOf MapCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function mapCacheGet(key) {
return getMapData(this, key).get(key);
}
module.exports = mapCacheGet;
/***/ }),
/* 160 */
/***/ (function(module, exports, __webpack_require__) {
var getMapData = __webpack_require__(13);
/**
* Checks if a map value for `key` exists.
*
* @private
* @name has
* @memberOf MapCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function mapCacheHas(key) {
return getMapData(this, key).has(key);
}
module.exports = mapCacheHas;
/***/ }),
/* 161 */
/***/ (function(module, exports, __webpack_require__) {
var getMapData = __webpack_require__(13);
/**
* Sets the map `key` to `value`.
*
* @private
* @name set
* @memberOf MapCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the map cache instance.
*/
function mapCacheSet(key, value) {
var data = getMapData(this, key),
size = data.size;
data.set(key, value);
this.size += data.size == size ? 0 : 1;
return this;
}
module.exports = mapCacheSet;
/***/ }),
/* 162 */
/***/ (function(module, exports) {
/**
* Converts `map` to its key-value pairs.
*
* @private
* @param {Object} map The map to convert.
* @returns {Array} Returns the key-value pairs.
*/
function mapToArray(map) {
var index = -1,
result = Array(map.size);
map.forEach(function(value, key) {
result[++index] = [key, value];
});
return result;
}
module.exports = mapToArray;
/***/ }),
/* 163 */
/***/ (function(module, exports, __webpack_require__) {
var memoize = __webpack_require__(184);
/** Used as the maximum memoize cache size. */
var MAX_MEMOIZE_SIZE = 500;
/**
* A specialized version of `_.memoize` which clears the memoized function's
* cache when it exceeds `MAX_MEMOIZE_SIZE`.
*
* @private
* @param {Function} func The function to have its output memoized.
* @returns {Function} Returns the new memoized function.
*/
function memoizeCapped(func) {
var result = memoize(func, function(key) {
if (cache.size === MAX_MEMOIZE_SIZE) {
cache.clear();
}
return key;
});
var cache = result.cache;
return result;
}
module.exports = memoizeCapped;
/***/ }),
/* 164 */
/***/ (function(module, exports, __webpack_require__) {
var overArg = __webpack_require__(167);
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeKeys = overArg(Object.keys, Object);
module.exports = nativeKeys;
/***/ }),
/* 165 */
/***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(42);
/** Detect free variable `exports`. */
var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
/** Detect free variable `module`. */
var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
/** Detect the popular CommonJS extension `module.exports`. */
var moduleExports = freeModule && freeModule.exports === freeExports;
/** Detect free variable `process` from Node.js. */
var freeProcess = moduleExports && freeGlobal.process;
/** Used to access faster Node.js helpers. */
var nodeUtil = (function() {
try {
return freeProcess && freeProcess.binding && freeProcess.binding('util');
} catch (e) {}
}());
module.exports = nodeUtil;
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(54)(module)))
/***/ }),
/* 166 */
/***/ (function(module, exports) {
/** Used for built-in method references. */
var objectProto = Object.prototype;
/**
* Used to resolve the
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
* of values.
*/
var nativeObjectToString = objectProto.toString;
/**
* Converts `value` to a string using `Object.prototype.toString`.
*
* @private
* @param {*} value The value to convert.
* @returns {string} Returns the converted string.
*/
function objectToString(value) {
return nativeObjectToString.call(value);
}
module.exports = objectToString;
/***/ }),
/* 167 */
/***/ (function(module, exports) {
/**
* Creates a unary function that invokes `func` with its argument transformed.
*
* @private
* @param {Function} func The function to wrap.
* @param {Function} transform The argument transform.
* @returns {Function} Returns the new function.
*/
function overArg(func, transform) {
return function(arg) {
return func(transform(arg));
};
}
module.exports = overArg;
/***/ }),
/* 168 */
/***/ (function(module, exports) {
/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED = '__lodash_hash_undefined__';
/**
* Adds `value` to the array cache.
*
* @private
* @name add
* @memberOf SetCache
* @alias push
* @param {*} value The value to cache.
* @returns {Object} Returns the cache instance.
*/
function setCacheAdd(value) {
this.__data__.set(value, HASH_UNDEFINED);
return this;
}
module.exports = setCacheAdd;
/***/ }),
/* 169 */
/***/ (function(module, exports) {
/**
* Checks if `value` is in the array cache.
*
* @private
* @name has
* @memberOf SetCache
* @param {*} value The value to search for.
* @returns {number} Returns `true` if `value` is found, else `false`.
*/
function setCacheHas(value) {
return this.__data__.has(value);
}
module.exports = setCacheHas;
/***/ }),
/* 170 */
/***/ (function(module, exports) {
/**
* Converts `set` to an array of its values.
*
* @private
* @param {Object} set The set to convert.
* @returns {Array} Returns the values.
*/
function setToArray(set) {
var index = -1,
result = Array(set.size);
set.forEach(function(value) {
result[++index] = value;
});
return result;
}
module.exports = setToArray;
/***/ }),
/* 171 */
/***/ (function(module, exports, __webpack_require__) {
var ListCache = __webpack_require__(9);
/**
* Removes all key-value entries from the stack.
*
* @private
* @name clear
* @memberOf Stack
*/
function stackClear() {
this.__data__ = new ListCache;
this.size = 0;
}
module.exports = stackClear;
/***/ }),
/* 172 */
/***/ (function(module, exports) {
/**
* Removes `key` and its value from the stack.
*
* @private
* @name delete
* @memberOf Stack
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function stackDelete(key) {
var data = this.__data__,
result = data['delete'](key);
this.size = data.size;
return result;
}
module.exports = stackDelete;
/***/ }),
/* 173 */
/***/ (function(module, exports) {
/**
* Gets the stack value for `key`.
*
* @private
* @name get
* @memberOf Stack
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function stackGet(key) {
return this.__data__.get(key);
}
module.exports = stackGet;
/***/ }),
/* 174 */
/***/ (function(module, exports) {
/**
* Checks if a stack value for `key` exists.
*
* @private
* @name has
* @memberOf Stack
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function stackHas(key) {
return this.__data__.has(key);
}
module.exports = stackHas;
/***/ }),
/* 175 */
/***/ (function(module, exports, __webpack_require__) {
var ListCache = __webpack_require__(9),
Map = __webpack_require__(22),
MapCache = __webpack_require__(23);
/** Used as the size to enable large array optimizations. */
var LARGE_ARRAY_SIZE = 200;
/**
* Sets the stack `key` to `value`.
*
* @private
* @name set
* @memberOf Stack
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the stack cache instance.
*/
function stackSet(key, value) {
var data = this.__data__;
if (data instanceof ListCache) {
var pairs = data.__data__;
if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
pairs.push([key, value]);
this.size = ++data.size;
return this;
}
data = this.__data__ = new MapCache(pairs);
}
data.set(key, value);
this.size = data.size;
return this;
}
module.exports = stackSet;
/***/ }),
/* 176 */
/***/ (function(module, exports, __webpack_require__) {
var memoizeCapped = __webpack_require__(163);
/** Used to match property names within property paths. */
var reLeadingDot = /^\./,
rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
/** Used to match backslashes in property paths. */
var reEscapeChar = /\\(\\)?/g;
/**
* Converts `string` to a property path array.
*
* @private
* @param {string} string The string to convert.
* @returns {Array} Returns the property path array.
*/
var stringToPath = memoizeCapped(function(string) {
var result = [];
if (reLeadingDot.test(string)) {
result.push('');
}
string.replace(rePropName, function(match, number, quote, string) {
result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
});
return result;
});
module.exports = stringToPath;
/***/ }),
/* 177 */
/***/ (function(module, exports, __webpack_require__) {
var arrayFilter = __webpack_require__(36),
baseFilter = __webpack_require__(109),
baseIteratee = __webpack_require__(12),
isArray = __webpack_require__(1);
/**
* Iterates over elements of `collection`, returning an array of all elements
* `predicate` returns truthy for. The predicate is invoked with three
* arguments: (value, index|key, collection).
*
* **Note:** Unlike `_.remove`, this method returns a new array.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Collection
* @param {Array|Object} collection The collection to iterate over.
* @param {Function} [predicate=_.identity] The function invoked per iteration.
* @returns {Array} Returns the new filtered array.
* @see _.reject
* @example
*
* var users = [
* { 'user': 'barney', 'age': 36, 'active': true },
* { 'user': 'fred', 'age': 40, 'active': false }
* ];
*
* _.filter(users, function(o) { return !o.active; });
* // => objects for ['fred']
*
* // The `_.matches` iteratee shorthand.
* _.filter(users, { 'age': 36, 'active': true });
* // => objects for ['barney']
*
* // The `_.matchesProperty` iteratee shorthand.
* _.filter(users, ['active', false]);
* // => objects for ['fred']
*
* // The `_.property` iteratee shorthand.
* _.filter(users, 'active');
* // => objects for ['barney']
*/
function filter(collection, predicate) {
var func = isArray(collection) ? arrayFilter : baseFilter;
return func(collection, baseIteratee(predicate, 3));
}
module.exports = filter;
/***/ }),
/* 178 */
/***/ (function(module, exports, __webpack_require__) {
var createFind = __webpack_require__(134),
findIndex = __webpack_require__(179);
/**
* Iterates over elements of `collection`, returning the first element
* `predicate` returns truthy for. The predicate is invoked with three
* arguments: (value, index|key, collection).
*
* @static
* @memberOf _
* @since 0.1.0
* @category Collection
* @param {Array|Object} collection The collection to inspect.
* @param {Function} [predicate=_.identity] The function invoked per iteration.
* @param {number} [fromIndex=0] The index to search from.
* @returns {*} Returns the matched element, else `undefined`.
* @example
*
* var users = [
* { 'user': 'barney', 'age': 36, 'active': true },
* { 'user': 'fred', 'age': 40, 'active': false },
* { 'user': 'pebbles', 'age': 1, 'active': true }
* ];
*
* _.find(users, function(o) { return o.age < 40; });
* // => object for 'barney'
*
* // The `_.matches` iteratee shorthand.
* _.find(users, { 'age': 1, 'active': true });
* // => object for 'pebbles'
*
* // The `_.matchesProperty` iteratee shorthand.
* _.find(users, ['active', false]);
* // => object for 'fred'
*
* // The `_.property` iteratee shorthand.
* _.find(users, 'active');
* // => object for 'barney'
*/
var find = createFind(findIndex);
module.exports = find;
/***/ }),
/* 179 */
/***/ (function(module, exports, __webpack_require__) {
var baseFindIndex = __webpack_require__(110),
baseIteratee = __webpack_require__(12),
toInteger = __webpack_require__(189);
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max;
/**
* This method is like `_.find` except that it returns the index of the first
* element `predicate` returns truthy for instead of the element itself.
*
* @static
* @memberOf _
* @since 1.1.0
* @category Array
* @param {Array} array The array to inspect.
* @param {Function} [predicate=_.identity] The function invoked per iteration.
* @param {number} [fromIndex=0] The index to search from.
* @returns {number} Returns the index of the found element, else `-1`.
* @example
*
* var users = [
* { 'user': 'barney', 'active': false },
* { 'user': 'fred', 'active': false },
* { 'user': 'pebbles', 'active': true }
* ];
*
* _.findIndex(users, function(o) { return o.user == 'barney'; });
* // => 0
*
* // The `_.matches` iteratee shorthand.
* _.findIndex(users, { 'user': 'fred', 'active': false });
* // => 1
*
* // The `_.matchesProperty` iteratee shorthand.
* _.findIndex(users, ['active', false]);
* // => 0
*
* // The `_.property` iteratee shorthand.
* _.findIndex(users, 'active');
* // => 2
*/
function findIndex(array, predicate, fromIndex) {
var length = array == null ? 0 : array.length;
if (!length) {
return -1;
}
var index = fromIndex == null ? 0 : toInteger(fromIndex);
if (index < 0) {
index = nativeMax(length + index, 0);
}
return baseFindIndex(array, baseIteratee(predicate, 3), index);
}
module.exports = findIndex;
/***/ }),
/* 180 */
/***/ (function(module, exports, __webpack_require__) {
var arrayEach = __webpack_require__(105),
baseEach = __webpack_require__(24),
castFunction = __webpack_require__(130),
isArray = __webpack_require__(1);
/**
* Iterates over elements of `collection` and invokes `iteratee` for each element.
* The iteratee is invoked with three arguments: (value, index|key, collection).
* Iteratee functions may exit iteration early by explicitly returning `false`.
*
* **Note:** As with other "Collections" methods, objects with a "length"
* property are iterated like arrays. To avoid this behavior use `_.forIn`
* or `_.forOwn` for object iteration.
*
* @static
* @memberOf _
* @since 0.1.0
* @alias each
* @category Collection
* @param {Array|Object} collection The collection to iterate over.
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
* @returns {Array|Object} Returns `collection`.
* @see _.forEachRight
* @example
*
* _.forEach([1, 2], function(value) {
* console.log(value);
* });
* // => Logs `1` then `2`.
*
* _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
* console.log(key);
* });
* // => Logs 'a' then 'b' (iteration order is not guaranteed).
*/
function forEach(collection, iteratee) {
var func = isArray(collection) ? arrayEach : baseEach;
return func(collection, castFunction(iteratee));
}
module.exports = forEach;
/***/ }),
/* 181 */
/***/ (function(module, exports, __webpack_require__) {
var baseGet = __webpack_require__(38);
/**
* Gets the value at `path` of `object`. If the resolved value is
* `undefined`, the `defaultValue` is returned in its place.
*
* @static
* @memberOf _
* @since 3.7.0
* @category Object
* @param {Object} object The object to query.
* @param {Array|string} path The path of the property to get.
* @param {*} [defaultValue] The value returned for `undefined` resolved values.
* @returns {*} Returns the resolved value.
* @example
*
* var object = { 'a': [{ 'b': { 'c': 3 } }] };
*
* _.get(object, 'a[0].b.c');
* // => 3
*
* _.get(object, ['a', '0', 'b', 'c']);
* // => 3
*
* _.get(object, 'a.b.c', 'default');
* // => 'default'
*/
function get(object, path, defaultValue) {
var result = object == null ? undefined : baseGet(object, path);
return result === undefined ? defaultValue : result;
}
module.exports = get;
/***/ }),
/* 182 */
/***/ (function(module, exports, __webpack_require__) {
var baseHasIn = __webpack_require__(114),
hasPath = __webpack_require__(143);
/**
* Checks if `path` is a direct or inherited property of `object`.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Object
* @param {Object} object The object to query.
* @param {Array|string} path The path to check.
* @returns {boolean} Returns `true` if `path` exists, else `false`.
* @example
*
* var object = _.create({ 'a': _.create({ 'b': 2 }) });
*
* _.hasIn(object, 'a');
* // => true
*
* _.hasIn(object, 'a.b');
* // => true
*
* _.hasIn(object, ['a', 'b']);
* // => true
*
* _.hasIn(object, 'b');
* // => false
*/
function hasIn(object, path) {
return object != null && hasPath(object, path, baseHasIn);
}
module.exports = hasIn;
/***/ }),
/* 183 */
/***/ (function(module, exports, __webpack_require__) {
var arrayMap = __webpack_require__(37),
baseIteratee = __webpack_require__(12),
baseMap = __webpack_require__(121),
isArray = __webpack_require__(1);
/**
* Creates an array of values by running each element in `collection` thru
* `iteratee`. The iteratee is invoked with three arguments:
* (value, index|key, collection).
*
* Many lodash methods are guarded to work as iteratees for methods like
* `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
*
* The guarded methods are:
* `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
* `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
* `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
* `template`, `trim`, `trimEnd`, `trimStart`, and `words`
*
* @static
* @memberOf _
* @since 0.1.0
* @category Collection
* @param {Array|Object} collection The collection to iterate over.
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
* @returns {Array} Returns the new mapped array.
* @example
*
* function square(n) {
* return n * n;
* }
*
* _.map([4, 8], square);
* // => [16, 64]
*
* _.map({ 'a': 4, 'b': 8 }, square);
* // => [16, 64] (iteration order is not guaranteed)
*
* var users = [
* { 'user': 'barney' },
* { 'user': 'fred' }
* ];
*
* // The `_.property` iteratee shorthand.
* _.map(users, 'user');
* // => ['barney', 'fred']
*/
function map(collection, iteratee) {
var func = isArray(collection) ? arrayMap : baseMap;
return func(collection, baseIteratee(iteratee, 3));
}
module.exports = map;
/***/ }),
/* 184 */
/***/ (function(module, exports, __webpack_require__) {
var MapCache = __webpack_require__(23);
/** Error message constants. */
var FUNC_ERROR_TEXT = 'Expected a function';
/**
* Creates a function that memoizes the result of `func`. If `resolver` is
* provided, it determines the cache key for storing the result based on the
* arguments provided to the memoized function. By default, the first argument
* provided to the memoized function is used as the map cache key. The `func`
* is invoked with the `this` binding of the memoized function.
*
* **Note:** The cache is exposed as the `cache` property on the memoized
* function. Its creation may be customized by replacing the `_.memoize.Cache`
* constructor with one whose instances implement the
* [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
* method interface of `clear`, `delete`, `get`, `has`, and `set`.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Function
* @param {Function} func The function to have its output memoized.
* @param {Function} [resolver] The function to resolve the cache key.
* @returns {Function} Returns the new memoized function.
* @example
*
* var object = { 'a': 1, 'b': 2 };
* var other = { 'c': 3, 'd': 4 };
*
* var values = _.memoize(_.values);
* values(object);
* // => [1, 2]
*
* values(other);
* // => [3, 4]
*
* object.a = 2;
* values(object);
* // => [1, 2]
*
* // Modify the result cache.
* values.cache.set(object, ['a', 'b']);
* values(object);
* // => ['a', 'b']
*
* // Replace `_.memoize.Cache`.
* _.memoize.Cache = WeakMap;
*/
function memoize(func, resolver) {
if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
throw new TypeError(FUNC_ERROR_TEXT);
}
var memoized = function() {
var args = arguments,
key = resolver ? resolver.apply(this, args) : args[0],
cache = memoized.cache;
if (cache.has(key)) {
return cache.get(key);
}
var result = func.apply(this, args);
memoized.cache = cache.set(key, result) || cache;
return result;
};
memoized.cache = new (memoize.Cache || MapCache);
return memoized;
}
// Expose `MapCache`.
memoize.Cache = MapCache;
module.exports = memoize;
/***/ }),
/* 185 */
/***/ (function(module, exports, __webpack_require__) {
var baseProperty = __webpack_require__(124),
basePropertyDeep = __webpack_require__(125),
isKey = __webpack_require__(25),
toKey = __webpack_require__(15);
/**
* Creates a function that returns the value at `path` of a given object.
*
* @static
* @memberOf _
* @since 2.4.0
* @category Util
* @param {Array|string} path The path of the property to get.
* @returns {Function} Returns the new accessor function.
* @example
*
* var objects = [
* { 'a': { 'b': 2 } },
* { 'a': { 'b': 1 } }
* ];
*
* _.map(objects, _.property('a.b'));
* // => [2, 1]
*
* _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
* // => [1, 2]
*/
function property(path) {
return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
}
module.exports = property;
/***/ }),
/* 186 */
/***/ (function(module, exports) {
/**
* This method returns a new empty array.
*
* @static
* @memberOf _
* @since 4.13.0
* @category Util
* @returns {Array} Returns the new empty array.
* @example
*
* var arrays = _.times(2, _.stubArray);
*
* console.log(arrays);
* // => [[], []]
*
* console.log(arrays[0] === arrays[1]);
* // => false
*/
function stubArray() {
return [];
}
module.exports = stubArray;
/***/ }),
/* 187 */
/***/ (function(module, exports) {
/**
* This method returns `false`.
*
* @static
* @memberOf _
* @since 4.13.0
* @category Util
* @returns {boolean} Returns `false`.
* @example
*
* _.times(2, _.stubFalse);
* // => [false, false]
*/
function stubFalse() {
return false;
}
module.exports = stubFalse;
/***/ }),
/* 188 */
/***/ (function(module, exports, __webpack_require__) {
var toNumber = __webpack_require__(190);
/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0,
MAX_INTEGER = 1.7976931348623157e+308;
/**
* Converts `value` to a finite number.
*
* @static
* @memberOf _
* @since 4.12.0
* @category Lang
* @param {*} value The value to convert.
* @returns {number} Returns the converted number.
* @example
*
* _.toFinite(3.2);
* // => 3.2
*
* _.toFinite(Number.MIN_VALUE);
* // => 5e-324
*
* _.toFinite(Infinity);
* // => 1.7976931348623157e+308
*
* _.toFinite('3.2');
* // => 3.2
*/
function toFinite(value) {
if (!value) {
return value === 0 ? value : 0;
}
value = toNumber(value);
if (value === INFINITY || value === -INFINITY) {
var sign = (value < 0 ? -1 : 1);
return sign * MAX_INTEGER;
}
return value === value ? value : 0;
}
module.exports = toFinite;
/***/ }),
/* 189 */
/***/ (function(module, exports, __webpack_require__) {
var toFinite = __webpack_require__(188);
/**
* Converts `value` to an integer.
*
* **Note:** This method is loosely based on
* [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to convert.
* @returns {number} Returns the converted integer.
* @example
*
* _.toInteger(3.2);
* // => 3
*
* _.toInteger(Number.MIN_VALUE);
* // => 0
*
* _.toInteger(Infinity);
* // => 1.7976931348623157e+308
*
* _.toInteger('3.2');
* // => 3
*/
function toInteger(value) {
var result = toFinite(value),
remainder = result % 1;
return result === result ? (remainder ? result - remainder : result) : 0;
}
module.exports = toInteger;
/***/ }),
/* 190 */
/***/ (function(module, exports, __webpack_require__) {
var isObject = __webpack_require__(17),
isSymbol = __webpack_require__(18);
/** Used as references for various `Number` constants. */
var NAN = 0 / 0;
/** Used to match leading and trailing whitespace. */
var reTrim = /^\s+|\s+$/g;
/** Used to detect bad signed hexadecimal string values. */
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
/** Used to detect binary string values. */
var reIsBinary = /^0b[01]+$/i;
/** Used to detect octal string values. */
var reIsOctal = /^0o[0-7]+$/i;
/** Built-in method references without a dependency on `root`. */
var freeParseInt = parseInt;
/**
* Converts `value` to a number.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to process.
* @returns {number} Returns the number.
* @example
*
* _.toNumber(3.2);
* // => 3.2
*
* _.toNumber(Number.MIN_VALUE);
* // => 5e-324
*
* _.toNumber(Infinity);
* // => Infinity
*
* _.toNumber('3.2');
* // => 3.2
*/
function toNumber(value) {
if (typeof value == 'number') {
return value;
}
if (isSymbol(value)) {
return NAN;
}
if (isObject(value)) {
var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
value = isObject(other) ? (other + '') : other;
}
if (typeof value != 'string') {
return value === 0 ? value : +value;
}
value = value.replace(reTrim, '');
var isBinary = reIsBinary.test(value);
return (isBinary || reIsOctal.test(value))
? freeParseInt(value.slice(2), isBinary ? 2 : 8)
: (reIsBadHex.test(value) ? NAN : +value);
}
module.exports = toNumber;
/***/ }),
/* 191 */
/***/ (function(module, exports, __webpack_require__) {
var baseToString = __webpack_require__(127);
/**
* Converts `value` to a string. An empty string is returned for `null`
* and `undefined` values. The sign of `-0` is preserved.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to convert.
* @returns {string} Returns the converted string.
* @example
*
* _.toString(null);
* // => ''
*
* _.toString(-0);
* // => '-0'
*
* _.toString([1, 2, 3]);
* // => '1,2,3'
*/
function toString(value) {
return value == null ? '' : baseToString(value);
}
module.exports = toString;
/***/ }),
/* 192 */
/***/ (function(module, exports, __webpack_require__) {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(91);
if(typeof content === 'string') content = [[module.i, content, '']];
// add the styles to the DOM
var update = __webpack_require__(27)(content, {});
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept("!!./../../../node_modules/css-loader/index.js!./../../../node_modules/postcss-loader/index.js!./index.pcss", function() {
var newContent = require("!!./../../../node_modules/css-loader/index.js!./../../../node_modules/postcss-loader/index.js!./index.pcss");
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ }),
/* 193 */
/***/ (function(module, exports, __webpack_require__) {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(95);
if(typeof content === 'string') content = [[module.i, content, '']];
// add the styles to the DOM
var update = __webpack_require__(27)(content, {});
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept("!!./../../css-loader/index.js?root=./docs!./color-brewer.css", function() {
var newContent = require("!!./../../css-loader/index.js?root=./docs!./color-brewer.css");
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ }),
/* 194 */
/***/ (function(module, exports) {
module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE+CkNyZWF0ZWQgYnkgRm9udEZvcmdlIDIwMTIwNzMxIGF0IEZyaSBTZXAgMjMgMTE6NTQ6MjUgMjAxNgogQnkgYWRtaW4KPC9tZXRhZGF0YT4KPGRlZnM+Cjxmb250IGlkPSJpY29uZm9udCIgaG9yaXotYWR2LXg9IjEwMjQiID4KICA8Zm9udC1mYWNlIAogICAgZm9udC1mYW1pbHk9Imljb25mb250IgogICAgZm9udC13ZWlnaHQ9IjUwMCIKICAgIGZvbnQtc3RyZXRjaD0ibm9ybWFsIgogICAgdW5pdHMtcGVyLWVtPSIxMDI0IgogICAgcGFub3NlLTE9IjIgMCA2IDMgMCAwIDAgMCAwIDAiCiAgICBhc2NlbnQ9Ijg5NiIKICAgIGRlc2NlbnQ9Ii0xMjgiCiAgICB4LWhlaWdodD0iNzkyIgogICAgYmJveD0iLTAuNDQ2MDQzIC0yMDkgMTEwNyA5MzMiCiAgICB1bmRlcmxpbmUtdGhpY2tuZXNzPSI1MCIKICAgIHVuZGVybGluZS1wb3NpdGlvbj0iLTEwMCIKICAgIHVuaWNvZGUtcmFuZ2U9IlUrMDA3OC1FNjU2IgogIC8+CjxtaXNzaW5nLWdseXBoIGhvcml6LWFkdi14PSIzNzQiIApkPSJNMzQgMHY2ODJoMjcydi02ODJoLTI3MnpNNjggMzRoMjA0djYxNGgtMjA0di02MTR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Ii5ub3RkZWYiIGhvcml6LWFkdi14PSIzNzQiIApkPSJNMzQgMHY2ODJoMjcydi02ODJoLTI3MnpNNjggMzRoMjA0djYxNGgtMjA0di02MTR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Ii5udWxsIiBob3Jpei1hZHYteD0iMCIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Im5vbm1hcmtpbmdyZXR1cm4iIGhvcml6LWFkdi14PSIzNDEiIAogLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ4IiB1bmljb2RlPSJ4IiBob3Jpei1hZHYteD0iMTAwMSIgCmQ9Ik0yODEgNTQzcS0yNyAtMSAtNTMgLTFoLTgzcS0xOCAwIC0zNi41IC02dC0zMi41IC0xOC41dC0yMyAtMzJ0LTkgLTQ1LjV2LTc2aDkxMnY0MXEwIDE2IC0wLjUgMzB0LTAuNSAxOHEwIDEzIC01IDI5dC0xNyAyOS41dC0zMS41IDIyLjV0LTQ5LjUgOWgtMTMzdi05N2gtNDM4djk3ek05NTUgMzEwdi01MnEwIC0yMyAwLjUgLTUydDAuNSAtNTh0LTEwLjUgLTQ3LjV0LTI2IC0zMHQtMzMgLTE2dC0zMS41IC00LjVxLTE0IC0xIC0yOS41IC0wLjUKdC0yOS41IDAuNWgtMzJsLTQ1IDEyOGgtNDM5bC00NCAtMTI4aC0yOWgtMzRxLTIwIDAgLTQ1IDFxLTI1IDAgLTQxIDkuNXQtMjUuNSAyM3QtMTMuNSAyOS41dC00IDMwdjE2N2g5MTF6TTE2MyAyNDdxLTEyIDAgLTIxIC04LjV0LTkgLTIxLjV0OSAtMjEuNXQyMSAtOC41cTEzIDAgMjIgOC41dDkgMjEuNXQtOSAyMS41dC0yMiA4LjV6TTMxNiAxMjNxLTggLTI2IC0xNCAtNDhxLTUgLTE5IC0xMC41IC0zN3QtNy41IC0yNXQtMyAtMTV0MSAtMTQuNQp0OS41IC0xMC41dDIxLjUgLTRoMzdoNjdoODFoODBoNjRoMzZxMjMgMCAzNCAxMnQyIDM4cS01IDEzIC05LjUgMzAuNXQtOS41IDM0LjVxLTUgMTkgLTExIDM5aC0zNjh6TTMzNiA0OTh2MjI4cTAgMTEgMi41IDIzdDEwIDIxLjV0MjAuNSAxNS41dDM0IDZoMTg4cTMxIDAgNTEuNSAtMTQuNXQyMC41IC01Mi41di0yMjdoLTMyN3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYwMCIgdW5pY29kZT0iJiN4ZTYwMDsiIApkPSJNMCA3NjhxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41aDc2OHE1MyAwIDkwLjUgLTM3LjV0MzcuNSAtOTAuNXYtNzY4cTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41aC03NjhxLTUzIDAgLTkwLjUgMzcuNXQtMzcuNSA5MC41djc2OHpNNTIzIDc0NXEtMTEzIDAgLTE3OSAtNjR0LTY2IC0xNzhoMTE2cTAgNjYgMjYgMTAwcTI4IDQyIDk2IDQycTUzIDAgODIgLTI5cTI5IC0zMCAyOSAtNzlxMCAtMzkgLTI4IC03M2wtMTIgLTE0CnEtMTAxIC05MCAtMTIwIC0xMzFxLTIxIC0zOSAtMjEgLTEwMHYtMTRoMTE4djE0cTAgMzYgMTYgNjdxMTQgMjkgNDEgNTFxNzEgNjMgODggODFxMzcgNTAgMzcgMTI2cTAgOTMgLTYxIDE0N3EtNjAgNTQgLTE2MiA1NHpNNTA1IDE1NXEtMzMgMCAtNTYgLTIycS0yMyAtMjEgLTIzIC01NXQyMyAtNTVxMjQgLTIzIDU2IC0yM3EzMyAwIDU2IDIycTI0IDIxIDI0IDU2cTAgMzMgLTIzIDU1dC01NyAyMnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYwMSIgdW5pY29kZT0iJiN4ZTYwMTsiIApkPSJNNzY4IDMyOHYtMzIwaC02NDB2NzA0aDMyMHEyNyAwIDQ1LjUgMTguNXQxOC41IDQ1dC0xOC41IDQ1LjV0LTQ1LjUgMTloLTMyMHEtNTMgMCAtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXYtNzA0cTAgLTUzIDM3LjUgLTkwLjV0OTAuNSAtMzcuNWg2NDBxNTMgMCA5MC41IDM3LjV0MzcuNSA5MC41djMyMHEwIDI2IC0xOC41IDQ1dC00NS41IDE5dC00NS41IC0xOXQtMTguNSAtNDV6TTc0OCA4NzNxMTcgMjEgNDMuNSAyM3Q0Ny41IC0xNQpsOTcgLTgycTIwIC0xNyAyMi41IC00My41dC0xNC41IC00Ni41bC00MSAtNDlsLTE5NiAxNjR6TTMxMSAxNTRsMjIyIDY0bC0xOTYgMTY1ek02NjYgNzc1bDE5NiAtMTY0bC0yODggLTM0NGwtMTk2IDE2NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYwMiIgdW5pY29kZT0iJiN4ZTYwMjsiIApkPSJNMCA3NjhxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41aDc2OHE1MyAwIDkwLjUgLTM3LjV0MzcuNSAtOTAuNXYtNzY4cTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41aC03NjhxLTUzIDAgLTkwLjUgMzcuNXQtMzcuNSA5MC41djc2OHpNODI3IDM4MnEtNyA0MyAtNDkgNTBoLTIxNnYyMjJxLTcgNDMgLTQ5IDUwcS01NiAtNyAtNTYgLTU3di0yMTVoLTIwOXEtNTYgLTcgLTU2IC01MHEwIC01OCA1NiAtNThoMjA5di0yMDcKcTAgLTU4IDU2IC01OHE0OSAtNyA0OSA1MHYyMTVoMjA5cTQ5IDAgNTYgNTh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2MDMiIHVuaWNvZGU9IiYjeGU2MDM7IiAKZD0iTTgyOSA4OTZoLTY0MHEtNTQgMCAtOTIuNSAtMzZ0LTM4LjUgLTg4di03NjdxMCAtNTQgMzkgLTkzLjV0OTIgLTM5LjVoMzg2cTI2IDAgNDUgMTguNXQxOSA0NS41dC0xOSA0NS41dC00NSAxOC41aC0zODZsLTEgMmwtMiAzdjc2N2wzIC00aDY0MGgtMWgtMnYtMTkwcTAgLTI3IDE4LjUgLTQ1LjV0NDUgLTE4LjV0NDUuNSAxOC41dDE5IDQ1LjV2MTk0cTAgNTMgLTM2IDg4LjV0LTg5IDM1LjV6TTc4MSAxNzVxNDggNjcgNDggMTQ5CnEwIDEwNiAtNzUgMTgxdC0xODEgNzV0LTE4MSAtNzV0LTc1IC0xODF0NzUgLTE4MXQxODEgLTc1cTU3IDAgMTA5IDI1bDE1OSAtMTU5cTE4IC0xOSA0NC41IC0xOC41dDQ1LjUgMTguNXExOSAxOSAxOSA0NS41dC0xOSA0NC41ek01NzMgMTk2cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXQtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYwNCIgdW5pY29kZT0iJiN4ZTYwNDsiIApkPSJNMTAwMiA2MjlsLTI0NSAyNDVxLTE3IDE3IC00MSAxN3QtNDEgLTE3bC0yNDUgLTI0NXEtMTcgLTE3IC0xNyAtNDF0MTcgLTQxbDQxIC00MGwyNDUgMjQ1bDE2NCAtMTY0bC0yNDYgLTI0NWw0MSAtNDFxMTcgLTE3IDQxIC0xN3Q0MSAxN2wyNDUgMjQ1cTE3IDE3IDE3IDQxdC0xNyA0MXpNNTUzIDI2MWwtMjQ1IC0yNDVsLTE2NCAxNjRsMjQ1IDI0NWwtNDAgNDFxLTE3IDE3IC00MSAxN3QtNDEgLTE3bC0yNDUgLTI0NQpxLTE3IC0xNyAtMTcgLTQxdDE3IC00MWwyNDUgLTI0NXExNyAtMTcgNDEgLTE3dDQxIDE3bDI0NSAyNDVxMTcgMTcgMTcgNDF0LTE3IDQxek0zNDkgMjIxcTE3IC0xNyA0MC41IC0xN3Q0MC41IDE3bDI0NSAyNDVxMTcgMTcgMTcgNDAuNXQtMTcgNDAuNXQtNDAuNSAxN3QtNDAuNSAtMTdsLTI0NSAtMjQ1cS0xNyAtMTcgLTE3IC00MC41dDE3IC00MC41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjA1IiB1bmljb2RlPSImI3hlNjA1OyIgCmQ9Ik01MDkgLTEyMnEtMTA0IDAgLTE5OCA0MC41dC0xNjIgMTA4LjV0LTEwOC41IDE2Mi41dC00MC41IDE5OHQ0MC41IDE5Ny41dDEwOC41IDE2MnQxNjIgMTA4LjV0MTk3LjUgNDAuNXQxOTggLTQwLjV0MTYyLjUgLTEwOC41dDEwOC41IC0xNjJ0NDAuNSAtMTk3LjV0LTQwLjUgLTE5OHQtMTA4LjUgLTE2Mi41dC0xNjIuNSAtMTA4LjV0LTE5Ny41IC00MC41ek03NDUgNjI1cS0xOCAxOCAtNDMgMTh0LTQzIC0xOGwtMTUxIC0xNTFsLTE1MCAxNDkKcS0xNyAxOCAtNDIuNSAxOHQtNDIuNSAtMThoLTFxLTE3IC0xNyAtMTcgLTQyLjV0MTcgLTQyLjVsMTUwIC0xNTBsLTE1MSAtMTUxcS0xOCAtMTggLTE4IC00M3QxOCAtNDN0NDMgLTE4dDQzIDE4bDE1MSAxNTFsMTUxIC0xNTFxMTggLTE4IDQzIC0xOHQ0MyAxOHQxOCA0M3QtMTggNDNsLTE1MSAxNTFsMTUxIDE1MXExOCAxOCAxOCA0M3QtMTggNDN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2MDYiIHVuaWNvZGU9IiYjeGU2MDY7IiAKZD0iTTcyMyA1NzNxNTMgMCA2NSAyN3QtMjUgNjRsLTIwNSAyMTJxLTE4IDE5IC00NCAxOXQtNDUgLTE5bC0yMTIgLTIxMnEtMzcgLTM4IC0yNiAtNjQuNXQ2NCAtMjYuNWgxMzh2LTQyMXEwIC0yMiAxNSAtMzcuNXQzNiAtMTUuNWg1MHEyMSAwIDM2IDE1LjV0MTUgMzcuNXY0MjFoMTM4ek0xNTggLTEyOHEtMzkgMCAtNjYuNSAyOC41dC0yNy41IDY4LjV2Mzg4cTAgNDEgMjcuNSA2OS41dDY2LjUgMjguNWgxMDBxMjYgMCA0NC41IC0xOQp0MTguNSAtNDZ2LTMzaC03MHEtMzggMCAtNjUuNSAtMjh0LTI3LjUgLTY5di0xOTRxMCAtNDAgMjcuNSAtNjguNXQ2NS41IC0yOC41aDUxNnEzOSAwIDY2IDI4LjV0MjcgNjguNXYxOTRxMCA0MSAtMjcgNjl0LTY2IDI4aC03MXYzM3EwIDI3IDE5IDQ2dDQ1IDE5aDEwMHEzOSAwIDY2LjUgLTI4LjV0MjcuNSAtNjkuNXYtMzg4cTAgLTQwIC0yNy41IC02OC41dC02Ni41IC0yOC41aC03MDJ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2MDciIHVuaWNvZGU9IiYjeGU2MDc7IiBob3Jpei1hZHYteD0iMTAyNSIgCmQ9Ik03MDYgMzgzcTI3IDAgMzMuNSAtMTQuNXQtMTAuNSAtMzUuNWwtMTc0IC0yMTFxLTE3IC0yMCAtNDEgLTIwdC00MSAyMGwtMTc4IDIxMnEtMTcgMjAgLTEwIDM0LjV0MzQgMTQuNWgxMzJ2NDQ5cTAgMjYgMTguNSA0NXQ0NS41IDE5aC0zcTI2IDAgNDUgLTE5dDE5IC00NXYtNDQ5aDEzMHpNNzMgLTEyN3EtNDIgMCAtNTcuNSAxNHQtMTUuNSA1NHY2OTNxMCA0MCAxNS41IDU0LjV0NTcuNSAxNC41aDExOXEyNyAwIDQ1LjUgLTE5dDE4LjUgLTQ1CnYtNjJoLTY1cS0xOCAwIC0zMSAtNi41dC0xOSAtMTUuNXQtOS41IC0xOHQtMy41IC0xNWwtMSAtNnYtNDU2cTAgLTIzIDE2LjUgLTQyLjV0NDcuNSAtMTkuNWg2NDBxMjggMCA0NyAxOC41dDE5IDQzLjV2NDU2cS0xIDAgMCA2dC0yLjUgMTUuNXQtOSAxOHQtMjAgMTV0LTM0LjUgNi41aC02MnY2MnEwIDI2IDE5IDQ1dDQ1IDE5aDEzMnEzOSAwIDQ5IC0xM3QxMCAtNTZ2LTY5M3EwIC00MyAtMTAgLTU1LjV0LTQ5IC0xMi41aC04OTJ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2MDgiIHVuaWNvZGU9IiYjeGU2MDg7IiBob3Jpei1hZHYteD0iMTAyNSIgCmQ9Ik0yOTEgNDc3aDM0OXE4MCAwIDEzNiAtNTYuNXQ1NiAtMTM1LjVxMCAtODAgLTU2IC0xMzZ0LTEzNSAtNTZoLTM4MWgtM3EtMjcgMCAtNDUuNSAtMTl0LTE4LjUgLTQ1LjV0MTguNSAtNDV0NDUuNSAtMTguNWgzaDM4MXExMzIgMCAyMjUuNSA5My41dDkzLjUgMjI2LjVxMCA4NiAtNDIuNSAxNjB0LTExNi41IDExN3QtMTYxIDQzaC0zNDl2MTI4cTAgMjYgLTE0LjUgMzN0LTM1LjUgLTlsLTIyMCAtMTc2cS0yMSAtMTcgLTIxIC00MC41CnQyMSAtMzkuNWwyMjAgLTE3NnEyMSAtMTcgMzUuNSAtMTB0MTQuNSAzM3YxMjl6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2MDkiIHVuaWNvZGU9IiYjeGU2MDk7IiAKZD0iTTY1MCAzODRsMzQ1IDM0NXEyOSAyOSAyOSA2OS41dC0yOC41IDY5dC02OSAyOC41dC02OS41IC0yOWwtMzQ1IC0zNDVsLTM0NSAzNDVxLTI5IDI5IC02OS41IDI5dC02OC41IC0yOXEtMjkgLTI4IC0yOSAtNjguNXQyOSAtNjkuNWwzNDUgLTM0NWwtMzQ1IC0zNDVxLTI5IC0yOSAtMjkgLTY5LjV0MjkgLTY4LjVxMjggLTI5IDY4LjUgLTI5dDY5LjUgMjlsMzQ1IDM0NWwzNDUgLTM0NXEyOSAtMjkgNjkuNSAtMjl0NjkgMjguNXQyOC41IDY5CnQtMjkgNjkuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYwQSIgdW5pY29kZT0iJiN4ZTYwYTsiIGhvcml6LWFkdi14PSIxMDI1IiAKZD0iTTgwNCAxMzNsLTQ5MCA1ODJxNzkgNDcgMTcwIDUzLjV0MTc2LjUgLTI5dDE0Ni41IC0xMDcuNXE5MiAtMTEwIDkwLjUgLTI1MS41dC05My41IC0yNDcuNXpNMjE3IDEzNnEtOTIgMTEwIC05MC41IDI1MS41dDkzLjUgMjQ3LjVsNDkwIC01ODJxLTc5IC00NyAtMTcwIC01My41dC0xNzYuNSAyOXQtMTQ2LjUgMTA3LjV6TTE4MiA3NzVxLTEwNiAtODkgLTE1MiAtMjE3LjV0LTIyLjUgLTI2M3QxMTMgLTI0MC41dDIxOCAtMTUydDI2MyAtMjIuNQp0MjQwLjUgMTEzdDE1MiAyMTh0MjIuNSAyNjN0LTExMyAyNDAuNXQtMjE4IDE1MnQtMjYzIDIyLjV0LTI0MC41IC0xMTMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYwQiIgdW5pY29kZT0iJiN4ZTYwYjsiIApkPSJNNjE3IDU0N2wtNzMgMTMwcS0xMyAyMyAtMzIgMjN0LTMyIC0yM2wtNzMgLTEzMGwtMTUyIC0yOHEtMjYgLTUgLTMxLjUgLTIxLjV0MTIuNSAtMzYuNWwxMDUgLTEwOWwtMTkgLTE0N3EtMyAtMjcgMTEuNSAtMzcuNXQzOC41IDAuNWwxNDAgNjRsMTQwIC02NHEyNCAtMTEgMzguNSAwdDExLjUgMzdsLTE5IDE0N2wxMDUgMTA5cTE4IDE5IDEyLjUgMzZ0LTMxLjUgMjJ6TTAgMTYydjE3MXYxNDV2MzMzcTAgMzUgMjkuNSA2MHQ3MC41IDI1aDgyNApxNDEgMCA3MC41IC0yNXQyOS41IC02MHYtMzMzdi0xNDV2LTE3MXEwIC00OSAtMjggLTkxLjV0LTczLjUgLTcxdC0xMDAgLTUydC0xMDkgLTM3dC0xMDAgLTIyLjV0LTczLjUgLTEybC0yOCAtNHEtNyAxIC0xOCAydC00NiA3dC02OSAxM3QtODAgMjB0LTg1LjUgMjh0LTgwIDM4dC02OSA0OC41dC00Ni41IDYwLjV0LTE4IDczeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjBDIiB1bmljb2RlPSImI3hlNjBjOyIgaG9yaXotYWR2LXg9IjEwOTMiIApkPSJNNTYyIDQwNmwtMTQ1IDE0NXEtMzAgMjkgLTcyLjUgMjl0LTcyLjUgLTI5cS0zMCAtMzEgLTMwIC03M3QzMCAtNzJsMTQ1IC0xNDVsLTE0NSAtMTQ1cS0zMCAtMzAgLTMwIC03Mi41dDMwIC03Mi41dDcyLjUgLTMwdDcyLjUgMzBsMTQ1IDE0NWwxNDUgLTE0NXEzMCAtMzAgNzIgLTMwdDczIDMwcTMwIDMwIDMwIDcyLjV0LTMwIDcyLjVsLTE0NSAxNDVsMTQ1IDE0NXEyOSAzMCAyOSA3MnQtMjkgNzNxLTMxIDMwIC03MyAzMHQtNzIgLTMwegpNMCA3OTNxMCA0MyAzMCA3M3Q3MyAzMGg4ODdxNDIgMCA3MiAtMzB0MzAgLTczdC0zMCAtNzN0LTcyIC0zMGgtODg3cS00MyAwIC03MyAzMHQtMzAgNzN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2MEQiIHVuaWNvZGU9IiYjeGU2MGQ7IiBob3Jpei1hZHYteD0iMTAyNiIgCmQ9Ik0yMjAgNDMyaDE0N3YtMTQ5aC0xNDd2MTQ5ek00NDIgMjgzaDE0N3YxNDloLTE0N3YtMTQ5ek02NjQgMjgzaDE0NnYxNDloLTE0NnYtMTQ5ek0yMjAgNjVoMTQ3djE0OWgtMTQ3di0xNDl6TTQ0MiA2NWgxNDd2MTQ5aC0xNDd2LTE0OXpNNjY0IDY1aDE0NnYxNDloLTE0NnYtMTQ5ek04NjUgNzM0cTAgLTE5IC0xMy41IC0zMi41dC0zMiAtMTMuNXQtMzIgMTMuNXQtMTMuNSAzMi41djExNnEwIDE5IDEzLjUgMzIuNXQzMiAxMy41dDMyIC0xMy41CnQxMy41IC0zMi41di0xMTZ6TTI1NCA4NTBxMCAxOSAtMTMuNSAzMi41dC0zMiAxMy41dC0zMiAtMTMuNXQtMTMuNSAtMzIuNXYtMTE2cTAgLTE5IDEzLjUgLTMyLjV0MzIgLTEzLjV0MzIgMTMuNXQxMy41IDMyLjV2MTE2ek05MjAgNzgzdi00OHEwIC00MiAtMjkuNSAtNzEuNXQtNzEgLTI5LjV0LTcwLjUgMjkuNXQtMjkgNzEuNXY0OGgtNDEydi00N3EwIC00MiAtMjkgLTcydC03MC41IC0zMHQtNzAuNSAzMHQtMjkgNzJ2NDdoLTEwOXYtOTExCmgxMDI2djkxMWgtMTA2ek0xMDAgNTM4aDgyNnYtNTY1aC04MjZ2NTY1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjBFIiB1bmljb2RlPSImI3hlNjBlOyIgCmQ9Ik04NjkuNSAxMzVxLTkuNSAxMSAtMzUuNSAxMWgtMzM2djI3MWgyODdxMjUgMCAzNCAxMS41dDkgMzMuNXQtMTAuNSAzMy41dC0zNC41IDExLjVoLTI4NXYxODlxMCAyNiAtMTEuNSAzNXQtMzQuNSA5cS0yNCAwIC0zNC41IC05dC0xMC41IC0zNXYtNTUwaC0yMTBxLTI1IDAgLTM1IC0xMXQtMTAgLTM1cTAgLTIxIDEwLjUgLTMyLjV0MzQuNSAtMTEuNWg2MzdxMjQgMCAzNC41IDExLjV0MTAuNSAzMi41cTAgMjQgLTkuNSAzNXpNOTQ5IC0xMjgKaC04NzRxLTMxIDAgLTUzIDIydC0yMiA1M3Y4NzRxMCAzMSAyMiA1M3Q1MyAyMmg4NzRxMzEgMCA1MyAtMjJ0MjIgLTUzdi04NzRxMCAtMzEgLTIyIC01M3QtNTMgLTIyeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjBGIiB1bmljb2RlPSImI3hlNjBmOyIgaG9yaXotYWR2LXg9IjEwMjUiIApkPSJNMTAxOCAzODVxMCAtMTAzIC00MC41IC0xOTcuNXQtMTA4LjUgLTE2Mi41dC0xNjIgLTEwOHQtMTk3IC00MHEtMTA0IDAgLTE5OC41IDQwLjV0LTE2MyAxMDl0LTEwOC41IDE2M3QtNDAgMTk4LjV0NDEgMTk4LjV0MTEwIDE2Mi41dDE2NCAxMDcuNXQyMDAgMzkuNXExMDIgMCAxOTUgLTQxdDE2MC41IC0xMDkuNXQxMDcuNSAtMTYyLjV0NDAgLTE5OHpNNDAwIDI1NXEtMTAwIDEwNiAtMTA4IDExM3EtMjUgMjUgLTU1LjUgMjV0LTUzLjUgLTIzCnEtMjEgLTIzIC0xOS41IC01MC41dDI3LjUgLTUyLjVxNDkgLTUxIDEzNyAtMTM5cTQwIC0zOSA3My41IC0zOXQ3My41IDQwcTE3MyAxNzIgMjE1IDIxNHExMTkgMTE5IDE0MS41IDE0Mi41dDIyLjUgNTIuNXQtMjEgNTBxLTIwIDIwIC01MC41IDE5LjV0LTU0LjUgLTIyLjVxLTggLTcgLTMxIC0zMHEtNTAgLTUxIC0yOTcgLTMwMHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYxMCIgdW5pY29kZT0iJiN4ZTYxMDsiIApkPSJNMzQ5IDMwcTI4IC0zMCA2Ny41IC0zMHQ2Ny41IDMxbDUxMiA1NTlxMjggMzEgMjggNzR0LTI4IDczLjV0LTY3LjUgMzAuNXQtNjcuNSAtMzFsLTUxMiAtNTU5aDEzNWwtMzIxIDM0NnEtMjggMzEgLTY4IDMwLjV0LTY3LjUgLTMxdC0yNy41IC03NHQyOCAtNzMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYxMSIgdW5pY29kZT0iJiN4ZTYxMTsiIApkPSJNNDI5IDEyOGgtMjEwcS0zOSAwIC02Ny41IC0yOHQtMjguNSAtNjh0MjggLTY4dDY4IC0yOGg1NzdxMzkgMCA2NyAyOHQyOCA2OHQtMjggNjh0LTY3IDI4aC0yMDV2MjcxbDU4IC01OHExNyAtMTcgNDkgLTE5dDQ5IDE0dDE3IDQ1LjV0LTE3IDQ2LjVsLTE5MSAxODdxLTMgNSAtNyA5cS0xNiAxNiAtNDAgMTZ0LTQxIC0xNnEtNCAtNCAtNyAtOWwtMTkxIC0xODdxLTE2IC0xNyAtMTQgLTQzLjV0MTkgLTQzLjVxMTggLTE2IDUwIC0xMi41CnQ0OSAyMC41bDU1IDUwdi0yNzF6TTAgNzk5LjVxMCA0MC41IDI4IDY4LjV0NjggMjhoODMycTQwIDAgNjggLTI4dDI4IC02OC41dC0yOCAtNjguNXQtNjggLTI4aC04MzJxLTQwIDAgLTY4IDI4dC0yOCA2OC41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjEyIiB1bmljb2RlPSImI3hlNjEyOyIgCmQ9Ik0yMTQgNDMxcS0yMiAtMjMgLTIyIC01MnQyMiAtNTJsNDE2IC00MjZxMjUgLTI1IDY1IC0yOC41dDcwLjUgMTh0MzQuNSA1NC41dC0yMiA1OWwtNDE2IDQyNnYtMTAzbDQzNCA0MzZxMjYgMjYgMjIuNSA1OS41dC0zNCA1NXQtNzAgMTguNXQtNjUuNSAtMjl6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2MTMiIHVuaWNvZGU9IiYjeGU2MTM7IiAKZD0iTTYyOCA3MzJxMjkgMjUgNDkgMTZ0MjAgLTQ4di01ODVxMCAtMzkgLTIxIC00OXQtNTEgMTVsLTMxMSAyNTRxLTI5IDI0IC0zMCA1OS41dDI4IDYwLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2MTQiIHVuaWNvZGU9IiYjeGU2MTQ7IiAKZD0iTTEzOSA0NDJxMCAxMzAgOTIgMjIydDIyMiA5MnQyMjIgLTkydDkyIC0yMjJ0LTkyIC0yMjJ0LTIyMiAtOTJ0LTIyMiA5MnQtOTIgMjIyek0xMDAwIDExbC0xNzQgMTc1cTgwIDExNiA4MCAyNTZxMCA5MyAtMzYgMTc3dC05Ni41IDE0NC41dC0xNDQuNSA5Ni41dC0xNzYgMzZ0LTE3NiAtMzZ0LTE0NC41IC05Ni41dC05Ni41IC0xNDQuNXQtMzYgLTE3Ni41dDM2IC0xNzYuNXQ5Ni41IC0xNDQuNXQxNDQuNSAtOTYuNXQxNzYgLTM2CnExNDEgMCAyNTggODFsMTc0IC0xNzRxMjQgLTI0IDU3LjUgLTI0dDU3LjUgMjR0MjQgNTh0LTI0IDU3eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjE1IiB1bmljb2RlPSImI3hlNjE1OyIgaG9yaXotYWR2LXg9IjEwMjUiIApkPSJNNTE0IDIwMXEtMyAtMyAtMiAwcS0xMiAtOCAtMjQuNSAtOXQtMjAuNSA2bC0yMDQgMTkycS05IDkgLTYuNSAyM3QxNC41IDI2bDIwIDE5cTEzIDExIDI4IDEzLjV0MjMgLTUuNWwxNDcgLTEzOGwyIDJsMTkxIDI0MHE4IDggMjMgNS41dDI4IC0xNC41bDIwIC0xOXExMiAtMTIgMTQuNSAtMjZ0LTYuNSAtMjJ6TTg2NiA1MzNsLTEgMXEtMTMgMzIgLTM0IDYzcTAgMSAtMyA0cS0xOSAyOCAtMjEgMzFxLTQgNSAtMTIgMTIuNXQtMTAgOS41CmwtNCAzcS0yNSAyNSAtNTMgNDRsLTMgMnEtMzAgMjEgLTYyIDM0cS0xIDAgLTEgMWgtMXEtODIgMzUgLTE3NSAyOS41dC0xNzIgLTUyLjVsMiAtMnEtNTMgLTMyIC05NCAtODBsLTIgMnEtNyAtNyAtMjYgLTM2bC0xIC0xcS01NCAtODAgLTYzLjUgLTE3N3QyOC41IC0xODZsMSAtMXExMyAtMzIgMzMgLTYzcTEgMCAyIC0xLjV0MiAtMi41cTIwIC0yOSAyMSAtMzFxNCAtNSAxMiAtMTIuNXQxMCAtOC41cTIgLTMgNCAtNHEyNSAtMjUgNTMgLTQ0CnEyIC0xIDMgLTJxMzAgLTIwIDYyIC0zNHExIC0xIDIgLTFxODIgLTM1IDE3NSAtMjkuNXQxNzIgNTIuNWwtMiAycTUzIDMyIDk0IDgwbDIgLTJxNyA3IDI2IDM2bDEgMXE1NCA4MCA2My41IDE3N3QtMjguNSAxODZ6TTg0MiAtOHEtMTA2IC04OSAtMjQwLjUgLTExMi41dC0yNjMgMjIuNXQtMjE4IDE1MnQtMTEzIDI0MC41dDIyLjUgMjYzdDE1MiAyMTh0MjQwLjUgMTEzdDI2MyAtMjIuNXQyMTggLTE1MnQxMTMgLTI0MC41dC0yMi41IC0yNjMKdC0xNTIgLTIxOC41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjE2IiB1bmljb2RlPSImI3hlNjE2OyIgCmQ9Ik04NjUgNjg2LjVxLTkgMTEuNSAtMzQgMTEuNWgtNjI5cS0yNiAwIC0zNSAtMTEuNXQtOSAtMzIuNXQ5IC0zMi41dDM1IC0xMS41aDI1MHYtNTM4cTAgLTI3IDExLjUgLTM1LjV0MzQuNSAtOC41cTIwIDAgMzIuNSA4LjV0MTIuNSAzNS41djM0NnE0OCAtMzQgOTQgLTY5cTQ3IC0zNSA4MyAtNjdxMTUgLTEyIDI1LjUgLTE5dDE5IC04LjV0MTYuNSAyLjV0MTcgMTJxMjEgMjEgMTguNSAzOC41dC0zMi41IDQzLjVxLTI2IDIxIC01NSA0NApxLTMwIDIzIC02MiA0NnEtMzIgMjQgLTYzIDQ2cS0zMiAyMiAtNjEgNDB2ODNoMjg4cTI1IDAgMzQgMTEuNXQ5IDMyLjV0LTkgMzIuNXpNMTM5IC0xMjhxLTMyIDAgLTU3LjUgMTAuNXQtNDAgMjZ0LTI0LjUgMzUuNXQtMTMuNSAzNi41dC0zLjUgMzAuNXY3NDZxMCAxOSAxIDMxdDggMzV0MjAuNSAzN3Q0MS41IDI1dDY4IDExaDc0NnExOSAwIDMxIC0xdDM1IC04dDM3IC0yMC41dDI1IC00MS41dDExIC02OHYtNzQ2cTAgLTE5IC0xIC0zMQp0LTggLTM1dC0yMC41IC0zN3QtNDEuNSAtMjV0LTY4IC0xMWgtNzQ2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjE3IiB1bmljb2RlPSImI3hlNjE3OyIgCmQ9Ik0xNjQgMjgwcS0yNyAtMjggLTE4IC00OHQ0NyAtMjBoNjM3cTM4IDAgNDcuNSAyMC41dC0xNS41IDQ5LjVsLTI3NSAzMTVxLTI1IDI5IC02MS41IDMwdC02Mi41IC0yN3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYxOCIgdW5pY29kZT0iJiN4ZTYxODsiIApkPSJNMTY0IDQ1NXEtMjcgMjggLTE4IDQ3LjV0NDcgMTkuNWg2MzdxMzggMCA0Ny41IC0yMC41dC0xNS41IC00OS41bC0yNzUgLTMxNXEtMjUgLTI5IC02MS41IC0yOS41dC02Mi41IDI3LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2MTkiIHVuaWNvZGU9IiYjeGU2MTk7IiAKZD0iTTM2MiA4NjdsNDM0IC00MzdxMjMgLTIyIDIzIC01MXQtMjIgLTUybC00MTYgLTQyNnEtMjYgLTI1IC02NS41IC0yOC41dC03MCAxOHQtMzQuNSA1NC41dDIxIDU5bDQxNyA0MjZ2LTEwM2wtNDM1IDQzNnEtMjUgMjYgLTIxLjUgNTl0MzQgNTQuNXQ3MCAxOXQ2NS41IC0yOC41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjFBIiB1bmljb2RlPSImI3hlNjFhOyIgCmQ9Ik0zOTYgNzMycS0yOSAyNSAtNDkgMTZ0LTIwIC00OHYtNTg1cTAgLTM5IDIxIC00OXQ1MSAxNWwzMTEgMjU0cTI5IDI0IDMwIDU5LjV0LTI4IDYwLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2MUIiIHVuaWNvZGU9IiYjeGU2MWI7IiAKZD0iTTUwOC41IC0xMTlxLTEwMS41IDAgLTE5NCAzOS41dC0xNTkuNSAxMDYuNXQtMTA2LjUgMTU5LjV0LTM5LjUgMTk0dDM5LjUgMTk0dDEwNi41IDE1OXQxNTkuNSAxMDZ0MTk0IDM5LjV0MTk0IC0zOS41dDE1OSAtMTA2dDEwNi41IC0xNTl0NDAgLTE5NHQtNDAgLTE5NHQtMTA2LjUgLTE1OS41dC0xNTkgLTEwNi41dC0xOTQgLTM5LjV6TTc1OCA0NDNoLTE4N3YxODdxMCAyNiAtMTguNSA0NHQtNDQgMTh0LTQ0IC0xOHQtMTguNSAtNDR2LTE4NwpoLTE4N3EtMjYgMCAtNDQuNSAtMTguNXQtMTguNSAtNDQuNXQxOC41IC00NHQ0NC41IC0xOGgxODd2LTE4N3EwIC0yNiAxOC41IC00NC41dDQ0IC0xOC41dDQ0IDE4LjV0MTguNSA0NC41djE4N2gxODdxMjYgMCA0NCAxOHQxOCA0NHQtMTggNDQuNXQtNDQgMTguNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYxQyIgdW5pY29kZT0iJiN4ZTYxYzsiIApkPSJNMCA2NDBxMCAyNyAxOC41IDQ1LjV0NDUuNSAxOC41aDg5NnEyNyAwIDQ1LjUgLTE4LjV0MTguNSAtNDUuNXQtMTguNSAtNDUuNXQtNDUuNSAtMTguNWgtODk2cS0yNyAwIC00NS41IDE4LjV0LTE4LjUgNDUuNXpNMCAzODRxMCAyNyAxOC41IDQ1LjV0NDUuNSAxOC41aDg5NnEyNyAwIDQ1LjUgLTE4LjV0MTguNSAtNDUuNXQtMTguNSAtNDUuNXQtNDUuNSAtMTguNWgtODk2cS0yNyAwIC00NS41IDE4LjV0LTE4LjUgNDUuNXpNMCAxMjgKcTAgMjcgMTguNSA0NS41dDQ1LjUgMTguNWg4OTZxMjcgMCA0NS41IC0xOC41dDE4LjUgLTQ1LjV0LTE4LjUgLTQ1LjV0LTQ1LjUgLTE4LjVoLTg5NnEtMjcgMCAtNDUuNSAxOC41dC0xOC41IDQ1LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2MUQiIHVuaWNvZGU9IiYjeGU2MWQ7IiAKZD0iTTEwMiA3MzRxMCAyMiAxNS41IDM3dDM3LjUgMTVoMjYzdjUycTAgMjIgMTUuNSAzNy41dDM3LjUgMTUuNWgxMDVxMjIgMCAzNy41IC0xNS41dDE1LjUgLTM3LjV2LTUyaDI2M3EyMiAwIDM3IC0xNS41dDE1IC0zNi41di01M2gtODQydjUzek04OTIgNTc3di02NDRxMCAtMjIgLTE1LjUgLTM3LjV0LTM3LjUgLTE1LjVoLTYzMXEtMjIgMCAtMzcuNSAxNS41dC0xNS41IDM3LjV2Njk2aDczN3YtNTJ6TTM2NiA0NzNxMCAyMSAtMTUuNSAzNi41CnQtMzcuNSAxNS41dC0zNy41IC0xNS41dC0xNS41IC0zNi41di00MzZxMCAtMjIgMTUuNSAtMzd0MzcuNSAtMTV0MzcuNSAxNXQxNS41IDM3djQzNnpNNTc2IDQ3M3EwIDIxIC0xNS41IDM2LjV0LTM3IDE1LjV0LTM3IC0xNS41dC0xNS41IC0zNi41di00MzZxMCAtMjIgMTUuNSAtMzd0MzcgLTE1dDM3IDE1dDE1LjUgMzd2NDM2ek03ODYgNDczcTAgMjEgLTE1IDM2LjV0LTM3IDE1LjV0LTM3LjUgLTE1LjV0LTE1LjUgLTM2LjV2LTQzNgpxMCAtMjIgMTUuNSAtMzd0MzcuNSAtMTV0MzcgMTV0MTUgMzd2NDM2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjFFIiB1bmljb2RlPSImI3hlNjFlOyIgCmQ9Ik01MTYgNzE2cS03NCAwIC0xNDIuNSAtMjB0LTExOCAtNTJ0LTkyLjUgLTcxdC03MC41IC03Ny41dC00Ny41IC03MC41dC0yOSAtNTJsLTkgLTIwcTMgLTggOSAtMjF0MjguNSAtNTF0NDguNSAtNzJ0NzAgLTc2dDkzIC03Mi41dDExNy41IC01MXQxNDIuNSAtMjAuNXQxNDIuNSAyMC41dDExNy41IDUxdDkzIDcydDcwLjUgNzZ0NDguNSA3Mi41dDI4IDUxdDkgMjFxLTMgNyAtOSAyMHQtMjggNTF0LTQ4LjUgNzIuNXQtNzAuNSA3Ni41CnQtOTMgNzJ0LTExNy41IDUwLjV0LTE0Mi41IDIwLjV6TTUxNiAxMzRxLTkwIDAgLTE1NCA2NHQtNjQgMTU0LjV0NjQgMTU0LjV0MTU0IDY0dDE1NCAtNjR0NjQgLTE1NC41dC02NCAtMTU0LjV0LTE1NCAtNjR6TTYyNSAzNTIuNXEwIC00NS41IC0zMiAtNzcuNXQtNzcgLTMydC03NyAzMnQtMzIgNzcuNXQzMiA3Ny41dDc3IDMydDc3IC0zMnQzMiAtNzcuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYxRiIgdW5pY29kZT0iJiN4ZTYxZjsiIApkPSJNNTEyIDg5MnExMDUgMCAxOTcuNSAtNDB0MTYxLjUgLTEwOXE2OSAtNjggMTA5IC0xNjF0NDAgLTE5OC41dC00MCAtMTk4dC0xMDkgLTE2MS41dC0xNjEuNSAtMTA5dC0xOTggLTQwdC0xOTguNSA0MHQtMTYxLjUgMTA5dC0xMDkgMTYxdC00MC41IDE5OHQ0MC41IDE5OXQxMDkgMTYxLjV0MTYxLjUgMTA4LjV0MTk5IDQwek01NzMgNDUzcTAgMjggLTE3LjUgNDYuNXQtNDMuNSAxOC41dC00NC41IC0xOC41dC0xOC41IC00Ni41di0zODAKcTAgLTI3IDE4LjUgLTQzLjV0NDQuNSAtMTYuNXQ0NCAxN3QxOCA0NHpNNTEyIDU5NHEzMyAwIDU2IDIzLjV0MjMgNTZ0LTIzIDU2dC01NiAyMy41dC01NyAtMjMuNXQtMjQgLTU2dDI0IC01NnQ1NyAtMjMuNXpNNTEyIDU5NHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYyMCIgdW5pY29kZT0iJiN4ZTYyMDsiIApkPSJNNDYxIDMycTAgMjIgMTUgMzcuNXQzNiAxNS41dDM2IC0xNS41dDE1IC0zNy41dC0xNSAtMzcuNXQtMzYgLTE1LjV0LTM2IDE1LjV0LTE1IDM3LjV6TTMwMiA3ODloNDIwcTE4IDAgMzEuNSAtMTMuNXQxMy41IC0zMy41di01MjRxMCAtMjAgLTEzLjUgLTMzLjV0LTMxLjUgLTEzLjVoLTQyMHEtMTggMCAtMzEuNSAxMy41dC0xMy41IDMzLjV2NTI0cTAgMjAgMTMuNSAzMy41dDMxLjUgMTMuNXpNMTU2IC00M3EwIC0zNSAyMy41IC02MAp0NTcuNSAtMjVoNTUwcTM0IDAgNTcuNSAyNXQyMy41IDYwdjg1NHEwIDM1IC0yMy41IDYwdC01Ny41IDI1aC01NTBxLTM0IDAgLTU3LjUgLTI1dC0yMy41IC02MHYtODU0ek0xNTYgLTQzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjIxIiB1bmljb2RlPSImI3hlNjIxOyIgCmQ9Ik00MjYgMTI4aDF2NTk0aC0xNTBxLTczIDAgLTEyNyAtNDh0LTYzIC0xMjBoLTg3bDg2IDM0Mmg4NTJsODYgLTM0MmgtODdxLTkgNzIgLTYzIDEyMHQtMTI3IDQ4aC0xNTB2LTU5NGgxcS0xIC02IC0xIC0xM3EwIC03MiA1MCAtMTIzdDEyMSAtNTF2LTY5aC0yMTNoLTg2aC0yMTN2NjlxNzEgMCAxMjEgNTF0NTAgMTIzcTAgNyAtMSAxM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYyMiIgdW5pY29kZT0iJiN4ZTYyMjsiIApkPSJNNDI3IDg5NnExMjcgMCAxODkuNSAtMTB0MTExLjUgLTQyLjV0ODIgLTg2dDMzIC0xMTkuNXEwIC03MiAtNDAgLTEzMnQtMTA5IC05MHE5NyAtMjcgMTQ5LjUgLTkyLjV0NTIuNSAtMTU0LjVxMCAtNzAgLTM0IC0xMzUuNXQtOTIuNSAtMTA1dC0xNDQuNSAtNDguNXEtNTUgLTYgLTI2MSAtN2gtMzY0djEwMjNoNDI3ek0xOTIgNTEyaDE1MnExMzYgMCAxNjggNHE2MCA3IDk0IDM5LjV0MzQgODYuNXEwIDUxIC0yOS41IDgzdC04Ny41IDM5CnEtMzQgNCAtMTk4IDRoLTEzM3YtMjU2ek0xOTIgNjRoMjI0cTEzMSAwIDE2NiA2cTU0IDggODggMzh0MzQgODFxMCA0MyAtMjYgNzMuNXQtNzUuNSA0NHQtMjE1LjUgMTMuNWgtMTk1di0yNTZ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2MjMiIHVuaWNvZGU9IiYjeGU2MjM7IiAKZD0iTTkzOSA4OTZoLTg1N3EtMzQgMCAtNTggLTIzdC0yNCAtNTd2LTc5N3EwIC0zNCAyNCAtNTguNXQ1OCAtMjQuNWg4NjRxMzMgMCA1NS41IDI0dDIyLjUgNTl2Nzk3cTAgMzQgLTI1LjUgNTd0LTU5LjUgMjN6TTMzMCA3NzhxNTIgMCA4OC41IC0zN3QzNi41IC05MHQtMzYuNSAtOTB0LTg4LjUgLTM3dC04OSAzN3QtMzcgOTB0MzcgOTB0ODkgMzd6TTExNSAzN3EtMTUgMCAtMjYgMTBxLTEzIDExIC0xNC41IDI4dDkuNSAzMGwxODggMjg3CnExMSAxMyAyNyAxNC41dDI5IC03LjVsMTY2IC0xMjVsMjk3IDM0MnE3IDggMTUuNSAxN3QyNSAyMHQzMS41IDE0dDMyIC03dDI5IC0zN3YtMTl2LTYzdi03N3YtOTd2LTMxNHYtMTJ2LTJ2LTF2LTFoLTgwN2gtMnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYyNCIgdW5pY29kZT0iJiN4ZTYyNDsiIApkPSJNNTU0IDI0NHExIC02MyAzNSAtMTA3LjV0ODIgLTQ0LjVoMjM2cTQ4IDAgODIuNSA0NnQzNC41IDExMHYyMzVxMCA2NSAtMzQgMTExdC04MyA0NmgtMjM2cS00OCAwIC04Mi41IC00NnQtMzQuNSAtMTExaDMxN3YtMjM5aC0zMTd6TTQ3MCAyNDRxLTEgLTYzIC0zNS41IC0xMDcuNXQtODEuNSAtNDQuNWgtMjM2cS00OSAwIC04MyA0NS41dC0zNCAxMTAuNXYyMzVxMCA2NSAzNC41IDExMXQ4Mi41IDQ2aDIzNnE0OSAwIDgzIC00NnQzNCAtMTExCmgtMzEzdi0yMzloMzEzek0zMTMgMzY1cTAgMTUgMTEgMjYuNXQyNyAxMS41aDMxNnExNiAwIDI3IC0xMS41dDExIC0yNi41cTAgLTE2IC0xMSAtMjd0LTI3IC0xMWgtMzE2cS0xNiAwIC0yNyAxMXQtMTEgMjd6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2MjUiIHVuaWNvZGU9IiYjeGU2MjU7IiBob3Jpei1hZHYteD0iMTEwNyIgCmQ9Ik03ODQgMTQzbC03MyAxNzBoLTMzMmwtNzMgLTE3MGgtMTg4bDM0MiA3OTBoMTcwbDM0MiAtNzkwaC0xODh6TTU0NiA2OThsLTEwMCAtMjMwaDE5OHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYyNiIgdW5pY29kZT0iJiN4ZTYyNjsiIApkPSJNMzQxIDgxMXEwIDM1IDI1LjUgNjB0NjAuNSAyNWg1MTJxMzUgMCA2MCAtMjV0MjUgLTYwcTAgLTM2IC0yNSAtNjF0LTYwIC0yNWgtNTEycS0zNiAwIC02MSAyNXQtMjUgNjF6TTM0MSAzODRxMCAzNSAyNS41IDYwdDYwLjUgMjVoNTEycTM1IDAgNjAgLTI0LjV0MjUgLTYwLjVxMCAtMzUgLTI1IC02MHQtNjAgLTI1aC01MTJxLTM2IDAgLTYxIDI0LjV0LTI1IDYwLjV6TTM0MSAtNDNxMCAzNiAyNS41IDYxdDYwLjUgMjVoNTEyCnEzNSAwIDYwIC0yNXQyNSAtNjFxMCAtMzUgLTI1IC02MHQtNjAgLTI1aC01MTJxLTM2IDAgLTYxIDI1dC0yNSA2MHpNODUuNSA3MjlxMzUuNSAwIDYwLjUgMjQuNXQyNSA1OXQtMjUgNTl0LTYwLjUgMjQuNXQtNjAuNSAtMjQuNXQtMjUgLTU5dDI1IC01OXQ2MC41IC0yNC41ek04NS41IDI5OXEzNS41IDAgNjAuNSAyNC41dDI1IDU5dC0yNSA1OXQtNjAuNSAyNC41dC02MC41IC0yNC41dC0yNSAtNTl0MjUgLTU5dDYwLjUgLTI0LjV6Ck04NS41IC0xMjhxMzUuNSAwIDYwLjUgMjQuNXQyNSA1OXQtMjUgNTl0LTYwLjUgMjQuNXQtNjAuNSAtMjQuNXQtMjUgLTU5dDI1IC01OXQ2MC41IC0yNC41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjI3IiB1bmljb2RlPSImI3hlNjI3OyIgCmQ9Ik0yNTYgODEwLjVxMCAzNS41IDI1IDYwLjV0NjAgMjVoNTk4cTM1IDAgNjAgLTI1dDI1IC02MC41dC0yNSAtNjAuNXQtNjAgLTI1aC01OThxLTM1IDAgLTYwIDI1dC0yNSA2MC41ek04NSA4OTZoODZ2LTg1aC04NnY4NXpNMjU2IDM4My41cTAgMzUuNSAyNSA2MC41dDYwIDI1aDU5OHEzNSAwIDYwIC0yNC41dDI1IC02MHQtMjUgLTYwLjV0LTYwIC0yNWgtNTk4cS0zNSAwIC02MCAyNC41dC0yNSA2MHpNMjU2IC00Mi41cTAgMzUuNSAyNSA2MC41CnQ2MCAyNWg1OThxMzUgMCA2MCAtMjV0MjUgLTYwLjV0LTI1IC02MC41dC02MCAtMjVoLTU5OHEtMzUgMCAtNjAgMjV0LTI1IDYwLjV6TTAgODk2aDg1di04NWgtODV2ODV6TTg1IDcyNWg4NnYtODVoLTg2djg1ek04NSA4MTFoODZ2LTg2aC04NnY4NnpNMCA1NTVoODV2LTg2aC04NXY4NnpNODUgNTU1aDg2di04NmgtODZ2ODZ6TTg1IDQ2OWg4NnYtODVoLTg2djg1ek0wIDM4NGg4NXYtODVoLTg1djg1ek0wIDI5OWg4NXYtODZoLTg1djg2egpNODUgMjk5aDg2di04NmgtODZ2ODZ6TTAgMTI4aDg1di04NWgtODV2ODV6TTg1IDEyOGg4NnYtODVoLTg2djg1ek04NSA0M2g4NnYtODZoLTg2djg2ek04NSAtNDNoODZ2LTg1aC04NnY4NXpNMCAtNDNoODV2LTg1aC04NXY4NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYyOCIgdW5pY29kZT0iJiN4ZTYyODsiIApkPSJNNDI3IDQ4OHYyNjdxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWg3MXExMCAwIDE3IC03LjV0NyAtMTcuNXYtMjY3bDIzMSAxMzNxOSA1IDE5IDIuNXQxNSAtMTAuNWwzNSAtNjJxNSAtOSAyLjUgLTE4LjV0LTExLjUgLTE0LjVsLTIzMSAtMTM0bDIzMSAtMTMzcTkgLTUgMTEuNSAtMTV0LTIuNSAtMTlsLTM1IC02MXEtNSAtOSAtMTUgLTExLjV0LTE5IDIuNWwtMjMxIDEzNHYtMjY3cTAgLTExIC03IC0xOHQtMTcgLTdoLTcxCnEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djI2N2wtMjMxIC0xMzRxLTkgLTUgLTE4LjUgLTIuNXQtMTQuNSAxMS41bC0zNiA2MXEtNSA5IC0yIDE5dDExIDE1bDIzMiAxMzNsLTIzMiAxMzRxLTggNSAtMTEgMTV0MiAxOGwzNiA2MnE1IDggMTUgMTAuNXQxOCAtMi41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjI5IiB1bmljb2RlPSImI3hlNjI5OyIgaG9yaXotYWR2LXg9IjEwMjUiIApkPSJNMTAxOCAzODVxMCAtMTAzIC00MC41IC0xOTcuNXQtMTA4LjUgLTE2Mi41dC0xNjIgLTEwOHQtMTk3IC00MHEtMTA0IDAgLTE5OC41IDQwLjV0LTE2MyAxMDl0LTEwOC41IDE2M3QtNDAgMTk4LjV0NDEgMTk4LjV0MTEwIDE2Mi41dDE2NCAxMDcuNXQyMDAgMzkuNXExMDIgMCAxOTUgLTQxdDE2MC41IC0xMDkuNXQxMDcuNSAtMTYyLjV0NDAgLTE5OHpNNDAwIDI1NXEtMTAwIDEwNiAtMTA4IDExM3EtMjUgMjUgLTU1LjUgMjV0LTUzLjUgLTIzCnEtMjEgLTIzIC0xOS41IC01MC41dDI3LjUgLTUyLjVxNDkgLTUxIDEzNyAtMTM5cTQwIC0zOSA3My41IC0zOXQ3My41IDQwcTE3MyAxNzIgMjE1IDIxNHExMTkgMTE5IDE0MS41IDE0Mi41dDIyLjUgNTIuNXQtMjEgNTBxLTIwIDIwIC01MC41IDE5LjV0LTU0LjUgLTIyLjVxLTggLTcgLTMxIC0zMHEtNTAgLTUxIC0yOTcgLTMwMHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYyQSIgdW5pY29kZT0iJiN4ZTYyYTsiIApkPSJNNTExLjUgODk0cS0xMDMuNSAwIC0xOTggLTQwLjV0LTE2Mi41IC0xMDguNXQtMTA4LjUgLTE2Mi41dC00MC41IC0xOTh0NDAuNSAtMTk4dDEwOC41IC0xNjIuNXQxNjIuNSAtMTA4LjV0MTk4IC00MC41dDE5Ny41IDQwLjV0MTYyLjUgMTA4LjV0MTA4LjUgMTYyLjV0NDAgMTk4dC00MCAxOTh0LTEwOC41IDE2Mi41dC0xNjIuNSAxMDguNXQtMTk3LjUgNDAuNXpNNTA5IDY3cS0yNyAxIC00NiAyMHQtMjAgNDZxLTEgMjkgMjAgNTB0NTAgMjAKcTI3IC0xIDQ2IC0yMHQyMCAtNDZxMSAtMjkgLTIwIC01MHQtNTAgLTIwek01ODAgMzI0cTAgLTI3IC0xNyAtNDUuNXQtNDEgLTE4LjVoLTIwcS0yNCAwIC00MC41IDE4LjV0LTE2LjUgNDUuNWwtMjUgMzE1cTAgMjYgMTcgNDQuNXQ0MSAxOC41aDY3cTI0IDAgNDAuNSAtMTguNXQxNi41IC00NC41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjJCIiB1bmljb2RlPSImI3hlNjJiOyIgCmQ9Ik01MTIgODk1cS0xMDQgMCAtMTk4LjUgLTQwLjV0LTE2MyAtMTA5dC0xMDkgLTE2M3QtNDAuNSAtMTk4LjV0NDAuNSAtMTk4LjV0MTA5IC0xNjN0MTYzIC0xMDl0MTk4LjUgLTQwLjV0MTk4LjUgNDAuNXQxNjMgMTA5dDEwOSAxNjN0NDAuNSAxOTguNXQtNDAuNSAxOTguNXQtMTA5IDE2M3QtMTYzIDEwOXQtMTk4LjUgNDAuNXpNNzMxIDE3NnEtMTggLTIwIC00NSAtMjEuNXQtNDcgMTYuNWwtMTY4IDE1MXEtMjMgMjAgLTIyIDUxdjJ2MjI2CnEwIDI3IDE5IDQ2dDQ2IDE5dDQ2IC0xOXQxOSAtNDZ2LTIwMmwxNDcgLTEzMXEyMCAtMTggMjEuNSAtNDV0LTE2LjUgLTQ3eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjJDIiB1bmljb2RlPSImI3hlNjJjOyIgCmQ9Ik00NTAgNDAwaC0xMDVxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ2dDE5IC00NS41dDQ1IC0xOC41aDEwNXYtMTAwcTAgLTI3IDE4LjUgLTQ1LjV0NDUuNSAtMTguNXQ0NS41IDE4LjV0MTguNSA0NS41djEwMGgxMDFxMjYgMCA0NSAxOXQxOSA0NS41dC0xOSA0NS41dC00NSAxOWgtMTAxdjEwNHEwIDI2IC0xOC41IDQ1dC00NS41IDE5dC00NS41IC0xOXQtMTguNSAtNDV2LTEwNHpNMjY5IDNxLTUgMCAtMTUgMS41dC0zOCA5dC01MyAxOQp0LTU2LjUgMzQuNXQtNTMuNSA1My41dC0zNy41IDc4dC0xNS41IDEwNC41cTAgMTA0IDYzIDE4NC41dDE2MCAxMDUuNXE1MSA4MCAxMzQuNSAxMjd0MTgxLjUgNDdxMTM3IDAgMjQxIC04OC41dDEyOSAtMjIxLjVxNTMgLTM0IDg0IC04OXQzMSAtMTIwcTAgLTE0NiAtMTE0IC0yMjFxLTI3IC0xOCAtNDggLTI0aC01OTN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2MkQiIHVuaWNvZGU9IiYjeGU2MmQ7IiAKZD0iTTU3NiA1MTJoLTM4NHYtMTkyaDM4NHYtNDQ4aDE5MnYxMDI0aC0xOTJ2LTM4NHpNODMyIDM4NGg2NHYtMTI4aC02NHYxMjh6TTg5NiAzODRoMTI4di01MTJoLTEyOHY1MTJ6TTAgODk2aDE5MnYtMTAyNGgtMTkydjEwMjR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2MkUiIHVuaWNvZGU9IiYjeGU2MmU7IiAKZD0iTTQyNiAxMjhoMXY1OTRoLTE1MHEtNzMgMCAtMTI3IC00OHQtNjMgLTEyMGgtODdsODYgMzQyaDg1Mmw4NiAtMzQyaC04N3EtOSA3MiAtNjMgMTIwdC0xMjcgNDhoLTE1MHYtNTk0aDFxLTEgLTYgLTEgLTEzcTAgLTcyIDUwIC0xMjN0MTIxIC01MXYtNjloLTIxM2gtODZoLTIxM3Y2OXE3MSAwIDEyMSA1MXQ1MCAxMjNxMCA3IC0xIDEzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjJGIiB1bmljb2RlPSImI3hlNjJmOyIgCmQ9Ik0zIDcwMHEwIDgwIDU2IDEzNnQxMzYgNTZoNjM3cTc5IDAgMTM1IC01NnQ1NiAtMTM2di02MzZxMCAtODAgLTU2IC0xMzZ0LTEzNSAtNTZoLTYzN3EtNzkgMCAtMTM1LjUgNTZ0LTU2LjUgMTM2djYzNnpNNTEwIDU5NXEzMyAwIDU2IDIzLjV0MjMgNTZ0LTIzIDU1LjV0LTU2IDIzdC01Ni41IC0yM3QtMjMuNSAtNTZ0MjMuNSAtNTZ0NTYuNSAtMjN2MHpNNTcxIDQ1NXEwIDI3IC0xNy41IDQ2dC00My41IDE5dC00NCAtMTl0LTE4IC00NnYtMzc4CnEwIC0yNyAxOCAtNDMuNXQ0NCAtMTYuNXQ0NCAxN3QxOCA0NHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYzMCIgdW5pY29kZT0iJiN4ZTYzMDsiIApkPSJNNjM4IDh2LTExcTAgLTQgMC41IC0xMHQwLjUgLTEycS0xIC0xOSAtMTAuNSAtNDEuNXQtMzYuNSAtMzIuNXEtMTEgLTQgLTI4IC0xMS41dC01MiAtNy41cS0zMCAwIC00OS41IDd0LTMwLjUgOXEtMTQgMyAtMjIuNSAxMi41dC0xMyAyMS41dC01LjUgMjQuNXQtMSAyMi41djMwek04NTQgNjU5cTI2IC02MSAzMCAtMTE0LjV0LTYgLTk5dC0yOSAtODF0LTM5LjUgLTYyLjV0LTM4LjUgLTQ0LjV0LTI1IC0yMy41cS0xMCAtOSAtMTggLTEzLjUKdC0xNC41IC03LjV0LTEyLjUgLTd0LTEyIC0xM3EtMTMgLTE5IC0yMCAtMzYuNXQtMTIgLTM0LjVxLTUgLTE0IC0xMSAtMjN0LTEzIC0xNnEtOCAtOCAtMTYgLTEzaC0yMTlxLTggNSAtMTQgMTNxLTcgNyAtMTQgMTh0LTEyIDI4cS0xMCAyOSAtMjQuNSA0NnQtMzcuNSAzNHEtMTYgMTIgLTM2LjUgMzJ0LTQwIDQ3dC0zNy41IDYwdC0yOSA3M3QtMTMgODV0OSA5NXExNyA4MCA1OC41IDEzNHQ5My41IDg2LjV0MTA3IDQ3dDEwMCAxNC41CnE0NyAwIDk3LjUgLTEzdDk3LjUgLTQwdDg2LjUgLTY5LjV0NjQuNSAtMTAxLjV6TTc1MyA0NTZxNDMgMTc0IC0xMTEgMjY1cS0yNiAxNiAtNjAgMjV0LTcwIDl0LTcxLjUgLTl0LTYyLjUgLTI4cS02OCAtNDYgLTkyIC0xMDF0LTIyIC0xMTVxMSAtMzQgMTEuNSAtNjF0MjUgLTQ5dDI5LjUgLTM4cTE2IC0xNyAyOCAtMjlxMjUgLTI3IDQzIC00NnExOSAtMTkgMzAgLTQ5cTExIC0yOSAzNC41IC0zNS41dDQzLjUgLTYuNXEyNiAwIDQ5LjUgMTEuNQp0MzMuNSAzNS41cTUgMTQgMjAuNSAzNHQ0Ni41IDU2cTE2IDE4IDMwLjUgMzJ0MjcgMjh0MjEuNSAzMC41dDE1IDQwLjV6TTc1MyA0NTZ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2MzEiIHVuaWNvZGU9IiYjeGU2MzE7IiAKZD0iTTAgNzY4cTAgNTMgMzcuNSA5MC41dDkwLjUgMzcuNWg3NjhxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV2LTc2OHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNWgtNzY4cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXY3Njh6TTM3NyA0MTFxLTQ1IC0xOCAtNjggLTI3djE1NGg3NHY4NWgtNzR2MTQ1aC04NnYtMTQ1aC04NHYtODVoODR2LTE4MHEtNDIgLTEyIC05NSAtMjFsMjEgLTg0cTQzIDExIDc0IDIxdi0xNjYKcTAgLTMwIC0yOCAtMzBxLTI0IDAgLTU5IDZ2LTg2aDg5cTg0IDAgODQgODd2MjE3cTIzIDkgNjggMjd2ODJ6TTQ5MiA0NDNoMTAzdjg1aC0xMDN2MjM2aC04NnYtNjMycTAgLTM5IC0zNyAtNTBsMjIgLTgxcTEyMyAyOSAyMTEgNjRsLTE2IDgxcS00MSAtMjAgLTk0IC0zNnYzMzN6TTc4NCAycTQ4IDAgNzEgMjZxMjUgMjggMzUgMTc1bC03OSAyNnEtNCAtMTA0IC0xNSAtMTI1cS0xMCAtMjAgLTI4IC0yMGgtMzNxLTI1IDAgLTI1IDI4djMzNWgxODAKdjg2aC0xODB2MjMyaC04NnYtNjcycTAgLTkxIDg0IC05MWg3NnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYzMiIgdW5pY29kZT0iJiN4ZTYzMjsiIApkPSJNMTAwMiA0MjBsLTE2NiAxMTNxLTIyIDE1IC0zNy41IDYuNXQtMTUuNSAtMzQuNXYtNTdoLTIxOHYyMDdoNTdxMjYgMCAzNCAxNS41dC02IDM3LjVsLTExMyAxNjZxLTE1IDIyIC0zNiAyMnQtMzYgLTIybC0xMTMgLTE2NnEtMTUgLTIyIC02LjUgLTM3LjV0MzQuNSAtMTUuNWg1N3YtMjA3aC0xOTZ2NTdxMCAyNiAtMTUuNSAzNC41dC0zNy41IC02LjVsLTE2NiAtMTEzcS0yMiAtMTUgLTIyIC0zNnQyMiAtMzZsMTY2IC0xMTMKcTIyIC0xNSAzNy41IC02LjV0MTUuNSAzNC41djU3aDE5NnYtMjA3aC01N3EtMjYgMCAtMzQuNSAtMTUuNXQ2LjUgLTM3LjVsMTEzIC0xNjZxMTUgLTIyIDM2IC0yMnQzNiAyMmwxMTMgMTY2cTE0IDIyIDYgMzcuNXQtMzQgMTUuNWgtNTd2MjA3aDIxOHYtNTdxMCAtMjYgMTUuNSAtMzQuNXQzNy41IDYuNWwxNjYgMTEzcTIyIDE1IDIyIDM2dC0yMiAzNnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYzMyIgdW5pY29kZT0iJiN4ZTYzMzsiIApkPSJNNDQ4IDM4NGgtMzIwcS0yNiAwIC00NSAtMTguNXQtMTkgLTQ1LjV2LTY0aDM4NHYtMTI4aDEyOHYxMjhoMzg0djY0cTAgMjcgLTE5IDQ1LjV0LTQ1IDE4LjVoLTMyMHYxMjhoLTEyOHYtMTI4ek0zMjAgODMzcTAgMjYgMTguNSA0NC41dDQ0LjUgMTguNWgyNThxMjYgMCA0NC41IC0xOC41dDE4LjUgLTQ0LjV2LTI1OHEwIC0yNiAtMTguNSAtNDQuNXQtNDQuNSAtMTguNWgtMjU4cS0yNiAwIC00NC41IDE4LjV0LTE4LjUgNDQuNXYyNTh6Ck02NCAyNTZoMTI4di0xMjhoLTEyOHYxMjh6TTgzMiAyNTZoMTI4di0xMjhoLTEyOHYxMjh6TTM4NCA2M3EwIDI3IDE5IDQ2dDQ2IDE5aDEyNnEyNyAwIDQ2IC0xOXQxOSAtNDZ2LTEyNnEwIC0yNyAtMTkgLTQ2dC00NiAtMTloLTEyNnEtMjcgMCAtNDYgMTl0LTE5IDQ2djEyNnpNMCA2M3EwIDI3IDE5IDQ2dDQ2IDE5aDEyNnEyNyAwIDQ2IC0xOXQxOSAtNDZ2LTEyNnEwIC0yNyAtMTkgLTQ2dC00NiAtMTloLTEyNnEtMjcgMCAtNDYgMTl0LTE5IDQ2CnYxMjZ6TTc2OCA2M3EwIDI3IDE5IDQ2dDQ2IDE5aDEyNnEyNyAwIDQ2IC0xOXQxOSAtNDZ2LTEyNnEwIC0yNyAtMTkgLTQ2dC00NiAtMTloLTEyNnEtMjcgMCAtNDYgMTl0LTE5IDQ2djEyNnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYzNCIgdW5pY29kZT0iJiN4ZTYzNDsiIGhvcml6LWFkdi14PSIxMDI1IiAKZD0iTTgyOSA0NDhoLTQ0N3YtMTI4aDQ0OGwxIC0xMjJxMCAtMTAgNS41IC0xMi41dDEyLjUgNS41bDE2OCAxNzVxNyA3IDcgMTcuNXQtNyAxNy41bC0xNzEgMTcwcS03IDcgLTEyIDQuNXQtNSAtMTMuNXYtMTE0ek03MTcgMTkycS01MSAtODcgLTEzOS41IC0xMzkuNXQtMTkzLjUgLTUyLjVxLTE1OSAwIC0yNzEuNSAxMTIuNXQtMTEyLjUgMjcxLjV0MTEyLjUgMjcxLjV0MjcxLjUgMTEyLjVxODUgMCAxNjEgLTM1cTExMCAtNTEgMTcxIC0xNTcKaC0xNjVxLTcyIDY0IC0xNjggNjRxLTEwNiAwIC0xODAuNSAtNzV0LTc0LjUgLTE4MXQ3NC41IC0xODF0MTgwLjUgLTc1cTk3IDAgMTY5IDY0aDE2NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYzNSIgdW5pY29kZT0iJiN4ZTYzNTsiIApkPSJNMzIgNjRxMCAtNzkgNjAuNSAtMTM1LjV0MTQ1LjUgLTU2LjVoNTQ4cTg1IDAgMTQ1LjUgNTYuNXQ2MC41IDEzNS41djY0MHEwIDc5IC02MC41IDEzNS41dC0xNDUuNSA1Ni41aC01NDhxLTg1IDAgLTE0NS41IC01Ni41dC02MC41IC0xMzUuNXYtNjQwek0xNjAgNzA0cTAgMjYgMjEgNDV0NTAgMTloNTYycTI5IDAgNTAgLTE5dDIxIC00NXYtNjQwcTAgLTI2IC0yMSAtNDV0LTUwIC0xOWgtNTYycS0yOSAwIC01MCAxOXQtMjEgNDV2NjQwegpNMjI0IDU3NnEwIDI3IDE4LjUgNDUuNXQ0NS41IDE4LjVoNDQ4cTI3IDAgNDUuNSAtMTguNXQxOC41IC00NS41dC0xOC41IC00NS41dC00NS41IC0xOC41aC00NDhxLTI3IDAgLTQ1LjUgMTguNXQtMTguNSA0NS41ek0yMjQgMzg0cTAgMjcgMTguNSA0NS41dDQ1LjUgMTguNWg0NDhxMjcgMCA0NS41IC0xOC41dDE4LjUgLTQ1LjV0LTE4LjUgLTQ1LjV0LTQ1LjUgLTE4LjVoLTQ0OHEtMjcgMCAtNDUuNSAxOC41dC0xOC41IDQ1LjV6TTIyNCAxOTIKcTAgMjcgMTguNSA0NS41dDQ1LjUgMTguNWg0NDhxMjcgMCA0NS41IC0xOC41dDE4LjUgLTQ1LjV0LTE4LjUgLTQ1LjV0LTQ1LjUgLTE4LjVoLTQ0OHEtMjcgMCAtNDUuNSAxOC41dC0xOC41IDQ1LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2MzYiIHVuaWNvZGU9IiYjeGU2MzY7IiAKZD0iTTM2IDU2NXYtMWw0MzYgLTIxNXYxcTIwIC0xMiAzOS41IC0xMnQ0MC41IDEydi0xbDQzNiAyMTV2MXEzMyAxOSAzMyA1MS41dC0zMyA1MS41djFsLTQzNiAyMTV2LTFxLTE3IDEwIC00MCAxMHEtMjAgMCAtNDAgLTEydjFsLTQzNiAtMjEzdi0xcS0zMyAtMTkgLTMzIC01MS41dDMzIC01MS41ek05NDggNDQ2cS0xMyAwIC0yMyAtMy41dC0xNCAtNi41bC0zIC0zbC0zOTYgLTE4OWwtMzk3IDE5MnEtMTAgNiAtMzkgMTAKcS0zNSA0IC01NCAtMTUuNXQtMTkgLTQ4LjVxMCAtMzMgMzMgLTUybDQzNiAtMjE2djFxMjAgLTExIDQwIC0xMXQ0MCAxMXYtMWw0MzYgMjEwcTE0IDkgMjMuNSAyNC41dDkuNSAzMS41cTAgMjcgLTIxLjUgNDYuNXQtNTEuNSAxOS41ek05NDggMjE3cS0xMyAwIC0yMyAtM3QtMTQgLTZsLTMgLTRsLTM5NiAtMTg5bC0zOTcgMTkycS0xMCA3IC0zOSAxMHEtMzUgNCAtNTQgLTE1dC0xOSAtNDlxMCAtMzIgMzMgLTUxbDQzNiAtMjE2djEKcTIwIC0xMiA0MCAtMTJ0NDAgMTJ2LTFsNDM2IDIxMHExNCA4IDIzLjUgMjMuNXQ5LjUgMzEuNXEwIDI3IC0yMS41IDQ2LjV0LTUxLjUgMTkuNXpNOTQ4IDIxN3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYzNyIgdW5pY29kZT0iJiN4ZTYzNzsiIApkPSJNNjggNTQ5cTAgMzQgMTEgNDlxMTEgMTQgNDkgMTRoMTA5di02MzFxMSAwIC0xMDggMXEtMzQgLTEgLTQ3LjUgMTEuNXQtMTMuNSA0OC41djE4MXEwIDE0IDQuNSAyMXQxNy41IDEwcTUgMCAxNCA0cTggNCAxNyAxMnQxNSAyMXE2IDE0IDYgMzJxMCAyOSAtMTUgNDZxLTE2IDE2IC0zMyAxOXEtMTQgMiAtMjAgOHQtNiAyMHYxMzN2MHpNMTk1IDY2OXYxNXYydjF2MTVxMCAyNSAxOSA0Ni41dDQyIDIxLjVoOTZ2LTEwMWgtMTU3djB6Ck05NTkgMzk1cS0xMCAtMyAtMTQgLTExdC00IC0xOHEwIC05IDQgLTE5dDE0IC0xNHQxNiAtMTVxNSAtMTEgNiAtMjRxMCAtMTIgLTMgLTI0cS00IC0xMSAtMTEgLTE2cS0yNSAtMTUgLTI1IC0zNHEwIC0yMCAyNSAtMzhxNCAtNCA5IC0xNHE0IC0xMCA0IC0yMHEwIC0xMSAtNSAtMThxLTUgLTggLTE3IC04aC02N3EtNyAwIC03IDJxLTEgMSAxIDR0NiA3dDcgOXE2IDE4IDAgMzBxLTcgMTMgLTIxIDIycS0xMSA1IC0xNSAxNnEtNCAxMCAtMyAyMgpxMCAxMSA0IDIwdDExIDEzcTEwIDMgMTUgMTRxNSA5IDUgMjFxMCAxMCAtNCAyMXEtNCAxMCAtMTEgMTNxLTEwIDUgLTE1IDE1cS02IDEwIC02IDIzdDUgMjRxNSAxMyAxNiAyMHE3IDUgMTIgMTRxNSA4IDYgMTlxMSA5IC00IDE5cS00IDEwIC0xNSAxNnEtMTMgNiAtMTggMThxLTYgMTMgLTYgMjV0NiAyNHE1IDEyIDE1IDE4cTIxIDExIDIzIDMxdC0zIDM2cS00IDEyIC0xNSAyM3EtMTEgMTAgLTI4IDEwaC00MjV2OTloNTI3cTkgMCAxNSAtNgp0OCAtMTV0LTEgLTE4cS0zIC0xMCAtMTIgLTE2cS04IC03IC0xMyAtMTdxLTUgLTkgLTYgLTIxcS0xIC0xMCAzIC0yMXQxNCAtMTZxMTMgLTcgMjAgLTIwLjV0NyAtMjYuNXQtNyAtMjVxLTcgLTExIC0xOSAtMTZxLTE0IC01IC0yMCAtMTQuNXQtNyAtMjAuNXEwIC0xMiA1IC0yMnE2IC0xMiAxOCAtMTlxMTMgLTcgMTggLTIwcTUgLTEyIDUgLTI1cS0xIC0xMyAtNiAtMjRxLTYgLTEwIC0xNyAtMTJ2MHpNNzk5IDQxNHEtMTUgLTQgLTIzIC0xNApxLTggLTExIC05IC0yMnEwIC0xMiA2IC0yM3E4IC0xMiAyMSAtMTdxMTIgLTUgMTggLTE1cTcgLTEwIDcgLTIxcTEgLTEyIC00IC0yMnQtMTUgLTE1cS0zMSAtMTUgLTMyIC0zN3EtMSAtMjEgMjMgLTM0cTEyIC01IDE4IC0xNXE3IC0xMSA4IC0yM3EwIC0xMiAtNSAtMjJxLTQgLTkgLTE2IC0xM3EtMTQgLTQgLTIzIC0xNHEtNyAtMTAgLTggLTIxLjV0NiAtMjIuNXQyMiAtMTlxOSAtNSAxMy41IC0xNS41dDMuNSAtMjEuNXEtMiAtMTAgLTcgLTE4CnQtMTUgLThoLTQ3OHY2MzFoNDg1cTEwIDAgMTYgLThxNSAtOCA2IC0xOHEwIC0xMCAtNSAtMjB0LTE2IC0xNHQtMTggLTEzcS02IC04IC04IC0xOXEtMSAtMTEgNSAtMjFxNyAtMTAgMjEgLTE1cTEyIC02IDE4IC0xNXE3IC0xMSA4IC0yMXEwIC0xMSAtNSAtMjFxLTYgLTkgLTE4IC0xM3Ywek02MjIgMzI5cS02IDAgLTEzIDJxLTYgMSAtMyA3cTExIDE2IDEyIDE4cTExIDE2IDIzIDMycTMgNCAxMS41IDE1LjV0MTMuNSAxNi41cTExIDE3IDEzIDIwCnE2IDkgLTcgMjNxLTMgMyAtMTAgOHQtMTQgOHEtMTAgMyAtMTQgMXEtNSAtMyAtMTAgLTEycS05IC0xMiAtMTMgLTE4cS0zIC01IC0yMSAtMzFxLTkgLTEzIC0yMCAtMjlxLTEwIC0xNCAtMTEgLTE2cS0yIC01IC05IC00dC05IDZxLTMgNCAtMTEgMTVxLTExIDEzIC0yMSAyN3EtNyAxMCAtMjIgMjhxLTEwIDEzIC0xNCAxOXEtMTEgMjEgLTI0IDE0cS04IC01IC0xNSAtMTFxLTYgLTUgLTEzIC0xMHEtMTIgLTggLTQgLTIycTIyIC0yNyAzNyAtNDcKcTE4IC0yMyAyNiAtMzRxMTIgLTE2IDE1IC0xOXEzIC01IC01IC01aC0xNXEtNyAwIC0xNyAtMXEtMTMgMCAtMjIgMXEtMTAgMCAtMTYgLTV0LTQgLTEzcTEgLTUgMSAtMTV2LTE1cTAgLTcgNCAtNy41dDkgLTAuNWg3MXExNSAwIDE1IC02di0yNHEwIC02IC0yIC02aC03aC0xMmgtMjVoLTI0aC0xNXEtNyAxIC0xMCAtNHEtMiAtNSAtNCAtMTJxLTEgLTYgMCAtMTF0MSAtMTBxMCAtMTYgMTcgLTE2aDc0cTYgMCA3IC0ydDEgLThxMiAtNyAxIC0yMwpxLTEgLTIwIC0xIC0yMnEwIC0xNCAxNiAtMTRoNDBxMTAgMCAxMCA3djl2NDFxMCAxMyAxMSAxM2gxMXExMCAwIDE5IDFoMjBoMTZxMTggMCAxOCAxM3YyOHEwIDExIC0xMiAxMWgtNzJxLTEzIC0zIC0xMyA1djEwcS0xIDQgLTEgMTBxMCA1IDQgOHE1IDIgMTAgMmg3M3ExMiAwIDEyIDl2MzBxMCA1IC00LjUgMTB0LTEwLjUgNWgtNDJ2MHpNNjIyIDMyOXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYzOCIgdW5pY29kZT0iJiN4ZTYzODsiIApkPSJNMTAyNCAtNnEwIC01MyAtMzQuNSAtODcuNXQtODcuNSAtMzQuNWgtNzgwcS01MyAwIC04Ny41IDM0LjV0LTM0LjUgODcuNXY2MTRxMCAyNSAxMCA0OHEtMTAgMjQgLTEwIDQ1djczcTAgNTMgMzQuNSA4Ny41dDg3LjUgMzQuNWg3ODBxNTMgMCA4Ny41IC0zNC41dDM0LjUgLTg3LjV2LTczcTAgLTIyIC0xMCAtNDVxMTAgLTIzIDEwIC00OHYtNjE0ek05NzUgNzc0cTAgMjcgLTIzLjUgNTB0LTQ5LjUgMjNoLTc4MHEtMjcgMCAtNTAgLTIzCnQtMjMgLTUwdi03M3EwIC0yNiAyMyAtNDkuNXQ1MCAtMjMuNWg3ODBxMjYgMCA0OS41IDIzLjV0MjMuNSA0OS41djczdjB6TTk3NSA2MDNxLTQyIC0yNCAtNzMgLTI0aC03ODBxLTMyIDAgLTczIDI0di02MDlxMCAtMjYgMjMgLTQ5LjV0NTAgLTIzLjVoNzgwcTI2IDAgNDkuNSAyMy41dDIzLjUgNDkuNXY2MDl2MHpNODc4IDQzM2gtNDlxLTEyIC0xMjEgLTEwNS41IC0yMDd0LTIxMS41IC04NnQtMjExLjUgODZ0LTEwNS41IDIwN2gtNDkKcS0xMyAwIC0xOC41IDUuNXQtNS41IDE4LjVxMCAyNiAyNCAyNWgxNDdxMTMgMCAxOC41IC01LjV0NS41IC0xOXQtNS41IC0xOXQtMTguNSAtNS41aC00OXExMiAtOTkgODcgLTE3MS41dDE4MSAtNzIuNXQxODEgNzIuNXQ4NyAxNzEuNWgtNDlxLTEzIDAgLTE4LjUgNS41dC01LjUgMTl0NS41IDE5dDE4LjUgNS41aDE0N3E4IDAgMTYgLTYuNXQ4IC0xOC41cTAgLTEzIC01LjUgLTE4LjV0LTE4LjUgLTUuNXYweiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjM5IiB1bmljb2RlPSImI3hlNjM5OyIgCmQ9Ik04NTMgODk2aC02ODJxLTcxIDAgLTEyMSAtNTB0LTUwIC0xMjF2LTY4MnEwIC03MSA1MCAtMTIxdDEyMSAtNTBoNjgycTcxIDAgMTIxIDUwdDUwIDEyMXY2ODJxMCA3MSAtNTAgMTIxdC0xMjEgNTB2MHpNOTYwIDUxcTAgLTQ4IC0zNCAtODJ0LTgyIC0zNGgtNjY0cS00OCAwIC04MiAzNHQtMzQgODJ2NjY1cTAgNDggMzQgODJ0ODIgMzRoNjY0cTQ4IDAgODIgLTM0dDM0IC04MnYtNjY1djB6TTg2NSAzMTloLTczcS0xMyAwIC0yMSAtNgp0LTE0IC0yM2wtNDAgLTgybC02NCA0ODZxLTQgMzIgLTQxIDMycS0zMyAwIC0zOSAtMzNsLTk5IC00OTlsLTc5IDM5M3EtNiAyOSAtNDMgMjlxLTMgMCAtOSAtMS41dC0xNS41IC03LjV0LTExLjUgLTE3bC04NCAtMjcxaC03MXEtMTYgMCAtMjUuNSAtOC41dC05LjUgLTIzLjV0OS41IC0yMy41dDI1LjUgLTguNWg3OWw0IC0xcTMgMCA2IDAuNXQ4IDF0OSAydDguNSA0LjV0OCA4dDYuNSAxMmw1OSAyMDJsODUgLTQyN3EwIC0xMyA4IC0yMwp0MjEgLTEzcTE1IC0zIDI3LjUgNS41dDE1LjUgMjMuNWwxMDYgNDgzbDQ0IC00MThxNCAtMzAgNDEgLTMycTI4IC0xIDQwIDIxbDc5IDE1Mmg0OXEzMiAwIDMyIDMxLjV0LTMyIDMxLjV2MHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYzQSIgdW5pY29kZT0iJiN4ZTYzYTsiIApkPSJNMTAwNiA1NzRoLTg3NHEtNTUgMCAtOTMuNSAtMzUuNXQtMzguNSAtODUuNXYtNDU5cTAgLTUxIDM4LjUgLTg2LjV0OTMuNSAtMzUuNWg4NzZxLTEwIDI1IC0xMSAzOXEwIDE0IDI3IDQzdjQzcS0yNyAyOCAtMjcgNDJxMCA3IDcgMTcuNXQxMyAxOC41bDcgN3Y0M3EtMjcgMjkgLTI3IDQzcTAgNiA3IDE3dDEzIDE4bDcgOHY0M3EtMjcgMjggLTI3IDQzcTAgNiA3IDE3dDEzIDE4bDcgOHY0MnEtMjcgMjkgLTI3IDQzcTAgNyA3IDE3LjUKdDEzIDE4LjVsNyA3djQzcS0yNyAyOCAtMjcgNDNxMCA2IDIuNSAxMS41dDQuNSA2LjVsMiAydjB6TTk1MiA1MTl2LTUxcS0yNyAtMjggLTI3IC00M3EwIC02IDYuNSAtMTd0MTMuNSAtMThsNyAtOHYtNDJxLTI3IC0yOSAtMjcgLTQzcTAgLTcgNi41IC0xNy41dDEzLjUgLTE4LjVsNyAtN3YtNDNxLTI3IC0yOSAtMjcgLTQzcTAgLTYgNi41IC0xN3QxMy41IC0xOGw3IC04di00M3EtMjcgLTI4IC0yNyAtNDNxMCAtNiA2LjUgLTE2LjUKdDEzLjUgLTE4LjV0NyAtN3YtNDVsLTkgLTI0aC04MTlxLTIyIDAgLTQzIDI1dC0yMSA1N3Y0NThxMSAxNSAxNi41IDMzdDMxLjUgMThoODQ0djB6TTUxOSAxMzZ2MWgtMTAzdjYzaDEwM3YwcTEwIDAgMTYuNSA2LjV0Ni41IDE2dC02LjUgMTZ0LTE2LjUgNi41djBoLTg4bDk3IDE3OXE2IDggNiAxN3EwIDEyIC04LjUgMjAuNXQtMjAuNSA4LjVxLTIxIDAgLTI4IC0xOXEtODQgLTE2NCAtODggLTE3NWgtMWwtOTIgMTc1djBxLTcgMTkgLTI3IDE5CnEtMTIgMCAtMjAgLTguNXQtOCAtMTkuNXEwIC05IDQgLTE3bDk3IC0xODBoLTkwcS0xMCAwIC0xNi41IC02LjV0LTYuNSAtMTZ0Ni41IC0xNnQxNi41IC02LjVoMTA3di02M2gtMTA3di0xcS0xMCAwIC0xNi41IC02LjV0LTYuNSAtMTUuNXQ2LjUgLTE2dDE2LjUgLTdoMTA3di05MXYtNnEwIC0xMSA4IC0xOS41dDIwIC04LjV0MjAgOC41dDggMTkuNXY2aDF2OTFoMTAzdjBxMTAgMCAxNi41IDd0Ni41IDE2dC02LjUgMTUuNXQtMTYuNSA2LjV2MHoKTTcwMyA0NTVxMCAxMCA5IDE3LjV0MjIgNy41cTEyIDAgMjEuNSAtNy41dDkuNSAtMTcuNXYtMzlxMCAtMTAgLTkuNSAtMTcuNXQtMjEuNSAtNy41cS0xMyAwIC0yMiA3LjV0LTkgMTcuNXYzOXYwek03MDMgMzE0cTAgMTEgOSAxOC41dDIyIDcuNXExMiAwIDIxLjUgLTcuNXQ5LjUgLTE4LjV2LTM4cTAgLTEwIC05LjUgLTE3LjV0LTIxLjUgLTcuNXEtMTMgMCAtMjIgNy41dC05IDE3LjV2Mzh2MHpNNzAzIDE3NHEwIDEwIDkgMTcuNXQyMiA3LjUKcTEyIDAgMjEuNSAtNy41dDkuNSAtMTcuNXYtMzhxMCAtMTEgLTkuNSAtMTguNXQtMjEuNSAtNy41cS0xMyAwIC0yMiA3LjV0LTkgMTguNXYzOHYwek03MDMgMzRxMCAxMCA5IDE3LjV0MjIgNy41cTEyIDAgMjEuNSAtNy41dDkuNSAtMTcuNXYtMzlxMCAtMTAgLTkuNSAtMTcuNXQtMjEuNSAtNy41cS0xMyAwIC0yMiA3LjV0LTkgMTcuNXYzOXYwek0yMTMgNjEzbDI2IDY5cTYgMTMgMjUgMjAuNXQzNSAxLjVsMjM5IC05MWgxNzlsLTM4MCAxNDUKcS01MSAxOSAtMTAwIC0wLjV0LTY3IC02Ni41bC0yOSAtNzhoNzJ2MHpNNDIzIDc2OWw0NyA1NXExMSAxMCAzMSAxMXQzNCAtMTBsMjAyIC0xNzRsMTAxIC0zOGg0MWwtMjkxIDI0OXEtNDEgMzYgLTkzLjUgMzR0LTg1LjUgLTQwbC01MyAtNjJsNjcgLTI1djB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2M0IiIHVuaWNvZGU9IiYjeGU2M2I7IiAKZD0iTTk5NSAzN2wtMTY5IDE2OXE3MSAxMTEgNzEgMjQxcTAgOTEgLTM1LjUgMTc0dC05NS41IDE0M3QtMTQzIDk1LjV0LTE3NCAzNS41dC0xNzQgLTM1LjV0LTE0MyAtOTUuNXQtOTUuNSAtMTQzdC0zNS41IC0xNzR0MzUuNSAtMTc0dDk1LjUgLTE0M3QxNDMgLTk1LjV0MTc0IC0zNS41cTEyOSAwIDI0MSA3MWwxNjkgLTE2OXEyOCAtMjggNjggLTI4dDY4IDI4dDI4IDY4dC0yOCA2OHpNNDQ5IDEyN3EtODcgMCAtMTYwLjUgNDMKdC0xMTYuNSAxMTYuNXQtNDMgMTYwLjV0NDMgMTYwLjV0MTE2LjUgMTE2LjV0MTYwLjUgNDN0MTYwLjUgLTQzdDExNi41IC0xMTYuNXQ0MyAtMTYwLjV0LTQzIC0xNjAuNXQtMTE2LjUgLTExNi41dC0xNjAuNSAtNDN6TTU3NyA1MTFoLTY0djY0cTAgMjcgLTE5IDQ1LjV0LTQ1LjUgMTguNXQtNDUgLTE4LjV0LTE4LjUgLTQ1LjV2LTY0aC02NHEtMjcgMCAtNDUuNSAtMTguNXQtMTguNSAtNDV0MTguNSAtNDUuNXQ0NS41IC0xOWg2NHYtNjQKcTAgLTI2IDE4LjUgLTQ1dDQ1IC0xOXQ0NS41IDE5dDE5IDQ1djY0aDY0cTI2IDAgNDUgMTl0MTkgNDUuNXQtMTkgNDV0LTQ1IDE4LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2M0MiIHVuaWNvZGU9IiYjeGU2M2M7IiAKZD0iTTMyMCA1NzZxMCA4MCA1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnEwIC0zMSAtMTIgLTY0aDE0MHY2NHEwIDEzMyAtOTMuNSAyMjYuNXQtMjI2LjUgOTMuNXQtMjI2LjUgLTkzLjV0LTkzLjUgLTIyNi41di02NGgxNDBxLTEyIDMzIC0xMiA2NHpNODc4IDUxMmgtNzMycS02MCAwIC0xMDMgLTM3LjV0LTQzIC05MC41di0zODRxMCAtNTMgNDMgLTkwLjV0MTAzIC0zNy41aDczMnE2MCAwIDEwMyAzNy41dDQzIDkwLjV2Mzg0CnEwIDUzIC00MyA5MC41dC0xMDMgMzcuNXpNNTczIDE0NnYtODJxMCAtMjYgLTE4LjUgLTQ1dC00NSAtMTl0LTQ1LjUgMTl0LTE5IDQ1djgycS0yOSAxNyAtNDYuNSA0NnQtMTcuNSA2NHEwIDUzIDM3LjUgOTAuNXQ5MC41IDM3LjV0OTAuNSAtMzcuNXQzNy41IC05MC41cTAgLTM1IC0xNyAtNjR0LTQ3IC00NnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYzRCIgdW5pY29kZT0iJiN4ZTYzZDsiIApkPSJNNTExLjUgLTIwOXEtMTAzLjUgMCAtMTk3LjUgNDAuNXQtMTYyIDEwOC41dC0xMDguNSAxNjJ0LTQwLjUgMTk3LjV0NDAuNSAxOTh0MTA4LjUgMTYyLjV0MTYyIDEwOC41dDE5Ny41IDQwLjV0MTk4IC00MC41dDE2Mi41IC0xMDguNXQxMDguNSAtMTYyLjV0NDAuNSAtMTk4dC00MC41IC0xOTcuNXQtMTA4LjUgLTE2MnQtMTYyLjUgLTEwOC41dC0xOTggLTQwLjV6TTUxMiAtNjNxMTA5IDAgMjAxIDYwbC01MDQgNTA0CnEtNjAgLTkyIC02MCAtMjAxcTAgLTk5IDQ4LjUgLTE4Mi41dDEzMiAtMTMydDE4Mi41IC00OC41ek01MTIgNjYzcS0xMDkgMCAtMjAxIC02MGw1MDQgLTUwNHE2MCA5MiA2MCAyMDFxMCA5OSAtNDguNSAxODIuNXQtMTMyIDEzMnQtMTgyLjUgNDguNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYzRSIgdW5pY29kZT0iJiN4ZTYzZTsiIApkPSJNODcyIDc0M3EtNzIgNzIgLTE2NSAxMTAuNXQtMTk1IDM4LjV0LTE5NC41IC0zOC41dC0xNjQuNSAtMTEwLjV0LTExMC41IC0xNjQuNXQtMzguNSAtMTk0LjV0MzguNSAtMTk0LjV0MTEwLjUgLTE2NC41dDE2NC41IC0xMTAuNXQxOTQuNSAtMzguNXQxOTUgMzguNXQxNjUgMTEwLjVxOTcgOTcgMTMxLjUgMjI4dDAgMjYydC0xMzEuNSAyMjh2MHpNODI1IDcycS02MyAtNjMgLTE0My41IC05Ni41dC0xNjkgLTMzLjV0LTE2OS41IDMzLjUKdC0xNDMuNSA5NnQtOTYgMTQzLjV0LTMzLjUgMTY5LjV0MzMuNSAxNjl0OTYgMTQzdDE0My41IDk2dDE2OS41IDMzLjV0MTY5IC0zMy41dDE0My41IC05NS41cTg1IC04NSAxMTUgLTE5OXQwIC0yMjcuNXQtMTE1IC0xOTguNXYwek02ODQgNTQ5cS0yNSAwIC00Mi41IC0xNy41dC0xNy41IC00MnQxNy41IC00MnQ0Mi41IC0xNy41dDQyIDE3LjV0MTcgNDJ0LTE3IDQydC00MiAxNy41djB6TTM2NyA0MzBxMjUgMCA0Mi41IDE3LjV0MTcuNSA0Mgp0LTE3LjUgNDJ0LTQyLjUgMTcuNXQtNDIuNSAtMTcuNXQtMTcuNSAtNDJ0MTcuNSAtNDJ0NDIuNSAtMTcuNXYwek01MTMgMjk4cS02MiAwIC0xMTQuNSAtMjkuNXQtODUuNSAtODAuNXEtMTAgLTE1IC0xLjUgLTMxLjV0MjYuNSAtMTYuNWgycTE2IDAgMjUgMTNxMjUgMzcgNjQgNTguNXQ4NCAyMS41dDg0IC0yMS41dDY0IC01OC41cTggLTEzIDI0IC0xM2gycTE4IDAgMjYuNSAxNi41dC0xLjUgMzEuNXEtMzMgNTEgLTg1LjUgODAuNQp0LTExMy41IDI5LjV2MHpNNTEzIDI5OHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTYzRiIgdW5pY29kZT0iJiN4ZTYzZjsiIApkPSJNODk2IDgzMnEyOSAwIDQ2LjUgLTE3LjV0MTcuNSAtNDYuNXYtNzY4cTAgLTI5IC0xNy41IC00Ni41dC00Ni41IC0xNy41aC03NjhxLTI5IDAgLTQ2LjUgMTcuNXQtMTcuNSA0Ni41djc2OHEwIDI5IDE3LjUgNDYuNXQ0Ni41IDE3LjVoNzY4ek04OTYgODk2aC03NjhxLTUzIDAgLTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV2LTc2OHEwIC01MyAzNy41IC05MC41dDkwLjUgLTM3LjVoNzY4cTUzIDAgOTAuNSAzNy41dDM3LjUgOTAuNXY3NjgKcTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41djB6TTMzOSA0MTZxLTEzIC0xMyAtMTMgLTMydDEzIC0zMmwxIC0xbDEgLTFsMSAtMWgxdi0xbDEgLTFoMXYtMWwxIC0xbDEgLTFoMXYtMWwxIC0xbDEgLTFsMSAtMWwxIC0xbDEgLTFsMSAtMWgxbDEgLTFsMSAtMWwxIC0ybDI2MyAtMjYzcTE0IC0xNCAzMS41IC0xNHQzMiAxNC41dDE0LjUgMzJ0LTE0IDMxLjVsLTI1MCAyNTBsMjUwIDI1MHExNCAxNCAxNCAzMS41dC0xNC41IDMydC0zMiAxNC41CnQtMzEuNSAtMTRsLTI4MiAtMjgydjB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2NDAiIHVuaWNvZGU9IiYjeGU2NDA7IiAKZD0iTTEyOCA4MzJxLTI5IDAgLTQ2LjUgLTE3LjV0LTE3LjUgLTQ2LjV2LTc2OHEwIC0yOSAxNy41IC00Ni41dDQ2LjUgLTE3LjVoNzY4cTI5IDAgNDYuNSAxNy41dDE3LjUgNDYuNXY3NjhxMCAyOSAtMTcuNSA0Ni41dC00Ni41IDE3LjVoLTc2OHpNMTI4IDg5Nmg3NjhxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV2LTc2OHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNWgtNzY4cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXY3NjgKcTAgNTMgMzcuNSA5MC41dDkwLjUgMzcuNXYwek02ODUgNDE2cTEzIC0xMyAxMyAtMzJ0LTEzIC0zMmwtMSAtMWwtMSAtMWwtMSAtMWgtMXYtMWwtMSAtMWgtMXYtMWwtMSAtMWwtMSAtMWgtMXYtMWwtMSAtMWwtMSAtMWwtMSAtMWwtMSAtMWwtMSAtMWwtMSAtMWgtMWwtMSAtMWwtMSAtMWwtMSAtMmwtMjYzIC0yNjNxLTE0IC0xNCAtMzEuNSAtMTR0LTMyIDE0LjV0LTE0LjUgMzJ0MTQgMzEuNWwyNTAgMjUwbC0yNTAgMjUwCnEtMTQgMTQgLTE0IDMxLjV0MTQuNSAzMnQzMiAxNC41dDMxLjUgLTE0bDI4MiAtMjgydjB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2NDEiIHVuaWNvZGU9IiYjeGU2NDE7IiAKZD0iTTAgNzAzcTAgODAgNTYgMTM2LjV0MTM3IDU2LjVoNjM4cTgwIDAgMTM2LjUgLTU2dDU2LjUgLTEzN3YtNjM4cTAgLTgwIC01NiAtMTM2LjV0LTEzNyAtNTYuNWgtNjM4cS04MCAwIC0xMzYuNSA1NnQtNTYuNSAxMzd2NjM4ek01MDkgMjJxMzMgMCA1NiAyMy41dDIzIDU2dC0yMyA1NnQtNTYgMjMuNXQtNTcgLTIzLjV0LTI0IC01NnQyNCAtNTZ0NTcgLTIzLjV2MHpNNTcwIDcxNHEwIDI3IC0xNy41IDQ1LjV0LTQzLjUgMTguNQp0LTQ0LjUgLTE4LjV0LTE4LjUgLTQ1LjV2LTM4MHEwIC0yNyAxOC41IC00My41dDQ0LjUgLTE2LjV0NDQgMTd0MTggNDR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2NDIiIHVuaWNvZGU9IiYjeGU2NDI7IiAKZD0iTTg0OSA2MDRsLTE1NSAxcS0xNyAwIC0yOSAxMnQtMTIgMjh2ODFxMCAzMyAtMjMuNSA1Ni41dC01Ni41IDIzLjVxLTI3IDAgLTQ4IC0xNmwtNDA1IC0zMzRxLTMwIC0yOSAtMzAgLTcxdDMwIC03MWw0MDUgLTMzNHEyMSAtMTYgNDggLTE2cTMzIDAgNTYuNSAyMy41dDIzLjUgNTYuNXY4MHEwIDE3IDEyIDI4LjV0MjkgMTEuNWwxNTUgMXEzMyAwIDU2LjUgMjMuNXQyMy41IDU2LjV2MjgwcTAgMzMgLTIzLjUgNTZ0LTU2LjUgMjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2NDMiIHVuaWNvZGU9IiYjeGU2NDM7IiAKZD0iTTE3MCA2MDRsMTU1IDFxMTcgMCAyOC41IDEydDExLjUgMjh2ODFxMCAzMyAyMy41IDU2LjV0NTcuNSAyMy41cTI2IDAgNDggLTE2bDQwNSAtMzM0cTMwIC0yOSAzMCAtNzF0LTMwIC03MWwtNDA1IC0zMzRxLTIyIC0xNiAtNDggLTE2cS0zNCAwIC01Ny41IDIzLjV0LTIzLjUgNTYuNXY4MHEwIDE3IC0xMS41IDI4LjV0LTI4LjUgMTEuNWwtMTU1IDFxLTMzIDAgLTU2LjUgMjMuNXQtMjMuNSA1Ni41djI4MHEwIDMzIDIzLjUgNTZ0NTYuNSAyM3oKIiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2NDQiIHVuaWNvZGU9IiYjeGU2NDQ7IiAKZD0iTTQ0OCAyMjZsLTE3MyAtNjBsNSAyNTFsLTE1MiAyMDBsMjQxIDczbDE0MyAyMDZsMTQzIC0yMDZsMjQxIC03M2wtMTUyIC0yMDBsNSAtMjUxbC0xNzMgNjB2LTI5MHEwIC0yNyAtMTguNSAtNDUuNXQtNDUuNSAtMTguNXQtNDUuNSAxOC41dC0xOC41IDQ1LjV2MjkweiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjQ1IiB1bmljb2RlPSImI3hlNjQ1OyIgCmQ9Ik04MDQgNTM5cS0xMSA0IC00OC41IDUuNXQtNzYgM3QtODYgMTR0LTgwLjUgMzcuNXEtMTcwIDE0OCAtMzI1IDEzNXEtMjAgLTEgLTM4LjUgLTguNXQtMzEgLTE3dC0yMiAtMTl0LTEzLjUgLTE1LjVsLTQgLTdxLTE2IC0yNyAtNyAtNThsMjI0IC03MTlxOCAtMjcgMzIuNSAtNDB0NTAgLTR0MzggMzQuNXQzLjUgNTMuNWwtNTkgMTkxcTE3IDEzIDM5IDE5LjV0MzkuNSA3LjV0NDAgLTN0MzQuNSAtNy41dDMxIC0xMHQyMCAtNi41CnE1IC0yIDMyLjUgLTE1dDYwLjUgLTI3dDc1IC0zMHQ4MC41IC0yMi41dDcxIC00LjV0NTIgMjMuNXQxOS41IDYyLjVxMCA5MiAtMjYgMTkxdC02MS41IDE2Mi41dC02NC41IDczLjV6TTUwMCAyNTNxLTIgMSAtMTUgNC41dC0yMiA1LjV0LTI1IDV0LTI5LjUgM3QtMjkuNSAtMS41dC0zMC41IC03dC0yNi41IC0xNC41bC0xMTUgMzcycTg1IDkgMjU5IC0xMDhxMzMgLTE4IDkwIC0zMC41dDExMSAtMTguNXQ2MSAtOHEzNiAtMTAgNzMuNSAtOTIKdDM3LjUgLTE2N3EwIC0zMyAtMzIgLTQwdC04MC41IDcuNXQtOTUgMzN0LTg3IDM3dC00NC41IDE5LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2NDYiIHVuaWNvZGU9IiYjeGU2NDY7IiAKZD0iTTk0OSA1NDV2MnEwIDMgLTEgNWwtNzYgMTc1cS0xMCAyOCAtMzYgNDV0LTU5IDE3aC01MzFxLTMzIDAgLTU4IC0xNnQtMzQgLTQ1bC04MSAtMTc4cS0xIC0xIC0yIC00cS04IC0yNyAtOCAtNTZxMCAtNDkgMjUgLTkxdDY5IC02NXYwdjBxMzYgLTE5IDgzIC0xOXE4MyAwIDEzNiA2M3E1MiAtNjIgMTM1IC02M3E4MSAxIDEzNCA2M3E1MyAtNjIgMTM2IC02MnE0OCAwIDg1IDIwcTQyIDIzIDY3IDY0LjV0MjUgOTAuNXEwIDI4IC05IDU0djB6Ck04NTkgMjg5cS0xNCAwIC0yMyAtOS41dC05IC0yMi41di0xOTRxMCAtNyAtNS41IC0xMi41dC0xMy41IC01LjVoLTYwN3EtOCAwIC0xMyA1LjV0LTUgMTIuNXYxOTBxMCAxMyAtOS41IDIyLjV0LTIzLjUgOS41cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtMTkwcTAgLTM0IDI0LjUgLTU4dDU4LjUgLTI0aDYwOHEzNCAwIDU4IDI0dDI0IDU4djE5NHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjV2MHpNNzg0IDUxMGgtNTQ2CnEtMTMgMCAtMjQgMTN0LTExIDI4dDExIDI4dDI0IDEzaDU0NnExNCAwIDI1IC0xM3QxMSAtMjh0LTExIC0yOHQtMjUgLTEzdjB6TTc4NCA1MTB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2NDciIHVuaWNvZGU9IiYjeGU2NDc7IiAKZD0iTTUxMiA4OTZxLTEzOSAwIC0yNTcgLTY4LjV0LTE4Ni41IC0xODYuNXQtNjguNSAtMjU3dDY4LjUgLTI1N3QxODYuNSAtMTg2LjV0MjU3IC02OC41dDI1NyA2OC41dDE4Ni41IDE4Ni41dDY4LjUgMjU3dC02OC41IDI1N3QtMTg2LjUgMTg2LjV0LTI1NyA2OC41ek0yNzAgMjg5cS0zOSAwIC02NyAyOHQtMjggNjd0MjggNjd0NjcuNSAyOHQ2NyAtMjh0MjcuNSAtNjd0LTI3LjUgLTY3dC02Ny41IC0yOHpNNTEyIDI4OXEtMzkgMCAtNjcgMjgKdC0yOCA2N3QyOCA2N3Q2NyAyOHQ2NyAtMjh0MjggLTY3dC0yOCAtNjd0LTY3IC0yOHpNNzU0IDI4OXEtNDAgMCAtNjcuNSAyOHQtMjcuNSA2N3QyNy41IDY3dDY3IDI4dDY3LjUgLTI4dDI4IC02N3QtMjggLTY3dC02NyAtMjh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2NDgiIHVuaWNvZGU9IiYjeGU2NDg7IiAKZD0iTTgzMiAzMHEwIC0zMyAtMjMgLTU2dC01NSAtMjNoLTQ2OXEtMzMgMCAtNTUuNSAyM3QtMjIuNSA1NnY3MDhxMCAzMyAyMi41IDU2dDU1LjUgMjNoMjg0cTExIC0yIDE3IC05dDggLTIwdDIuNSAtMjEuNXQwLjUgLTI2LjV2LTEyMHEwIC0xNiAxMS41IC0yNy41dDI3LjUgLTExLjVoMTE4cTE5IDAgMjkgLTF0MjMuNSAtNHQxOS41IC0xMS41dDYgLTIyLjV2LTUxMnpNODAzIDczMGwtMjkgMjlsLTI5IDI5cS01OCA2MCAtODguNSA4NAp0LTU5LjUgMjRoLTMxMnEtNjUgMCAtMTExIC00NnQtNDYgLTExMnYtNzA4cTAgLTY2IDQ2IC0xMTJ0MTExIC00Nmg0NjlxNjQgMCAxMTAgNDZ0NDYgMTEydjU1MXEwIDI5IC0yNCA2MHQtODMgODl6TTM2MyA0NjNoLTc4di03OWg3OHY3OXpNMzYzIDMwNWgtNzh2LTc5aDc4djc5ek0zNjMgMTQ4aC03OHYtNzloNzh2Nzl6TTc1NCA0NjNoLTMxM3YtNzloMzEzdjc5ek03NTQgMzA1aC0zMTN2LTc5aDMxM3Y3OXpNNzU0IDE0OGgtMzEzdi03OWgzMTMKdjc5ek0zMjQgNjk5cS0xNiAwIC0yNy41IC0xMS41dC0xMS41IC0yNy41di00MHEwIC0xNiAxMS41IC0yNy41dDI3LjUgLTExLjVoMjA2cS0xMSAxOSAtMTEgMzl2NzloLTE5NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTY0OSIgdW5pY29kZT0iJiN4ZTY0OTsiIApkPSJNNTEyIDg5MXEtMTAzIDAgLTE5Ny41IC00MC41dC0xNjIuNSAtMTA4LjV0LTEwOC41IC0xNjIuNXQtNDAuNSAtMTk4dDQwLjUgLTE5OHQxMDguNSAtMTYyLjV0MTYyLjUgLTEwOC41dDE5OCAtNDAuNXQxOTcuNSA0MC41dDE2Mi41IDEwOC41dDEwOC41IDE2Mi41dDQwIDE5OHQtNDAgMTk4dC0xMDguNSAxNjIuNXQtMTYyLjUgMTA4LjV0LTE5OCA0MC41ek01NDIgMTE2cS0xNyAtMTYgLTQwIC0xNnQtNDAgMTV0LTE3IDQzCnEwIDIzIDE2LjUgMzkuNXQ0MC41IDE2LjV0NDAuNSAtMTYuNXQxNi41IC0zOS41cTAgLTI3IC0xNyAtNDJ6TTY4MiA0NjZxLTEzIC0yNCAtMzEgLTQxLjV0LTY0IC01OS41cS0xMyAtMTIgLTIwLjUgLTIwLjV0LTExLjUgLTE2dC02IC0xNXQtNiAtMjUuNXEtNyAtMzkgLTQ1IC0zOXEtMjAgMCAtMzMgMTIuNXQtMTMgMzcuNXEwIDMyIDkuNSA1NS41dDI2IDQxdDQzLjUgNDEuNXEyNSAyMSAzNS41IDMxLjV0MTggMjR0Ny41IDI4LjUKcTAgMzAgLTIyLjUgNTF0LTU4LjUgMjFxLTQxIDAgLTYwLjUgLTIxdC0zMy41IC02MnEtMTMgLTQyIC00OSAtNDJxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzJxMCAzNiAyMyA3Mi41dDY3IDYxdDEwMyAyNC41cTU1IDAgOTcgLTIwLjV0NjQuNSAtNTV0MjIuNSAtNzUuNXEwIC0zMiAtMTMgLTU2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjRBIiB1bmljb2RlPSImI3hlNjRhOyIgCmQ9Ik02NDAgLTY0cTI3IDAgNDUuNSAxOC41dDE4LjUgNDUuNXQtMTguNSA0NS41dC00NS41IDE4LjV0LTQ1LjUgLTE4LjV0LTE4LjUgLTQ1LjV0MTguNSAtNDUuNXQ0NS41IC0xOC41djB2MHYwdjB2MHYwek0zODQgLTY0cTI3IDAgNDUuNSAxOC41dDE4LjUgNDUuNXQtMTguNSA0NS41dC00NS41IDE4LjV0LTQ1LjUgLTE4LjV0LTE4LjUgLTQ1LjV0MTguNSAtNDUuNXQ0NS41IC0xOC41djB2MHYwdjB2MHYwek02NDAgMTkycTI3IDAgNDUuNSAxOC41CnQxOC41IDQ1LjV0LTE4LjUgNDUuNXQtNDUuNSAxOC41dC00NS41IC0xOC41dC0xOC41IC00NS41dDE4LjUgLTQ1LjV0NDUuNSAtMTguNXYwdjB2MHYwdjB2MHpNMzg0IDE5MnEyNyAwIDQ1LjUgMTguNXQxOC41IDQ1LjV0LTE4LjUgNDUuNXQtNDUuNSAxOC41dC00NS41IC0xOC41dC0xOC41IC00NS41dDE4LjUgLTQ1LjV0NDUuNSAtMTguNXYwdjB2MHYwdjB2MHpNNjQwIDQ0OHEyNyAwIDQ1LjUgMTguNXQxOC41IDQ1LjV0LTE4LjUgNDUuNQp0LTQ1LjUgMTguNXQtNDUuNSAtMTguNXQtMTguNSAtNDUuNXQxOC41IC00NS41dDQ1LjUgLTE4LjV2MHYwdjB2MHYwdjB6TTM4NCA0NDhxMjcgMCA0NS41IDE4LjV0MTguNSA0NS41dC0xOC41IDQ1LjV0LTQ1LjUgMTguNXQtNDUuNSAtMTguNXQtMTguNSAtNDUuNXQxOC41IC00NS41dDQ1LjUgLTE4LjV2MHYwdjB2MHYwdjB6TTY0MCA3MDRxMjcgMCA0NS41IDE4LjV0MTguNSA0NS41dC0xOC41IDQ1LjV0LTQ1LjUgMTguNXQtNDUuNSAtMTguNQp0LTE4LjUgLTQ1LjV0MTguNSAtNDUuNXQ0NS41IC0xOC41djB2MHYwdjB2MHYwek0zODQgNzA0cTI3IDAgNDUuNSAxOC41dDE4LjUgNDUuNXQtMTguNSA0NS41dC00NS41IDE4LjV0LTQ1LjUgLTE4LjV0LTE4LjUgLTQ1LjV0MTguNSAtNDUuNXQ0NS41IC0xOC41djB2MHYwdjB2MHYweiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjRCIiB1bmljb2RlPSImI3hlNjRiOyIgCmQ9Ik04NDIgMzQxcTMgMjUgMyA0M3QtMyA0M2w5NCA3NHExNCAxMSA1IDI4bC04OSAxNTRxLTEwIDE2IC0yNyA5bC0xMTEgLTQ0cS0zNSAyNyAtNzUgNDRsLTE2IDExN3EtMiA4IC04IDEzLjV0LTE0IDUuNWgtMTc4cS04IDAgLTE0IC01LjV0LTggLTEzLjVsLTE2IC0xMTdxLTQxIC0xNyAtNzUgLTQ0bC0xMTEgNDRxLTE4IDcgLTI3IC05bC04OSAtMTU0cS05IC0xNiA1IC0yOGw5NCAtNzRxLTMgLTI1IC0zIC00M3QzIC00M2wtOTQgLTc0CnEtMTQgLTExIC01IC0yOGw4OSAtMTU0cTEwIC0xNiAyNyAtOWwxMTEgNDRxMzUgLTI3IDc1IC00NGwxNiAtMTE3cTIgLTggOCAtMTMuNXQxNCAtNS41aDE3OHE4IDAgMTQgNS41dDggMTMuNWwxNiAxMTdxNDEgMTcgNzUgNDRsMTExIC00NHExNyAtNyAyNyA5bDg5IDE1NHE5IDE2IC02IDI4ek01MTEuNSAyMjlxLTY0LjUgMCAtMTA5LjUgNDUuNXQtNDUgMTA5LjV0NDUgMTA5LjV0MTA5LjUgNDUuNXQxMTAgLTQ1LjV0NDUuNSAtMTA5LjUKdC00NS41IC0xMDkuNXQtMTEwIC00NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjRDIiB1bmljb2RlPSImI3hlNjRjOyIgCmQ9Ik01MTIgODMycS0xODUgMCAtMzE2LjUgLTEzMS41dC0xMzEuNSAtMzE2LjV0MTMxLjUgLTMxNi41dDMxNi41IC0xMzEuNXQzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXQtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41ek02NDEgMzIwcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXQtOS41IC0yMi41dC0yMi41IC05LjVoLTk3di05NXEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjV0LTIyLjUgOS41dC05LjUgMjIuNXY5NWgtOTUKcS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV0OS41IDIyLjV0MjIuNSA5LjVoOTV2NjRoLTk1cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV0OS41IDIyLjV0MjIuNSA5LjVoOTV2MjBsLTExOCAxMThxLTEwIDEwIC05LjUgMjN0OS41IDIyLjV0MjIuNSA5LjV0MjIuNSAtOWwxMDggLTEwOGwxMDEgMTA3cTEwIDEwIDIzIDEwdDIyLjUgLTl0MTAgLTIydC05LjUgLTIzbC0xMTggLTEyNHYtMTVoOTdxMTMgMCAyMi41IC05LjV0OS41IC0yMi41CnQtOS41IC0yMi41dC0yMi41IC05LjVoLTk3di02NGg5N3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTY0RCIgdW5pY29kZT0iJiN4ZTY0ZDsiIApkPSJNODI4IDMxMnEtMjMgMTE0IC0xMTEgMTg5dC0yMDUgNzVxLTkyIDAgLTE2Ny41IC00OHQtMTE0LjUgLTEyOHEtOTkgLTEzIC0xNjQuNSAtODcuNXQtNjUuNSAtMTc2LjVxMCAtMTA5IDc1IC0xODYuNXQxODEgLTc3LjVoNTU1cTg5IDAgMTUxIDY0dDYyIDE1NnEwIDg1IC01OCAxNDl0LTEzOCA3MXpNNTc2IDY0cTAgLTI3IC0xOC41IC00NS41dC00NS41IC0xOC41aC02NHEtMjcgMCAtNDUuNSAxOXQtMTguNSA0NXYxMjVsLTk2IDIKcS0yNiAwIC0zMiAxMy41dDEzIDMyLjVsMTY2IDE2NnExOSAxOSA0NSAxOXQ0NSAtMTlsMTY2IC0xNjZxMTkgLTE5IDEzIC0zMnQtMzIgLTEzaC05NnYtMTI4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjRFIiB1bmljb2RlPSImI3hlNjRlOyIgaG9yaXotYWR2LXg9IjEwMjUiIApkPSJNNTEyIC0xMjdxMTAzIDAgMTk2LjUgMzkuNXQxNjIgMTA2dDEwOS41IDE1OXQ0NCAxOTQuNXEtMyAtMTE5IC01OSAtMjE5dC0xNTEgLTE1OHQtMjA2IC01OHEtMTEzIDAgLTIwOC41IDYwdC0xNTEgMTYzdC01NS41IDIyNHEwIDQwIC0yOC41IDY4dC02OCAyOHQtNjcuNSAtMjh0LTI4IC02OHEwIC0xMDQgNDAuNSAtMTk4LjV0MTA5IC0xNjN0MTYzIC0xMDl0MTk4LjUgLTQwLjV6TTUxMiA4OTZxLTEwMiAwIC0xOTUuNSAtMzkuNQp0LTE2MiAtMTA2dC0xMTAgLTE1OXQtNDMuNSAtMTk1LjVxMyAxMTkgNTkgMjE5LjV0MTUwLjUgMTU4LjV0MjA2LjUgNTh0MjA4IC02MHQxNTEuNSAtMTYzdDU1LjUgLTIyNXEwIC0zOSAyOCAtNjd0NjggLTI4dDY4IDI4dDI4IDY3cTAgMTA1IC00MC41IDE5OS41dC0xMDkgMTYzdC0xNjMgMTA5dC0xOTkuNSA0MC41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjRGIiB1bmljb2RlPSImI3hlNjRmOyIgCmQ9Ik05NDQgLTEyMGgtMjg4cS0zMCAwIC01MSAyMS41dC0yMSA1MC41djI4OHEwIDMwIDIxIDUxdDUxIDIxaDI4OHEyOSAwIDUwLjUgLTIxdDIxLjUgLTUxdi0yODhxMCAtMjkgLTIxLjUgLTUwLjV0LTUwLjUgLTIxLjV6TTk0NCA0NTZoLTI4OHEtMzAgMCAtNTEgMjF0LTIxIDUxdjI4OHEwIDI5IDIxIDUwLjV0NTEgMjEuNWgyODhxMjkgMCA1MC41IC0yMS41dDIxLjUgLTUwLjV2LTI4OHEwIC0zMCAtMjEuNSAtNTF0LTUwLjUgLTIxegpNMzY4IC0xMjBoLTI4OHEtMjkgMCAtNTAuNSAyMS41dC0yMS41IDUwLjV2Mjg4cTAgMzAgMjEuNSA1MXQ1MC41IDIxaDI4OHEzMCAwIDUxIC0yMXQyMSAtNTF2LTI4OHEwIC0yOSAtMjEgLTUwLjV0LTUxIC0yMS41ek0zNjggNDU2aC0yODhxLTI5IDAgLTUwLjUgMjF0LTIxLjUgNTF2Mjg4cTAgMjkgMjEuNSA1MC41dDUwLjUgMjEuNWgyODhxMzAgMCA1MSAtMjEuNXQyMSAtNTAuNXYtMjg4cTAgLTMwIC0yMSAtNTF0LTUxIC0yMXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTY1MCIgdW5pY29kZT0iJiN4ZTY1MDsiIGhvcml6LWFkdi14PSIxMDI1IiAKZD0iTTEwMjMgLTEyOGgtMTAyMnEwIDIgLTAuNSA4dC0wLjUgMTBxMCAxMDQgNDAuNSAxOTl0MTA5IDE2My41dDE2My41IDEwOXQxOTkgNDAuNXQxOTkgLTQwLjV0MTYzLjUgLTEwOXQxMDkgLTE2My41dDQwLjUgLTE5OXEwIC00IC0wLjUgLTEwdC0wLjUgLTh6TTY5NS41IDIxNS41cS0xMC41IDkuNSAtMjUuNSA5LjV0LTI2IC0xMGwtMTY5IC0xNThsLTI0IDIzcS0yNCAyMiAtNDkgNDRsLTI0IDIzcS0xMCAxMCAtMjUgOS41dC0yNiAtMTAKdC0xMC41IC0yMy41dDEwLjUgLTI0bDEyMiAtMTExcTExIC0xMCAyNiAtMTB0MjYgMTBsMTk0IDE4MHExMSAxMCAxMSAyNHQtMTAuNSAyMy41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjUxIiB1bmljb2RlPSImI3hlNjUxOyIgCmQ9Ik04MjIgNTEzaC04MHEwIDk3IC02NSAxNjN0LTE2MCA2NnQtMTYwIC02NnQtNjUgLTE2M2gtODFxMCA3OCA0MC41IDE0OXQxMTIgMTE1LjV0MTUzIDQ0LjV0MTUzIC00NC41dDExMiAtMTE1LjV0NDAuNSAtMTQ5ek04NzAgMzgxcTAgMzMgLTIzLjUgNTd0LTU3LjUgMjRoLTUzOHEtMzMgMCAtNTYuNSAtMjR0LTIzLjUgLTU3di0zODJxMCAtMzQgMjMuNSAtNTcuNXQ1Ni41IC0yMy41aDUzOHEzNCAwIDU3LjUgMjMuNXQyMy41IDU3LjV2MzgyegpNNTg1IDgycTAgLTI1IC0xNy41IC00Mi41dC00Mi41IC0xNy41aC05cS0yNSAwIC00Mi41IDE3LjV0LTE3LjUgNDIuNXYxNjRxMCAyNSAxNy41IDQyLjV0NDIuNSAxNy41aDlxMjUgMCA0Mi41IC0xNy41dDE3LjUgLTQyLjV2LTE2NHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRTY1MiIgdW5pY29kZT0iJiN4ZTY1MjsiIApkPSJNOTIzIC0xMjhoLTMyNGgtMWgtNTA0cS0xOCAwIC0zMC41IDEyLjV0LTEyLjUgMzAuNXY5MzhxMCAxOCAxMi41IDMwLjV0MzAuNSAxMi41aDUwNHExNyAwIDI5LjUgLTEyLjV0MTIuNSAtMzAuNXYtMzQxaDI4M3EyMSAwIDM1LjUgLTExdDE0LjUgLTI2di01NjZxMCAtMTUgLTE0LjUgLTI2dC0zNS41IC0xMXpNNTEyIDY5MWgtMzMzdi03N2gzMzN2Nzd6TTUxMiA0ODZoLTMzM3YtNzZoMzMzdjc2ek01MTIgMjgyaC0zMzN2LTc3aDMzM3Y3N3oKTTg0NSAzNThoLTE3OXYtMTUzaDE3OXYxNTN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2NTMiIHVuaWNvZGU9IiYjeGU2NTM7IiAKZD0iTTYxNyAtMTI4aC0yMTZxLTYwIDAgLTkwIDAuNXQtNzcuNSAyLjV0LTcxIDYuNXQtNDkuNSAxMi41dC0zNi41IDIxLjV0LTEwLjUgMzEuNXYyMXEwIDkwIDQ1IDE2Ni41dDEyMiAxMjAuNXQxNjggNDRoMjE3cTkxIDAgMTY4LjUgLTQ0dDEyMiAtMTIwLjV0NDQuNSAtMTY2LjV2LTIxcTAgLTE0IC02IC0yNC41dC0yMC41IC0xOHQtMzAgLTEzdC00MiAtOXQtNDkgLTZ0LTU4IC0zdC02MiAtMXQtNjguNSAtMC41ek00OTguNSAzODQKcS0xMDcuNSAwIC0xODMuNSA3NXQtNzYgMTgxdDc2IDE4MXQxODMuNSA3NXQxODMuNSAtNzV0NzYgLTE4MXQtNzYgLTE4MXQtMTgzLjUgLTc1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjU0IiB1bmljb2RlPSImI3hlNjU0OyIgaG9yaXotYWR2LXg9IjEwMjUiIApkPSJNMTA0IDU1M3EzMyAzMSA1NiAyMHQyMyAtNTd2LTE5OHEwIC00NyAtMjMuNSAtNTl0LTU3LjUgMThsLTY4IDYwcS0zMyAzMCAtMzQgNzN0MzIgNzR6TTkyMCA1NTNxLTMzIDMxIC01NS41IDIwdC0yMi41IC01N3YtMTk4cTAgLTQ3IDIzLjUgLTU5dDU2LjUgMThsNjggNjBxMzMgMzAgMzQgNzN0LTMyIDc0ek0xODMgNDg1aDY1OHYtMTQ4aC02NTh2MTQ4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlFNjU1IiB1bmljb2RlPSImI3hlNjU1OyIgCmQ9Ik04NDYgMTc5aC05M3YtNDZoOTNxMTQgMCAyMy41IC0xMHQ5LjUgLTIzLjV0LTkuNSAtMjN0LTIzLjUgLTkuNWgtOTN2LTQ3cTAgLTE0IC05LjUgLTIzLjV0LTIzIC05LjV0LTIzIDkuNXQtOS41IDIzLjV2NDdoLTkzcS0xNCAwIC0yMy41IDkuNXQtOS41IDIzdDkuNSAyMy41dDIzLjUgMTBoOTN2NDZoLTkzcS0xNCAwIC0yMy41IDEwdC05LjUgMjMuNXQ5LjUgMjN0MjMuNSA5LjVoNDJsLTUyIDUycS05IDEwIC05IDIzLjV0OS41IDIzCnQyMyA5LjV0MjMuNSAtOWw4NiAtODdsODcgODdxMTAgOSAyMy41IDl0MjMgLTkuNXQ5LjUgLTIzdC0xMCAtMjMuNWwtNTIgLTUyaDQ3cTE0IDAgMjMuNSAtOS41dDkuNSAtMjN0LTkuNSAtMjMuNXQtMjMuNSAtMTB6TTk0OSAyNzVxLTE5IDQ1IC01NCA4MHQtODAgNTRxLTQ3IDIwIC05OCAyMHQtOTcgLTIwcS00NSAtMTkgLTgwIC01NHQtNTQgLTgwcS0yMCAtNDcgLTIwIC05OHQyMCAtOThxMTkgLTQ1IDU0IC03OS41dDgwIC01NC41CnE0NiAtMTkgOTcgLTE5dDk4IDE5cTQ1IDIwIDgwIDU0LjV0NTQgNzkuNXExOSA0NyAxOSA5OHQtMTkgOTh6TTY2OCA3MTZoLTI1OXEtMjIgMCAtMzcuNSAtMTUuNXQtMTUuNSAtMzh0MTUuNSAtMzh0MzcuNSAtMTUuNWgyNTlxMjIgMCAzNy41IDE1LjV0MTUuNSAzOHQtMTUuNSAzOHQtMzcuNSAxNS41ek0yMzAgNzE2aC03MXEtMjMgMCAtMzguNSAtMTUuNXQtMTUuNSAtMzh0MTUuNSAtMzh0MzguNSAtMTUuNWg3MXEyMyAwIDM4LjUgMTUuNQp0MTUuNSAzOHQtMTUuNSAzOHQtMzguNSAxNS41ek0xNjEgMzkzaDM0MXE0MiA0MiA5NyA2NXE1MiAyMyAxMDkgMjRxLTE2IDE5IC00MCAxOWgtNTA3cS0yMiAwIC0zOCAtMTZ0LTE2IC0zOC41dDE2IC0zOHQzOCAtMTUuNXpNMTYxIDE3N2gyNTJxMCA1NiAxOSAxMDhoLTI3MXEtMjIgMCAtMzggLTE1LjV0LTE2IC0zOHQxNiAtMzguNXQzOCAtMTZ6TTk5OCA1OHEtMjMgLTU0IC02NSAtOTYuNXQtOTcgLTY1LjVxLTU3IC0yNCAtMTE5IC0yNAp0LTExOCAyNHEtMzAgMTMgLTU2IDMxaC00NzBxLTMwIDAgLTUxLjUgMjF0LTIxLjUgNTF2ODI1cTAgMzAgMjEgNTF0NTEgMjFoNjAxcTE1MyAwIDE1MyAtMTM3di0yOTdsMTAgLTRxNTUgLTIzIDk3IC02NXQ2NSAtOTdxMjQgLTU3IDI0IC0xMTl0LTI0IC0xMTl6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUU2NTYiIHVuaWNvZGU9IiYjeGU2NTY7IiBob3Jpei1hZHYteD0iMTEwNyIgCmQ9Ik04NjQgLTExOWwtOTUgMjIxaC00MjlsLTk1IC0yMjFoLTI0M2w0NDIgMTAyM2gyMjFsNDQyIC0xMDIzaC0yNDN6TTU1NSA2MDBsLTEyOCAtMjk3aDI1NnoiIC8+CiAgPC9mb250Pgo8L2RlZnM+PC9zdmc+Cg=="
/***/ }),
/* 195 */
/***/ (function(module, exports) {
module.exports = "data:application/x-font-ttf;base64,AAEAAAAPAIAAAwBwRkZUTXRSUq8AAAD8AAAAHE9TLzJXwF0pAAABGAAAAGBjbWFwy/IhrwAAAXgAAAFKY3Z0IA2v/lIAAGvQAAAAJGZwZ20w956VAABr9AAACZZnYXNwAAAAEAAAa8gAAAAIZ2x5ZldW7BMAAALEAABgomhlYWQLhvOxAABjaAAAADZoaGVhCFcD3QAAY6AAAAAkaG10eGOrDiYAAGPEAAABbGxvY2H0fgq3AABlMAAAALhtYXhwAlELaQAAZegAAAAgbmFtZQaA3xcAAGYIAAACLnBvc3RBHuAuAABoOAAAA5BwcmVwpbm+ZgAAdYwAAACVAAAAAQAAAADMPaLPAAAAANQKV+8AAAAA1ApX8AAEBAIB9AAFAAACmQLMAAAAjwKZAswAAAHrADMBCQAAAgAGAwAAAAAAAAAAAAEQAAAAAAAAAAAAAABQZkVkAMAAeOZWA4D/gABcA6UA0QAAAAEAAAAAAxgAAAAAACAAAQAAAAMAAAADAAAAHAABAAAAAABEAAMAAQAAABwABAAoAAAABgAEAAEAAgB45lb//wAAAHjmAP///4saBAABAAAAAAAAAAABBgAAAQAAAAAAAAABAgAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIgAAATICqgADAAcAKUAmAAAAAwIAA1cAAgEBAksAAgIBTwQBAQIBQwAABwYFBAADAAMRBQ8rMxEhESczESMiARDuzMwCqv1WIgJmAAAABQAs/+EDvAMYABYAMAA6AFIAXgF3S7ATUFhASgIBAA0ODQAOZgADDgEOA14AAQgIAVwQAQkICgYJXhEBDAYEBgxeAAsEC2kPAQgABgwIBlgACgcFAgQLCgRZEgEODg1RAA0NCg5CG0uwF1BYQEsCAQANDg0ADmYAAw4BDgNeAAEICAFcEAEJCAoICQpmEQEMBgQGDF4ACwQLaQ8BCAAGDAgGWAAKBwUCBAsKBFkSAQ4ODVEADQ0KDkIbS7AYUFhATAIBAA0ODQAOZgADDgEOA14AAQgIAVwQAQkICggJCmYRAQwGBAYMBGYACwQLaQ8BCAAGDAgGWAAKBwUCBAsKBFkSAQ4ODVEADQ0KDkIbQE4CAQANDg0ADmYAAw4BDgMBZgABCA4BCGQQAQkICggJCmYRAQwGBAYMBGYACwQLaQ8BCAAGDAgGWAAKBwUCBAsKBFkSAQ4ODVEADQ0KDkJZWVlAKFNTOzsyMRcXU15TXltYO1I7UktDNzUxOjI6FzAXMFERMRgRKBVAExYrAQYrASIOAh0BITU0JjU0LgIrARUhBRUUFhQOAiMGJisBJyEHKwEiJyIuAj0BFyIGFBYzMjY0JhcGBw4DHgE7BjI2Jy4BJyYnATU0PgI7ATIWHQEBGRsaUxIlHBIDkAEKGCcehf5KAqIBFR8jDg4fDiAt/kksHSIUGRkgEwh3DBISDA0SEowIBgULBAIEDw4lQ1FQQCQXFgkFCQUFBv6kBQ8aFbwfKQIfAQwZJxpMKRAcBA0gGxJhiDQXOjolFwkBAYCAARMbIA6nPxEaEREaEXwaFhMkDhANCBgaDSMRExQBd+QLGBMMHSbjAAADAAD/gAQAA4AADwAyAEEATEBJAAQCAwIEA2YAAwUCAwVkAAAIAQIEAAJZAAUJAQYHBQZaAAcBAQdNAAcHAVIAAQcBRjQzERA7OTNBNEEmJRoYFRQQMhEyNTIKECsRNDYzITIWFREUBiMhIiY1ASIHBhUzNDc2MzIXFhUUDwEGBwYdATM1NDc2NzY3NjU0JyYDIgcGFBcWMzI3NjU0JyZLNQMANUtLNf0ANUsCC3FCQnQaHEQ1HR0cDGUTFXYQDhtHESU9PHghFxcXGCAhFxgXFwMANUtLNf0ANUtLNQLpQEByQiIqHR4xJyIOWiknPQ4OJB8dFj8SMkxdNjb9shYVRBUXFhUjIRYWAAAABAAA/4gDvwOAABoAJAAnACsAPkA7KCQCAQIrKSMDBAEqJyYlBAAEA0AABAEAAQQAZgACAAEEAgFZAAADAwBLAAAAA1IAAwADRhU1MyERBRMrAREhESEyNjQmIyEiBhURFBYzITI2NRE0JiIGAz4BHwEeAQ8BJwE3JwEXAScDAP2AAUAbJSUb/sA1S0s1AoA1SyU2JRQRNRVhFAURKcT+dN7EAUnE/uDEAUj+wALAJTUmSzX9QDVLSzUBQBomJgIHFQQRUhE1FDGk/WJApQGIpP6opQACAAD/gAQAA4AADwAnADlANhYUAgIAEAEEAgJABgEEAgUCBAVmAAADAQIEAAJXAAUBAQVNAAUFAVIAAQUBRiMSIxYVNTIHFSsRNDYzITIWFREUBiMhIiY1ASYnIzUmJwYdASMGFRQ7ARUUMxY9ATMySzUDADVLSzX9ADVLAzsHKtgHKjjRODjRODHRMQMANUtLNf0ANUtLNQF+KwfeKwcHMtcHKzrPOgc51wAAAwA6/4ADugOAACAAMwA7AP1AEBMBAwAsIQIHCRIRAgIHA0BLsAtQWEBBAAQDBgMEBmYABQYKBgUKZgAIAgECCAFmCwEAAAMEAANXAAYACgkGClkACQAHAgkHWQACCAECTQACAgFRAAECAUUbS7AWUFhANgAFBgoGBQpmAAgCAQIIAWYLAQAAAwQAA1cABgAKCQYKWQAJAAcCCQdZAAIAAQIBVQAEBAoEQhtAQQAEAwYDBAZmAAUGCgYFCmYACAIBAggBZgsBAAADBAADVwAGAAoJBgpZAAkABwIJB1kAAggBAk0AAgIBUQABAgFFWVlAHAIAOTg1NC8uKykmJRsaFxUVFA8NCgcAIAIgDA4rASEiBhURFBYzITI2NCYjITAvAREXISsBFRQWMjY9ATQmAzY1NCYiBhQWMzI3FxY2NzY0JyQiJjQ2MhYUAz39gDZNTjUBghomJhr+fgECAwKAAQIlNSZIZTCW1JaWajk0nxI1ExMT/s9qS0tqSwOASDT9ATZPJTYlAgMC/wS+GyUlG8I1R/0vQ1JqlpbUlhmfEwESEzUSrEtqS0tqAAADAAX/hQP7A3sAEwAnADMATEBJCwoCBQAJAQIFFwwCAQIUAQQBFhUCAwQFQAAFAAIABQJmAAQBAwEEA2YAAgEDAk0AAAABBAABWQACAgNRAAMCA0UVFxcaGxIGFCsBJyYiDwEGFB8BNxcHFxYyPwE2NAEHJzcnJiIPAQYUHwEWMj8BNjQnJBYyPwE2NCYiDwEGA+r1ETAR9RERKfWk9ikRMBH1Ef4u9aT1KBEwEfUREfURMBH1ERH++iIvEfURIi8R9RECdfUREfURMBEo9aT1KRER9REw/qH1pPUpERH1ETAR9RER9REwEREiEfURLyIR9REAAgAA/4YD+gOAABAALgBJQEYsJR4VBAUEAUADAQIBBAECBGYABAUBBAVkBgEFAAEFAGQAAQIAAU0AAQEAUQcBAAEARQEAKCcjIhoZGBcTEgkIABABEAgOKwUiLgI0PgIyHgIUDgISJiIPAScmIgcjBhQfAQcGFBYyPwEXFjI2NC8BNzYB/Wi8iFFRiLzPvYhRUYi9lyQyEpeWETMRARERlpcSJDISl5cSMiQSl5cSelGIvc+8iFFRiLzPvYhRAtkkEpeVEhIRMxGWlxIyJBKXlxIkMhKXlxIAAgBA/4ADugN/ABUAPwDDS7AKUFhALwABAAFoAgoCAAUFAFwAAwYHBwNeCQEFCAEGAwUGWgAHBAQHTQAHBwRSCwEEBwRGG0uwC1BYQDAAAQABaAIKAgAFBQBcAAMGBwYDB2YJAQUIAQYDBQZaAAcEBAdNAAcHBFILAQQHBEYbQC8AAQABaAIKAgAFAGgAAwYHBgMHZgkBBQgBBgMFBloABwQEB00ABwcEUgsBBAcERllZQB4XFgEAOTYzMSwpJCIfHBY/Fz4SDwwKBgUAFQEVDA4rATI2LwEmIg8BBhY7AREUFjsBMjY1EQEiJjURNDY7ATIWHQEjIgYdARQWMyEyNj0BNCYrATU0NjsBMhYVERQGIwLTNRglzRI0E9QlFjWKHhUyFR7+VSc3NydkGiVGJjc3JgIEJzY2J0cmGmQnNzcnAj02JdQTE9QmNf5bFh8fFgGl/UM5KAGEKTkmGyE4KcIoOTkowik4IRsmOSn+fCg5AAAAAgAA/4EEAAOAABUARQBsQGkoAQoIAUApAQoBPwAEAwRoAAoIAAgKAGYCDQIAAQgAAWQMAQcLAQgKBwhZBQEDAAEJAwFZAAkGBglNAAkJBlIOAQYJBkYXFgEAPzw5NzMyLywkIh8cFkUXRBIRERAQDwwKBgUAFQEVDw4rATIWDwEGIi8BJjY7ARE0NjMjMhYVEQEiJjURNDY7ATIWHQEjIg4CFQcRFBYzITI2NREiNi4CKwE1NDY7ATIWFREUBiMCwhsNEa4RMBGyEQ4bhCUbAxom/gkqHx8qdxslQRIaDAcBIR8CgBwmAQIHCx0UPiYahCcUFCcBfx0V0xQU1BQdAcEaJiYa/j/+AhwoArUoHSYaPg0SEgYG/jgXJyUZAcgMExENPhomGiv9SysZAAAAAAEAAP/dA8AC/gAkABxAGQADAAABAwBZAAEBAlEAAgILAkIlQ0QgBBIrASEyFhUUBiMhIyIGFBY7ASEyNjU0LgEjITU0Jg8BBhQfARY2NQEjAV1QcHBP/oMDGyUlGwMBfYS7VZRX/qMdFdwVFdwVHQHdcU9QcCY1JbuFVpRWgBoOELARLxCwEQ4aAAAAAQAA/4AEAAOAAB0AJUAiFw8HAAQCAAFAAQEAAgIATQEBAAACUQMBAgACRRQaFBQEEisJATY0JiIHCQEmIgcGFBcJAQYUFxYyNwkBFjI2NCcCigFZHTlRHf6n/qcdURwdHQFZ/qcdHRxRHQFZAVkdUTkdAYABWR1ROR3+pwFZHR0cUR3+p/6nHVEcHR0BWf6nHTlRHQAAAAADAAf/hwP5A3kABwAPABwACrcbFQ4LAwADJislAT4BFhcWAgUmEjcBDgEmAwYCEhYEJDYSAiYkBAMk/hZPtqs9XAP9WVwDXAHqT7arYGpcL7MBAQEN1Fwvs/7//vOFAkYvDUdIbv7lZ24BG2r9ui8NRwLHWf7//vPUXC+zAQEBDdRcLwACAAD/gAQAA4AAGAA3AB9AHC4UDwoEAD0AAQAAAU0AAQEAUQAAAQBFIR4SAg8rAScmIg8CDgEfAQcGFj8BFxY2LwE3NiYnAT0BETQ2MyEyFhURHQEUDgQPAS4IAmlJDSYNSZgaCxJpEwMdGIyMGB0DE2kSCxr8/zspAzgpOzhbbW1bHBwHFkZEXE9ROSQCI4IXF4IcBSEUbZMbFQtAQAsWGpNtEyIF/purkQFNIzIyI/6zkasxVTkvGxIDBAECDA4aHi4zRgAAAAIAAP/FBEQDgAAfACsAW0AJGBAIAAQBAAFAS7ALUFhAHgAEBQRoAAUAAAVcAwEAAQEATQMBAAABUgIBAQABRhtAHQAEBQRoAAUABWgDAQABAQBNAwEAAAFSAgEBAAFGWbczNBoUGhIGFCsBJyYiBwYUHwEHBhQXFjI/ARcWMjc2NC8BNzY0JyYiByQ0NjMhMhYUBiMhIgIykR5VHh4ekZEeHh5VHpGRHlQfHh6RkR0dH1Qe/T08KwN3Kjw8KvyJKwGWkR0dH1QekZEeVR4eHpGRHh4eVR6RkR5UHx4ex1Y8PFY8AAoAAP+ABAIDgAADAAcACwAPABMAFwAjAC8AQwBHAZdLsAxQWEBRAA0ODWgADA8QEAxeAAAWAxYAXgABAgcHAV4ADgAPDA4PWRIBEAAWABAWWAUBAwQBAgEDAlcLCQIHCggCBhcHBlgAFwAUFxRTGBUTAxERChFCG0uwE1BYQFIADQ4NaAAMDxAQDF4AABYDFgADZgABAgcHAV4ADgAPDA4PWRIBEAAWABAWWAUBAwQBAgEDAlcLCQIHCggCBhcHBlgAFwAUFxRTGBUTAxERChFCG0uwGFBYQFMADQ4NaAAMDxAQDF4AABYDFgADZgABAgcCAQdmAA4ADwwOD1kSARAAFgAQFlgFAQMEAQIBAwJXCwkCBwoIAgYXBwZYABcAFBcUUxgVEwMREQoRQhtAVAANDg1oAAwPEA8MEGYAABYDFgADZgABAgcCAQdmAA4ADwwOD1kSARAAFgAQFlgFAQMEAQIBAwJXCwkCBwoIAgYXBwZYABcAFBcUUxgVEwMREQoRQllZWUAtMDBHRkVEMEMwQ0JBQD88Ozg3NDMtLCcmISAbGhcWFRQTEhEREREREREREBkXKxMzFSM7ATUjFzM1IwEzNSMXMzUjFzM1IxMUBiImPQE0NjIWFSE0JiIGHQEUFjI2NSUVFAYiJj0BIRUUBiImPQEjESERBSERIdyTk96Tk96Skv5Ek5Pek5PekpLJGyUbGyUb/Z0bJRsbJRsCmjtTOv5kOlM6bQQC/GIDOvzGAbCVlZWV/pGVlZWVlQIIExsbE3QTGxsTExsbE3QTGxsTMTAqOzsqMC8qPDwqL/xxA4/1/csAAAAAAgAA/4AEAAOAAB4ALgA9QDoAAgMBAwIBZgAHAAMCBwNZAAEEAQAFAQBZAAUGBgVNAAUFBlEIAQYFBkUhHykmHy4hLjQjIyMhIQkUKyQmIyERITI2NCYjITU0JiMiBhURIyIGFRQWMyEyNjUXISImNRE0NjMhMhYVERQGA28TGv6wAR8ZEhUY/uMXFxgV0hkUFRgCfRgVRvyWHywsHwNqHywsfBYBDxcsF70aEhIa/doWGBUXFxXkLB8Dah8sLB/8lh8sAAIAAP+FA/oDgAATAC0AL0AsFAEDAgFAAAEEAWgABAIEaAACAwJoAAMAAANNAAMDAFIAAAMARhgXFygkBRMrARQOAiMiLgI1ND4CMzIeAgUmJyYiBwYWFxYXFjI3Njc+ATQnJgYHBgcGA/pRiLxnaL2JUFKKvmlmuodQ/ZZkCBk9FxUDGjFYKEMorSp3LRUUPRgIFzIBgWe9iFBRib1oaL2IT1KJvOpqBxkXFzcZM1gnKKwqdy86FRQBFgcXMwAAAAEAAAAABAADAAARAFtLsAtQWEATAAEDAWgAAwIDaAACAAJoAAAAXxtLsBZQWEAZAAMBAgEDAmYAAgABAgBkAAAAZwABAQoBQhtAEwABAwFoAAMCA2gAAgACaAAAAF9ZWbUSEhURBBIrJRYyNwE2NCYiBwEzASYOARQXAV0cTxwCABw4Txz+AIf+vxxQNxweHh8CLx9WPR/90QFaHwE9Vx4AAAAAAgAA/8AEAAOAACgANAA6QDcoEAIDBAFAAAUGBWgABAYDBgQDZgAGAAMABgNZAgEAAQEATQIBAAABUgABAAFGMz4oEyQ0IAcVKyUjIgYVFBYzITI2NTQmKwERFx4BNzY0LwEmJyYjIgcGDwEGFhcWNj8BADQ2MyEyFhQGIyEiAa3SJzk4KAJBJzg4J806EUARERG/AwQQGBgRBAO/EAQREkARN/5TOCgDQCg4OCj8wCiAOCgoODgoKDgBDzoRBBAQOxG7BQQQEAQFuxE1ERAHETIBaFE4OFE4AAAAAAEAwP+AAzMDgAARAAazDwYBJisTBhQXAR4BPgEnARUBNi4BBgfWFhYBoBlQPQga/mABshoHPU8aAa8XOhf+VhkHK0IaAapnAbQaQysGGgAAAQEcAEICuQLsAAsABrMGAQEmKwE2FhURFAYnJS4BNwJ0HSgqHv7JHQIdAtwZEif9tycUGf4YRxkAAAAAAgAA/4AEAAOAAAcAHwBVQAoJAQEAGgEDAQJAS7AaUFhAGAAEAwRpAAIAAAECAFkAAQEDUQADAwsDQhtAHQAEAwRpAAIAAAECAFkAAQMDAU0AAQEDUQADAQNFWbYTJxgTEgUTKxIQNiAWEAYgBSc2NTQuAiIOAhQeAjMyNxcWMjY0i7gBBLi4/vwCpa5QSHmouKh5SEh5qFyNda4YQzABOAEEuLj+/Lh1r3SMXah5SEh5qLmoeUhRrhgwRAADAAf/hwP5A3kAGABgAG0AOkA3NiQhHQIFAwBaSUYDBAMCQAACAAJoAQEAAwBoAAMEA2gABAUEaAAFBV9VVFNSQkExMC8uLSwGDislBjcOAS8BJjY/AT4BHwEwPwE2Fh8BHgEHNzAnJic0JyYnLgEnMCcmJzAnJiciNSMmBgcXBgcnBgcwBw4BFzAXFhcyFhcWFx4BFxYXFhcWFxYXFjMWNjcnNjcXNjcwNz4BAwYEJCYCEjYkBBYSAgICAwEMGQjMCQUMFA0eCJMCvwgeDRQMBQlpAQ0VAxMCBBACBBkcAx4gAQFSuk8CNSkCBxMBNhMmAQ0UAQIBFAEEEAICAhkcAgEeIAEBUrpPAjUpAgcTATYTPmr+8/7/sy9c1AENAQGzL1zJAwMIAgfACRwMEwsFCIoC8AgFDBMMHAgnASAfAQMcAwUPAgMZEwIVDQEjCy8CIDACBx0BUMJZASAfAwEdAgUPAQMBGRMBARQOASMLLwIgMAIHHQFQwv48WS9c1AENAQGzL1zU/vP+/wACAAD/gAQAA4AAKQBFADtAOCURAgIBAUADAQEAAgABAmYABQAAAQUAWQACBAQCTQACAgRSBgEEAgRGKyo5NipFK0QoJiMjMQcRKwAmIyEiBhQWOwERFBYzMjY1ERYXFhceAjY3NiYnJicmJyYnJic1ITI2ASIuAzURND4DMyEyHgMVERQOAyMDahIZ/YsaEhIa+hcXFBkwLi8kDxUREAkVBR4aHR4gIB8gHQEgGRL9ISAzHRQHAg4bOCgC6hMYLhwWAg4bOCgCoxcXKhf95hsRERsBWiIjIyAMDgMICBUjGhUXFxcYFhYSUxf9BxUfKCEOAuoTGC4cFgIOGzgo/RYTGC4cFgAAAAABAJIA1ANuAnMACwAXQBQAAQAAAU0AAQEAUQAAAQBFFDICECsTBhYzITI2JwEuAQekGxImAn0mExn+7RlJGgEYHCgpHQE7HQIcAAAAAQCSAGsDbgIKAAsAF0AUAAABAQBNAAAAAVEAAQABRRQyAhArEyY2MyEyFgcBDgEnpBsSJgJ9JhMZ/u0ZSRoBxxwnKR3+xR0BHAAAAAEAwP+AAzMDgAARABBADQwLAgA9AAAAXxEQAQ4rCQEWFAcBDgEuATcBFQEmPgEWAWoBshcW/mAaTz0IGQGh/k0ZBz1PA2P+SxY6F/5WGQcrQhoBqmcBtBpCKwUAAQFHAEIC5ALsAAsABrMGAQEmKwEmBhURFBY3JT4BJwGMHSgqHgE3HQIdAtwZEif9tycUGf4YRxkAAAAAAgAJ/4kD8ANvAA8AKwBBQD4ECAICAwUDAgVmBwEFBgMFBmQAAQADAgEDWQAGAAAGTQAGBgBSAAAGAEYRECgmIyIfHRoYFRQQKxErFxAJECsEIi4CND4CMh4CFA4BAyM1NCYiBh0BIyIGFBY7ARUUFjI2PQEzMjY0JgJiy7mGT0+Gucu5hVBQhSW7JTMluxolJRq7JTMluxokJHdPhrnLuYVPT4W5y7mGAeO7GiQkGrslNCS7GiUlGrskNCUAAAAAAwAAAEAEAALAAAsAFwAjACtAKAAAAAECAAFZAAIAAwQCA1kABAUFBE0ABAQFUQAFBAVFMzMzMzMyBhQrEDQ2MyEyFhQGIyEiBjQ2MyEyFhQGIyEiBjQ2MyEyFhQGIyEiJRsDgBslJRv8gBslJRsDgBslJRv8gBslJRsDgBslJRv8gBsCZTYlJTYl2zYlJTYl2zYlJTYlAAAFAGb/iAOwA3sAEwAeACoANgBCAGhLsAxQWEAlAAEAAAFcAAUKCAIGBwUGWQsJAgcABAcEVQADAwBRAgEAAAoDQhtAJAABAAFoAAUKCAIGBwUGWQsJAgcABAcEVQADAwBRAgEAAAoDQllAEUA/Ojk0MxUVExM0EyMzIgwXKxM0NjMhNTQ2OwEyFh0BITIWHQEhBREUBiMhIiY1ESEFNCYiBhURFBYyNjUTNCYiBhURFBYyNjUTNCYiBhURFBYyNjVmHxYBBx8WaRYfAQcWHvy2AxYfFv2JFh8C4f3yHywfHywf0h8rHx8rH9IeLB8fLB4C3hYeNBYfHxY0HxU1aP18Fh8fFgK4nBUfHxX+TBYeHhYBtBUfHxX+TBYeHhYBtBUfHxX+TBYeHhYAAAADAAf/9QQBAswAHQAlAC0AubYXCAIEBQFAS7ALUFhAIAAFAwQDBV4ABAICBFwAAAADBQADWQACAgFSAAEBCwFCG0uwDFBYQCEABQMEAwVeAAQCAwQCZAAAAAMFAANZAAICAVIAAQELAUIbS7AaUFhAIgAFAwQDBQRmAAQCAwQCZAAAAAMFAANZAAICAVIAAQELAUIbQCcABQMEAwUEZgAEAgMEAmQAAAADBQADWQACAQECTQACAgFSAAECAUZZWVm3ExUTHh4QBhQrACIOBA8BHgYyPgU3LgUCIiY0NjIWFCYUBiImNDYyAk6UiWNWNygJCQMMLTRYYomUiWJYNSwMAwMMLDVYYnm0gIC0gG1AWkBAWgLMKEBOTUAUFAgaTERUPSkpPVNFTBoIBxpMRVQ8/eOAtYCAtYhbQEBbQAAAAAQAAv+DA/wDfAASAB4AJgAnADtAOCcBBAE/BgEAAAUEAAVZAAQAAgMEAlkAAwEBA00AAwMBUQABAwFFAQAkIyAfHBsWFQsKABIBEgcOKwEyFhceARQGBw4BIi4CND4CEzQmIgYVERQWMjY1AjI2NCYiBhQXAgBpuUVFUFBFRbnTuolRUYm6pyM0JSU0JF9CLi5CMFEDfFBFRLrTuUVFUFCKuNS6iVD+SRwlJRz+hBshIhsCCC9BLy9BLwAABACc/4ADZAOAAAgAGAAoACkAOkA3KQEEAQFAAAUGAQIDBQJZAAMAAAEDAFkAAQQEAU0AAQEEUQAEAQRFCwkmIx4bExAJGAsYFBIHECskNDYyFhUUBiIDITIWFREUBiMhIiY1ETQ2AxQWMyEyNjURNCYjISIGFREBzR4qHh4qvQGkEhsbEv5cEhsbgC8iAiYiLy8i/doiLwosHx8WFh8DKhsU/fQUGxsUAgwUG/zAIzIyIwNWIzIyI/yqAAABAAD/gAQAA4AAHwA8QDkEAQIBAAECAGYGAQAHAQAHZAADBQEBAgMBWQkBBwgIB00JAQcHCE8ACAcIQxwbMRQRIhEREiEQChcrJTMRIyIGByMTIRMjLgErAREzBhUUFjMVKwI1MjY1NAGqAZZJbAlXVgNUVlcJbEmWAQFkR9VW1UdkgAJSYEgBVv6qSGD9rgYHSGZFRWZIBwAAAAADAAD/gQOAA4AAEwAgACwAPEA5CAEFAgFABgEAAAMCAANZAAIABQQCBVkABAEBBE0ABAQBUQABBAFFAQAsKiMhIB4WFBIQABMBEwcOKwEyHgIVFAYHHgEVFA4BBwYHIRETMzI3PgE1NCYnJisBETMyNz4BNTQuASsBAat/fWJCUEVhaUR1VjfO/pTAmIggPEQ7OiKkheCDIzZENGOmwwOAFEFrQkh4HhuDWUaDTwkGAQP//oAEB0E2M0AHBP1ABgg8Mys9GwAAAAMAAP/ABAADgAAPABcAMwBEQEEpAQMCIgEEAwJAAAMCBAIDBGYFAQAAAgMAAlkGAQQBAQRNBgEEBAFSAAEEAUYZGAIAGDMZMhUUERAKBwAPAg8HDisBISIGFREUFjMhMjY1ETQmBDIWFAYiJjQDIicuATcTPgEfAQE+AxYXHQMRHQMhA6v8pyIwMCIDYCEtM/1JaElJaEpZDwsNAwu8CyANpgEpBxEhHiIM/NkDgC4i/OMiMTAjAx0iLnZKakpKav1lCgsiDQEfDQMJfQFWCBIWBhQbEz9NYf7GDAIBAQAAAwAAAFwEAAKAABEAIwAxAOZLsA9QWEA7AAEFAWgAAgYICAJeCgEDCQcJA14AAAQAaQAFAAYCBQZXAAgACQMICVoLAQcEBAdLCwEHBwRRAAQHBEUbS7AQUFhAPAABBQFoAAIGCAgCXgoBAwkHCQMHZgAABABpAAUABgIFBlcACAAJAwgJWgsBBwQEB0sLAQcHBFEABAcERRtAPQABBQFoAAIGCAYCCGYKAQMJBwkDB2YAAAQAaQAFAAYCBQZXAAgACQMICVoLAQcEBAdLCwEHBwRRAAQHBEVZWUAbEhIAADAtKSYSIxIjIiEfHBcUABEAERI1MgwRKyUeATsBMjY9ATQmKwEiBhUhFSEOASsBIiY9ATQ2OwEyFhUhFTc0NjMhMhYVFAYjISImAioBRDDsMEVEMewwRQE9/m8BRS/sMURFMOwxRP7HnBYQATwQFhYQ/sQQFvQ/WVxA60FcXEHvP1lbQetBXFxB73kPFxcPEBYWAAAAAgB2AI8DzAOlAAcACgAyQC8IAQQCAUAAAgQCaAUDAgEAAWkABAAABEsABAQAUAAABABEAAAKCQAHAAcREREGESslJyEHIwEzCQEHMwMQSf60SbwBVqoBVv5WZMaPqqoDFvzqAivmAAAGAAD/gAQAA4AADQAbACkAMQA5AEEATkBLAAcAB2gACgUKaQAAAAECAAFZAAYACQMGCVkAAgADCAIDWQAECwUETQAIAAsFCAtZAAQEBVEABQQFRT8+Ozo3NhMTEjQ0NDQ0MgwXKwE0NjMhMhYVFAYjISImETQ2MyEyFhUUBiMhIiYRNDYzITIWFRQGIyEiJgAyNjQmIgYUEjI2NCYiBhQSMjY0JiIGFAFVMyMCACMyMiP+ACQyMyMCACMyMiP+ACQyMyMCACMyMiP+ACQy/t1HMjJHMjJHMjJHMjJHMjJHMgMrIzIyIyQyMv55IzIxJCMyMf55JDIyJCMyMgMnMUUxMUX+ITFFMTFF/iQxRTExRQAAAAASAAD/gAQAA4AACwAPABsAJwArAC8AMwA3ADsAPwBDAEcASwBPAFMAVwBbAF8Bh0uwG1BYQGQIAgIACQEDDAADVwAKAAsOCgtXEAEOEQEPBA4PVxIBBAATFAQTVwAUFQEFFhQFWRgBFhkBFxoWF1ccARodARsGGhtXIgEgIyECByAHUw0BAQEMTwAMDApBHgEGBh9PAB8fCx9CG0uwKlBYQGIIAgIACQEDDAADVwAMDQEBCgwBWQAKAAsOCgtXEAEOEQEPBA4PVxIBBAATFAQTVwAUFQEFFhQFWRgBFhkBFxoWF1ccARodARsGGhtXIgEgIyECByAHUx4BBgYfTwAfHwsfQhtAaQgCAgAJAQMMAANXAAwNAQEKDAFZAAoACw4KC1cQAQ4RAQ8EDg9XEgEEABMUBBNXABQVAQUWFAVZGAEWGQEXGhYXVxwBGh0BGwYaG1ceAQYAHyAGH1ciASAHByBLIgEgIAdPIyECByAHQ1lZQEFfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyoRMzMzMxERMzIkFysANDYzITIWFAYjISInMxUjEjQ2MyEyFhQGIyEiAjQ2MyEyFhQGIyEiATMVIxczFSM1MxUjBzMVIzczFSMxMxUrATMVIzEzFSM3MxUjBzMVIzczFSMxMxUjMTMVIyczFSMBADIjAlYjMjIj/aoj3VZWqzIjAlYjMjIj/aojMjIjAlYjMjIj/aoj/s5VVVVWVlZWVVVVVVZWVlZVVVVVVVVWVlVVVVVWVlZWVlZVVVUDB0cyMkcyq1X+MUcyMUcy/odHMjJHMgQAVVZVq1aqVlZWVVVWVlZVVVVVVlVVVQABAH3/9QNSAwwANQBOQAstJBsSCQAGAQABQEuwGlBYQAsAAAAKQQABAQsBQhtLsCpQWEALAAEBAFEAAAAKAUIbQBAAAAEBAE0AAAABUQABAAFFWVm0IR4zAg8rARE0NjsBMhYVETc2Fh8BFgYPARceAQ8BDgEvAREUBisBIiY1EQcGJi8BJjY/AScuAT8BPgEXAasPCkcKDucJFAUjBQUJ5+cJBQUjBRQJ5w4KRwoP5wkTBSQFBgjo6AgGBSQFFAgB6AELCg8PCv71hQUFCD4JEwWGhQUUCT0JBQWG/vULDg8KAQuGBQUJPQkUBYWGBRQIPggFBQAAAAIAAP+FA/oDgAATAC0AL0AsFAEDAgFAAAEEAWgABAIEaAACAwJoAAMAAANNAAMDAFIAAAMARhgXFygkBRMrARQOAiMiLgI1ND4CMzIeAgUmJyYiBwYWFxYXFjI3Njc+ATQnJgYHBgcGA/pRiLxnaL2JUFKKvmlmuodQ/ZZkCBk9FxUDGjFYKEMorSp3LRUUPRgIFzIBgWe9iFBRib1oaL2IT1KJvOpqBxkXFzcZM1gnKKwqdy86FRQBFgcXMwAAAAMAAv+DA/wDfgAPABsAKwA8QDkkIwIEBQFAAAAABQQABVkABAADAgQDWQYBAgEBAk0GAQICAVEAAQIBRREQKSYhHhcVEBsRGxcQBxArACIOAhQeAjI+AjQuAQEuAScmNhceARcWBhMUBisBIiY1AzQ2OwEyFhUCZ8+9iFFRiL3PvIlQUIn+2hsmAQEqHRsmAQEqKiIYFBghGSIYQxghA35RiL3PvYhRUYi9z72I/RYBJhsdKgEBJhsdKgECGyUlGwE7GiUlGgAAAgAB/4ED/wN/AA8AIAArQCgeAQIDAUAAAgMBAwIBZgABAWcAAAMDAE0AAAADUQADAANFGBgXEAQSKwAiDgIUHgIyPgI0LgECDgEvASY3PQE0NjIWHQEXFgJo0L2JUVGJvdC9iVFRiTgkNhSoFwEmNiaTFAN/UYm90L2JUVGJvdC9if2WKAMSlxQfAuIbJiYbyoMSAAIAAAADBAAC/wAbADQAPUA6BAEABQEFAAFmAwEBAgUBAmQABwAFAAcFWQACBgYCTQACAgZSCAEGAgZGHRwrKRw0HTQTIyMTIyAJFCsBIyIGFBY7ARUUFjI2PQEzMjY0JisBNTQmIgYVAyIuBTU0Njc+ATMyFhceARUUBwYHAcJpGiYmGmklNiVlGiYmGmUlNiW1BRQ4Mj8sH35hM6diidAZNT5yGxUBkCY2JWQbJSUbZCY1JmgaJiYa/gsDDxcuPV85aKEZUF6xhSJuQZJLEgYAAAAABAAA/4AEAAOAAAcACwAPABMARUBCAAMIA2gAAAgECAAEZgABBAUEAQVmAAIHAmkACAAHCEsGAQQABQcEBVcGAQQEB08JAQcEB0MTEhEREREREREREAoXKwEhFSERMxEjATMVIzczESMBMxEjAkD+gAGAwMABAEBAQICA/IDAwAIAwP5ABAD+AICA/gAEAPwAAAAAAAEAAP+ABAADgAAfADxAOQQBAgEAAQIAZgYBAAcBAAdkAAMFAQECAwFZCQEHCAgHTQkBBwcITwAIBwhDHBsxFBEiERESIRAKFyslMxEjIgYHIxMhEyMuASsBETMGFRQWMxUrAjUyNjU0AaoBlklsCVdWA1RWVwlsSZYBAWRH1VbVR2SAAlJgSAFW/qpIYP2uBgdIZkVFZkgHAAAAAAMAA/+AA/8DfAAPABkAJQAtQCoAAAADAgADWQQBAgAFBgIFWQAGAQEGTQAGBgFRAAEGAUUVExMTEzUyBxUrEzQ2MyEyFhURFAYjISImNQEyNjQmIgYUFjMXNCYiBhURFBYyNjUDcFACfU9wcE/9g09xAfshLi5CLy8hPSM0JCQ0JAK8UHBwUP2EUHBwUAITL0EuLkIujBsmJhv+hhshIhsAAAAABACM/4oDdANzABMAQQBjAGQAPEA5ZAEFBAFAAAMABAUDBFkABQACAQUCVwYBAQAAAUsGAQEBAFEAAAEARQAAWlhHRj48KSgAEwATKQcPKyUVFBYVDgEHDgEjIiYnLgM9AQEeAQ4DBw4DBw4BBw4BBwYHIyYnLgEnLgEnLgU3PgMzMh4CAzYnLgEiBgcOARceAhcWFxYXFhceATMyNjc+ATc+AzcCfgEBExsLIiMeJwsOEQkCAdAaCBQmKSQHChANDAYNDgUFDAcICNsIBgcOBQodFxApJyQWBAsRU2huLS9lXk9MK5oaREhHG0QwAgEVHQ8QDBkSEwsLLxQaLwoFHx8QHRkSBggLBAwGEy0KBA8OAgMTGBkKHgKKPWtbRzYjBgkJBggJEyMRDhIHCAUFCAcWER0iEQwoNkJQWjJQbEEdGjZV/vquWxASEhMubjwiNiwQEQwbExMeHQ0XGA4oJBIcHCEYAAAABAAA/4AEAAOAAA8ALgA9AFMBKUAfQ0I9Oy4sIiAfHRIQDA0JNwEHDTo4AggHA0AnAQ0BP0uwC1BYQEgFAQMEAgQDAmYADwIKAg8KZgAKCQIKCWQAABALAgQDAARXDgEJAA0HCQ1ZBgECAAcIAgdZEQwCCAEBCE0RDAIICAFSAAEIAUYbS7AMUFhAQgUBAwQCBAMCZg8BCgIJAgoJZgAAEAsCBAMABFcOAQkADQcJDVkGAQIABwgCB1kRDAIIAQEITREMAggIAVIAAQgBRhtASAUBAwQCBAMCZgAPAgoCDwpmAAoJAgoJZAAAEAsCBAMABFcOAQkADQcJDVkGAQIABwgCB1kRDAIIAQEITREMAggIAVIAAQgBRllZQB8/PlBPTk1MS0lGPlM/UjQzMjEwLyIoERERERY1MhIXKxE0NjMhMhYVERQGIyEiJjUBBgc1MzUjNSMVIxUzFQYHFzY3FRQjIicVMzI9ATY/ATM1IzUjERQHFzY3JwYHBTI3NjcnBgcGKwEiNREzNSM1IxEUM0s1AwA1S0s1/QA1SwF5LRdKSlZUVCo1FSsfHBgjWVQXLXNnZ1YlFntYECk1ASQwFxkKTwQLChIhGbS0VlQDADVLSzX9ADVLSzUBmxIJmlWRkVW0DAlUCwqmHgZWV9kJEnJV7P2IJwtRHSNRFBBsGhyTGmgVFBwBT1bo/WBbAAAAAQAA/4AEAAOAADsAPEA5AwEBAgACAQBmCAEGBQcFBgdmAAIBBwJNBAEACQEFBgAFVwACAgdRAAcCB0U0MyQUIR0RJBQhFQoXKwEnJgYdASM1MzI2LwEmIg8BBhY7ARUjNTQmDwEGFB8BFjY9ATMVIyIGHwEWMj8BNiYrATUzFRQWPwE2NAPqphYf2jkaEA5xDyoPcQ8RGjnEHxamFhamFh/EORoRD3EPKg9xDhAaOdofFqYWAaRxDxEaOc8fFqYWFqYWH885GhEPcQ8qD3EPERo5zx8WphYWphYfzzkaEQ9xDyoABwAA/4AEAAOAABEAIQAlACkAOQBJAFkAlkuwClBYQDUEAQAFAQUAXgAGBwEFAAYFWQoIAwMBCwEJAgEJVxAODAMCDQ0CTRAODAMCAg1REQ8CDQINRRtANgQBAAUBBQABZgAGBwEFAAYFWQoIAwMBCwEJAgEJVxAODAMCDQ0CTRAODAMCAg1REQ8CDQINRVlAHVdUT0xHRD88NzQvLCkoJyYlJBM1MxEjERETIBIXKwEhIgYdASEVMzUhNTQmIyE1IwM0NjMhMhYVERQGIyEiJjUBMxUjJTMVIwU0NjsBMhYdARQGKwEiJjUlNDY7ATIWHQEUBisBIiY1JTQ2OwEyFh0BFAYrASImNQHA/sAaJgGAgAGAJhr+wICAJRoBAholJRr+/hol/wCAgAMAgID+QCYbfhsmJht+Gyb+gCYbfhsmJht+GyYDACYbfhsmJht+GyYBgCUbQICAQBslgAFBGiUlGv7+GiUlGv7BgICAQRsmJht+GyYmG34bJiYbfhsmJht+GyYmG34bJiYbAAAAAAIAAAAABAADAAAPACYAwkuwC1BYQDYABAUABQQAZgAAAQUAAWQAAQcFAQdkCAEHBgUHBmQAAwAFBAMFWQAGAgIGTQAGBgJSAAIGAkYbS7AWUFhAMAAEBQAFBABmAAABBQABZAABBwUBB2QIAQcGBQcGZAAGAAIGAlYABQUDUQADAwoFQhtANgAEBQAFBABmAAABBQABZAABBwUBB2QIAQcGBQcGZAADAAUEAwVZAAYCAgZNAAYGAlIAAgYCRllZQA8QEBAmECYjIRMjLxEQCRUrASEVIRcUFj8BNjQvASYGFQMOASMiJhA2MzIXFhcjJiMiBhQWMzI3Az3+QQHAAQsHqAcHqwcKcDOxaZ/h4Z9VTG49pUhgapWVamFIAcCAegoFCK8HFQeqBwUL/o5XaeEBPuEjM2pAltSWQAAFACD/gAPgA4AADwAfACsANwBDAIlLsApQWEA2AAQCBQIEXgAJCAMDCV4AAQACBAECWQAFAAYHBQZZAAcACAkHCFkAAwAAA00AAwMAUgAAAwBGG0A4AAQCBQIEBWYACQgDCAkDZgABAAIEAQJZAAUABgcFBlkABwAICQcIWQADAAADTQADAwBSAAADAEZZQA1DQDMzMzM1NTU1MgoXKzcUFjMhMjY1ETQmIyEiBhUzNDYzITIWFREUBiMhIiY1EjQ2MyEyFhQGIyEiBjQ2MyEyFhQGIyEiBjQ2MyEyFhQGIyEiIHlVAiRVeXlV/dxVeYAqHQIyHSoqHf3OHSpAJRsBwBslJRv+QBslJRsBwBslJRv+QBslJRsBwBslJRv+QBtAT3FxTwKAT3FxTxomJhr9gBomJhoB5TYlJTYlmzYlJTYlmzYlJTYlAAAAAAQAA/+DA/0DfQAYADIATABNAHZAcxYVFBMPDg0MCQgBAAwCARwHBgMCBQACHgEEADYsKygnBQMERkVCQTgFBQMFQE0BBAE/BgECAQABAgBmBwEEAAMABANmAAMFAAMFZAAFBWcAAQIAAU0AAQEAUQAAAQBFNDMaGURDM0w0TCopGTIaMisUCBArExUFNRYyNxUlNTY0JzUlFSYjIgc1BRUGFAUiBg8BBSUmJyYGFRQXBTUWMjcVJT4BNTQmByIGDwEFJSYnJgYVFBcFNRYyNxUlPgE1NCYjJAG0FCcVAbQhIf5MERcUFP5MIQOxDRQEA/50/nMKHSMmIQG0FCgUAbQOEyseDRQEA/50/nMKHSMmIQG0FCgUAbQOEyseAjUB1wEMDAHXARNBEwHXAQoMAdUBE0GKBwMDvcAGBAQnHSET2AELCwHSCR8QGyflBgMEvcAHAwQmHiAT2AEMDAHSCB8QGycABgBE/+0D3QMCAB8AKgCoAOwBeQF6AhRBMQElAQ8BDAECAOgA2QCtAKgApACcACsAHwAAAA0ACwAAALUANwACAA8ACwFvAWsAAgADAA8BRwFDAFcAAwARABABUAFOAMAASgAEAAYAEQAFAEAAIAABAAUBegABAAsAAgA/S7ATUFhATAADDxAPAxBmFBMCERAGEhFeAAYSEAYSZAABAgFpCgEAFw4NDAQLDwALWRYBDxUBEBEPEFkHAQUFBFEIAQQECkEAEhICUgkBAgILAkIbS7AXUFhATQADDxAPAxBmFBMCERAGEBEGZgAGEhAGEmQAAQIBaQoBABcODQwECw8AC1kWAQ8VARARDxBZBwEFBQRRCAEEBApBABISAlIJAQICCwJCG0uwKlBYQEsAAw8QDwMQZhQTAhEQBhARBmYABhIQBhJkAAECAWkIAQQHAQUABAVZCgEAFw4NDAQLDwALWRYBDxUBEBEPEFkAEhICUgkBAgILAkIbQFAAAw8QDwMQZhQTAhEQBhARBmYABhIQBhJkAAECAWkIAQQHAQUABAVZCgEAFw4NDAQLDwALWRYBDxUBEBEPEFkAEgICEk0AEhICUgkBAhICRllZWUEuAXkBdwFzAXABaAFmAWMBYAFfAVwBWAFVAU0BSgFBATsBOAE1AS0BLAErASoBKQEmAO4A7QDWANQA0wDRAIUAgwCCAIAASQBGACoAKQAoACYAFgAgABEAIwAYABIrEzQ3NjsBETInBiY9ATQ2NzI3Njc2NzY1NCcmJy4BPQE3PQM0NjsBFSMBBgcGFRQXFhcWFxYXFAcGBwYVFBcWFxYVFAcGKwEiNSY2NzY3NicmJyYnJjc0Njc2NzY1NCcmJyYnJjU0NzY3Njc2NzYnJicmJyY0NzY3Njc2JyYnJiMhNSEyFx4BBwYHBgcGBwYXFhceARQHBgcOAQcUFxYXFhcWFQYHBgcnBgcGBxQXFhcWFxYVFgYHBgcGFxYXFhcUBwYHBgcOARcWFx4BBwYHBiMhESEyFxYXFAcOAQcGBwYXFhcWFxYXFAcGDwEiJyY3Njc2Nz4BNzY3NicmJyYnJgcGBwYHBgcGBwYHBiYnJicmJyYnJicmBwYHBgcGFxYXFhcWFxYrASIHIiciBwYXFh0BFBY7ATIdARQrBSYHBgcGFxYVFDsBMhcWFRYHBhUUOwEyPQI0OwEyNzsBMj0BNCsBBj0BJjU0NzY7ATI9ATQmKwExRAsLJm0BbSIbCQ0FCQgJCQYGDxARDgx/JhdgnQL8CgQEBAQKCgYFAQMEBxkZBAUEBQUMQwcBBAQEAwYGBw4LBAQBCAcKBQUEBAcKBQYFBQsHBQUBAQUECw0FBgYFChUCAgUECwsR/lcCDwkGBgQDAwkIBQUBAQQECg0OBwcMDgwBBQYMDQUFAQUGC6APCAgBBggNDAYHAQoKHwEBGAwGBwEFBAwOCQcCBwcPCQkBAgUFCv4iAeUKBgUBBQUWBwYCAQYHDgwGBwEFBgyxBgcGAwsBCwwDEQULAgYNAwcHBwoEBQUJBAMSCQsKAQIOAgMICwoHDwoECw0IBwYHDAgWDxIIDAMDCA8HCg0JCgYGAgEIBUcPAgcMGRgPBwMCAgEBARFKBgEBAgEBECgKCwsKCRQQEgxIDQEEBQVJDAkGKgIlIg8O/YkBARkktQ4OAwQECAgNDhIdERADAgwOhXgPAgEPGStl/u4DCAgKCQoKBAQLCw0MDAsFDxMUEgQKCgoLBwgCAQYEBAUSDA0JBQsKDAsSBAMLCQwKCwoDBQoKDQ0LDQcFCQgLCQoKBgYMDRgMDAYLFBQQDAsKYwYGEgkKBgcKCQwKCwsFBxsaDAsFBRMLDAoMBwcNDA0NCwoCEwQKCwsMCwwFBQoKCwwUBQ8WFQ0FCgsMDAoJBAQKChcLCwgFFQsKCAgCdwgICgoKCggJCAsLCgoFBgkLCgsKCQRVAgEGEAIQEAQXBREDCQ4DBQUDAwIDCQwGBRoNEA4CBQIFBAsNDgoSDQYVBwUGBQUIDhsUFwsQAwUBAQUFCAUKDwcBBhgGAQUFBwYFBQUQAgIGBxAUAg4HCSkNAQ0cCwMICgQGBQMCCR4FCgAAAAAEAAD/gAQAA4AAGQAqADkAYABdQFoqGhcKBAMCOTACBAMCQAABAAIDAQJZAAMABAkDBFkNAQkODAoIBAYLCQZZAAsABwULB1kABQAABU0ABQUAUQAABQBFYF9bWFVTUVBOTElGIiIUNDU1OjoyDxcrBRQGIyEiJjURNDcmPQE0NjMhMhYdARQHFhUnNCYjISIGHQEUFjMhMjY9ARUGIyEiJxEUFjMhMjY1EQcjDgEjIiYnIyImNTQXMzIWFAYrAR4BMjY3IyImNDY7ATIWFRQGIwQARTX89DVFCgpFNQMMNUUKCjEvGvz0Gy4uGwMMGi8qH/z0ICkuGwMMGi9hMQy7dna7DDENCxiTDQsLDTEMltSWDDENCwsNkwgQCw0GNUVFNQJmGRcYFUk1RUU1SRYXFxmmGy4uG0kaLy8aSasYGP2fGi8vGgJhqnmsrHkLDRoBCxsLY5GRYwsbCw0MDQsAAwAA/4AEAAOAABAAIQBXAGZAY01FAgUHLScCCwlGIREDAwsDQAAGBAcEBgdmAAcFBAcFZAALCQMJCwNmAgEAAAQGAARZDQgCBQwKAgkLBQlZAAMBAQNNAAMDAVIAAQMBRldWVVNRTz49PDokJCUkNTMVNSAOFysBISIGFREUFjMhMjY1ETQmIxMUBiMhIiY1ETQ2MyEyFhURAyMiBg8BAyYjIgcLASYjIg4BBwMjIgYUFjsBFzI+BD8BExQWFxY2NxsBFhcWPwEzMjQjA1X9VkdkZEcCqkdkZEdrRDD9aDBERDACmDBEX0kNEAYoQAQlIQZjTwYlAwwTAlRHEBMTEE8EAwYKCAkHAztVEA0PGQNqLAQlHAxPMSAgA4BkR/1WR2RkRwKqR2T8szBERDACmTBERDD9ZwEMDBFSAeYgIf4NAYkdAwwL/vERHhEBAQEDBgoHyv5VDRQDAxEPAeP+Xh4CARaYPwAACQAA/4AEAAOAADAAWACbAKoAuQDIANcA5ADyAi1AV/EBHiAvAQMAKgEWA6qcMikEFwk4IwIYF7mrAgoYPxwCGQpAGwIFB8i6AgQFWUYVAxsERxQCHBDXyQISHA4BHRJODQICEQsBAQIPQDABADEBAzkiAhgDP0uwH1BYQHwhHwIeIAAgHgBmABYDCQMWXgsBCRcDCRdkAAoYGRgKGWYAEhwdHBIdZgAdEQIdXAAiACAeIiBZAAAAAxYAA1kAFwAYChcYWQAZBwUZTQwIAgcaDQYDBQQHBVoVDw4DBBQTAhAcBBBZABsAHBIbHFkAAgABAgFWABERCxFCG0uwIVBYQH0hHwIeIAAgHgBmABYDCQMWXgsBCRcDCRdkAAoYGRgKGWYAEhwdHBIdZgAdERwdEWQAIgAgHiIgWQAAAAMWAANZABcAGAoXGFkAGQcFGU0MCAIHGg0GAwUEBwVaFQ8OAwQUEwIQHAQQWQAbABwSGxxZAAIAAQIBVgAREQsRQhtAfiEfAh4gACAeAGYAFgMJAxYJZgsBCRcDCRdkAAoYGRgKGWYAEhwdHBIdZgAdERwdEWQAIgAgHiIgWQAAAAMWAANZABcAGAoXGFkAGQcFGU0MCAIHGg0GAwUEBwVaFQ8OAwQUEwIQHAQQWQAbABwSGxxZAAIAAQIBVgAREQsRQllZQEbv7uzr6Ofk497d1NLNy8XDvry2tK+tp6Wgnpual5aVlJOSj46KiIWEg4KBf3x6dXNwb2xqZWRjYl9eXVxbWlhWUU8lICMQKwEhIgYVERQWMyEmJzQ3NSY1NDY/ATUmNTQ2PwE1JjU0Nj8BNSY1NDY/ATUmNTQ2PwEHFQYVFBYfARUGFRQWHwEVBhUUFh8BFQYVFB4BNRUHISImNRE+ATMhATUjNTMxMjY0JiMxIzc2NTQmIyIHBgcjJzEmIyIGFRQfASMiBhQWOwEVIxUiBhQWOwEdARQWMjY9ATM1MzEyNjQmIxM0NjMyFh0BFAYjIiY9ARU0NjMyFh0BFAYjIiY9ARU0NjMyFh0BFAYjIiY9ARU0NjMyFh0BFAYjIiY9AQE3PgEfATMlJgYPATM/AT4BHwIzJSYGDwEXA+78ljdNTTcDbAoBGxsOBgcbDgYHGw4GBxsOBgcbBQICNhsNBwcbDQcHGw0HBxsNDgn8zRYqAR8QA0z+T2dnCg0NClhhBhEMFQdUBAFcBxQMEARhWgoNDQprawoNDQprEBgQAWcKDQ0KuBINDBMTDA0SEg0MExMMDRISDQwTEwwNEhINDBMTDA0S/hYaBiYQ77P+hDNiEh1I0i8LKA7KZSn+3SlpITVDAj5HMv41M0cZDg4dKxwOBxUIBysdDgYWBwgrHA8GFgcIKh0OBxUIByscDwYLAQI3MxwPBhYHCCodDgcVCAcrHQ4GFgcIKxwPBhUQAS0YMiAByg8k/oEBPw0TDbMICQwRE6QLrxMRCwkItA0TDT8BDRIOWwYLERELBlsOEg0BPwoPDwonCg8PCieNCw8PCyYKDw8KJowKDw8KJgsPDwsmjAoPDwonCg8PCicCQ0UNDwZbkRMnL06cNwoCC64m+SQEJj4ZAAMAAf+BA/8DfwAXACMAPwBUQFEBAQMJEgEBAwJAAAIBAmkAAAAEBgAEWQcLAgUKAQgJBQhZAAYACQMGCVkAAwEBA00AAwMBUQABAwFFJSQ8Ojc2MzEuLCkoJD8lPxUTEycXDBMrJSc2NTQuAiIOAhQeAjMyNxcWMjY0JCIuATQ+ATIeARQGAyM1NCYiBh0BIyIGFBY7ARUUFjI2PQEzMjY0JgPjqUdHeKa2pnhHR3imW4FwqRxQOP4ZrpNWVpOuk1ZWakAmNSVAGyUlG0AlNSZAGiYmJalvglumeEdHeKa2pnhHR6kcOFB2VpOuk1ZWk66TASpAGyUlG0AlNSZAGiYmGkAmNSUAAAMAAP+ABAADgAARACEAMwBGQEMpIgIGBwFAAwEBAAQAAQRmAAIAAAECAFkIAQQABwYEB1kABgUFBk0ABgYFUQAFBgVFFBIvLiYlHBkSIRQhExMUEgkSKwE0NjIWFRQHMzU0JiAGHQEzJgUhIgYVERQWMyEyNjURNCYBFRQGIiY9AS4BNTQ2MhYVFAYBQHCgcAyMu/72u4wMAi79JDxWVjwC3DxWVv6TJTUmHSNLaksiAkBQcHBQHyFAhbu7hUAhIUs1/oA1S0s1AYA1S/6SUhomJhpSETojNUtLNSM6AAAAAwAD/y8D/QMpAA8AGAAhAFhACRwbExIEAgMBQEuwHVBYQBQEAQIAAAIAVQUBAwMBUQABAQoDQhtAGwABBQEDAgEDWQQBAgAAAk0EAQICAFEAAAIARVlAEBoZERAZIRohEBgRGBcQBhArBCIuAjQ+AjIeAhQOASUyNwEGFRQeARMiBwE2NTQuAQJnz7yIUVGIvM+9iFFRiP7cbVz+CDxhp2NtXAH4PGGn0VGIvM+9iFFRiL3PvIhBPAH4XG1jp2EC1jz+CFxtY6dhAAAABgAE/4QD7AN8ABEAIwAtADcAUABRAFVAUlEBCgE/DQELDAIMCwJmAAAAAwQAA1kIBgIECQcCBQoEBVkOAQoADAsKDFkAAgEBAk0AAgIBUQABAgFFUE9LSEVDQD05ODc2ExETExcXGRcSDxcrAS4BIg4CFB4CMjY3NhICJwMOASIuAjQ+AjIWFx4BBgcDIgYUFjI2NCYjBTI2NCYiBhQWMxciBgcGFjsBMjc+ATMyFhcWOwEyNicuASMxA2hIusy5kE1NkLnMukhhRUVhLz+hsaJ9Q0N9orGhP1U8PFWNGSMjMiIiGf7DGSMjMiMjGZI+aSEKERICEAkZTi0tThkIEAISEQohaT0C50hNTZC5zLmQTU1IYQEGAQZh/WE/Q0N9orGhfUNDPlXk41UB3SMxIyMxI3cjMSMjMSOEOzMPIQ0lKyslDSEPMzsAAAADAAD/gAQAA4AADwAgAEgBPUuwC1BYQBxBJiUDBQotLCkDBwU1NDMyMTAGCAc5OAIJCARAG0uwDFBYQBlBJiUDBQo1NDMyMTAtLCkJCAU5OAIJCANAG0AcQSYlAwUKLSwpAwcFNTQzMjEwBggHOTgCCQgEQFlZS7ALUFhAOQYBBQoHCgUHZgAHCAoHCGQACAkKCAlkBAECCwEACgIAWQAKAAkBCglZAAEDAwFNAAEBA1EAAwEDRRtLsAxQWEAzBwYCBQoICgUIZgAICQoICWQEAQILAQAKAgBZAAoACQEKCVkAAQMDAU0AAQEDUQADAQNFG0A5BgEFCgcKBQdmAAcICgcIZAAICQoICWQEAQILAQAKAgBZAAoACQEKCVkAAQMDAU0AAQEDUQADAQNFWVlAHAEARkU9PDc2Ly4rKignIB8aFxIQCQYADwEODA4rATIWFREUBiMhIiY1ETQ2MyUhIgYVERQWMyEyNjURNCYjAQYUHwMzFRczFR8BMxUfBTMfAgEWMjY0LwE3NjQmIgcBA4AdIyMd/QAdIyMdAwD9ADVLSzUDADVLSzX90w0NAQEBAQEBAQEBAQEBAQEBAQEBAQEHDiMdDvr6Dh0jDv7mA0AjHf0AHSMjHQMAHSNASzX9ADVLSzUDADVL/iANJg0BAQEBAQEBAQEBAQEBAQEBAQL++Q4dIw76+g4jHQ7+5gADAAD/gAQAA4AADwAgAEgBPUuwC1BYQBxBJiUDBQotLCkDBwU1NDMyMTAGCAc5OAIJCARAG0uwDFBYQBlBJiUDBQo1NDMyMTAtLCkJCAU5OAIJCANAG0AcQSYlAwUKLSwpAwcFNTQzMjEwBggHOTgCCQgEQFlZS7ALUFhAOQYBBQoHCgUHZgAHCAoHCGQACAkKCAlkBAECCwEACgIAWQAKAAkBCglZAAEDAwFNAAEBA1EAAwEDRRtLsAxQWEAzBwYCBQoICgUIZgAICQoICWQEAQILAQAKAgBZAAoACQEKCVkAAQMDAU0AAQEDUQADAQNFG0A5BgEFCgcKBQdmAAcICgcIZAAICQoICWQEAQILAQAKAgBZAAoACQEKCVkAAQMDAU0AAQEDUQADAQNFWVlAHAEARkU9PDc2Ly4rKignIB8aFxIQCQYADwEODA4rEyIGFREUFjMhMjY1ETQmIyUhMhYVERQGIyEiJjURNDYzARYUDwMjFQcjFQ8BIxUPBSMPAgEGIiY0PwEnJjQ2MhcBgB0jIx0DAB0jIx39AAMANUtLNf0ANUtLNQItDQ0BAQEBAQEBAQEBAQEBAQEBAQEB/vkOIx0O+voOHSMOARoDQCMd/QAdIyMdAwAdI0BLNf0ANUtLNQMANUv+IA0mDQEBAQEBAQEBAQEBAQEBAQEBAv75Dh0jDvr6DiMdDv7mAAADAAD/gAQAA4AADwAZACUALkArAAAABQYABVkABgADAgYDWQQBAgEBAk0EAQICAVEAAQIBRRUTExMTNTIHFSsRNDYzITIWFREUBiMhIiY1BTI2NCYiBhQWMxM0JiIGFREUFjI2NXBRAn5QcXBR/YJQcQH9IS4uQjAwIT0jNCUlNCQCv1BxcFH9glBxcFErL0EvL0EvArQbJSUb/oQbISIbAAAAAAEAWv/cA6EDJgAfAERLsCRQWEAUBAEAAAMCAANZAAEBCkEAAgILAkIbQBQEAQAAAwIAA1kAAQECUQACAgsCQllADgIAGhcSEAkHAB8CHwUOKwEnIiY9ATQmIyIHAQYUFwEWMzI2PQE0NjM3MjY1ETQmA1GbERgvIRsV/mseHgGVFRshLxgRmyEvLwJcARgQUSEvEP6yHVQd/rIQLyFQERcBLyEBGCEuAAEAWv/cA6EDJgAfAERLsCRQWEAUBAEAAAMCAANZAAEBCkEAAgILAkIbQBQEAQAAAwIAA1kAAQECUQACAgsCQllADgIAGhcSEAkHAB8CHwUOKxM3MjY9ATQ2MzIXARYUBwEGIyImPQE0JiMnIiY1ETQ2qpsRFy8iGhYBlR4e/msWGiIvFxGbIS8vAlwBGBBRIS8Q/rIdVB3+shAvIVARFwEvIQEYIS4AAAEAgP+AA4ADgAAQABZAEwoJCAcFAwIBAAkAPgAAAF8dAQ8rJQc3Jz8BHwEHFycRFAYiJjUBwK0FmPGPj/GYBa0lNiXiPPvISc7OScj7PP7eGyUlGwAAAAACAEj/ZgO8At4AKABAADtAODIBAAEpAQIFAkAWAQMBPwABAAFoAAAFAGgABQIFaAACAwJoAAMEA2gABARfLi0jIh0cGRgUIQYQKwEuAycmBw4DDwEGFxMeAT4BLwE+Ah4CMx4EPgE1NC4BAS4DIg4BBwM2Fx4CFx4BFRQGLgIDJAtLTV8hqpsUJRkTBAQQCeAIMTMZCTsRLCMtGCYBBTdCVE1BJzRH/rMCGhIgGyAdDHNVriFybAckS0BhXVECGwQDAxkZlA0BDxMTBgcbH/0xGxoSMxy/DQ0CCAcNAhocIA0EKylcxn/+7AEHBAYDCwkBdAl1EhkMAgqkVSEOHSUlAAAAAAQAP//tA74DFQAnAEYAUwBUAINAEQABCQoeGhUDAQkCQFQBCQE/S7AqUFhAKggGAgQBBQEEBWYLAQkDAgIBBAkBWQAKCgBRAAAACkEABQUHUQAHBwsHQhtAJwgGAgQBBQEEBWYLAQkDAgIBBAkBWQAFAAcFB1UACgoAUQAAAAoKQllAEVNST0xJRxU1JTUXIiItNwwXKwEwNTQvAS4BIyEiBg8BBgcGFRQWFzkBFjMyNxYXNjcWMzI3PgE1NCcDIgYdARQGIyEiJj0BNCYjIgYdARQWMyEyNj0BNCYjJyEiJjQ2MyEyFhQGIzEDtQFMCjQh/e0hMglRAQEIMiwkL1M1NFNRNTVTMCUqMglaDhILCP2hCAoTDg0TMSICYCIwEw1L/d4NFhYNAiIOFhYOAiECAwKvHCIgHbIBAxsdMVQXEz8+AQE+PhQXUzEcGv8AEw3CBwsLB74NExMNviIwMCLCDRPdGh4aGh4aAAAEAAD/gAQAA4AACwAUABwAJQA9QDoAAAcFAgMCAANZCQYECAQCAQECTQkGBAgEAgIBUQABAgFFHh0NDCIhHSUeJRoZFhUREAwUDRQVEAoQKwAgDgEQHgEgPgEQJgEiJjQ2MhYUBjIiJjQ2MhYUFyImNDYyFhQGAov+6uyJiewBFuyJif2XJzg4Tzc38U44OE44kyg3N084OAOAiez+6uyJiewBFuz+KjhOODhOODhOODhOODhOODhOOAAAAAkAgP+AA44DgAAbADAANAA4ADwAQABEAEgAVABmQGMAAwABEQMBWRMBERIBAgURAlkLAQUMAQYHBQZXDQEHDgEICQcIVw8BCRABCgAJClcAAAQEAE0AAAAEUQAEAARFSklRT0lUSlRIR0ZFRENCQUA/Pj08Ozo5ERERFjU5OCUyFBcrJRQGIyEiJjURNDYzIR4DHQEUFjsBMh4CFS8CLgEjISIGFREUFjMhMjY1ETQmBSMVMxUjFTMVIxUzASEVIRUhFSEVIRUhASIGHQEUFjsBJj0BA0AuIP4rIS0tIQEcCwwEARcQdhMUGwwdHR06PR3+yEFcXEEB1UBcMP4NTk5OTk5OAYf+xwE5/scBOf7HATn+UhAXFxDOCx4hLi4hAsQhLgIOGhESeBAXAgYRDrwdHTwwXEL9PEJcXEICJx0+0U9PT05PAYpPT09OTwJ2FxAoEBcTFE8AAwAD/4AD/QN7ABAAHQBGAElARgAFBwYHBQZmAAYEBwYEZAgBAAAHBQAHWQAEAAMCBANaAAIBAQJNAAICAVEAAQIBRQEAQ0E8Ojc1KScaGBQSCQgAEAEQCQ4rASIOAhQeAjI+AjQuAgMGIyImNTQ2MzIWFRQSDgEHDgMHBiMiJjU0PgE3PgI1NCYjIgYHBiMiJjU0PgEzMh4BFQIAZ72IUVGIvc+8iVBQibxKERcXIiEYGCGIGiQuDQ8IBAQHJhQaEyEbGRUPLSQpJw4NJBUdLlg7N1QtA3tRiL3PvYhRUYi9z72IUfz5EB4cFyEhFxsBZzAjKgwRDw8SJxkZIC8jGBUVGw8eKiopKh4RJEkxKUUpAAAACAFA/8ACwANAAA4AHQAsADsASgBZAGgAdwCYQJV3dnV0c2hnZmVkChJZWFdWVUpJSEdGCgw7Ojk4NywrKikoCgYDPx0cGxoZDg0MCwoKAD0WARMXFRQDEg0TElkQAQ0RDw4DDAcNDFkKAQcLCQgDBgEHBlkEAQEAAAFNBAEBAQBRBQMCAwABAEVycW5tamljYl9eW1pUU1BPTEtFREFAPTw2NTIxLi0TExYTExYTExAYFysFMjY0JiIGFBYzOQQhMjY0JiIGFBYzOQQBMjY0JiIGFBYzOQQhMjY0JiIGFBYzOQQBMjY0JiIGFBYzOQQhMjY0JiIGFBYzOQQBMjY0JiIGFBYzOQQhMjY0JiIGFBYzOQQCgBslJTYlJRv/ABslJTYlJRsBABslJTYlJRv/ABslJTYlJRsBABslJTYlJRv/ABslJTYlJRsBABslJTYlJRv/ABslJTYlJRtAJTYlJTYlJTYlJTYlAQAlNiUlNiUlNiUlNiUBACU2JSU2JSU2JSU2JQEAJTYlJTYlJTYlJTYlAAACAFP/xAOtAzwAOwBDADBALRcKAgMANSgCAQICQAAAAAMCAANZAAIBAQJNAAICAVEAAQIBRUFAPTwwLT8EDysBNjQnNzYvASYPASYvAS4BKwEiBg8BBgcnJg8BBh8BBhQXBwYfARY/ARYfAR4BOwEyNj8BNjcXFj8BNicEIiY0NjIWFANKAwNeDglZChFvIygQAgwIsggMAhApIm8SCVkJDl4DA14OCVkKEW8jKBACDAiyCAwCECkibxEKWQkP/pmBWlqBWwFVGSQZSgsRmhAHLBsRdQgLCwh1ERssBxCaEAxKGSQZSgsRmhAHLBsRdQgLCwh1ERssBxCaEAwmW4BbW4AAAAIAQP/AA8ADQAAHADwAoLczLCUDCAkBQEuwClBYQDULAQgJBwkIB2YFAQMCBAQDXgAACgEJCAAJWQwBBwYNAgIDBwJZAAQBAQRNAAQEAVIAAQQBRhtANgsBCAkHCQgHZgUBAwIEAgMEZgAACgEJCAAJWQwBBwYNAgIDBwJZAAQBAQRNAAQEAVIAAQQBRllAHgkIOzk2NC8uKikkIh8dHBoXFRIRDgwIPAk8ExAOECsAIAAQACAAEAUyFhQGKwEVFAYiJj0BIyImNDY7ATUjIiY0NjsBNScmPgEyHwE3NjIeAQ8BFTMyFhQGKwEVArn+jv75AQcBcgEH/sENExMNYRMaE18NExMNX18NExMNX3YKARIbCWxlChoTAQp2YQ0TEw1hA0D++f6O/vkBBwFy+RMaE18NExMNXxMaE0ATGhMUdgoaEwlsawoSGgp8DxMaE0AAAAACAAD/gAQAAkAAEgAoACxAKQUBAwQCBAMCZgAAAAQDAARZAAIBAQJNAAICAVIAAQIBRiQUIzc3IgYUKwEuASMiBgcOARUUFjMhMjY1NCYFFAYrASImPQEnIiY/ATYyHwEWBisBAzwXsHVclydjg5ZqAitZfHT+tCUbQBslYBoME6YTNBOmEwwaYAE4cpZgUA2VZm2bgFxVgPEbJSYafQIbE6YTE6YTGgACAAH/gQQAA4AAFgAtAEJAPwACBAUEAgVmAAUBBAUBZAcBAwAEAgMEWQABAAABTQABAQBRBgEAAQBFGBcBACcmIR8XLRgtEA8KCAAWARYIDisFMj4CNw4CIyIuATU0JiIGFRQeAhMiDgIHPgIzMh4BFRQWMjY1NC4CAgBnu4lSAwNwvm9xv285TzhRib1oZruJUwIDcL1wcMBvOFA4UYm9f0+FuWZ3yHR4znkoODgoaL2JUQP/T4W5Z3fJdHjOeic4OCdpvYlRAAQACP+IA/gDeAAPAB8ALwA/AEZAQwcBAwsGCQMCAQMCWQUBAQAAAU0FAQEBAFEKBAgDAAEARTIwIiASEAIAOjcwPzI/KicgLyIvGhcQHxIfCgcADwIPDA4rBSEiJjURNDYzITIWFREUBgMhIiY1ETQ2MyEyFhURFAYBISImNRE0NjMhMhYVERQGAyEiJjURNDYzITIWFREUBgOw/uAeKioeASAdKysd/uAeKioeASAdKyv9o/7gHSsrHQEgHioqHv7gHSsrHQEgHioqeCsdASAeKioe/uAdKwJAKh4BIB0rKx3+4B4q/cArHQEgHioqHv7gHSsCQCoeASAdKysd/uAeKgAAAgAA/4AEAAGSAA8AJAApQCYAAQIBaAACAwJoAAMEA2gABAAABE0ABAQAUAAABABEFRgYFxAFEysFITQmNTQ+AjIeAhUUBgAmIg8BMCcmLwEmDgEWHwEWMj8BNgP//AIBUYm+0L6JUQH+wxUeC6kYGBkYCh4WAQp6Cx4LwguAAgwEaL6JUVGJvmgEDAFMEwqeFxYWFwoBExwKbwoKtAoAAAMAq/+uA2YDNgANAB0ALQA1QDIAAwEDaAABAAFoAgEABABoAAQABwYEB1oABgUFBk0ABgYFUgAFBgVGNTU1NRMSEhAIFisBIzQmIgYVIzQ+ATIeARc0JiMhIgYVERQWMyEyNjUlFAYrASImPQE0NjsBMhYVAzZQgr6CUVGPo49RMC8i/eYhLy8hAhoiL/7jIxkJGSMjGQkZIwIBYYSEYU6OWVmO0iEwMCH+giIvLyJTGSMjGaQZIyMZAAAABQAz/4ADzQOAABcAGwAfACMAJwBVQFIAAgAEBQIEVwAFAAYHBQZXAAMACggDClcABwAICQcIVwsBCQAACUsLAQkJAFEBDAIACQBFAQAnJiUkIyIhIB8eHRwbGhkYEhANCgUCABcBFw0OKwUhMCMhIiY1ETQ2MyEyFhURITIWFREUBgEhFSEVIRUhFSEVISUjFTMDm/68Af4IEhkZEgH4ERkBGxUdHf5Q/rMBTf6zAU3+swFNAU2zs4AZEgOqEhkZEv6rFg/9yg8WAzNNgEyATZmZAAACAEL/gAO5A4AAGwAjACpAJwADAAIBAwJZAAEAAAFNAAEBAFEEAQABAEUEACEgHRwPDAAbBBkFDisFIyIuBD0BND4BOwEyHgEdARQOBgIiJjQ2MhYUAmnYPDxfLzQVWppb2VubWQwdHzUtRzU115iY15iAAQQJEBsSFVqZWFiZWhUOFQ8LBwUBAQIAltSWltQAAAAAAwAAAQMEAAI9AAsAFwAbABlAFgAAAQEASwAAAAFPAAEAAUMbGhkYAg4rEzYWHQEUBi8BLgE3JSYGHQEUFj8BPgEnJSEVIWghLi8iRCECIQN4IS0vIUQhAiH81wKS/W4CKR8WLsYvGB48HlYfRR8WLsYvGB48HlYfAZQAAAcAAP+AA/4DgAAyAEoAVgBiAG8AeACTAYBACo0BCxImAQcVAkBLsAxQWEBYCQEIERUHCF4AGBsPGgMNDhgNWRABDgATEg4TWQASAAsREgtZHAERABUHERVZCgEHBhkCABQHAFoFAQEEAQIDAQJZHQEUABcMFBdZAAwAFgwWVQADAwsDQhtLsBxQWEBZCQEIERURCBVmABgbDxoDDQ4YDVkQAQ4AExIOE1kAEgALERILWRwBEQAVBxEVWQoBBwYZAgAUBwBaBQEBBAECAwECWR0BFAAXDBQXWQAMABYMFlUAAwMLA0IbQGQJAQgRFREIFWYAAwIXAgMXZgAYGw8aAw0OGA1ZEAEOABMSDhNZABIACxESC1kcAREAFQcRFVkKAQcGGQIAFAcAWgUBAQQBAgMBAlkdARQAFwwUF1kADBYWDE0ADAwWUQAWDBZFWVlASHFwZGNZV01LAQCLiIOBfn11c3B4cXhsaWhnY29kb19cV2JZYlNQS1ZNVkRDODcvLSkoJCMfHRoYFxUSEA0MCQcEAgAyATIeDislIxUzMhYUBisBFRQGIiY9ASMiJjQ2OwE1IyImNDY7AScmNDYyHwE3NjIWFA8BMzIWFAY3LgEnJiIHDgEHBhQXHgEXFjI3PgE3NjQBISIGFBYzITI2NCYhIyIGFBY7ATI2NCYDITY3NjcmIyEiBhQWFzM0NyEiBhQWBQ4BBwYiJyYnISImNRE0NjMhMhURFx4BFxYUA05dXQ4TEw5dExsTXQ4TEw5dXQ4TEw4qNAkTGwpWVwobEwo0Lw4TE1kTRi0vZi4tRhMUFBNGLS5mLy1GExP+1P79Fh8fFgEDFh8f/jRHFx8fF0cXHx9cAVUqNzQ5EBj+BRYgIBb8E/7xFiAgA1sXVDc5fDgeGv4qHisqHgJZmQo3VBcYsy4UGxMvDhMTDi8TGxQuFBsTNAobEwlXVwkTGwo0ExsUYC1GExQUE0YtL2YvLUUUExMURS0vZgHoHy0fHy0fHy0fHy0f/r0qFxcBEyAtH9g4NB8tIHc2VRcYGA0SKh4DOR4qif7XBBdUNzl8AAAAAgAC/4kEUwOIAAcACgAyQC8IAQQCAUAAAgQCaAUDAgEAAWkABAAABEsABAQAUAAABABEAAAKCQAHAAcREREGESsFJyEHIwEzCQEDIQNgX/5TX/MBut0Buv3YgAEAd93dA//8AQLP/tcAAAAAAQAAAAEAAKojw1pfDzz1AAsEAAAAAADUClfwAAAAANQKV/AAAP8vBFMDpQAAAAgAAgAAAAAAAAABAAADpf8vAFwEUwAA//8EUwABAAAAAAAAAAAAAAAAAAAAWwF2ACIAAAAAAVUAAAPpACwEAAAABAAAAAQAAAAEAAA6BAAABQQAAAAEAABABAEAAAQBAAAEAAAABAEABwQAAAAERQAABAIAAAQAAAAEAQAABAAAAAQAAAAEAADABAABHAQAAAAEAQAHBAAAAAQAAJIEAACSBAAAwAQAAUcEAAAJBAAAAAQAAGYEAAAHBAAAAgQAAJwEAAAABAAAAAQAAAAEAAAABFMAdgQAAAAEAAAABAAAfQQBAAAEAAACBAAAAQQAAAAEAAAABAAAAAQAAAMEAACMBAAAAAQAAAAEAAAABAEAAAQAACAEAAADBAAARAQAAAAEAAAABAAAAAQAAAEEAAAABAAAAwQAAAQEAAAABAAAAAQAAAAEAABaBAAAWgQAAIAEAABIBAAAPwQAAAAEAACABAAAAwQAAUAEAABTBAAAQAQAAAAEAQABBAAACAQBAAAEAACrBAAAMwQAAEIEAQAABAAAAARTAAIAAAAoACgAKAFkAeoCVAKqA4AD+gRmBSAFuAX+BkoGjAbwB2IImAj6CVoJrAoaCkIKYAq+C4QMCAwuDFQMggygDQANTA3iDoIO4A8+D4wP8BBgERoRThHYEyITnhP+FGIUrBUWFWAVrhYAFrQXvBguGPYZlBo6GuweAh6yH2YhuiI+Iq4jFCO6JMIlyiYcJnAmxCbwJ3IoKCiGKTIpvCqGKwgrsiwGLGos7C08LZouBC5OLowwHDBRAAEAAABbAXsAEgAAAAAAAgBIAFYAbAAAAS8JlgAAAAAAAAAMAJYAAQAAAAAAAQAIAAAAAQAAAAAAAgAGAAgAAQAAAAAAAwAkAA4AAQAAAAAABAAIADIAAQAAAAAABQBGADoAAQAAAAAABgAIAIAAAwABBAkAAQAQAIgAAwABBAkAAgAMAJgAAwABBAkAAwBIAKQAAwABBAkABAAQAOwAAwABBAkABQCMAPwAAwABBAkABgAQAYhpY29uZm9udE1lZGl1bUZvbnRGb3JnZSAyLjAgOiBpY29uZm9udCA6IDIzLTktMjAxNmljb25mb250VmVyc2lvbiAxLjAgOyB0dGZhdXRvaGludCAodjAuOTQpIC1sIDggLXIgNTAgLUcgMjAwIC14IDE0IC13ICJHIiAtZiAtc2ljb25mb250AGkAYwBvAG4AZgBvAG4AdABNAGUAZABpAHUAbQBGAG8AbgB0AEYAbwByAGcAZQAgADIALgAwACAAOgAgAGkAYwBvAG4AZgBvAG4AdAAgADoAIAAyADMALQA5AC0AMgAwADEANgBpAGMAbwBuAGYAbwBuAHQAVgBlAHIAcwBpAG8AbgAgADEALgAwACAAOwAgAHQAdABmAGEAdQB0AG8AaABpAG4AdAAgACgAdgAwAC4AOQA0ACkAIAAtAGwAIAA4ACAALQByACAANQAwACAALQBHACAAMgAwADAAIAAtAHgAIAAxADQAIAAtAHcAIAAiAEcAIgAgAC0AZgAgAC0AcwBpAGMAbwBuAGYAbwBuAHQAAAACAAAAAAAA/4MAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAFsAAAABAAIAWwECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAd1bmlFNjAwB3VuaUU2MDEHdW5pRTYwMgd1bmlFNjAzB3VuaUU2MDQHdW5pRTYwNQd1bmlFNjA2B3VuaUU2MDcHdW5pRTYwOAd1bmlFNjA5B3VuaUU2MEEHdW5pRTYwQgd1bmlFNjBDB3VuaUU2MEQHdW5pRTYwRQd1bmlFNjBGB3VuaUU2MTAHdW5pRTYxMQd1bmlFNjEyB3VuaUU2MTMHdW5pRTYxNAd1bmlFNjE1B3VuaUU2MTYHdW5pRTYxNwd1bmlFNjE4B3VuaUU2MTkHdW5pRTYxQQd1bmlFNjFCB3VuaUU2MUMHdW5pRTYxRAd1bmlFNjFFB3VuaUU2MUYHdW5pRTYyMAd1bmlFNjIxB3VuaUU2MjIHdW5pRTYyMwd1bmlFNjI0B3VuaUU2MjUHdW5pRTYyNgd1bmlFNjI3B3VuaUU2MjgHdW5pRTYyOQd1bmlFNjJBB3VuaUU2MkIHdW5pRTYyQwd1bmlFNjJEB3VuaUU2MkUHdW5pRTYyRgd1bmlFNjMwB3VuaUU2MzEHdW5pRTYzMgd1bmlFNjMzB3VuaUU2MzQHdW5pRTYzNQd1bmlFNjM2B3VuaUU2MzcHdW5pRTYzOAd1bmlFNjM5B3VuaUU2M0EHdW5pRTYzQgd1bmlFNjNDB3VuaUU2M0QHdW5pRTYzRQd1bmlFNjNGB3VuaUU2NDAHdW5pRTY0MQd1bmlFNjQyB3VuaUU2NDMHdW5pRTY0NAd1bmlFNjQ1B3VuaUU2NDYHdW5pRTY0Nwd1bmlFNjQ4B3VuaUU2NDkHdW5pRTY0QQd1bmlFNjRCB3VuaUU2NEMHdW5pRTY0RAd1bmlFNjRFB3VuaUU2NEYHdW5pRTY1MAd1bmlFNjUxB3VuaUU2NTIHdW5pRTY1Mwd1bmlFNjU0B3VuaUU2NTUHdW5pRTY1NgABAAH//wAPAAAAAAAAAAAAAAAAAAAAAAAyADIDGP/hA6X/LwMY/+EDpf8vsAAssCBgZi2wASwgZCCwwFCwBCZasARFW1ghIyEbilggsFBQWCGwQFkbILA4UFghsDhZWSCwCkVhZLAoUFghsApFILAwUFghsDBZGyCwwFBYIGYgiophILAKUFhgGyCwIFBYIbAKYBsgsDZQWCGwNmAbYFlZWRuwACtZWSOwAFBYZVlZLbACLCBFILAEJWFkILAFQ1BYsAUjQrAGI0IbISFZsAFgLbADLCMhIyEgZLEFYkIgsAYjQrIKAAIqISCwBkMgiiCKsAArsTAFJYpRWGBQG2FSWVgjWSEgsEBTWLAAKxshsEBZI7AAUFhlWS2wBCywCCNCsAcjQrAAI0KwAEOwB0NRWLAI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sEUssgEAOistsEYssgEBOistsEcssgAAOystsEgssgABOystsEkssgEAOystsEossgEBOystsEsssgAANystsEwssgABNystsE0ssgEANystsE4ssgEBNystsE8ssgAAOSstsFAssgABOSstsFEssgEAOSstsFIssgEBOSstsFMssgAAPCstsFQssgABPCstsFUssgEAPCstsFYssgEBPCstsFcssgAAOCstsFgssgABOCstsFkssgEAOCstsFossgEBOCstsFsssDArLrEkARQrLbBcLLAwK7A0Ky2wXSywMCuwNSstsF4ssAAWsDArsDYrLbBfLLAxKy6xJAEUKy2wYCywMSuwNCstsGEssDErsDUrLbBiLLAxK7A2Ky2wYyywMisusSQBFCstsGQssDIrsDQrLbBlLLAyK7A1Ky2wZiywMiuwNistsGcssDMrLrEkARQrLbBoLLAzK7A0Ky2waSywMyuwNSstsGossDMrsDYrLbBrLCuwCGWwAyRQeLABFTAtAABLuADIUlixAQGOWbkIAAgAYyCwASNEILADI3CwDkUgIEu4AA5RS7AGU1pYsDQbsChZYGYgilVYsAIlYbABRWMjYrACI0SzCgkFBCuzCgsFBCuzDg8FBCtZsgQoCUVSRLMKDQYEK7EGAUSxJAGIUViwQIhYsQYDRLEmAYhRWLgEAIhYsQYBRFlZWVm4Af+FsASNsQUARAAAAA=="
/***/ }),
/* 196 */
/***/ (function(module, exports) {
module.exports = "data:application/font-woff;base64,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"
/***/ }),
/* 197 */
/***/ (function(module, exports, __webpack_require__) {
var Component = __webpack_require__(3)(
/* script */
__webpack_require__(84),
/* template */
__webpack_require__(200),
/* scopeId */
null,
/* cssModules */
null
)
module.exports = Component.exports
/***/ }),
/* 198 */
/***/ (function(module, exports, __webpack_require__) {
var Component = __webpack_require__(3)(
/* script */
__webpack_require__(85),
/* template */
__webpack_require__(204),
/* scopeId */
null,
/* cssModules */
null
)
module.exports = Component.exports
/***/ }),
/* 199 */
/***/ (function(module, exports, __webpack_require__) {
var Component = __webpack_require__(3)(
/* script */
__webpack_require__(86),
/* template */
__webpack_require__(205),
/* scopeId */
null,
/* cssModules */
null
)
module.exports = Component.exports
/***/ }),
/* 200 */
/***/ (function(module, exports) {
module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
return _c('button', {
class: [
'o2-button',
'o2-button--' + _vm.type,
'o2-button--' + _vm.size,
{
'is-disabled': _vm.disabled,
'is-loading': _vm.loading
}
],
attrs: {
"type": _vm.nativeType,
"disabled": _vm.disabled
},
on: {
"click": _vm.handleClick
}
}, [(_vm.loading) ? _c('i', {
staticClass: "o2-icon-loading"
}) : _vm._e(), _vm._v(" "), _c('span', {
staticClass: "o2-button-text"
}, [_vm._t("default")], 2)])
},staticRenderFns: []}
/***/ }),
/* 201 */
/***/ (function(module, exports) {
module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
return _c('div', {
staticClass: "side-nav"
}, [_c('ul', _vm._l((_vm.data), function(item) {
return _c('li', {
staticClass: "nav-item"
}, [(!item.path) ? _c('a', [_vm._v(_vm._s(item.name))]) : _c('router-link', {
attrs: {
"active-class": "active",
"to": _vm.base + item.path,
"exact": ""
},
domProps: {
"textContent": _vm._s(item.title || item.name)
}
}), _vm._v(" "), (item.children) ? _c('ul', {
staticClass: "pure-menu-list sub-nav"
}, _vm._l((item.children), function(navItem) {
return _c('li', {
staticClass: "nav-item"
}, [_c('router-link', {
attrs: {
"active-class": "active",
"to": _vm.base + navItem.path
},
domProps: {
"textContent": _vm._s(navItem.title || navItem.name)
}
})], 1)
})) : _vm._e(), _vm._v(" "), (item.groups) ? _vm._l((item.groups), function(group) {
return _c('div', {
staticClass: "nav-group"
}, [_c('div', {
staticClass: "nav-group__title"
}, [_vm._v(_vm._s(group.groupName))]), _vm._v(" "), _c('ul', {
staticClass: "pure-menu-list"
}, [_vm._l((group.list), function(navItem) {
return [(!navItem.disabled) ? _c('li', {
staticClass: "nav-item"
}, [_c('router-link', {
attrs: {
"active-class": "active",
"to": _vm.base + navItem.path
},
domProps: {
"textContent": _vm._s(navItem.title)
}
})], 1) : _vm._e()]
})], 2)])
}) : _vm._e()], 2)
}))])
},staticRenderFns: []}
/***/ }),
/* 202 */
/***/ (function(module, exports) {
module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
return _c('div', {
staticClass: "page-container"
}, [_c('side-nav', {
attrs: {
"data": _vm.navConfig['zh-CN'],
"base": "/component"
}
}), _vm._v(" "), _c('div', {
staticClass: "page-content"
}, [_c('router-view')], 1)], 1)
},staticRenderFns: []}
/***/ }),
/* 203 */
/***/ (function(module, exports) {
module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
return _c('div', {
staticClass: "demo-block",
class: [_vm.blockClass, {
'hover': _vm.hovering
}],
on: {
"mouseenter": function($event) {
_vm.hovering = true
},
"mouseleave": function($event) {
_vm.hovering = false
}
}
}, [_vm._t("source"), _vm._v(" "), _c('div', {
staticClass: "meta"
}, [_c('div', {
staticClass: "description"
}, [_vm._t("default")], 2), _vm._v(" "), _vm._t("highlight")], 2), _vm._v(" "), _c('div', {
staticClass: "demo-block-control",
on: {
"click": function($event) {
_vm.isExpanded = !_vm.isExpanded
}
}
}, [_c('span', {
directives: [{
name: "show",
rawName: "v-show",
value: (_vm.hovering),
expression: "hovering"
}]
}, [_vm._v(_vm._s(_vm.controlText))])])], 2)
},staticRenderFns: []}
/***/ }),
/* 204 */
/***/ (function(module, exports) {
module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
return _c('div', [_c('h2', [_vm._v("author: " + _vm._s(_vm.author))]), _vm._v(" "), _c('div', [_vm._v("Hello " + _vm._s(_vm.name))])])
},staticRenderFns: []}
/***/ }),
/* 205 */
/***/ (function(module, exports) {
module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
return _c('div', {
staticClass: "o2-switch",
class: ['is-' + _vm.switchState],
on: {
"click": _vm.toggleState
}
}, [_c('div', {
staticClass: "o2-switch-node"
})])
},staticRenderFns: []}
/***/ }),
/* 206 */
/***/ (function(module, exports, __webpack_require__) {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(92);
if(typeof content === 'string') content = [[module.i, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var update = __webpack_require__(20)("74b2d9b2", content, true);
// Hot Module Replacement
if(false) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept("!!./../../node_modules/css-loader/index.js?minimize!./../../node_modules/vue-loader/lib/style-rewriter.js?id=data-v-191ca0a3!./../../node_modules/less-loader/index.js!./../../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./side-nav.vue", function() {
var newContent = require("!!./../../node_modules/css-loader/index.js?minimize!./../../node_modules/vue-loader/lib/style-rewriter.js?id=data-v-191ca0a3!./../../node_modules/less-loader/index.js!./../../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./side-nav.vue");
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ }),
/* 207 */
/***/ (function(module, exports, __webpack_require__) {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(93);
if(typeof content === 'string') content = [[module.i, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var update = __webpack_require__(20)("ca603dc6", content, true);
// Hot Module Replacement
if(false) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept("!!./../node_modules/css-loader/index.js?minimize!./../node_modules/vue-loader/lib/style-rewriter.js?id=data-v-438aa89e!./../node_modules/less-loader/index.js!./../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./App.vue", function() {
var newContent = require("!!./../node_modules/css-loader/index.js?minimize!./../node_modules/vue-loader/lib/style-rewriter.js?id=data-v-438aa89e!./../node_modules/less-loader/index.js!./../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./App.vue");
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ }),
/* 208 */
/***/ (function(module, exports, __webpack_require__) {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(94);
if(typeof content === 'string') content = [[module.i, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var update = __webpack_require__(20)("1ac4b039", content, true);
// Hot Module Replacement
if(false) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept("!!./../../node_modules/css-loader/index.js?minimize!./../../node_modules/vue-loader/lib/style-rewriter.js?id=data-v-610842ce!./../../node_modules/less-loader/index.js!./../../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./demo-block.vue", function() {
var newContent = require("!!./../../node_modules/css-loader/index.js?minimize!./../../node_modules/vue-loader/lib/style-rewriter.js?id=data-v-610842ce!./../../node_modules/less-loader/index.js!./../../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./demo-block.vue");
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ }),
/* 209 */
/***/ (function(module, exports) {
/**
* Translates the list format produced by css-loader into something
* easier to manipulate.
*/
module.exports = function listToStyles (parentId, list) {
var styles = []
var newStyles = {}
for (var i = 0; i < list.length; i++) {
var item = list[i]
var id = item[0]
var css = item[1]
var media = item[2]
var sourceMap = item[3]
var part = {
id: parentId + ':' + i,
css: css,
media: media,
sourceMap: sourceMap
}
if (!newStyles[id]) {
styles.push(newStyles[id] = { id: id, parts: [part] })
} else {
newStyles[id].parts.push(part)
}
}
return styles
}
/***/ }),
/* 210 */
/***/ (function(module, exports) {
/* (ignored) */
/***/ }),
/* 211 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(__dirname) {
__webpack_require__(57);
var _vue = __webpack_require__(62);
var _vue2 = _interopRequireDefault(_vue);
var _vueRouter = __webpack_require__(61);
var _vueRouter2 = _interopRequireDefault(_vueRouter);
var _App = __webpack_require__(58);
var _App2 = _interopRequireDefault(_App);
var _router = __webpack_require__(55);
var _router2 = _interopRequireDefault(_router);
var _demoBlock = __webpack_require__(59);
var _demoBlock2 = _interopRequireDefault(_demoBlock);
var _sideNav = __webpack_require__(60);
var _sideNav2 = _interopRequireDefault(_sideNav);
var _index = __webpack_require__(56);
var _index2 = _interopRequireDefault(_index);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
_vue2.default.use(_index2.default);
_vue2.default.use(_vueRouter2.default);
_vue2.default.component('demo-block', _demoBlock2.default);
_vue2.default.component('side-nav', _sideNav2.default);
var router = new _vueRouter2.default({
mode: 'hash',
base: __dirname,
routes: _router2.default
});
var indexScrollTop = 0;
router.beforeEach(function (route, redirect, next) {
if (route.path !== '/') {
indexScrollTop = document.body.scrollTop;
}
document.title = route.meta.title || document.title;
next();
});
router.afterEach(function (route) {
if (route.path !== '/') {
document.body.scrollTop = 0;
} else {
_vue2.default.nextTick(function () {
document.body.scrollTop = indexScrollTop;
});
}
});
new _vue2.default({ // eslint-disable-line
render: function render(h) {
return h(_App2.default);
},
router: router
}).$mount('#app-container');
/* WEBPACK VAR INJECTION */}.call(exports, "/"))
/***/ })
/******/ ]);
//# sourceMappingURL=build-docs.js.map