Simplify _.debounce and _.throttle for the underscore build.

Former-commit-id: 56dc526cf71130084651d06b8caadce573471131
This commit is contained in:
John-David Dalton
2013-04-16 01:52:47 -07:00
parent 562b4eb531
commit c3ac172960
3 changed files with 104 additions and 60 deletions

View File

@@ -2059,6 +2059,36 @@
'}'
].join('\n'));
// replace `_.debounce`
source = replaceFunction(source, 'debounce', [
'function debounce(func, wait, immediate) {',
' var args,',
' result,',
' thisArg,',
' timeoutId;',
'',
' function delayed() {',
' timeoutId = null;',
' if (!immediate) {',
' result = func.apply(thisArg, args);',
' }',
' }',
' return function() {',
' var isImmediate = immediate && !timeoutId;',
' args = arguments;',
' thisArg = this;',
'',
' clearTimeout(timeoutId);',
' timeoutId = setTimeout(delayed, wait);',
'',
' if (isImmediate) {',
' result = func.apply(thisArg, args);',
' }',
' return result;',
' };',
'}'
].join('\n'));
// replace `_.defaults`
source = replaceFunction(source, 'defaults', [
'function defaults(object) {',
@@ -2374,6 +2404,41 @@
'}'
].join('\n'));
// replace `_.throttle`
source = replaceFunction(source, 'throttle', [
'function throttle(func, wait) {',
' var args,',
' result,',
' thisArg,',
' timeoutId,',
' lastCalled = 0;',
'',
' function trailingCall() {',
' lastCalled = new Date;',
' timeoutId = null;',
' result = func.apply(thisArg, args);',
' }',
' return function() {',
' var now = new Date,',
' remaining = wait - (now - lastCalled);',
'',
' args = arguments;',
' thisArg = this;',
'',
' if (remaining <= 0) {',
' clearTimeout(timeoutId);',
' timeoutId = null;',
' lastCalled = now;',
' result = func.apply(thisArg, args);',
' }',
' else if (!timeoutId) {',
' timeoutId = setTimeout(trailingCall, remaining);',
' }',
' return result;',
' };',
'}'
].join('\n'));
// replace `_.times`
source = replaceFunction(source, 'times', [
'function times(n, callback, thisArg) {',

View File

@@ -3482,35 +3482,27 @@
* var lazyLayout = _.debounce(calculateLayout, 300);
* jQuery(window).on('resize', lazyLayout);
*/
function debounce(func, wait, options) {
function debounce(func, wait, immediate) {
var args,
result,
thisArg,
timeoutId,
trailing = true;
timeoutId;
function delayed() {
timeoutId = null;
if (trailing) {
if (!immediate) {
result = func.apply(thisArg, args);
}
}
if (options === true) {
var leading = true;
trailing = false;
} else if (options && objectTypes[typeof options]) {
leading = options.leading;
trailing = 'trailing' in options ? options.trailing : trailing;
}
return function() {
var isLeading = leading && !timeoutId;
var isImmediate = immediate && !timeoutId;
args = arguments;
thisArg = this;
clearTimeout(timeoutId);
timeoutId = setTimeout(delayed, wait);
if (isLeading) {
if (isImmediate) {
result = func.apply(thisArg, args);
}
return result;
@@ -3667,35 +3659,22 @@
* var throttled = _.throttle(updatePosition, 100);
* jQuery(window).on('scroll', throttled);
*/
function throttle(func, wait, options) {
function throttle(func, wait) {
var args,
result,
thisArg,
timeoutId,
lastCalled = 0,
leading = true,
trailing = true;
lastCalled = 0;
function trailingCall() {
lastCalled = new Date;
timeoutId = null;
if (trailing) {
result = func.apply(thisArg, args);
}
}
if (options === false) {
leading = false;
} else if (options && objectTypes[typeof options]) {
leading = 'leading' in options ? options.leading : leading;
trailing = 'trailing' in options ? options.trailing : trailing;
result = func.apply(thisArg, args);
}
return function() {
var now = new Date;
if (!timeoutId && !leading) {
lastCalled = now;
}
var remaining = wait - (now - lastCalled);
var now = new Date,
remaining = wait - (now - lastCalled);
args = arguments;
thisArg = this;

View File

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