Reduce the snippet returned from getMethodAssignments and avoid a possible infinite loop when removing dead vars.

Former-commit-id: 06b49c9ecdf0b279f7d81274d82a813488e9dd26
This commit is contained in:
John-David Dalton
2013-06-16 17:48:15 -07:00
parent 2473e87947
commit ef40a8a925
3 changed files with 178 additions and 125 deletions

239
build.js
View File

@@ -512,10 +512,10 @@
source = source.replace(getMethodAssignments(source), function(match) {
var indent = /^ *(?=lodash\.)/m.exec(match)[0];
return match + [
'',
'',
'// add functions to `lodash.prototype`',
'mixin(lodash);'
'mixin(lodash);',
''
].join('\n' + indent);
});
@@ -543,8 +543,9 @@
}
// add quotes to commands with spaces or equals signs
commands = _.map(commands, function(command) {
var separator = (command.match(/[= ]/) || [''])[0];
var separator = command.match(/[= ]/);
if (separator) {
separator = separator[0];
var pair = command.split(separator);
command = pair[0] + separator + '"' + pair[1] + '"';
}
@@ -691,7 +692,7 @@
return separators.match(/^\s*/)[0] + separators.slice(separators.lastIndexOf('/*'));
})
// remove unneeded horizontal rule comment separators
.replace(/(\{\n)\s*\/\*-+\*\/\n/g, '$1');
.replace(/(\{\n)\s*\/\*-+\*\/\n|\n *\/\*-+\*\/\n(\s*\})/gm, '$1$2');
}
/**
@@ -891,7 +892,8 @@
* @returns {String} Returns the `isArguments` fallback.
*/
function getIsArgumentsFallback(source) {
return (source.match(/(?:\s*\/\/.*)*\n( *)if *\((?:!support\.argsClass|!isArguments)[\s\S]+?\n *};\n\1}/) || [''])[0];
var result = source.match(/(?:\s*\/\/.*)*\n( *)if *\((?:!support\.argsClass|!isArguments)[\s\S]+?\n *};\n\1}/);
return result ? result[0] : '';
}
/**
@@ -915,7 +917,8 @@
* @returns {String} Returns the `isFunction` fallback.
*/
function getIsFunctionFallback(source) {
return (source.match(/(?:\s*\/\/.*)*\n( *)if *\(isFunction\(\/x\/[\s\S]+?\n *};\n\1}/) || [''])[0];
var result = source.match(/(?:\s*\/\/.*)*\n( *)if *\(isFunction\(\/x\/[\s\S]+?\n *};\n\1}/);
return result ? result[0] : '';
}
/**
@@ -926,7 +929,8 @@
* @returns {String} Returns the `isArguments` fallback.
*/
function getCreateObjectFallback(source) {
return (source.match(/(?:\s*\/\/.*)*\n( *)if *\((?:!nativeCreate)[\s\S]+?\n *};\n\1}/) || [''])[0];
var result = source.match(/(?:\s*\/\/.*)*\n( *)if *\((?:!nativeCreate)[\s\S]+?\n *};\n\1}/);
return result ? result[0] : '';
}
/**
@@ -937,7 +941,8 @@
* @returns {String} Returns the `iteratorTemplate`.
*/
function getIteratorTemplate(source) {
return (source.match(/^( *)var iteratorTemplate *= *[\s\S]+?\n\1.+?;\n/m) || [''])[0];
var result = source.match(/^( *)var iteratorTemplate *= *[\s\S]+?\n\1.+?;\n/m);
return result ? result[0] : '';
}
/**
@@ -948,7 +953,13 @@
* @returns {String} Returns the method assignments snippet.
*/
function getMethodAssignments(source) {
return (source.match(/\/\*-+\*\/\n(?:\s*\/\/.*)*\s*lodash\.\w+ *=[\s\S]+?lodash\.VERSION *=.+/) || [''])[0];
var result = source.match(RegExp(
'/\\*-+\\*/\\n' +
'(?:\\s*//.*)*\\s*lodash\\.\\w+ *=[\\s\\S]+?\\n' +
'(?=\\s*/\\*-+\\*/\\n\\s*' + multilineComment + ' *lodash\\.VERSION *=)'
));
return result ? result[0] : '';
}
/**
@@ -980,6 +991,22 @@
) || methodName;
}
/**
* Gets the `support` object assignment snippet from `source`.
*
* @private
* @param {String} source The source to inspect.
* @returns {String} Returns the `support` snippet.
*/
function getSupport(source) {
var result = source.match(RegExp(
multilineComment +
'( *)var support *=[\\s\\S]+?\n\\1}\\(1\\)\\);\\n'
, 'm'));
return result ? result[0] : '';
}
/**
* Creates a sorted array of all variables defined outside of Lo-Dash methods.
*
@@ -1293,7 +1320,6 @@
return source;
}
/**
* Removes the `Object.keys` object iteration optimization from `source`.
*
@@ -1332,18 +1358,64 @@
}
/**
* Removes all `support.argsObject` references from `source`.
* Removes all `runInContext` references from `source`.
*
* @private
* @param {String} source The source to process.
* @returns {String} Returns the modified source.
*/
function removeSupportArgsObject(source) {
source = removeSupportProp(source, 'argsObject');
function removeRunInContext(source) {
// replace reference in `reThis` assignment
source = source.replace(/\btest\(runInContext\)/, 'test(function() { return this; })');
// remove `argsAreObjects` from `_.isEqual`
source = source.replace(matchFunction(source, 'isEqual'), function(match) {
return match.replace(/!support.\argsObject[^:]+:\s*/g, '');
// remove function scaffolding, leaving most of its content
source = source.replace(matchFunction(source, 'runInContext'), function(match) {
return match
.replace(/^[\s\S]+?function runInContext[\s\S]+?context *= *context.+| *return lodash[\s\S]+$/g, '')
.replace(/^ {4}/gm, ' ');
});
// cleanup adjusted source
source = source
.replace(/\bcontext\b/g, 'window')
.replace(/(?:\n +\/\*[^*]*\*+(?:[^\/][^*]*\*+)*\/)?\n *var Array *=[\s\S]+?;\n/, '')
.replace(/(return *|= *)_([;)])/g, '$1lodash$2')
.replace(/^ *var _ *=.+\n+/m, '');
return source;
}
/**
* Removes all `setImmediate` references from `source`.
*
* @private
* @param {String} source The source to process.
* @returns {String} Returns the modified source.
*/
function removeSetImmediate(source) {
// remove the `setImmediate` fork of `_.defer`.
source = source.replace(/(?:\s*\/\/.*)*\n( *)if *\(isV8 *&& *freeModule[\s\S]+?\n\1}/, '');
return source;
}
/**
* Removes all `support` object references from `source`.
*
* @private
* @param {String} source The source to process.
* @returns {String} Returns the modified source.
*/
function removeSupport(source) {
source = source.replace(getSupport(source), '');
_.each([
removeSupportArgsClass, removeSupportArgsObject, removeSupportEnumErrorProps,
removeSupportEnumPrototypes, removeSupportNodeClass, removeSupportNonEnumArgs,
removeSupportNonEnumShadows, removeSupportOwnLast, removeSupportSpliceObjects,
removeSupportUnindexedChars
], function(func) {
source = func(source);
});
return source;
@@ -1379,6 +1451,24 @@
return source;
}
/**
* Removes all `support.argsObject` references from `source`.
*
* @private
* @param {String} source The source to process.
* @returns {String} Returns the modified source.
*/
function removeSupportArgsObject(source) {
source = removeSupportProp(source, 'argsObject');
// remove `argsAreObjects` from `_.isEqual`
source = source.replace(matchFunction(source, 'isEqual'), function(match) {
return match.replace(/!support.\argsObject[^:]+:\s*/g, '');
});
return source;
}
/**
* Removes all `support.enumErrorProps` references from `source`.
*
@@ -1399,7 +1489,6 @@
return source;
}
/**
* Removes all `support.enumPrototypes` references from `source`.
*
@@ -1572,48 +1661,6 @@
return source;
}
/**
* Removes all `runInContext` references from `source`.
*
* @private
* @param {String} source The source to process.
* @returns {String} Returns the modified source.
*/
function removeRunInContext(source) {
// replace reference in `reThis` assignment
source = source.replace(/\btest\(runInContext\)/, 'test(function() { return this; })');
// remove function scaffolding, leaving most of its content
source = source.replace(matchFunction(source, 'runInContext'), function(match) {
return match
.replace(/^[\s\S]+?function runInContext[\s\S]+?context *= *context.+| *return lodash[\s\S]+$/g, '')
.replace(/^ {4}/gm, ' ');
});
// cleanup adjusted source
source = source
.replace(/\bcontext\b/g, 'window')
.replace(/(?:\n +\/\*[^*]*\*+(?:[^\/][^*]*\*+)*\/)?\n *var Array *=[\s\S]+?;\n/, '')
.replace(/(return *|= *)_([;)])/g, '$1lodash$2')
.replace(/^ *var _ *=.+\n+/m, '');
return source;
}
/**
* Removes all `setImmediate` references from `source`.
*
* @private
* @param {String} source The source to process.
* @returns {String} Returns the modified source.
*/
function removeSetImmediate(source) {
// remove the `setImmediate` fork of `_.defer`.
source = source.replace(/(?:\s*\/\/.*)*\n( *)if *\(isV8 *&& *freeModule[\s\S]+?\n\1}/, '');
return source;
}
/**
* Removes a given property from the `support` object in `source`.
*
@@ -1623,15 +1670,17 @@
* @returns {String} Returns the modified source.
*/
function removeSupportProp(source, propName) {
return source.replace(RegExp(
multilineComment +
// match a `try` block
'(?: *try\\b.+\\n)?' +
// match the `support` property assignment
' *support\\.' + propName + ' *=.+\\n' +
// match `catch` block
'(?:( *).+?catch\\b[\\s\\S]+?\\n\\1}\\n)?'
), '');
return source.replace(getSupport(source), function(match) {
return match.replace(RegExp(
multilineComment +
// match a `try` block
'(?: *try\\b.+\\n)?' +
// match the `support` property assignment
' *support\\.' + propName + ' *=.+\\n' +
// match `catch` block
'(?:( *).+?catch\\b[\\s\\S]+?\\n\\1}\\n)?'
), '');
});
}
/**
@@ -3199,7 +3248,7 @@
_.each(['assign', 'createCallback', 'forIn', 'forOwn', 'isPlainObject', 'unzip', 'zipObject'], function(methodName) {
if (!useLodashMethod(methodName)) {
modified = modified.replace(RegExp('^(?: *//.*\\s*)* *lodash\\.' + methodName + ' *=.+\\n', 'm'), '');
modified = modified.replace(RegExp('^(?: *//.*\\s*)* *lodash\\.' + methodName + ' *=[\\s\\S]+?;\\n', 'm'), '');
}
});
@@ -3321,6 +3370,7 @@
}
if (isRemoved(source, 'isArguments')) {
source = replaceSupportProp(source, 'argsClass', 'true');
source = removeIsArgumentsFallback(source);
}
if (isRemoved(source, 'isArguments', 'isEmpty')) {
source = removeSupportArgsClass(source);
@@ -3428,30 +3478,33 @@
}
// remove code used to resolve unneeded `support` properties
source = source.replace(/^ *\(function[\s\S]+?\n(( *)var ctor *= *function[\s\S]+?(?:\n *for.+)+\n)([\s\S]+?)}\(1\)\);\n/m, function(match, setup, indent, body) {
var modified = setup;
if (!/support\.spliceObjects *=(?! *(?:false|true))/.test(match)) {
modified = modified.replace(/^ *object *=.+\n/m, '');
}
if (!/support\.enumPrototypes *=(?! *(?:false|true))/.test(match) &&
!/support\.nonEnumShadows *=(?! *(?:false|true))/.test(match) &&
!/support\.ownLast *=(?! *(?:false|true))/.test(match)) {
modified = modified
.replace(/\bctor *=.+\s+/, '')
.replace(/^ *ctor\.prototype.+\s+.+\n/m, '')
.replace(/(?:,\n)? *props *=[^;=]+/, '')
.replace(/^ *for *\((?=prop)/, '$&var ')
}
if (!/support\.nonEnumArgs *=(?! *(?:false|true))/.test(match)) {
modified = modified.replace(/^ *for *\(.+? arguments.+\n/m, '');
}
// cleanup the empty var statement
modified = modified.replace(/^ *var;\n/m, '');
source = source.replace(getSupport(source), function(match) {
return match.replace(/^ *\(function[\s\S]+?\n(( *)var ctor *=[\s\S]+?(?:\n *for.+)+\n)([\s\S]+?)}\(1\)\);\n/m, function(match, setup, indent, body) {
var modified = setup;
// if no setup then remove IIFE
return /^\s*$/.test(modified)
? body.replace(RegExp('^' + indent, 'gm'), indent.slice(0, -2))
: match.replace(setup, modified);
if (!/support\.spliceObjects *=(?! *(?:false|true))/.test(body)) {
modified = modified.replace(/^ *object *=.+\n/m, '');
}
if (!/support\.enumPrototypes *=(?! *(?:false|true))/.test(body) &&
!/support\.nonEnumShadows *=(?! *(?:false|true))/.test(body) &&
!/support\.ownLast *=(?! *(?:false|true))/.test(body)) {
modified = modified
.replace(/\bctor *=.+\s+/, '')
.replace(/^ *ctor\.prototype.+\s+.+\n/m, '')
.replace(/(?:,\n)? *props *=[^;=]+/, '')
.replace(/^ *for *\((?=prop)/, '$&var ')
}
if (!/support\.nonEnumArgs *=(?! *(?:false|true))/.test(body)) {
modified = modified.replace(/^ *for *\(.+? arguments.+\n/m, '');
}
// cleanup the empty var statement
modified = modified.replace(/^ *var;\n/m, '');
// if no setup then remove IIFE
return /^\s*$/.test(modified)
? body.replace(RegExp('^' + indent, 'gm'), indent.slice(0, -2))
: match.replace(setup, modified);
});
});
// remove unused variables
@@ -3471,7 +3524,7 @@
varNames.shift();
}
else {
while (!useMap[varNames[0]]) {
while (varNames.length && !useMap[varNames[0]]) {
source = removeVar(source, varNames[0]);
varNames.shift();
}

View File

@@ -4386,6 +4386,9 @@
lodash.take = first;
lodash.head = first;
// add functions to `lodash.prototype`
mixin(lodash);
/*--------------------------------------------------------------------------*/
/**
@@ -4397,9 +4400,6 @@
*/
lodash.VERSION = '1.3.1';
// add functions to `lodash.prototype`
mixin(lodash);
// add "Chaining" functions to the wrapper
lodash.prototype.chain = wrapperChain;
lodash.prototype.value = wrapperValueOf;

View File

@@ -4,32 +4,32 @@
* Build: `lodash underscore exports="amd,commonjs,global,node" -o ./dist/lodash.underscore.js`
* Underscore.js 1.4.4 underscorejs.org/LICENSE
*/
;!function(n){function t(n,t){var r;if(n&&gt[typeof n])for(r in n)if(Et.call(n,r)&&t(n[r],r,n)===nt)break}function r(n,t){var r;if(n&&gt[typeof n])for(r in n)if(t(n[r],r,n)===nt)break}function e(n){var t,r=[];if(!n||!gt[typeof n])return r;for(t in n)Et.call(n,t)&&r.push(t);return r}function u(n,t,r){r=(r||0)-1;for(var e=n.length;++r<e;)if(n[r]===t)return r;return-1}function o(n,t){var r=n.m,e=t.m;if(n=n.l,t=t.l,n!==t){if(n>t||typeof n=="undefined")return 1;if(n<t||typeof t=="undefined")return-1}return r<e?-1:1
}function i(n){return"\\"+ht[n]}function a(){}function f(n){return n instanceof f?n:new c(n)}function c(n){this.__wrapped__=n}function l(n,t,r){function e(){var f=arguments,c=o?this:t;return u||(n=t[i]),r.length&&(f=f.length?(f=zt.call(f),a?f.concat(r):r.concat(f)):r),this instanceof e?(c=p(n.prototype),f=n.apply(c,f),A(f)?f:c):n.apply(c,f)}var u=w(n),o=!r,i=t;if(o){var a=void 0;r=t}else if(!u)throw new TypeError;return e}function p(n){return A(n)?Ft(n):{}}function s(n){return Wt[n]}function v(){var n=(n=f.indexOf)===U?u:n;
return n}function g(n){return Gt[n]}function h(n){return kt.call(n)==it}function y(n){if(!n)return n;for(var t=1,r=arguments.length;t<r;t++){var e=arguments[t];if(e)for(var u in e)n[u]=e[u]}return n}function m(n){if(!n)return n;for(var t=1,r=arguments.length;t<r;t++){var e=arguments[t];if(e)for(var u in e)n[u]==X&&(n[u]=e[u])}return n}function _(n){var t=[];return r(n,function(n,r){w(n)&&t.push(r)}),t.sort()}function d(n){for(var t=-1,r=Vt(n),e=r.length,u={};++t<e;){var o=r[t];u[n[o]]=o}return u}function b(n){if(!n)return Q;
if(Ut(n)||O(n))return!n.length;for(var t in n)if(Et.call(n,t))return Y;return Q}function j(n,t,e,u){if(n===t)return 0!==n||1/n==1/t;var o=typeof n,i=typeof t;if(n===n&&(!n||"function"!=o&&"object"!=o)&&(!t||"function"!=i&&"object"!=i))return Y;if(n==X||t==X)return n===t;if(i=kt.call(n),o=kt.call(t),i!=o)return Y;switch(i){case ft:case ct:return+n==+t;case lt:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case st:case vt:return n==t+""}if(o=i==at,!o){if(n instanceof f||t instanceof f)return j(n.__wrapped__||n,t.__wrapped__||t,e,u);
if(i!=pt)return Y;var i=n.constructor,a=t.constructor;if(i!=a&&(!w(i)||!(i instanceof i&&w(a)&&a instanceof a)))return Y}for(e||(e=[]),u||(u=[]),i=e.length;i--;)if(e[i]==n)return u[i]==t;var c=Q,l=0;if(e.push(n),u.push(t),o){if(l=t.length,c=l==n.length)for(;l--&&(c=j(n[l],t[l],e,u)););return c}return r(t,function(t,r,o){return Et.call(o,r)?(l++,!(c=Et.call(n,r)&&j(n[r],t,e,u))&&nt):void 0}),c&&r(n,function(n,t,r){return Et.call(r,t)?!(c=-1<--l)&&nt:void 0}),c}function w(n){return typeof n=="function"
}function A(n){return!(!n||!gt[typeof n])}function x(n){return typeof n=="number"||kt.call(n)==lt}function O(n){return typeof n=="string"||kt.call(n)==vt}function E(n){for(var t=-1,r=Vt(n),e=r.length,u=Array(e);++t<e;)u[t]=n[r[t]];return u}function S(n,r){var e=v(),u=n?n.length:0,o=Y;return u&&typeof u=="number"?o=-1<e(n,r):t(n,function(n){return(o=n===r)&&nt}),o}function N(n,r,e){var u=Q;r=J(r,e),e=-1;var o=n?n.length:0;if(typeof o=="number")for(;++e<o&&(u=!!r(n[e],e,n)););else t(n,function(n,t,e){return!(u=!!r(n,t,e))&&nt
});return u}function k(n,r,e){var u=[];r=J(r,e),e=-1;var o=n?n.length:0;if(typeof o=="number")for(;++e<o;){var i=n[e];r(i,e,n)&&u.push(i)}else t(n,function(n,t,e){r(n,t,e)&&u.push(n)});return u}function B(n,r,e){r=J(r,e),e=-1;var u=n?n.length:0;if(typeof u!="number"){var o;return t(n,function(n,t,e){return r(n,t,e)?(o=n,nt):void 0}),o}for(;++e<u;){var i=n[e];if(r(i,e,n))return i}}function F(n,r,e){var u=-1,o=n?n.length:0;if(r=r&&typeof e=="undefined"?r:J(r,e),typeof o=="number")for(;++u<o&&r(n[u],u,n)!==nt;);else t(n,r)
}function q(n,r,e){var u=-1,o=n?n.length:0;if(r=J(r,e),typeof o=="number")for(var i=Array(o);++u<o;)i[u]=r(n[u],u,n);else i=[],t(n,function(n,t,e){i[++u]=r(n,t,e)});return i}function R(n,t,r){var e=-1/0,u=e,o=-1,i=n?n.length:0;if(t||typeof i!="number")t=J(t,r),F(n,function(n,r,o){r=t(n,r,o),r>e&&(e=r,u=n)});else for(;++o<i;)r=n[o],r>u&&(u=r);return u}function D(n,t){var r=-1,e=n?n.length:0;if(typeof e=="number")for(var u=Array(e);++r<e;)u[r]=n[r][t];return u||q(n,t)}function M(n,r,e,u){if(!n)return e;
var o=3>arguments.length;r=J(r,u,4);var i=-1,a=n.length;if(typeof a=="number")for(o&&(e=n[++i]);++i<a;)e=r(e,n[i],i,n);else t(n,function(n,t,u){e=o?(o=Y,n):r(e,n,t,u)});return e}function T(n,t,r,e){var u=n?n.length:0,o=3>arguments.length;if(typeof u!="number")var i=Vt(n),u=i.length;return t=J(t,e,4),F(n,function(e,a,f){a=i?i[--u]:--u,r=o?(o=Y,n[a]):t(r,n[a],a,f)}),r}function $(n,r,e){var u;r=J(r,e),e=-1;var o=n?n.length:0;if(typeof o=="number")for(;++e<o&&!(u=r(n[e],e,n)););else t(n,function(n,t,e){return(u=r(n,t,e))&&nt
});return!!u}function I(n,t,r){return r&&b(t)?X:(r?B:k)(n,t)}function z(n){for(var t=-1,r=v(),e=n.length,u=xt.apply(dt,zt.call(arguments,1)),o=[];++t<e;){var i=n[t];0>r(u,i)&&o.push(i)}return o}function C(n,t,r){if(n){var e=0,u=n.length;if(typeof t!="number"&&t!=X){var o=-1;for(t=J(t,r);++o<u&&t(n[o],o,n);)e++}else if(e=t,e==X||r)return n[0];return zt.call(n,0,$t(Tt(0,e),u))}}function P(n,t){for(var r=-1,e=n?n.length:0,u=[];++r<e;){var o=n[r];Ut(o)?St.apply(u,t?o:P(o)):u.push(o)}return u}function U(n,t,r){if(typeof r=="number"){var e=n?n.length:0;
r=0>r?Tt(0,e+r):r||0}else if(r)return r=W(n,t),n[r]===t?r:-1;return n?u(n,t,r):-1}function V(n,t,r){if(typeof t!="number"&&t!=X){var e=0,u=-1,o=n?n.length:0;for(t=J(t,r);++u<o&&t(n[u],u,n);)e++}else e=t==X||r?1:Tt(0,t);return zt.call(n,e)}function W(n,t,r,e){var u=0,o=n?n.length:u;for(r=r?J(r,e,1):K,t=r(t);u<o;)e=u+o>>>1,r(n[e])<t?u=e+1:o=e;return u}function G(n,t,r,e){var u=-1,o=v(),i=n?n.length:0,a=[],f=a;for(typeof t!="boolean"&&t!=X&&(e=r,r=t,t=Y),r!=X&&(f=[],r=J(r,e));++u<i;){e=n[u];var c=r?r(e,u,n):e;
(t?!u||f[f.length-1]!==c:0>o(f,c))&&(r&&f.push(c),a.push(e))}return a}function H(n,t){return Pt.fastBind||Bt&&2<arguments.length?Bt.call.apply(Bt,arguments):l(n,t,zt.call(arguments,2))}function J(n,t,r){if(n==X)return K;var e=typeof n;if("function"!=e){if("object"!=e)return function(t){return t[n]};var u=Vt(n);return function(t){for(var r=u.length,e=Y;r--&&(e=t[u[r]]===n[u[r]]););return e}}return typeof t=="undefined"?n:1===r?function(r){return n.call(t,r)}:2===r?function(r,e){return n.call(t,r,e)
}:4===r?function(r,e,u,o){return n.call(t,r,e,u,o)}:function(r,e,u){return n.call(t,r,e,u)}}function K(n){return n}function L(n){F(_(n),function(t){var r=f[t]=n[t];f.prototype[t]=function(){var n=[this.__wrapped__];return St.apply(n,arguments),n=r.apply(f,n),this.__chain__&&(n=new c(n),n.__chain__=Q),n}})}var Q=!0,X=null,Y=!1,Z=0,nt={},tt=+new Date+"",rt=/&(?:amp|lt|gt|quot|#39);/g,et=/($^)/,ut=/[&<>"']/g,ot=/['\n\r\t\u2028\u2029\\]/g,it="[object Arguments]",at="[object Array]",ft="[object Boolean]",ct="[object Date]",lt="[object Number]",pt="[object Object]",st="[object RegExp]",vt="[object String]",gt={"boolean":Y,"function":Q,object:Q,number:Y,string:Y,undefined:Y},ht={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},yt=gt[typeof exports]&&exports,mt=gt[typeof module]&&module&&module.exports==yt&&module,_t=gt[typeof global]&&global;
!_t||_t.global!==_t&&_t.window!==_t||(n=_t);var dt=[],_t=Object.prototype,bt=n._,jt=RegExp("^"+(_t.valueOf+"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),wt=Math.ceil,At=n.clearTimeout,xt=dt.concat,Ot=Math.floor,Et=_t.hasOwnProperty,St=dt.push,Nt=n.setTimeout,kt=_t.toString,Bt=jt.test(Bt=kt.bind)&&Bt,Ft=jt.test(Ft=Object.create)&&Ft,qt=jt.test(qt=Array.isArray)&&qt,Rt=n.isFinite,Dt=n.isNaN,Mt=jt.test(Mt=Object.keys)&&Mt,Tt=Math.max,$t=Math.min,It=Math.random,zt=dt.slice,_t=jt.test(n.attachEvent),Ct=Bt&&!/\n|true/.test(Bt+_t);
c.prototype=f.prototype;var Pt={};!function(){var n={0:1,length:1};Pt.fastBind=Bt&&!Ct,Pt.spliceObjects=(dt.splice.call(n,0,1),!n[0])}(1),f.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},Ft||(p=function(n){if(A(n)){a.prototype=n;var t=new a;a.prototype=X}return t||{}}),h(arguments)||(h=function(n){return n?Et.call(n,"callee"):Y});var Ut=qt||function(n){return n?typeof n=="object"&&kt.call(n)==at:Y},Vt=Mt?function(n){return A(n)?Mt(n):[]
}:e,Wt={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Gt=d(Wt);w(/x/)&&(w=function(n){return typeof n=="function"&&"[object Function]"==kt.call(n)}),f.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},f.bind=H,f.bindAll=function(n){for(var t=1<arguments.length?xt.apply(dt,zt.call(arguments,1)):_(n),r=-1,e=t.length;++r<e;){var u=t[r];n[u]=H(n[u],n)}return n},f.compact=function(n){for(var t=-1,r=n?n.length:0,e=[];++t<r;){var u=n[t];u&&e.push(u)
}return e},f.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length;r--;)t=[n[r].apply(this,t)];return t[0]}},f.countBy=function(n,t,r){var e={};return t=J(t,r),F(n,function(n,r,u){r=t(n,r,u)+"",Et.call(e,r)?e[r]++:e[r]=1}),e},f.debounce=function(n,t,r){function e(){a=X,r||(o=n.apply(i,u))}var u,o,i,a=X;return function(){var f=r&&!a;return u=arguments,i=this,At(a),a=Nt(e,t),f&&(o=n.apply(i,u)),o}},f.defaults=m,f.defer=function(n){var t=zt.call(arguments,1);return Nt(function(){n.apply(void 0,t)
},1)},f.delay=function(n,t){var r=zt.call(arguments,2);return Nt(function(){n.apply(void 0,r)},t)},f.difference=z,f.filter=k,f.flatten=P,f.forEach=F,f.functions=_,f.groupBy=function(n,t,r){var e={};return t=J(t,r),F(n,function(n,r,u){r=t(n,r,u)+"",(Et.call(e,r)?e[r]:e[r]=[]).push(n)}),e},f.initial=function(n,t,r){if(!n)return[];var e=0,u=n.length;if(typeof t!="number"&&t!=X){var o=u;for(t=J(t,r);o--&&t(n[o],o,n);)e++}else e=t==X||r?1:t||e;return zt.call(n,0,$t(Tt(0,u-e),u))},f.intersection=function(n){var t=arguments,r=t.length,e=-1,u=v(),o=n?n.length:0,i=[];
n:for(;++e<o;){var a=n[e];if(0>u(i,a)){for(var f=r;--f;)if(0>u(t[f],a))continue n;i.push(a)}}return i},f.invert=d,f.invoke=function(n,t){var r=zt.call(arguments,2),e=-1,u=typeof t=="function",o=n?n.length:0,i=Array(typeof o=="number"?o:0);return F(n,function(n){i[++e]=(u?t:n[t]).apply(n,r)}),i},f.keys=Vt,f.map=q,f.max=R,f.memoize=function(n,t){var r={};return function(){var e=tt+(t?t.apply(this,arguments):arguments[0]);return Et.call(r,e)?r[e]:r[e]=n.apply(this,arguments)}},f.min=function(n,t,r){var e=1/0,u=e,o=-1,i=n?n.length:0;
if(t||typeof i!="number")t=J(t,r),F(n,function(n,r,o){r=t(n,r,o),r<e&&(e=r,u=n)});else for(;++o<i;)r=n[o],r<u&&(u=r);return u},f.omit=function(n){var t=v(),e=xt.apply(dt,zt.call(arguments,1)),u={};return r(n,function(n,r){0>t(e,r)&&(u[r]=n)}),u},f.once=function(n){var t,r;return function(){return t?r:(t=Q,r=n.apply(this,arguments),n=X,r)}},f.pairs=function(n){for(var t=-1,r=Vt(n),e=r.length,u=Array(e);++t<e;){var o=r[t];u[t]=[o,n[o]]}return u},f.partial=function(n){return l(n,zt.call(arguments,1))
},f.pick=function(n){for(var t=-1,r=xt.apply(dt,zt.call(arguments,1)),e=r.length,u={};++t<e;){var o=r[t];o in n&&(u[o]=n[o])}return u},f.pluck=D,f.range=function(n,t,r){n=+n||0,r=+r||1,t==X&&(t=n,n=0);var e=-1;t=Tt(0,wt((t-n)/r));for(var u=Array(t);++e<t;)u[e]=n,n+=r;return u},f.reject=function(n,t,r){return t=J(t,r),k(n,function(n,r,e){return!t(n,r,e)})},f.rest=V,f.shuffle=function(n){var t=-1,r=n?n.length:0,e=Array(typeof r=="number"?r:0);return F(n,function(n){var r=Ot(It()*(++t+1));e[t]=e[r],e[r]=n
}),e},f.sortBy=function(n,t,r){var e=-1,u=n?n.length:0,i=Array(typeof u=="number"?u:0);for(t=J(t,r),F(n,function(n,r,u){i[++e]={l:t(n,r,u),m:e,n:n}}),u=i.length,i.sort(o);u--;)i[u]=i[u].n;return i},f.tap=function(n,t){return t(n),n},f.throttle=function(n,t){function r(){i=new Date,a=X,u=n.apply(o,e)}var e,u,o,i=0,a=X;return function(){var f=new Date,c=t-(f-i);return e=arguments,o=this,0<c?a||(a=Nt(r,c)):(At(a),a=X,i=f,u=n.apply(o,e)),u}},f.times=function(n,t,r){for(var e=-1,u=Array(-1<n?n:0);++e<n;)u[e]=t.call(r,e);
return u},f.toArray=function(n){return Ut(n)?zt.call(n):n&&typeof n.length=="number"?q(n):E(n)},f.union=function(n){return Ut(n)||(arguments[0]=n?zt.call(n):dt),G(xt.apply(dt,arguments))},f.uniq=G,f.values=E,f.where=I,f.without=function(n){return z(n,zt.call(arguments,1))},f.wrap=function(n,t){return function(){var r=[n];return St.apply(r,arguments),t.apply(this,r)}},f.zip=function(n){for(var t=-1,r=n?R(D(arguments,"length")):0,e=Array(0>r?0:r);++t<r;)e[t]=D(arguments,t);return e},f.collect=q,f.drop=V,f.each=F,f.extend=y,f.methods=_,f.object=function(n,t){for(var r=-1,e=n?n.length:0,u={};++r<e;){var o=n[r];
t?u[o]=t[r]:u[o[0]]=o[1]}return u},f.select=k,f.tail=V,f.unique=G,f.chain=function(n){return n=new c(n),n.__chain__=Q,n},f.clone=function(n){return A(n)?Ut(n)?zt.call(n):y({},n):n},f.contains=S,f.escape=function(n){return n==X?"":(n+"").replace(ut,s)},f.every=N,f.find=B,f.has=function(n,t){return n?Et.call(n,t):Y},f.identity=K,f.indexOf=U,f.isArguments=h,f.isArray=Ut,f.isBoolean=function(n){return n===Q||n===Y||kt.call(n)==ft},f.isDate=function(n){return n?typeof n=="object"&&kt.call(n)==ct:Y},f.isElement=function(n){return n?1===n.nodeType:Y
},f.isEmpty=b,f.isEqual=j,f.isFinite=function(n){return Rt(n)&&!Dt(parseFloat(n))},f.isFunction=w,f.isNaN=function(n){return x(n)&&n!=+n},f.isNull=function(n){return n===X},f.isNumber=x,f.isObject=A,f.isRegExp=function(n){return!(!n||!gt[typeof n])&&kt.call(n)==st},f.isString=O,f.isUndefined=function(n){return typeof n=="undefined"},f.lastIndexOf=function(n,t,r){var e=n?n.length:0;for(typeof r=="number"&&(e=(0>r?Tt(0,e+r):$t(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},f.mixin=L,f.noConflict=function(){return n._=bt,this
},f.random=function(n,t){n==X&&t==X&&(t=1),n=+n||0,t==X?(t=n,n=0):t=+t||0;var r=It();return n%1||t%1?n+$t(r*(t-n+parseFloat("1e-"+((r+"").length-1))),t):n+Ot(r*(t-n+1))},f.reduce=M,f.reduceRight=T,f.result=function(n,t){var r=n?n[t]:X;return w(r)?n[t]():r},f.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:Vt(n).length},f.some=$,f.sortedIndex=W,f.template=function(n,t,r){var e=f.templateSettings;n||(n=""),r=m({},r,e);var u=0,o="__p+='",e=r.variable;n.replace(RegExp((r.escape||et).source+"|"+(r.interpolate||et).source+"|"+(r.evaluate||et).source+"|$","g"),function(t,r,e,a,f){return o+=n.slice(u,f).replace(ot,i),r&&(o+="'+_['escape']("+r+")+'"),a&&(o+="';"+a+";__p+='"),e&&(o+="'+((__t=("+e+"))==null?'':__t)+'"),u=f+t.length,t
}),o+="';\n",e||(e="obj",o="with("+e+"||{}){"+o+"}"),o="function("+e+"){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}"+o+"return __p}";try{var a=Function("_","return "+o)(f)}catch(c){throw c.source=o,c}return t?a(t):(a.source=o,a)},f.unescape=function(n){return n==X?"":(n+"").replace(rt,g)},f.uniqueId=function(n){var t=++Z+"";return n?n+t:t},f.all=N,f.any=$,f.detect=B,f.findWhere=function(n,t){return I(n,t,Q)},f.foldl=M,f.foldr=T,f.include=S,f.inject=M,f.first=C,f.last=function(n,t,r){if(n){var e=0,u=n.length;
if(typeof t!="number"&&t!=X){var o=u;for(t=J(t,r);o--&&t(n[o],o,n);)e++}else if(e=t,e==X||r)return n[u-1];return zt.call(n,Tt(0,u-e))}},f.take=C,f.head=C,f.VERSION="1.3.1",L(f),f.prototype.chain=function(){return this.__chain__=Q,this},f.prototype.value=function(){return this.__wrapped__},F("pop push reverse shift sort splice unshift".split(" "),function(n){var t=dt[n];f.prototype[n]=function(){var n=this.__wrapped__;return t.apply(n,arguments),!Pt.spliceObjects&&0===n.length&&delete n[0],this}}),F(["concat","join","slice"],function(n){var t=dt[n];
f.prototype[n]=function(){var n=t.apply(this.__wrapped__,arguments);return this.__chain__&&(n=new c(n),n.__chain__=Q),n}}),typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=f, define(function(){return f})):yt&&!yt.nodeType?mt?(mt.exports=f)._=f:yt._=f:n._=f}(this);
;!function(n){function r(n,r,t){t=(t||0)-1;for(var e=n.length;++t<e;)if(n[t]===r)return t;return-1}function t(n,r){var t=n.m,e=r.m;if(n=n.l,r=r.l,n!==r){if(n>r||typeof n=="undefined")return 1;if(n<r||typeof r=="undefined")return-1}return t<e?-1:1}function e(n){return"\\"+lr[n]}function u(){}function o(n){return n instanceof o?n:new i(n)}function i(n){this.__wrapped__=n}function a(n,r,t,e){function u(){var e=arguments,c=i?this:r;return o||(n=r[a]),t.length&&(e=e.length?(e=Rr.call(e),l?e.concat(t):t.concat(e)):t),this instanceof u?(c=f(n.prototype),e=n.apply(c,e),b(e)?e:c):n.apply(c,e)
}var o=d(n),i=!t,a=r;if(i){var l=e;t=r}else if(!o){if(!e)throw new TypeError;r=n}return u}function f(n){return b(n)?Or(n):{}}function l(n){return Ir[n]}function c(){var n=(n=o.indexOf)===z?r:n;return n}function p(n){return zr[n]}function s(n){return Ar.call(n)==nr}function v(n){if(!n)return n;for(var r=1,t=arguments.length;r<t;r++){var e=arguments[r];if(e)for(var u in e)n[u]=e[u]}return n}function g(n){if(!n)return n;for(var r=1,t=arguments.length;r<t;r++){var e=arguments[r];if(e)for(var u in e)null==n[u]&&(n[u]=e[u])
}return n}function h(n){var r=[];return Cr(n,function(n,t){d(n)&&r.push(t)}),r.sort()}function y(n){for(var r=-1,t=$r(n),e=t.length,u={};++r<e;){var o=t[r];u[n[o]]=o}return u}function m(n){if(!n)return!0;if(Tr(n)||w(n))return!n.length;for(var r in n)if(br.call(n,r))return!1;return!0}function _(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;var u=typeof n,i=typeof r;if(n===n&&(!n||"function"!=u&&"object"!=u)&&(!r||"function"!=i&&"object"!=i))return!1;if(null==n||null==r)return n===r;if(i=Ar.call(n),u=Ar.call(r),i!=u)return!1;
switch(i){case tr:case er:return+n==+r;case ur:return n!=+n?r!=+r:0==n?1/n==1/r:n==+r;case ir:case ar:return n==r+""}if(u=i==rr,!u){if(n instanceof o||r instanceof o)return _(n.__wrapped__||n,r.__wrapped__||r,t,e);if(i!=or)return!1;var i=n.constructor,a=r.constructor;if(i!=a&&(!d(i)||!(i instanceof i&&d(a)&&a instanceof a)))return!1}for(t||(t=[]),e||(e=[]),i=t.length;i--;)if(t[i]==n)return e[i]==r;var f=!0,l=0;if(t.push(n),e.push(r),u){if(l=r.length,f=l==n.length)for(;l--&&(f=_(n[l],r[l],t,e)););return f
}return Cr(r,function(r,u,o){return br.call(o,u)?(l++,!(f=br.call(n,u)&&_(n[u],r,t,e))&&K):void 0}),f&&Cr(n,function(n,r,t){return br.call(t,r)?!(f=-1<--l)&&K:void 0}),f}function d(n){return typeof n=="function"}function b(n){return!(!n||!fr[typeof n])}function j(n){return typeof n=="number"||Ar.call(n)==ur}function w(n){return typeof n=="string"||Ar.call(n)==ar}function A(n){for(var r=-1,t=$r(n),e=t.length,u=Array(e);++r<e;)u[r]=n[t[r]];return u}function x(n,r){var t=c(),e=n?n.length:0,u=!1;return e&&typeof e=="number"?u=-1<t(n,r):Pr(n,function(n){return(u=n===r)&&K
}),u}function O(n,r,t){var e=!0;r=W(r,t),t=-1;var u=n?n.length:0;if(typeof u=="number")for(;++t<u&&(e=!!r(n[t],t,n)););else Pr(n,function(n,t,u){return!(e=!!r(n,t,u))&&K});return e}function E(n,r,t){var e=[];r=W(r,t),t=-1;var u=n?n.length:0;if(typeof u=="number")for(;++t<u;){var o=n[t];r(o,t,n)&&e.push(o)}else Pr(n,function(n,t,u){r(n,t,u)&&e.push(n)});return e}function S(n,r,t){r=W(r,t),t=-1;var e=n?n.length:0;if(typeof e!="number"){var u;return Pr(n,function(n,t,e){return r(n,t,e)?(u=n,K):void 0
}),u}for(;++t<e;){var o=n[t];if(r(o,t,n))return o}}function N(n,r,t){var e=-1,u=n?n.length:0;if(r=r&&typeof t=="undefined"?r:W(r,t),typeof u=="number")for(;++e<u&&r(n[e],e,n)!==K;);else Pr(n,r)}function B(n,r,t){var e=-1,u=n?n.length:0;if(r=W(r,t),typeof u=="number")for(var o=Array(u);++e<u;)o[e]=r(n[e],e,n);else o=[],Pr(n,function(n,t,u){o[++e]=r(n,t,u)});return o}function F(n,r,t){var e=-1/0,u=e,o=-1,i=n?n.length:0;if(r||typeof i!="number")r=W(r,t),N(n,function(n,t,o){t=r(n,t,o),t>e&&(e=t,u=n)});
else for(;++o<i;)t=n[o],t>u&&(u=t);return u}function k(n,r){var t=-1,e=n?n.length:0;if(typeof e=="number")for(var u=Array(e);++t<e;)u[t]=n[t][r];return u||B(n,r)}function q(n,r,t,e){if(!n)return t;var u=3>arguments.length;r=W(r,e,4);var o=-1,i=n.length;if(typeof i=="number")for(u&&(t=n[++o]);++o<i;)t=r(t,n[o],o,n);else Pr(n,function(n,e,o){t=u?(u=!1,n):r(t,n,e,o)});return t}function R(n,r,t,e){var u=n?n.length:0,o=3>arguments.length;if(typeof u!="number")var i=$r(n),u=i.length;return r=W(r,e,4),N(n,function(e,a,f){a=i?i[--u]:--u,t=o?(o=!1,n[a]):r(t,n[a],a,f)
}),t}function D(n,r,t){var e;r=W(r,t),t=-1;var u=n?n.length:0;if(typeof u=="number")for(;++t<u&&!(e=r(n[t],t,n)););else Pr(n,function(n,t,u){return(e=r(n,t,u))&&K});return!!e}function M(n,r,t){return t&&m(r)?null:(t?S:E)(n,r)}function T(n){for(var r=-1,t=c(),e=n.length,u=_r.apply(vr,Rr.call(arguments,1)),o=[];++r<e;){var i=n[r];0>t(u,i)&&o.push(i)}return o}function $(n,r,t){if(n){var e=0,u=n.length;if(typeof r!="number"&&null!=r){var o=-1;for(r=W(r,t);++o<u&&r(n[o],o,n);)e++}else if(e=r,null==e||t)return n[0];
return Rr.call(n,0,kr(Fr(0,e),u))}}function I(n,r){for(var t=-1,e=n?n.length:0,u=[];++t<e;){var o=n[t];Tr(o)?jr.apply(u,r?o:I(o)):u.push(o)}return u}function z(n,t,e){if(typeof e=="number"){var u=n?n.length:0;e=0>e?Fr(0,u+e):e||0}else if(e)return e=P(n,t),n[e]===t?e:-1;return n?r(n,t,e):-1}function C(n,r,t){if(typeof r!="number"&&null!=r){var e=0,u=-1,o=n?n.length:0;for(r=W(r,t);++u<o&&r(n[u],u,n);)e++}else e=null==r||t?1:Fr(0,r);return Rr.call(n,e)}function P(n,r,t,e){var u=0,o=n?n.length:u;for(t=t?W(t,e,1):G,r=t(r);u<o;)e=u+o>>>1,t(n[e])<r?u=e+1:o=e;
return u}function U(n,r,t,e){var u=-1,o=c(),i=n?n.length:0,a=[],f=a;for(typeof r!="boolean"&&null!=r&&(e=t,t=r,r=!1),null!=t&&(f=[],t=W(t,e));++u<i;){e=n[u];var l=t?t(e,u,n):e;(r?!u||f[f.length-1]!==l:0>o(f,l))&&(t&&f.push(l),a.push(e))}return a}function V(n,r){return Mr.fastBind||xr&&2<arguments.length?xr.call.apply(xr,arguments):a(n,r,Rr.call(arguments,2))}function W(n,r,t){if(null==n)return G;var e=typeof n;if("function"!=e){if("object"!=e)return function(r){return r[n]};var u=$r(n);return function(r){for(var t=u.length,e=!1;t--&&(e=r[u[t]]===n[u[t]]););return e
}}return typeof r=="undefined"?n:1===t?function(t){return n.call(r,t)}:2===t?function(t,e){return n.call(r,t,e)}:4===t?function(t,e,u,o){return n.call(r,t,e,u,o)}:function(t,e,u){return n.call(r,t,e,u)}}function G(n){return n}function H(n){N(h(n),function(r){var t=o[r]=n[r];o.prototype[r]=function(){var n=[this.__wrapped__];return jr.apply(n,arguments),n=t.apply(o,n),this.__chain__&&(n=new i(n),n.__chain__=!0),n}})}var J=0,K={},L=+new Date+"",Q=/&(?:amp|lt|gt|quot|#39);/g,X=/($^)/,Y=/[&<>"']/g,Z=/['\n\r\t\u2028\u2029\\]/g,nr="[object Arguments]",rr="[object Array]",tr="[object Boolean]",er="[object Date]",ur="[object Number]",or="[object Object]",ir="[object RegExp]",ar="[object String]",fr={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},lr={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},cr=fr[typeof exports]&&exports,pr=fr[typeof module]&&module&&module.exports==cr&&module,sr=fr[typeof global]&&global;
!sr||sr.global!==sr&&sr.window!==sr||(n=sr);var vr=[],sr=Object.prototype,gr=n._,hr=RegExp("^"+(sr.valueOf+"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),yr=Math.ceil,mr=n.clearTimeout,_r=vr.concat,dr=Math.floor,br=sr.hasOwnProperty,jr=vr.push,wr=n.setTimeout,Ar=sr.toString,xr=hr.test(xr=Ar.bind)&&xr,Or=hr.test(Or=Object.create)&&Or,Er=hr.test(Er=Array.isArray)&&Er,Sr=n.isFinite,Nr=n.isNaN,Br=hr.test(Br=Object.keys)&&Br,Fr=Math.max,kr=Math.min,qr=Math.random,Rr=vr.slice,sr=hr.test(n.attachEvent),Dr=xr&&!/\n|true/.test(xr+sr);
i.prototype=o.prototype;var Mr={};!function(){var n={0:1,length:1};Mr.fastBind=xr&&!Dr,Mr.spliceObjects=(vr.splice.call(n,0,1),!n[0])}(1),o.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},Or||(f=function(n){if(b(n)){u.prototype=n;var r=new u;u.prototype=null}return r||{}}),s(arguments)||(s=function(n){return n?br.call(n,"callee"):!1});var Tr=Er||function(n){return n?typeof n=="object"&&Ar.call(n)==rr:!1},Er=function(n){var r,t=[];
if(!n||!fr[typeof n])return t;for(r in n)br.call(n,r)&&t.push(r);return t},$r=Br?function(n){return b(n)?Br(n):[]}:Er,Ir={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},zr=y(Ir),Cr=function(n,r){var t;if(!n||!fr[typeof n])return n;for(t in n)if(r(n[t],t,n)===K)break;return n},Pr=function(n,r){var t;if(!n||!fr[typeof n])return n;for(t in n)if(br.call(n,t)&&r(n[t],t,n)===K)break;return n};d(/x/)&&(d=function(n){return typeof n=="function"&&"[object Function]"==Ar.call(n)}),o.after=function(n,r){return 1>n?r():function(){return 1>--n?r.apply(this,arguments):void 0
}},o.bind=V,o.bindAll=function(n){for(var r=1<arguments.length?_r.apply(vr,Rr.call(arguments,1)):h(n),t=-1,e=r.length;++t<e;){var u=r[t];n[u]=V(n[u],n)}return n},o.compact=function(n){for(var r=-1,t=n?n.length:0,e=[];++r<t;){var u=n[r];u&&e.push(u)}return e},o.compose=function(){var n=arguments;return function(){for(var r=arguments,t=n.length;t--;)r=[n[t].apply(this,r)];return r[0]}},o.countBy=function(n,r,t){var e={};return r=W(r,t),N(n,function(n,t,u){t=r(n,t,u)+"",br.call(e,t)?e[t]++:e[t]=1}),e
},o.debounce=function(n,r,t){function e(){a=null,t||(o=n.apply(i,u))}var u,o,i,a=null;return function(){var f=t&&!a;return u=arguments,i=this,mr(a),a=wr(e,r),f&&(o=n.apply(i,u)),o}},o.defaults=g,o.defer=function(n){var r=Rr.call(arguments,1);return wr(function(){n.apply(void 0,r)},1)},o.delay=function(n,r){var t=Rr.call(arguments,2);return wr(function(){n.apply(void 0,t)},r)},o.difference=T,o.filter=E,o.flatten=I,o.forEach=N,o.functions=h,o.groupBy=function(n,r,t){var e={};return r=W(r,t),N(n,function(n,t,u){t=r(n,t,u)+"",(br.call(e,t)?e[t]:e[t]=[]).push(n)
}),e},o.initial=function(n,r,t){if(!n)return[];var e=0,u=n.length;if(typeof r!="number"&&null!=r){var o=u;for(r=W(r,t);o--&&r(n[o],o,n);)e++}else e=null==r||t?1:r||e;return Rr.call(n,0,kr(Fr(0,u-e),u))},o.intersection=function(n){var r=arguments,t=r.length,e=-1,u=c(),o=n?n.length:0,i=[];n:for(;++e<o;){var a=n[e];if(0>u(i,a)){for(var f=t;--f;)if(0>u(r[f],a))continue n;i.push(a)}}return i},o.invert=y,o.invoke=function(n,r){var t=Rr.call(arguments,2),e=-1,u=typeof r=="function",o=n?n.length:0,i=Array(typeof o=="number"?o:0);
return N(n,function(n){i[++e]=(u?r:n[r]).apply(n,t)}),i},o.keys=$r,o.map=B,o.max=F,o.memoize=function(n,r){var t={};return function(){var e=L+(r?r.apply(this,arguments):arguments[0]);return br.call(t,e)?t[e]:t[e]=n.apply(this,arguments)}},o.min=function(n,r,t){var e=1/0,u=e,o=-1,i=n?n.length:0;if(r||typeof i!="number")r=W(r,t),N(n,function(n,t,o){t=r(n,t,o),t<e&&(e=t,u=n)});else for(;++o<i;)t=n[o],t<u&&(u=t);return u},o.omit=function(n){var r=c(),t=_r.apply(vr,Rr.call(arguments,1)),e={};return Cr(n,function(n,u){0>r(t,u)&&(e[u]=n)
}),e},o.once=function(n){var r,t;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},o.pairs=function(n){for(var r=-1,t=$r(n),e=t.length,u=Array(e);++r<e;){var o=t[r];u[r]=[o,n[o]]}return u},o.partial=function(n){return a(n,Rr.call(arguments,1))},o.pick=function(n){for(var r=-1,t=_r.apply(vr,Rr.call(arguments,1)),e=t.length,u={};++r<e;){var o=t[r];o in n&&(u[o]=n[o])}return u},o.pluck=k,o.range=function(n,r,t){n=+n||0,t=+t||1,null==r&&(r=n,n=0);var e=-1;r=Fr(0,yr((r-n)/t));for(var u=Array(r);++e<r;)u[e]=n,n+=t;
return u},o.reject=function(n,r,t){return r=W(r,t),E(n,function(n,t,e){return!r(n,t,e)})},o.rest=C,o.shuffle=function(n){var r=-1,t=n?n.length:0,e=Array(typeof t=="number"?t:0);return N(n,function(n){var t=dr(qr()*(++r+1));e[r]=e[t],e[t]=n}),e},o.sortBy=function(n,r,e){var u=-1,o=n?n.length:0,i=Array(typeof o=="number"?o:0);for(r=W(r,e),N(n,function(n,t,e){i[++u]={l:r(n,t,e),m:u,n:n}}),o=i.length,i.sort(t);o--;)i[o]=i[o].n;return i},o.tap=function(n,r){return r(n),n},o.throttle=function(n,r){function t(){i=new Date,a=null,u=n.apply(o,e)
}var e,u,o,i=0,a=null;return function(){var f=new Date,l=r-(f-i);return e=arguments,o=this,0<l?a||(a=wr(t,l)):(mr(a),a=null,i=f,u=n.apply(o,e)),u}},o.times=function(n,r,t){for(var e=-1,u=Array(-1<n?n:0);++e<n;)u[e]=r.call(t,e);return u},o.toArray=function(n){return Tr(n)?Rr.call(n):n&&typeof n.length=="number"?B(n):A(n)},o.union=function(n){return Tr(n)||(arguments[0]=n?Rr.call(n):vr),U(_r.apply(vr,arguments))},o.uniq=U,o.values=A,o.where=M,o.without=function(n){return T(n,Rr.call(arguments,1))},o.wrap=function(n,r){return function(){var t=[n];
return jr.apply(t,arguments),r.apply(this,t)}},o.zip=function(n){for(var r=-1,t=n?F(k(arguments,"length")):0,e=Array(0>t?0:t);++r<t;)e[r]=k(arguments,r);return e},o.collect=B,o.drop=C,o.each=N,o.extend=v,o.methods=h,o.object=function(n,r){for(var t=-1,e=n?n.length:0,u={};++t<e;){var o=n[t];r?u[o]=r[t]:u[o[0]]=o[1]}return u},o.select=E,o.tail=C,o.unique=U,o.chain=function(n){return n=new i(n),n.__chain__=!0,n},o.clone=function(n){return b(n)?Tr(n)?Rr.call(n):v({},n):n},o.contains=x,o.escape=function(n){return null==n?"":(n+"").replace(Y,l)
},o.every=O,o.find=S,o.has=function(n,r){return n?br.call(n,r):!1},o.identity=G,o.indexOf=z,o.isArguments=s,o.isArray=Tr,o.isBoolean=function(n){return true===n||false===n||Ar.call(n)==tr},o.isDate=function(n){return n?typeof n=="object"&&Ar.call(n)==er:!1},o.isElement=function(n){return n?1===n.nodeType:!1},o.isEmpty=m,o.isEqual=_,o.isFinite=function(n){return Sr(n)&&!Nr(parseFloat(n))},o.isFunction=d,o.isNaN=function(n){return j(n)&&n!=+n},o.isNull=function(n){return null===n},o.isNumber=j,o.isObject=b,o.isRegExp=function(n){return!(!n||!fr[typeof n])&&Ar.call(n)==ir
},o.isString=w,o.isUndefined=function(n){return typeof n=="undefined"},o.lastIndexOf=function(n,r,t){var e=n?n.length:0;for(typeof t=="number"&&(e=(0>t?Fr(0,e+t):kr(t,e-1))+1);e--;)if(n[e]===r)return e;return-1},o.mixin=H,o.noConflict=function(){return n._=gr,this},o.random=function(n,r){null==n&&null==r&&(r=1),n=+n||0,null==r?(r=n,n=0):r=+r||0;var t=qr();return n%1||r%1?n+kr(t*(r-n+parseFloat("1e-"+((t+"").length-1))),r):n+dr(t*(r-n+1))},o.reduce=q,o.reduceRight=R,o.result=function(n,r){var t=n?n[r]:null;
return d(t)?n[r]():t},o.size=function(n){var r=n?n.length:0;return typeof r=="number"?r:$r(n).length},o.some=D,o.sortedIndex=P,o.template=function(n,r,t){var u=o.templateSettings;n||(n=""),t=g({},t,u);var i=0,a="__p+='",u=t.variable;n.replace(RegExp((t.escape||X).source+"|"+(t.interpolate||X).source+"|"+(t.evaluate||X).source+"|$","g"),function(r,t,u,o,f){return a+=n.slice(i,f).replace(Z,e),t&&(a+="'+_['escape']("+t+")+'"),o&&(a+="';"+o+";__p+='"),u&&(a+="'+((__t=("+u+"))==null?'':__t)+'"),i=f+r.length,r
}),a+="';\n",u||(u="obj",a="with("+u+"||{}){"+a+"}"),a="function("+u+"){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}"+a+"return __p}";try{var f=Function("_","return "+a)(o)}catch(l){throw l.source=a,l}return r?f(r):(f.source=a,f)},o.unescape=function(n){return null==n?"":(n+"").replace(Q,p)},o.uniqueId=function(n){var r=++J+"";return n?n+r:r},o.all=O,o.any=D,o.detect=S,o.findWhere=function(n,r){return M(n,r,!0)},o.foldl=q,o.foldr=R,o.include=x,o.inject=q,o.first=$,o.last=function(n,r,t){if(n){var e=0,u=n.length;
if(typeof r!="number"&&null!=r){var o=u;for(r=W(r,t);o--&&r(n[o],o,n);)e++}else if(e=r,null==e||t)return n[u-1];return Rr.call(n,Fr(0,u-e))}},o.take=$,o.head=$,H(o),o.VERSION="1.3.1",o.prototype.chain=function(){return this.__chain__=!0,this},o.prototype.value=function(){return this.__wrapped__},N("pop push reverse shift sort splice unshift".split(" "),function(n){var r=vr[n];o.prototype[n]=function(){var n=this.__wrapped__;return r.apply(n,arguments),!Mr.spliceObjects&&0===n.length&&delete n[0],this
}}),N(["concat","join","slice"],function(n){var r=vr[n];o.prototype[n]=function(){var n=r.apply(this.__wrapped__,arguments);return this.__chain__&&(n=new i(n),n.__chain__=!0),n}}),typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=o, define(function(){return o})):cr&&!cr.nodeType?pr?(pr.exports=o)._=o:cr._=o:n._=o}(this);