From 7aa66d199e6e806c405a920e7f1e041862c14880 Mon Sep 17 00:00:00 2001 From: liuwu <975499773@qq.com> Date: Fri, 20 Oct 2023 10:52:35 +0800 Subject: [PATCH] V1.0 --- html/echarts_circle.html | 724 - html/ezuikit.js | 36107 ------------------------------------- html/index.html | 725 - html/index1.html | 60 +- html/server.js | 67 - script/ble.js | 47 +- script/index.js | 84 +- 7 files changed, 119 insertions(+), 37695 deletions(-) delete mode 100644 html/echarts_circle.html delete mode 100644 html/ezuikit.js delete mode 100644 html/index.html delete mode 100644 html/server.js diff --git a/html/echarts_circle.html b/html/echarts_circle.html deleted file mode 100644 index 10ee087..0000000 --- a/html/echarts_circle.html +++ /dev/null @@ -1,724 +0,0 @@ - \ No newline at end of file diff --git a/html/ezuikit.js b/html/ezuikit.js deleted file mode 100644 index edafa36..0000000 --- a/html/ezuikit.js +++ /dev/null @@ -1,36107 +0,0 @@ -// 'use strict'; - -// function _typeof(obj) { -// "@babel/helpers - typeof"; - -// return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { -// return typeof obj; -// } : function (obj) { -// return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; -// }, _typeof(obj); -// } - -// function _classCallCheck$1(instance, Constructor) { -// if (!(instance instanceof Constructor)) { -// throw new TypeError("Cannot call a class as a function"); -// } -// } - -// function _defineProperties(target, props) { -// for (var i = 0; i < props.length; i++) { -// var descriptor = props[i]; -// descriptor.enumerable = descriptor.enumerable || false; -// descriptor.configurable = true; -// if ("value" in descriptor) descriptor.writable = true; -// Object.defineProperty(target, descriptor.key, descriptor); -// } -// } - -// function _createClass$1(Constructor, protoProps, staticProps) { -// if (protoProps) _defineProperties(Constructor.prototype, protoProps); -// if (staticProps) _defineProperties(Constructor, staticProps); -// Object.defineProperty(Constructor, "prototype", { -// writable: false -// }); -// return Constructor; -// } - -// function _defineProperty(obj, key, value) { -// if (key in obj) { -// Object.defineProperty(obj, key, { -// value: value, -// enumerable: true, -// configurable: true, -// writable: true -// }); -// } else { -// obj[key] = value; -// } - -// return obj; -// } - -// var Core = /*#__PURE__*/function () { -// function Core(x, y) { -// _classCallCheck$1(this, Core); - -// this.coreX = x; -// this.coreY = y; -// } - -// _createClass$1(Core, [{ -// key: "toString", -// value: function toString() { -// return "".concat(this.coreX, "-").concat(this.coreY); -// } -// }]); - -// return Core; -// }(); - -// // eslint-disable-next-line no-extend-native -// Date.prototype.Format = function (fmt) { -// var o = { -// "M+": this.getMonth() + 1, -// "d+": this.getDate(), -// "h+": this.getHours(), -// "m+": this.getMinutes(), -// "s+": this.getSeconds(), -// "q+": Math.floor((this.getMonth() + 3) / 3), -// "S": this.getMilliseconds() -// }; - -// if (/(y+)/.test(fmt)) { -// fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); -// } - -// for (var k in o) { -// if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); -// } - -// return fmt; -// }; // 加载js - - -// var addJs = function addJs(filepath, callback, isReadyFun) { -// var headerScript = document.getElementsByTagName('head')[0].getElementsByTagName("script"); -// var isReady = false; - -// if (isReadyFun) { -// isReady = isReadyFun(); -// } else { -// for (var i = 0; i < headerScript.length; i++) { -// if (headerScript[i].getAttribute("src") == filepath) { -// isReady = true; -// callback(); -// } -// } -// } - -// if (!isReady) { -// var oJs = document.createElement("script"); -// oJs.setAttribute("src", filepath); -// oJs.setAttribute("crossorigin", true); -// oJs.onload = callback; -// document.getElementsByTagName("head")[0].appendChild(oJs); -// } else { -// callback(); -// } -// }; -// var addCss = function addCss(filepath, callback) { -// var headerLink = document.getElementsByTagName('head')[0].getElementsByTagName("link"); -// var isReady = false; - -// for (var i = 0; i < headerLink.length; i++) { -// if (headerLink[i].getAttribute("href") == filepath) { -// isReady = true; -// } -// } - -// if (!isReady) { -// var oJs = document.createElement('link'); -// oJs.rel = 'stylesheet'; -// oJs.type = 'text/css'; -// oJs.href = filepath; -// oJs.onload = callback; -// document.getElementsByTagName("head")[0].appendChild(oJs); -// } -// }; -// var isPromise = function isPromise(obj) { -// return !!obj && (_typeof(obj) === 'object' || typeof obj === 'function') && typeof obj.then === 'function'; -// }; -// var getQueryString = function getQueryString(name, url) { -// var r = new RegExp("(\\?|#|&)" + name + "=(.*?)(#|&|$)"); -// var m = (url || window.location.href).match(r); -// return decodeURIComponent(m ? m[2] : ''); -// }; -// var insertAfter$1 = function insertAfter(newElement, targetElement) { -// var parent = targetElement.parentNode; - -// if (parent.lastChild == targetElement) { -// parent.appendChild(newElement); -// } else { -// parent.insertBefore(newElement, targetElement.nextSibling); -// } -// }; -// var requestFullScreen = function requestFullScreen(element) { -// console.log("requestFullScreen", document.getElementById(element)); -// var requestMethod = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullScreen; - -// if (requestMethod) { -// requestMethod.call(element); -// } else if (typeof window.ActiveXObject !== "undefined") { -// var wscript = new window.ActiveXObject("WScript.Shell"); - -// if (wscript !== null) { -// wscript.SendKeys("{F11}"); -// } -// } -// }; -// var requestMobileFullScreen = function requestMobileFullScreen(element) { -// var width = document.documentElement.clientWidth; -// var height = document.documentElement.clientHeight; -// var wrapper = element; -// var style = ""; -// style += "width:" + height + "px;"; // 注意旋转后的宽高切换 - -// style += "height:" + width + "px;"; -// style += "-webkit-transform: rotate(90.001deg); transform: rotate(90.001deg);"; // 注意旋转中点的处理 - -// style += "-webkit-transform-origin: " + width / 2 + "px " + width / 2 + "px;"; -// style += "transform-origin: " + width / 2 + "px " + width / 2 + "px;"; -// style += 'position: fixed;top: 0;left: 0;z-index:10'; -// wrapper.style.cssText = style; -// }; -// var requestFullScreenPromise = function requestFullScreenPromise(element) { -// requestFullScreen(element); -// var promise = new Promise(function (resolve, reject) { -// var timeInterval = setInterval(function () { -// var isFullScreen = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen; - -// if (isFullScreen) { -// clearInterval(timeInterval); -// return resolve(true); -// } -// }, 100); -// var timeOut = setTimeout(function () { -// var isFullScreen = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen; - -// if (!isFullScreen) { -// reject(false); -// } - -// clearTimeout(timeOut); -// }, 2000); -// }); -// return promise; -// }; -// var cancelMobileFullScreen = function cancelMobileFullScreen(element, width, height) { -// var style = ""; -// style += "width:" + width + "px;"; -// style += "height:" + height + "px;"; -// style += "-webkit-transform: none; transform: none;"; -// style += "-webkit-transform-origin: 0 0;"; -// style += "transform-origin: 0 0;"; -// element.style.cssText = style; -// }; -// var cancelFullScreen = function cancelFullScreen() { -// if (document.exitFullscreen) { -// document.exitFullscreen(); -// } else if (document.webkitCancelFullScreen) { -// document.webkitCancelFullScreen(); -// } else if (document.mozCancelFullScreen) { -// document.mozCancelFullScreen(); -// } -// }; -// var cancelFullScreenPromise = function cancelFullScreenPromise(element) { -// cancelFullScreen(); -// var promise = new Promise(function (resolve, reject) { -// var timeInterval = setInterval(function () { -// var isFullScreen = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen; - -// if (!isFullScreen) { -// clearInterval(timeInterval); -// return resolve(true); -// } -// }, 50); -// var timeOut = setTimeout(function () { -// var isFullScreen = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen; - -// if (isFullScreen) { -// reject(false); -// } - -// clearTimeout(timeOut); -// }, 2000); -// }); -// return promise; -// }; -// var matchEzopenUrl = function matchEzopenUrl(ezopenUrl) { -// var deviceSerial = ezopenUrl.split("/")[3]; -// var channelNo = ezopenUrl.split("/")[4].split(".")[0]; -// var validCode = ezopenUrl.split("/")[2].split("@").length === 2 ? ezopenUrl.split("/")[2].split("@")[0] : ""; -// var hd = ezopenUrl.indexOf('.hd') !== -1; -// var type = ezopenUrl.split("/")[4].split(".")[ezopenUrl.split("/")[4].split(".").length - 1].split("?")[0]; - -// if (type === 'rec' && ezopenUrl.indexOf(".cloud.rec") !== -1) { -// type = 'cloud.rec'; -// } - -// return { -// deviceSerial: deviceSerial, -// channelNo: channelNo, -// validCode: validCode, -// hd: hd, -// type: type -// }; -// }; - -// function isJSON(str) { -// if (typeof str === 'string') { -// try { -// var obj = JSON.parse(str); - -// if (_typeof(obj) === 'object' && obj) { -// return true; -// } - -// return false; -// } catch (e) { -// return false; -// } -// } - -// console.log('It is not a string!'); -// } - -// var request = function request(url, method, params, header, success, error) { -// var _url = url; -// var http_request = new XMLHttpRequest(); - -// http_request.onreadystatechange = function () { -// if (http_request.readyState == 4) { -// if (http_request.status == 200) { -// if (isJSON(http_request.responseText)) { -// var _data = JSON.parse(http_request.responseText); - -// success(_data); -// } else { -// success(http_request.responseText); -// } -// } -// } -// }; - -// http_request.open(method, _url, true); // http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - -// var data = new FormData(); - -// for (var i in params) { -// data.append(i, params[i]); -// } - -// http_request.send(data); -// }; // 增加防抖函数 - -// var debouncePromise = function debouncePromise(fn, delay) { -// var immdiate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; -// var timer = null; -// var isInvoke = false; -// return function _debounce() { -// var _this = this; - -// for (var _len = arguments.length, arg = new Array(_len), _key = 0; _key < _len; _key++) { -// arg[_key] = arguments[_key]; -// } - -// return new Promise(function (resolve, reject) { -// if (timer) { -// console.log("防抖, delay 后执行", timer, delay, fn); -// clearTimeout(timer); -// } // 双击执行2次 - - -// if (immdiate && !isInvoke) { -// console.log("防抖 第一次执行...", isInvoke, fn); -// isInvoke = true; -// fn.apply(_this, arg).then(function () { -// resolve(); -// })["catch"](function (err) { -// console.log("防抖,err", err); -// reject(); -// }); -// setTimeout(function () { -// isInvoke = false; -// }, delay); -// } else { -// if (isInvoke) { -// console.log("操作过于频繁,仅支持" + delay + "ms时间内切换一次"); -// reject({ -// code: -1, -// msg: "操作过于频繁,仅支持" + delay + "ms时间内切换一次" -// }); -// return false; -// } - -// timer = setTimeout(function () { -// console.log("防抖 执行...", fn); -// fn.apply(_this, arg).then(function () { -// resolve(); -// })["catch"](function (err) { -// console.log("防抖,err", err); -// reject(); -// }); -// isInvoke = false; -// }, delay); -// } -// }); -// }; -// }; - -// var HLS = /*#__PURE__*/function () { -// function HLS(videoId, url) { -// var _this = this; - -// _classCallCheck$1(this, HLS); - -// addJs("https://open.ys7.com/assets/ezuikit_v3.4/js/hls.js", function () { -// console.log("加载hls.min.js成功", window.Hls); -// console.log("isSupportHls", window.Hls.isSupported()); - -// if (window.Hls.isSupported()) { -// _this.initHLS(videoId, url); -// } -// }, function () { -// return !!window.Hls; -// }); -// } - -// _createClass$1(HLS, [{ -// key: "toString", -// value: function toString() { -// return "hls ".concat(this.coreX, "-").concat(this.coreY); -// } -// }, { -// key: "initHLS", -// value: function initHLS(videoId, hlsUrl) { -// var video = document.getElementById(videoId); -// var hls = new window.Hls({ -// defaultAudioCodec: 'mp4a.40.2' -// }); // 萤石设备默认使用 AAC LC 音频编码 - -// hls.loadSource(hlsUrl); -// hls.attachMedia(video); -// hls.on(window.Hls.Events.MANIFEST_PARSED, function () { -// video.play(); -// }); -// hls.on(window.Hls.Events.ERROR, function (event, data) { -// if (data.fatal) { -// switch (data.type) { -// case window.Hls.ErrorTypes.NETWORK_ERROR: -// // try to recover network error -// console.log("fatal network error encountered, try to recover"); -// hls.startLoad(); -// break; - -// case window.Hls.ErrorTypes.MEDIA_ERROR: -// console.log("fatal media error encountered, try to recover"); -// hls.recoverMediaError(); -// break; - -// default: -// // cannot recover -// hls.destroy(); -// break; -// } -// } -// }); -// this.hls = hls; -// this.video = video; -// this.hlsUrl = hlsUrl; -// } -// }, { -// key: "play", -// value: function play() { -// console.log("执行hls播放", this.video); -// this.hls.startLoad(); // this.video.src = this.hlsUrl; - -// this.video.play(); -// } -// }, { -// key: "stop", -// value: function stop() { -// // 通过暂停停止播放 -// // this.video.pause(); -// // this.video.src = ""; -// this.video.pause(); // 停止取流 - -// this.hls.stopLoad(); // this.hls.destroy(); -// } -// }]); - -// return HLS; -// }(); - -// var FLV = /*#__PURE__*/function () { -// function FLV(videoId, url) { -// var _this = this; - -// _classCallCheck$1(this, FLV); - -// addJs("https://open.ys7.com/sdk/js/2.0/js/flv.min.js", function () { -// console.log("加载flv.min.js成功", window.flvjs); -// console.log("isSupportFlv", window.flvjs.isSupported()); - -// if (window.flvjs.isSupported()) { -// _this.initFLV(videoId, url); -// } -// }); -// } - -// _createClass$1(FLV, [{ -// key: "toString", -// value: function toString() { -// return "Flv ".concat(this.coreX, "-").concat(this.coreY); -// } -// }, { -// key: "initFLV", -// value: function initFLV(videoId, flvUrl) { -// var video = document.getElementById(videoId); -// var hasControls = video.getAttribute('controls'); - -// if (!hasControls) { -// video.setAttribute('controls', true); -// } - -// var flvPlayer = window.flvjs.createPlayer({ -// type: 'flv', -// url: flvUrl, -// isLive: true -// }, { -// enableStashBuffer: true, -// stashInitialSize: 128, -// enableWorker: true -// }); -// flvPlayer.attachMediaElement(video); -// flvPlayer.load(); -// flvPlayer.play(); -// this.flvUrl = flvUrl; -// this.flv = flvPlayer; -// this.video = video; -// } -// }, { -// key: "play", -// value: function play() { -// console.log("执行flv播放", this.video); -// this.video.play(); -// } -// }, { -// key: "stop", -// value: function stop() { -// // 通过暂停停止播放 -// // this.video.pause(); -// // this.video.src = ""; -// this.video.pause(); // 停止取流 - -// this.flv.unload(); // this.hls.destroy(); -// } -// }]); - -// return FLV; -// }(); - -// var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - -// function createCommonjsModule(fn, module) { -// return module = { exports: {} }, fn(module, module.exports), module.exports; -// } - -// var lodash = createCommonjsModule(function (module, exports) { -// (function(){/** Used as a safe reference for `undefined` in pre-ES5 environments. */var undefined$1;/** Used as the semantic version number. */var VERSION='4.17.21';/** Used as the size to enable large array optimizations. */var LARGE_ARRAY_SIZE=200;/** Error message constants. */var CORE_ERROR_TEXT='Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',FUNC_ERROR_TEXT='Expected a function',INVALID_TEMPL_VAR_ERROR_TEXT='Invalid `variable` option passed into `_.template`';/** Used to stand-in for `undefined` hash values. */var HASH_UNDEFINED='__lodash_hash_undefined__';/** Used as the maximum memoize cache size. */var MAX_MEMOIZE_SIZE=500;/** Used as the internal argument placeholder. */var PLACEHOLDER='__lodash_placeholder__';/** Used to compose bitmasks for cloning. */var CLONE_DEEP_FLAG=1,CLONE_FLAT_FLAG=2,CLONE_SYMBOLS_FLAG=4;/** Used to compose bitmasks for value comparisons. */var COMPARE_PARTIAL_FLAG=1,COMPARE_UNORDERED_FLAG=2;/** Used to compose bitmasks for function metadata. */var WRAP_BIND_FLAG=1,WRAP_BIND_KEY_FLAG=2,WRAP_CURRY_BOUND_FLAG=4,WRAP_CURRY_FLAG=8,WRAP_CURRY_RIGHT_FLAG=16,WRAP_PARTIAL_FLAG=32,WRAP_PARTIAL_RIGHT_FLAG=64,WRAP_ARY_FLAG=128,WRAP_REARG_FLAG=256,WRAP_FLIP_FLAG=512;/** Used as default options for `_.truncate`. */var DEFAULT_TRUNC_LENGTH=30,DEFAULT_TRUNC_OMISSION='...';/** Used to detect hot functions by number of calls within a span of milliseconds. */var HOT_COUNT=800,HOT_SPAN=16;/** Used to indicate the type of lazy iteratees. */var LAZY_FILTER_FLAG=1,LAZY_MAP_FLAG=2,LAZY_WHILE_FLAG=3;/** Used as references for various `Number` constants. */var INFINITY=1/0,MAX_SAFE_INTEGER=9007199254740991,MAX_INTEGER=1.7976931348623157e+308,NAN=0/0;/** Used as references for the maximum length and index of an array. */var MAX_ARRAY_LENGTH=4294967295,MAX_ARRAY_INDEX=MAX_ARRAY_LENGTH-1,HALF_MAX_ARRAY_LENGTH=MAX_ARRAY_LENGTH>>>1;/** Used to associate wrap methods with their bit flags. */var wrapFlags=[['ary',WRAP_ARY_FLAG],['bind',WRAP_BIND_FLAG],['bindKey',WRAP_BIND_KEY_FLAG],['curry',WRAP_CURRY_FLAG],['curryRight',WRAP_CURRY_RIGHT_FLAG],['flip',WRAP_FLIP_FLAG],['partial',WRAP_PARTIAL_FLAG],['partialRight',WRAP_PARTIAL_RIGHT_FLAG],['rearg',WRAP_REARG_FLAG]];/** `Object#toString` result references. */var argsTag='[object Arguments]',arrayTag='[object Array]',asyncTag='[object AsyncFunction]',boolTag='[object Boolean]',dateTag='[object Date]',domExcTag='[object DOMException]',errorTag='[object Error]',funcTag='[object Function]',genTag='[object GeneratorFunction]',mapTag='[object Map]',numberTag='[object Number]',nullTag='[object Null]',objectTag='[object Object]',promiseTag='[object Promise]',proxyTag='[object Proxy]',regexpTag='[object RegExp]',setTag='[object Set]',stringTag='[object String]',symbolTag='[object Symbol]',undefinedTag='[object Undefined]',weakMapTag='[object WeakMap]',weakSetTag='[object WeakSet]';var arrayBufferTag='[object ArrayBuffer]',dataViewTag='[object DataView]',float32Tag='[object Float32Array]',float64Tag='[object Float64Array]',int8Tag='[object Int8Array]',int16Tag='[object Int16Array]',int32Tag='[object Int32Array]',uint8Tag='[object Uint8Array]',uint8ClampedTag='[object Uint8ClampedArray]',uint16Tag='[object Uint16Array]',uint32Tag='[object Uint32Array]';/** Used to match empty string literals in compiled template source. */var reEmptyStringLeading=/\b__p \+= '';/g,reEmptyStringMiddle=/\b(__p \+=) '' \+/g,reEmptyStringTrailing=/(__e\(.*?\)|\b__t\)) \+\n'';/g;/** Used to match HTML entities and HTML characters. */var reEscapedHtml=/&(?:amp|lt|gt|quot|#39);/g,reUnescapedHtml=/[&<>"']/g,reHasEscapedHtml=RegExp(reEscapedHtml.source),reHasUnescapedHtml=RegExp(reUnescapedHtml.source);/** Used to match template delimiters. */var reEscape=/<%-([\s\S]+?)%>/g,reEvaluate=/<%([\s\S]+?)%>/g,reInterpolate=/<%=([\s\S]+?)%>/g;/** Used to match property names within property paths. */var reIsDeepProp=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,reIsPlainProp=/^\w*$/,rePropName=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;/** -// * Used to match `RegExp` -// * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). -// */var reRegExpChar=/[\\^$.*+?()[\]{}|]/g,reHasRegExpChar=RegExp(reRegExpChar.source);/** Used to match leading whitespace. */var reTrimStart=/^\s+/;/** Used to match a single whitespace character. */var reWhitespace=/\s/;/** Used to match wrap detail comments. */var reWrapComment=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,reWrapDetails=/\{\n\/\* \[wrapped with (.+)\] \*/,reSplitDetails=/,? & /;/** Used to match words composed of alphanumeric characters. */var reAsciiWord=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;/** -// * Used to validate the `validate` option in `_.template` variable. -// * -// * Forbids characters which could potentially change the meaning of the function argument definition: -// * - "()," (modification of function parameters) -// * - "=" (default value) -// * - "[]{}" (destructuring of function parameters) -// * - "/" (beginning of a comment) -// * - whitespace -// */var reForbiddenIdentifierChars=/[()=,{}\[\]\/\s]/;/** Used to match backslashes in property paths. */var reEscapeChar=/\\(\\)?/g;/** -// * Used to match -// * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). -// */var reEsTemplate=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;/** Used to match `RegExp` flags from their coerced string values. */var reFlags=/\w*$/;/** Used to detect bad signed hexadecimal string values. */var reIsBadHex=/^[-+]0x[0-9a-f]+$/i;/** Used to detect binary string values. */var reIsBinary=/^0b[01]+$/i;/** Used to detect host constructors (Safari). */var reIsHostCtor=/^\[object .+?Constructor\]$/;/** Used to detect octal string values. */var reIsOctal=/^0o[0-7]+$/i;/** Used to detect unsigned integer values. */var reIsUint=/^(?:0|[1-9]\d*)$/;/** Used to match Latin Unicode letters (excluding mathematical operators). */var reLatin=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;/** Used to ensure capturing order of template delimiters. */var reNoMatch=/($^)/;/** Used to match unescaped characters in compiled string literals. */var reUnescapedString=/['\n\r\u2028\u2029\\]/g;/** Used to compose unicode character classes. */var rsAstralRange='\\ud800-\\udfff',rsComboMarksRange='\\u0300-\\u036f',reComboHalfMarksRange='\\ufe20-\\ufe2f',rsComboSymbolsRange='\\u20d0-\\u20ff',rsComboRange=rsComboMarksRange+reComboHalfMarksRange+rsComboSymbolsRange,rsDingbatRange='\\u2700-\\u27bf',rsLowerRange='a-z\\xdf-\\xf6\\xf8-\\xff',rsMathOpRange='\\xac\\xb1\\xd7\\xf7',rsNonCharRange='\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',rsPunctuationRange='\\u2000-\\u206f',rsSpaceRange=' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',rsUpperRange='A-Z\\xc0-\\xd6\\xd8-\\xde',rsVarRange='\\ufe0e\\ufe0f',rsBreakRange=rsMathOpRange+rsNonCharRange+rsPunctuationRange+rsSpaceRange;/** Used to compose unicode capture groups. */var rsApos="['\u2019]",rsAstral='['+rsAstralRange+']',rsBreak='['+rsBreakRange+']',rsCombo='['+rsComboRange+']',rsDigits='\\d+',rsDingbat='['+rsDingbatRange+']',rsLower='['+rsLowerRange+']',rsMisc='[^'+rsAstralRange+rsBreakRange+rsDigits+rsDingbatRange+rsLowerRange+rsUpperRange+']',rsFitz='\\ud83c[\\udffb-\\udfff]',rsModifier='(?:'+rsCombo+'|'+rsFitz+')',rsNonAstral='[^'+rsAstralRange+']',rsRegional='(?:\\ud83c[\\udde6-\\uddff]){2}',rsSurrPair='[\\ud800-\\udbff][\\udc00-\\udfff]',rsUpper='['+rsUpperRange+']',rsZWJ='\\u200d';/** Used to compose unicode regexes. */var rsMiscLower='(?:'+rsLower+'|'+rsMisc+')',rsMiscUpper='(?:'+rsUpper+'|'+rsMisc+')',rsOptContrLower='(?:'+rsApos+'(?:d|ll|m|re|s|t|ve))?',rsOptContrUpper='(?:'+rsApos+'(?:D|LL|M|RE|S|T|VE))?',reOptMod=rsModifier+'?',rsOptVar='['+rsVarRange+']?',rsOptJoin='(?:'+rsZWJ+'(?:'+[rsNonAstral,rsRegional,rsSurrPair].join('|')+')'+rsOptVar+reOptMod+')*',rsOrdLower='\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',rsOrdUpper='\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',rsSeq=rsOptVar+reOptMod+rsOptJoin,rsEmoji='(?:'+[rsDingbat,rsRegional,rsSurrPair].join('|')+')'+rsSeq,rsSymbol='(?:'+[rsNonAstral+rsCombo+'?',rsCombo,rsRegional,rsSurrPair,rsAstral].join('|')+')';/** Used to match apostrophes. */var reApos=RegExp(rsApos,'g');/** -// * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and -// * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). -// */var reComboMark=RegExp(rsCombo,'g');/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */var reUnicode=RegExp(rsFitz+'(?='+rsFitz+')|'+rsSymbol+rsSeq,'g');/** Used to match complex or compound words. */var reUnicodeWord=RegExp([rsUpper+'?'+rsLower+'+'+rsOptContrLower+'(?='+[rsBreak,rsUpper,'$'].join('|')+')',rsMiscUpper+'+'+rsOptContrUpper+'(?='+[rsBreak,rsUpper+rsMiscLower,'$'].join('|')+')',rsUpper+'?'+rsMiscLower+'+'+rsOptContrLower,rsUpper+'+'+rsOptContrUpper,rsOrdUpper,rsOrdLower,rsDigits,rsEmoji].join('|'),'g');/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */var reHasUnicode=RegExp('['+rsZWJ+rsAstralRange+rsComboRange+rsVarRange+']');/** Used to detect strings that need a more robust regexp to match words. */var reHasUnicodeWord=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;/** Used to assign default `context` object properties. */var contextProps=['Array','Buffer','DataView','Date','Error','Float32Array','Float64Array','Function','Int8Array','Int16Array','Int32Array','Map','Math','Object','Promise','RegExp','Set','String','Symbol','TypeError','Uint8Array','Uint8ClampedArray','Uint16Array','Uint32Array','WeakMap','_','clearTimeout','isFinite','parseInt','setTimeout'];/** Used to make template sourceURLs easier to identify. */var templateCounter=-1;/** Used to identify `toStringTag` values of typed arrays. */var typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=true;typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=false;/** Used to identify `toStringTag` values supported by `_.clone`. */var cloneableTags={};cloneableTags[argsTag]=cloneableTags[arrayTag]=cloneableTags[arrayBufferTag]=cloneableTags[dataViewTag]=cloneableTags[boolTag]=cloneableTags[dateTag]=cloneableTags[float32Tag]=cloneableTags[float64Tag]=cloneableTags[int8Tag]=cloneableTags[int16Tag]=cloneableTags[int32Tag]=cloneableTags[mapTag]=cloneableTags[numberTag]=cloneableTags[objectTag]=cloneableTags[regexpTag]=cloneableTags[setTag]=cloneableTags[stringTag]=cloneableTags[symbolTag]=cloneableTags[uint8Tag]=cloneableTags[uint8ClampedTag]=cloneableTags[uint16Tag]=cloneableTags[uint32Tag]=true;cloneableTags[errorTag]=cloneableTags[funcTag]=cloneableTags[weakMapTag]=false;/** Used to map Latin Unicode letters to basic Latin letters. */var deburredLetters={// Latin-1 Supplement block. -// '\xc0':'A','\xc1':'A','\xc2':'A','\xc3':'A','\xc4':'A','\xc5':'A','\xe0':'a','\xe1':'a','\xe2':'a','\xe3':'a','\xe4':'a','\xe5':'a','\xc7':'C','\xe7':'c','\xd0':'D','\xf0':'d','\xc8':'E','\xc9':'E','\xca':'E','\xcb':'E','\xe8':'e','\xe9':'e','\xea':'e','\xeb':'e','\xcc':'I','\xcd':'I','\xce':'I','\xcf':'I','\xec':'i','\xed':'i','\xee':'i','\xef':'i','\xd1':'N','\xf1':'n','\xd2':'O','\xd3':'O','\xd4':'O','\xd5':'O','\xd6':'O','\xd8':'O','\xf2':'o','\xf3':'o','\xf4':'o','\xf5':'o','\xf6':'o','\xf8':'o','\xd9':'U','\xda':'U','\xdb':'U','\xdc':'U','\xf9':'u','\xfa':'u','\xfb':'u','\xfc':'u','\xdd':'Y','\xfd':'y','\xff':'y','\xc6':'Ae','\xe6':'ae','\xde':'Th','\xfe':'th','\xdf':'ss',// Latin Extended-A block. -// '\u0100':'A','\u0102':'A','\u0104':'A','\u0101':'a','\u0103':'a','\u0105':'a','\u0106':'C','\u0108':'C','\u010a':'C','\u010c':'C','\u0107':'c','\u0109':'c','\u010b':'c','\u010d':'c','\u010e':'D','\u0110':'D','\u010f':'d','\u0111':'d','\u0112':'E','\u0114':'E','\u0116':'E','\u0118':'E','\u011a':'E','\u0113':'e','\u0115':'e','\u0117':'e','\u0119':'e','\u011b':'e','\u011c':'G','\u011e':'G','\u0120':'G','\u0122':'G','\u011d':'g','\u011f':'g','\u0121':'g','\u0123':'g','\u0124':'H','\u0126':'H','\u0125':'h','\u0127':'h','\u0128':'I','\u012a':'I','\u012c':'I','\u012e':'I','\u0130':'I','\u0129':'i','\u012b':'i','\u012d':'i','\u012f':'i','\u0131':'i','\u0134':'J','\u0135':'j','\u0136':'K','\u0137':'k','\u0138':'k','\u0139':'L','\u013b':'L','\u013d':'L','\u013f':'L','\u0141':'L','\u013a':'l','\u013c':'l','\u013e':'l','\u0140':'l','\u0142':'l','\u0143':'N','\u0145':'N','\u0147':'N','\u014a':'N','\u0144':'n','\u0146':'n','\u0148':'n','\u014b':'n','\u014c':'O','\u014e':'O','\u0150':'O','\u014d':'o','\u014f':'o','\u0151':'o','\u0154':'R','\u0156':'R','\u0158':'R','\u0155':'r','\u0157':'r','\u0159':'r','\u015a':'S','\u015c':'S','\u015e':'S','\u0160':'S','\u015b':'s','\u015d':'s','\u015f':'s','\u0161':'s','\u0162':'T','\u0164':'T','\u0166':'T','\u0163':'t','\u0165':'t','\u0167':'t','\u0168':'U','\u016a':'U','\u016c':'U','\u016e':'U','\u0170':'U','\u0172':'U','\u0169':'u','\u016b':'u','\u016d':'u','\u016f':'u','\u0171':'u','\u0173':'u','\u0174':'W','\u0175':'w','\u0176':'Y','\u0177':'y','\u0178':'Y','\u0179':'Z','\u017b':'Z','\u017d':'Z','\u017a':'z','\u017c':'z','\u017e':'z','\u0132':'IJ','\u0133':'ij','\u0152':'Oe','\u0153':'oe','\u0149':"'n",'\u017f':'s'};/** Used to map characters to HTML entities. */var htmlEscapes={'&':'&','<':'<','>':'>','"':'"',"'":'''};/** Used to map HTML entities to characters. */var htmlUnescapes={'&':'&','<':'<','>':'>','"':'"',''':"'"};/** Used to escape characters for inclusion in compiled string literals. */var stringEscapes={'\\':'\\',"'":"'",'\n':'n','\r':'r','\u2028':'u2028','\u2029':'u2029'};/** Built-in method references without a dependency on `root`. */var freeParseFloat=parseFloat,freeParseInt=parseInt;/** Detect free variable `global` from Node.js. */var freeGlobal=typeof commonjsGlobal=='object'&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal;/** Detect free variable `self`. */var freeSelf=typeof self=='object'&&self&&self.Object===Object&&self;/** Used as a reference to the global object. */var root=freeGlobal||freeSelf||Function('return this')();/** Detect free variable `exports`. */var freeExports=exports&&!exports.nodeType&&exports;/** Detect free variable `module`. */var freeModule=freeExports&&'object'=='object'&&module&&!module.nodeType&&module;/** Detect the popular CommonJS extension `module.exports`. */var moduleExports=freeModule&&freeModule.exports===freeExports;/** Detect free variable `process` from Node.js. */var freeProcess=moduleExports&&freeGlobal.process;/** Used to access faster Node.js helpers. */var nodeUtil=function(){try{// Use `util.types` for Node.js 10+. -// var types=freeModule&&freeModule.require&&freeModule.require('util').types;if(types){return types;}// Legacy `process.binding('util')` for Node.js < 10. -// return freeProcess&&freeProcess.binding&&freeProcess.binding('util');}catch(e){}}();/* Node.js helper references. */var nodeIsArrayBuffer=nodeUtil&&nodeUtil.isArrayBuffer,nodeIsDate=nodeUtil&&nodeUtil.isDate,nodeIsMap=nodeUtil&&nodeUtil.isMap,nodeIsRegExp=nodeUtil&&nodeUtil.isRegExp,nodeIsSet=nodeUtil&&nodeUtil.isSet,nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray;/*--------------------------------------------------------------------------*/ /** -// * A faster alternative to `Function#apply`, this function invokes `func` -// * with the `this` binding of `thisArg` and the arguments of `args`. -// * -// * @private -// * @param {Function} func The function to invoke. -// * @param {*} thisArg The `this` binding of `func`. -// * @param {Array} args The arguments to invoke `func` with. -// * @returns {*} Returns the result of `func`. -// */function apply(func,thisArg,args){switch(args.length){case 0:return func.call(thisArg);case 1:return func.call(thisArg,args[0]);case 2:return func.call(thisArg,args[0],args[1]);case 3:return func.call(thisArg,args[0],args[1],args[2]);}return func.apply(thisArg,args);}/** -// * A specialized version of `baseAggregator` for arrays. -// * -// * @private -// * @param {Array} [array] The array to iterate over. -// * @param {Function} setter The function to set `accumulator` values. -// * @param {Function} iteratee The iteratee to transform keys. -// * @param {Object} accumulator The initial aggregated object. -// * @returns {Function} Returns `accumulator`. -// */function arrayAggregator(array,setter,iteratee,accumulator){var index=-1,length=array==null?0:array.length;while(++index-1;}/** -// * This function is like `arrayIncludes` except that it accepts a comparator. -// * -// * @private -// * @param {Array} [array] The array to inspect. -// * @param {*} target The value to search for. -// * @param {Function} comparator The comparator invoked per element. -// * @returns {boolean} Returns `true` if `target` is found, else `false`. -// */function arrayIncludesWith(array,value,comparator){var index=-1,length=array==null?0:array.length;while(++index-1){}return index;}/** -// * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol -// * that is not found in the character symbols. -// * -// * @private -// * @param {Array} strSymbols The string symbols to inspect. -// * @param {Array} chrSymbols The character symbols to find. -// * @returns {number} Returns the index of the last unmatched string symbol. -// */function charsEndIndex(strSymbols,chrSymbols){var index=strSymbols.length;while(index--&&baseIndexOf(chrSymbols,strSymbols[index],0)>-1){}return index;}/** -// * Gets the number of `placeholder` occurrences in `array`. -// * -// * @private -// * @param {Array} array The array to inspect. -// * @param {*} placeholder The placeholder to search for. -// * @returns {number} Returns the placeholder count. -// */function countHolders(array,placeholder){var length=array.length,result=0;while(length--){if(array[length]===placeholder){++result;}}return result;}/** -// * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A -// * letters to basic Latin letters. -// * -// * @private -// * @param {string} letter The matched letter to deburr. -// * @returns {string} Returns the deburred letter. -// */var deburrLetter=basePropertyOf(deburredLetters);/** -// * Used by `_.escape` to convert characters to HTML entities. -// * -// * @private -// * @param {string} chr The matched character to escape. -// * @returns {string} Returns the escaped character. -// */var escapeHtmlChar=basePropertyOf(htmlEscapes);/** -// * Used by `_.template` to escape characters for inclusion in compiled string literals. -// * -// * @private -// * @param {string} chr The matched character to escape. -// * @returns {string} Returns the escaped character. -// */function escapeStringChar(chr){return '\\'+stringEscapes[chr];}/** -// * Gets the value at `key` of `object`. -// * -// * @private -// * @param {Object} [object] The object to query. -// * @param {string} key The key of the property to get. -// * @returns {*} Returns the property value. -// */function getValue(object,key){return object==null?undefined$1:object[key];}/** -// * Checks if `string` contains Unicode symbols. -// * -// * @private -// * @param {string} string The string to inspect. -// * @returns {boolean} Returns `true` if a symbol is found, else `false`. -// */function hasUnicode(string){return reHasUnicode.test(string);}/** -// * Checks if `string` contains a word composed of Unicode symbols. -// * -// * @private -// * @param {string} string The string to inspect. -// * @returns {boolean} Returns `true` if a word is found, else `false`. -// */function hasUnicodeWord(string){return reHasUnicodeWord.test(string);}/** -// * Converts `iterator` to an array. -// * -// * @private -// * @param {Object} iterator The iterator to convert. -// * @returns {Array} Returns the converted array. -// */function iteratorToArray(iterator){var data,result=[];while(!(data=iterator.next()).done){result.push(data.value);}return result;}/** -// * Converts `map` to its key-value pairs. -// * -// * @private -// * @param {Object} map The map to convert. -// * @returns {Array} Returns the key-value pairs. -// */function mapToArray(map){var index=-1,result=Array(map.size);map.forEach(function(value,key){result[++index]=[key,value];});return result;}/** -// * Creates a unary function that invokes `func` with its argument transformed. -// * -// * @private -// * @param {Function} func The function to wrap. -// * @param {Function} transform The argument transform. -// * @returns {Function} Returns the new function. -// */function overArg(func,transform){return function(arg){return func(transform(arg));};}/** -// * Replaces all `placeholder` elements in `array` with an internal placeholder -// * and returns an array of their indexes. -// * -// * @private -// * @param {Array} array The array to modify. -// * @param {*} placeholder The placeholder to replace. -// * @returns {Array} Returns the new array of placeholder indexes. -// */function replaceHolders(array,placeholder){var index=-1,length=array.length,resIndex=0,result=[];while(++index true -// * _.isFunction(_.bar); -// * // => false -// * -// * lodash.isFunction(lodash.foo); -// * // => false -// * lodash.isFunction(lodash.bar); -// * // => true -// * -// * // Create a suped-up `defer` in Node.js. -// * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; -// */var runInContext=function runInContext(context){context=context==null?root:_.defaults(root.Object(),context,_.pick(root,contextProps));/** Built-in constructor references. */var Array=context.Array,Date=context.Date,Error=context.Error,Function=context.Function,Math=context.Math,Object=context.Object,RegExp=context.RegExp,String=context.String,TypeError=context.TypeError;/** Used for built-in method references. */var arrayProto=Array.prototype,funcProto=Function.prototype,objectProto=Object.prototype;/** Used to detect overreaching core-js shims. */var coreJsData=context['__core-js_shared__'];/** Used to resolve the decompiled source of functions. */var funcToString=funcProto.toString;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** Used to generate unique IDs. */var idCounter=0;/** Used to detect methods masquerading as native. */var maskSrcKey=function(){var uid=/[^.]+$/.exec(coreJsData&&coreJsData.keys&&coreJsData.keys.IE_PROTO||'');return uid?'Symbol(src)_1.'+uid:'';}();/** -// * Used to resolve the -// * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) -// * of values. -// */var nativeObjectToString=objectProto.toString;/** Used to infer the `Object` constructor. */var objectCtorString=funcToString.call(Object);/** Used to restore the original `_` reference in `_.noConflict`. */var oldDash=root._;/** Used to detect if a method is native. */var reIsNative=RegExp('^'+funcToString.call(hasOwnProperty).replace(reRegExpChar,'\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,'$1.*?')+'$');/** Built-in value references. */var Buffer=moduleExports?context.Buffer:undefined$1,Symbol=context.Symbol,Uint8Array=context.Uint8Array,allocUnsafe=Buffer?Buffer.allocUnsafe:undefined$1,getPrototype=overArg(Object.getPrototypeOf,Object),objectCreate=Object.create,propertyIsEnumerable=objectProto.propertyIsEnumerable,splice=arrayProto.splice,spreadableSymbol=Symbol?Symbol.isConcatSpreadable:undefined$1,symIterator=Symbol?Symbol.iterator:undefined$1,symToStringTag=Symbol?Symbol.toStringTag:undefined$1;var defineProperty=function(){try{var func=getNative(Object,'defineProperty');func({},'',{});return func;}catch(e){}}();/** Mocked built-ins. */var ctxClearTimeout=context.clearTimeout!==root.clearTimeout&&context.clearTimeout,ctxNow=Date&&Date.now!==root.Date.now&&Date.now,ctxSetTimeout=context.setTimeout!==root.setTimeout&&context.setTimeout;/* Built-in method references for those with the same name as other `lodash` methods. */var nativeCeil=Math.ceil,nativeFloor=Math.floor,nativeGetSymbols=Object.getOwnPropertySymbols,nativeIsBuffer=Buffer?Buffer.isBuffer:undefined$1,nativeIsFinite=context.isFinite,nativeJoin=arrayProto.join,nativeKeys=overArg(Object.keys,Object),nativeMax=Math.max,nativeMin=Math.min,nativeNow=Date.now,nativeParseInt=context.parseInt,nativeRandom=Math.random,nativeReverse=arrayProto.reverse;/* Built-in method references that are verified to be native. */var DataView=getNative(context,'DataView'),Map=getNative(context,'Map'),Promise=getNative(context,'Promise'),Set=getNative(context,'Set'),WeakMap=getNative(context,'WeakMap'),nativeCreate=getNative(Object,'create');/** Used to store function metadata. */var metaMap=WeakMap&&new WeakMap();/** Used to lookup unminified function names. */var realNames={};/** Used to detect maps, sets, and weakmaps. */var dataViewCtorString=toSource(DataView),mapCtorString=toSource(Map),promiseCtorString=toSource(Promise),setCtorString=toSource(Set),weakMapCtorString=toSource(WeakMap);/** Used to convert symbols to primitives and strings. */var symbolProto=Symbol?Symbol.prototype:undefined$1,symbolValueOf=symbolProto?symbolProto.valueOf:undefined$1,symbolToString=symbolProto?symbolProto.toString:undefined$1;/*------------------------------------------------------------------------*/ /** -// * Creates a `lodash` object which wraps `value` to enable implicit method -// * chain sequences. Methods that operate on and return arrays, collections, -// * and functions can be chained together. Methods that retrieve a single value -// * or may return a primitive value will automatically end the chain sequence -// * and return the unwrapped value. Otherwise, the value must be unwrapped -// * with `_#value`. -// * -// * Explicit chain sequences, which must be unwrapped with `_#value`, may be -// * enabled using `_.chain`. -// * -// * The execution of chained methods is lazy, that is, it's deferred until -// * `_#value` is implicitly or explicitly called. -// * -// * Lazy evaluation allows several methods to support shortcut fusion. -// * Shortcut fusion is an optimization to merge iteratee calls; this avoids -// * the creation of intermediate arrays and can greatly reduce the number of -// * iteratee executions. Sections of a chain sequence qualify for shortcut -// * fusion if the section is applied to an array and iteratees accept only -// * one argument. The heuristic for whether a section qualifies for shortcut -// * fusion is subject to change. -// * -// * Chaining is supported in custom builds as long as the `_#value` method is -// * directly or indirectly included in the build. -// * -// * In addition to lodash methods, wrappers have `Array` and `String` methods. -// * -// * The wrapper `Array` methods are: -// * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` -// * -// * The wrapper `String` methods are: -// * `replace` and `split` -// * -// * The wrapper methods that support shortcut fusion are: -// * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, -// * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, -// * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` -// * -// * The chainable wrapper methods are: -// * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, -// * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, -// * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, -// * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, -// * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, -// * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, -// * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, -// * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, -// * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, -// * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, -// * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, -// * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, -// * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, -// * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, -// * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, -// * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, -// * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, -// * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, -// * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, -// * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, -// * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, -// * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, -// * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, -// * `zipObject`, `zipObjectDeep`, and `zipWith` -// * -// * The wrapper methods that are **not** chainable by default are: -// * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, -// * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, -// * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, -// * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, -// * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, -// * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, -// * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, -// * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, -// * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, -// * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, -// * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, -// * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, -// * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, -// * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, -// * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, -// * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, -// * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, -// * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, -// * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, -// * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, -// * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, -// * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, -// * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, -// * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, -// * `upperFirst`, `value`, and `words` -// * -// * @name _ -// * @constructor -// * @category Seq -// * @param {*} value The value to wrap in a `lodash` instance. -// * @returns {Object} Returns the new `lodash` wrapper instance. -// * @example -// * -// * function square(n) { -// * return n * n; -// * } -// * -// * var wrapped = _([1, 2, 3]); -// * -// * // Returns an unwrapped value. -// * wrapped.reduce(_.add); -// * // => 6 -// * -// * // Returns a wrapped value. -// * var squares = wrapped.map(square); -// * -// * _.isArray(squares); -// * // => false -// * -// * _.isArray(squares.value()); -// * // => true -// */function lodash(value){if(isObjectLike(value)&&!isArray(value)&&!(value instanceof LazyWrapper)){if(value instanceof LodashWrapper){return value;}if(hasOwnProperty.call(value,'__wrapped__')){return wrapperClone(value);}}return new LodashWrapper(value);}/** -// * The base implementation of `_.create` without support for assigning -// * properties to the created object. -// * -// * @private -// * @param {Object} proto The object to inherit from. -// * @returns {Object} Returns the new object. -// */var baseCreate=function(){function object(){}return function(proto){if(!isObject(proto)){return {};}if(objectCreate){return objectCreate(proto);}object.prototype=proto;var result=new object();object.prototype=undefined$1;return result;};}();/** -// * The function whose prototype chain sequence wrappers inherit from. -// * -// * @private -// */function baseLodash(){// No operation performed. -// }/** -// * The base constructor for creating `lodash` wrapper objects. -// * -// * @private -// * @param {*} value The value to wrap. -// * @param {boolean} [chainAll] Enable explicit method chain sequences. -// */function LodashWrapper(value,chainAll){this.__wrapped__=value;this.__actions__=[];this.__chain__=!!chainAll;this.__index__=0;this.__values__=undefined$1;}/** -// * By default, the template delimiters used by lodash are like those in -// * embedded Ruby (ERB) as well as ES2015 template strings. Change the -// * following template settings to use alternative delimiters. -// * -// * @static -// * @memberOf _ -// * @type {Object} -// */lodash.templateSettings={/** -// * Used to detect `data` property values to be HTML-escaped. -// * -// * @memberOf _.templateSettings -// * @type {RegExp} -// */'escape':reEscape,/** -// * Used to detect code to be evaluated. -// * -// * @memberOf _.templateSettings -// * @type {RegExp} -// */'evaluate':reEvaluate,/** -// * Used to detect `data` property values to inject. -// * -// * @memberOf _.templateSettings -// * @type {RegExp} -// */'interpolate':reInterpolate,/** -// * Used to reference the data object in the template text. -// * -// * @memberOf _.templateSettings -// * @type {string} -// */'variable':'',/** -// * Used to import variables into the compiled template. -// * -// * @memberOf _.templateSettings -// * @type {Object} -// */'imports':{/** -// * A reference to the `lodash` function. -// * -// * @memberOf _.templateSettings.imports -// * @type {Function} -// */'_':lodash}};// Ensure wrappers are instances of `baseLodash`. -// lodash.prototype=baseLodash.prototype;lodash.prototype.constructor=lodash;LodashWrapper.prototype=baseCreate(baseLodash.prototype);LodashWrapper.prototype.constructor=LodashWrapper;/*------------------------------------------------------------------------*/ /** -// * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. -// * -// * @private -// * @constructor -// * @param {*} value The value to wrap. -// */function LazyWrapper(value){this.__wrapped__=value;this.__actions__=[];this.__dir__=1;this.__filtered__=false;this.__iteratees__=[];this.__takeCount__=MAX_ARRAY_LENGTH;this.__views__=[];}/** -// * Creates a clone of the lazy wrapper object. -// * -// * @private -// * @name clone -// * @memberOf LazyWrapper -// * @returns {Object} Returns the cloned `LazyWrapper` object. -// */function lazyClone(){var result=new LazyWrapper(this.__wrapped__);result.__actions__=copyArray(this.__actions__);result.__dir__=this.__dir__;result.__filtered__=this.__filtered__;result.__iteratees__=copyArray(this.__iteratees__);result.__takeCount__=this.__takeCount__;result.__views__=copyArray(this.__views__);return result;}/** -// * Reverses the direction of lazy iteration. -// * -// * @private -// * @name reverse -// * @memberOf LazyWrapper -// * @returns {Object} Returns the new reversed `LazyWrapper` object. -// */function lazyReverse(){if(this.__filtered__){var result=new LazyWrapper(this);result.__dir__=-1;result.__filtered__=true;}else {result=this.clone();result.__dir__*=-1;}return result;}/** -// * Extracts the unwrapped value from its lazy wrapper. -// * -// * @private -// * @name value -// * @memberOf LazyWrapper -// * @returns {*} Returns the unwrapped value. -// */function lazyValue(){var array=this.__wrapped__.value(),dir=this.__dir__,isArr=isArray(array),isRight=dir<0,arrLength=isArr?array.length:0,view=getView(0,arrLength,this.__views__),start=view.start,end=view.end,length=end-start,index=isRight?end:start-1,iteratees=this.__iteratees__,iterLength=iteratees.length,resIndex=0,takeCount=nativeMin(length,this.__takeCount__);if(!isArr||!isRight&&arrLength==length&&takeCount==length){return baseWrapperValue(array,this.__actions__);}var result=[];outer:while(length--&&resIndex-1;}/** -// * Sets the list cache `key` to `value`. -// * -// * @private -// * @name set -// * @memberOf ListCache -// * @param {string} key The key of the value to set. -// * @param {*} value The value to set. -// * @returns {Object} Returns the list cache instance. -// */function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){++this.size;data.push([key,value]);}else {data[index][1]=value;}return this;}// Add methods to `ListCache`. -// ListCache.prototype.clear=listCacheClear;ListCache.prototype['delete']=listCacheDelete;ListCache.prototype.get=listCacheGet;ListCache.prototype.has=listCacheHas;ListCache.prototype.set=listCacheSet;/*------------------------------------------------------------------------*/ /** -// * Creates a map cache object to store key-value pairs. -// * -// * @private -// * @constructor -// * @param {Array} [entries] The key-value pairs to cache. -// */function MapCache(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index=lower?number:lower;}}return number;}/** -// * The base implementation of `_.clone` and `_.cloneDeep` which tracks -// * traversed objects. -// * -// * @private -// * @param {*} value The value to clone. -// * @param {boolean} bitmask The bitmask flags. -// * 1 - Deep clone -// * 2 - Flatten inherited properties -// * 4 - Clone symbols -// * @param {Function} [customizer] The function to customize cloning. -// * @param {string} [key] The key of `value`. -// * @param {Object} [object] The parent object of `value`. -// * @param {Object} [stack] Tracks traversed objects and their clone counterparts. -// * @returns {*} Returns the cloned value. -// */function baseClone(value,bitmask,customizer,key,object,stack){var result,isDeep=bitmask&CLONE_DEEP_FLAG,isFlat=bitmask&CLONE_FLAT_FLAG,isFull=bitmask&CLONE_SYMBOLS_FLAG;if(customizer){result=object?customizer(value,key,object,stack):customizer(value);}if(result!==undefined$1){return result;}if(!isObject(value)){return value;}var isArr=isArray(value);if(isArr){result=initCloneArray(value);if(!isDeep){return copyArray(value,result);}}else {var tag=getTag(value),isFunc=tag==funcTag||tag==genTag;if(isBuffer(value)){return cloneBuffer(value,isDeep);}if(tag==objectTag||tag==argsTag||isFunc&&!object){result=isFlat||isFunc?{}:initCloneObject(value);if(!isDeep){return isFlat?copySymbolsIn(value,baseAssignIn(result,value)):copySymbols(value,baseAssign(result,value));}}else {if(!cloneableTags[tag]){return object?value:{};}result=initCloneByTag(value,tag,isDeep);}}// Check for circular references and return its corresponding clone. -// stack||(stack=new Stack());var stacked=stack.get(value);if(stacked){return stacked;}stack.set(value,result);if(isSet(value)){value.forEach(function(subValue){result.add(baseClone(subValue,bitmask,customizer,subValue,value,stack));});}else if(isMap(value)){value.forEach(function(subValue,key){result.set(key,baseClone(subValue,bitmask,customizer,key,value,stack));});}var keysFunc=isFull?isFlat?getAllKeysIn:getAllKeys:isFlat?keysIn:keys;var props=isArr?undefined$1:keysFunc(value);arrayEach(props||value,function(subValue,key){if(props){key=subValue;subValue=value[key];}// Recursively populate clone (susceptible to call stack limits). -// assignValue(result,key,baseClone(subValue,bitmask,customizer,key,value,stack));});return result;}/** -// * The base implementation of `_.conforms` which doesn't clone `source`. -// * -// * @private -// * @param {Object} source The object of property predicates to conform to. -// * @returns {Function} Returns the new spec function. -// */function baseConforms(source){var props=keys(source);return function(object){return baseConformsTo(object,source,props);};}/** -// * The base implementation of `_.conformsTo` which accepts `props` to check. -// * -// * @private -// * @param {Object} object The object to inspect. -// * @param {Object} source The object of property predicates to conform to. -// * @returns {boolean} Returns `true` if `object` conforms, else `false`. -// */function baseConformsTo(object,source,props){var length=props.length;if(object==null){return !length;}object=Object(object);while(length--){var key=props[length],predicate=source[key],value=object[key];if(value===undefined$1&&!(key in object)||!predicate(value)){return false;}}return true;}/** -// * The base implementation of `_.delay` and `_.defer` which accepts `args` -// * to provide to `func`. -// * -// * @private -// * @param {Function} func The function to delay. -// * @param {number} wait The number of milliseconds to delay invocation. -// * @param {Array} args The arguments to provide to `func`. -// * @returns {number|Object} Returns the timer id or timeout object. -// */function baseDelay(func,wait,args){if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}return setTimeout(function(){func.apply(undefined$1,args);},wait);}/** -// * The base implementation of methods like `_.difference` without support -// * for excluding multiple arrays or iteratee shorthands. -// * -// * @private -// * @param {Array} array The array to inspect. -// * @param {Array} values The values to exclude. -// * @param {Function} [iteratee] The iteratee invoked per element. -// * @param {Function} [comparator] The comparator invoked per element. -// * @returns {Array} Returns the new array of filtered values. -// */function baseDifference(array,values,iteratee,comparator){var index=-1,includes=arrayIncludes,isCommon=true,length=array.length,result=[],valuesLength=values.length;if(!length){return result;}if(iteratee){values=arrayMap(values,baseUnary(iteratee));}if(comparator){includes=arrayIncludesWith;isCommon=false;}else if(values.length>=LARGE_ARRAY_SIZE){includes=cacheHas;isCommon=false;values=new SetCache(values);}outer:while(++indexlength?0:length+start;}end=end===undefined$1||end>length?length:toInteger(end);if(end<0){end+=length;}end=start>end?0:toLength(end);while(start0&&predicate(value)){if(depth>1){// Recursively flatten arrays (susceptible to call stack limits). -// baseFlatten(value,depth-1,predicate,isStrict,result);}else {arrayPush(result,value);}}else if(!isStrict){result[result.length]=value;}}return result;}/** -// * The base implementation of `baseForOwn` which iterates over `object` -// * properties returned by `keysFunc` and invokes `iteratee` for each property. -// * Iteratee functions may exit iteration early by explicitly returning `false`. -// * -// * @private -// * @param {Object} object The object to iterate over. -// * @param {Function} iteratee The function invoked per iteration. -// * @param {Function} keysFunc The function to get the keys of `object`. -// * @returns {Object} Returns `object`. -// */var baseFor=createBaseFor();/** -// * This function is like `baseFor` except that it iterates over properties -// * in the opposite order. -// * -// * @private -// * @param {Object} object The object to iterate over. -// * @param {Function} iteratee The function invoked per iteration. -// * @param {Function} keysFunc The function to get the keys of `object`. -// * @returns {Object} Returns `object`. -// */var baseForRight=createBaseFor(true);/** -// * The base implementation of `_.forOwn` without support for iteratee shorthands. -// * -// * @private -// * @param {Object} object The object to iterate over. -// * @param {Function} iteratee The function invoked per iteration. -// * @returns {Object} Returns `object`. -// */function baseForOwn(object,iteratee){return object&&baseFor(object,iteratee,keys);}/** -// * The base implementation of `_.forOwnRight` without support for iteratee shorthands. -// * -// * @private -// * @param {Object} object The object to iterate over. -// * @param {Function} iteratee The function invoked per iteration. -// * @returns {Object} Returns `object`. -// */function baseForOwnRight(object,iteratee){return object&&baseForRight(object,iteratee,keys);}/** -// * The base implementation of `_.functions` which creates an array of -// * `object` function property names filtered from `props`. -// * -// * @private -// * @param {Object} object The object to inspect. -// * @param {Array} props The property names to filter. -// * @returns {Array} Returns the function names. -// */function baseFunctions(object,props){return arrayFilter(props,function(key){return isFunction(object[key]);});}/** -// * The base implementation of `_.get` without support for default values. -// * -// * @private -// * @param {Object} object The object to query. -// * @param {Array|string} path The path of the property to get. -// * @returns {*} Returns the resolved value. -// */function baseGet(object,path){path=castPath(path,object);var index=0,length=path.length;while(object!=null&&indexother;}/** -// * The base implementation of `_.has` without support for deep paths. -// * -// * @private -// * @param {Object} [object] The object to query. -// * @param {Array|string} key The key to check. -// * @returns {boolean} Returns `true` if `key` exists, else `false`. -// */function baseHas(object,key){return object!=null&&hasOwnProperty.call(object,key);}/** -// * The base implementation of `_.hasIn` without support for deep paths. -// * -// * @private -// * @param {Object} [object] The object to query. -// * @param {Array|string} key The key to check. -// * @returns {boolean} Returns `true` if `key` exists, else `false`. -// */function baseHasIn(object,key){return object!=null&&key in Object(object);}/** -// * The base implementation of `_.inRange` which doesn't coerce arguments. -// * -// * @private -// * @param {number} number The number to check. -// * @param {number} start The start of the range. -// * @param {number} end The end of the range. -// * @returns {boolean} Returns `true` if `number` is in the range, else `false`. -// */function baseInRange(number,start,end){return number>=nativeMin(start,end)&&number=120&&array.length>=120)?new SetCache(othIndex&&array):undefined$1;}array=arrays[0];var index=-1,seen=caches[0];outer:while(++index-1){if(seen!==array){splice.call(seen,fromIndex,1);}splice.call(array,fromIndex,1);}}return array;}/** -// * The base implementation of `_.pullAt` without support for individual -// * indexes or capturing the removed elements. -// * -// * @private -// * @param {Array} array The array to modify. -// * @param {number[]} indexes The indexes of elements to remove. -// * @returns {Array} Returns `array`. -// */function basePullAt(array,indexes){var length=array?indexes.length:0,lastIndex=length-1;while(length--){var index=indexes[length];if(length==lastIndex||index!==previous){var previous=index;if(isIndex(index)){splice.call(array,index,1);}else {baseUnset(array,index);}}}return array;}/** -// * The base implementation of `_.random` without support for returning -// * floating-point numbers. -// * -// * @private -// * @param {number} lower The lower bound. -// * @param {number} upper The upper bound. -// * @returns {number} Returns the random number. -// */function baseRandom(lower,upper){return lower+nativeFloor(nativeRandom()*(upper-lower+1));}/** -// * The base implementation of `_.range` and `_.rangeRight` which doesn't -// * coerce arguments. -// * -// * @private -// * @param {number} start The start of the range. -// * @param {number} end The end of the range. -// * @param {number} step The value to increment or decrement by. -// * @param {boolean} [fromRight] Specify iterating from right to left. -// * @returns {Array} Returns the range of numbers. -// */function baseRange(start,end,step,fromRight){var index=-1,length=nativeMax(nativeCeil((end-start)/(step||1)),0),result=Array(length);while(length--){result[fromRight?length:++index]=start;start+=step;}return result;}/** -// * The base implementation of `_.repeat` which doesn't coerce arguments. -// * -// * @private -// * @param {string} string The string to repeat. -// * @param {number} n The number of times to repeat the string. -// * @returns {string} Returns the repeated string. -// */function baseRepeat(string,n){var result='';if(!string||n<1||n>MAX_SAFE_INTEGER){return result;}// Leverage the exponentiation by squaring algorithm for a faster repeat. -// // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. -// do{if(n%2){result+=string;}n=nativeFloor(n/2);if(n){string+=string;}}while(n);return result;}/** -// * The base implementation of `_.rest` which doesn't validate or coerce arguments. -// * -// * @private -// * @param {Function} func The function to apply a rest parameter to. -// * @param {number} [start=func.length-1] The start position of the rest parameter. -// * @returns {Function} Returns the new function. -// */function baseRest(func,start){return setToString(overRest(func,start,identity),func+'');}/** -// * The base implementation of `_.sample`. -// * -// * @private -// * @param {Array|Object} collection The collection to sample. -// * @returns {*} Returns the random element. -// */function baseSample(collection){return arraySample(values(collection));}/** -// * The base implementation of `_.sampleSize` without param guards. -// * -// * @private -// * @param {Array|Object} collection The collection to sample. -// * @param {number} n The number of elements to sample. -// * @returns {Array} Returns the random elements. -// */function baseSampleSize(collection,n){var array=values(collection);return shuffleSelf(array,baseClamp(n,0,array.length));}/** -// * The base implementation of `_.set`. -// * -// * @private -// * @param {Object} object The object to modify. -// * @param {Array|string} path The path of the property to set. -// * @param {*} value The value to set. -// * @param {Function} [customizer] The function to customize path creation. -// * @returns {Object} Returns `object`. -// */function baseSet(object,path,value,customizer){if(!isObject(object)){return object;}path=castPath(path,object);var index=-1,length=path.length,lastIndex=length-1,nested=object;while(nested!=null&&++indexlength?0:length+start;}end=end>length?length:end;if(end<0){end+=length;}length=start>end?0:end-start>>>0;start>>>=0;var result=Array(length);while(++index>>1,computed=array[mid];if(computed!==null&&!isSymbol(computed)&&(retHighest?computed<=value:computed=LARGE_ARRAY_SIZE){var set=iteratee?null:createSet(array);if(set){return setToArray(set);}isCommon=false;includes=cacheHas;seen=new SetCache();}else {seen=iteratee?[]:result;}outer:while(++index=length?array:baseSlice(array,start,end);}/** -// * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). -// * -// * @private -// * @param {number|Object} id The timer id or timeout object of the timer to clear. -// */var clearTimeout=ctxClearTimeout||function(id){return root.clearTimeout(id);};/** -// * Creates a clone of `buffer`. -// * -// * @private -// * @param {Buffer} buffer The buffer to clone. -// * @param {boolean} [isDeep] Specify a deep clone. -// * @returns {Buffer} Returns the cloned buffer. -// */function cloneBuffer(buffer,isDeep){if(isDeep){return buffer.slice();}var length=buffer.length,result=allocUnsafe?allocUnsafe(length):new buffer.constructor(length);buffer.copy(result);return result;}/** -// * Creates a clone of `arrayBuffer`. -// * -// * @private -// * @param {ArrayBuffer} arrayBuffer The array buffer to clone. -// * @returns {ArrayBuffer} Returns the cloned array buffer. -// */function cloneArrayBuffer(arrayBuffer){var result=new arrayBuffer.constructor(arrayBuffer.byteLength);new Uint8Array(result).set(new Uint8Array(arrayBuffer));return result;}/** -// * Creates a clone of `dataView`. -// * -// * @private -// * @param {Object} dataView The data view to clone. -// * @param {boolean} [isDeep] Specify a deep clone. -// * @returns {Object} Returns the cloned data view. -// */function cloneDataView(dataView,isDeep){var buffer=isDeep?cloneArrayBuffer(dataView.buffer):dataView.buffer;return new dataView.constructor(buffer,dataView.byteOffset,dataView.byteLength);}/** -// * Creates a clone of `regexp`. -// * -// * @private -// * @param {Object} regexp The regexp to clone. -// * @returns {Object} Returns the cloned regexp. -// */function cloneRegExp(regexp){var result=new regexp.constructor(regexp.source,reFlags.exec(regexp));result.lastIndex=regexp.lastIndex;return result;}/** -// * Creates a clone of the `symbol` object. -// * -// * @private -// * @param {Object} symbol The symbol object to clone. -// * @returns {Object} Returns the cloned symbol object. -// */function cloneSymbol(symbol){return symbolValueOf?Object(symbolValueOf.call(symbol)):{};}/** -// * Creates a clone of `typedArray`. -// * -// * @private -// * @param {Object} typedArray The typed array to clone. -// * @param {boolean} [isDeep] Specify a deep clone. -// * @returns {Object} Returns the cloned typed array. -// */function cloneTypedArray(typedArray,isDeep){var buffer=isDeep?cloneArrayBuffer(typedArray.buffer):typedArray.buffer;return new typedArray.constructor(buffer,typedArray.byteOffset,typedArray.length);}/** -// * Compares values to sort them in ascending order. -// * -// * @private -// * @param {*} value The value to compare. -// * @param {*} other The other value to compare. -// * @returns {number} Returns the sort order indicator for `value`. -// */function compareAscending(value,other){if(value!==other){var valIsDefined=value!==undefined$1,valIsNull=value===null,valIsReflexive=value===value,valIsSymbol=isSymbol(value);var othIsDefined=other!==undefined$1,othIsNull=other===null,othIsReflexive=other===other,othIsSymbol=isSymbol(other);if(!othIsNull&&!othIsSymbol&&!valIsSymbol&&value>other||valIsSymbol&&othIsDefined&&othIsReflexive&&!othIsNull&&!othIsSymbol||valIsNull&&othIsDefined&&othIsReflexive||!valIsDefined&&othIsReflexive||!valIsReflexive){return 1;}if(!valIsNull&&!valIsSymbol&&!othIsSymbol&&value=ordersLength){return result;}var order=orders[index];return result*(order=='desc'?-1:1);}}// Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications -// // that causes it, under certain circumstances, to provide the same value for -// // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 -// // for more details. -// // -// // This also ensures a stable sort in V8 and other engines. -// // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. -// return object.index-other.index;}/** -// * Creates an array that is the composition of partially applied arguments, -// * placeholders, and provided arguments into a single array of arguments. -// * -// * @private -// * @param {Array} args The provided arguments. -// * @param {Array} partials The arguments to prepend to those provided. -// * @param {Array} holders The `partials` placeholder indexes. -// * @params {boolean} [isCurried] Specify composing for a curried function. -// * @returns {Array} Returns the new array of composed arguments. -// */function composeArgs(args,partials,holders,isCurried){var argsIndex=-1,argsLength=args.length,holdersLength=holders.length,leftIndex=-1,leftLength=partials.length,rangeLength=nativeMax(argsLength-holdersLength,0),result=Array(leftLength+rangeLength),isUncurried=!isCurried;while(++leftIndex1?sources[length-1]:undefined$1,guard=length>2?sources[2]:undefined$1;customizer=assigner.length>3&&typeof customizer=='function'?(length--,customizer):undefined$1;if(guard&&isIterateeCall(sources[0],sources[1],guard)){customizer=length<3?undefined$1:customizer;length=1;}object=Object(object);while(++index-1?iterable[iteratee?collection[index]:index]:undefined$1;};}/** -// * Creates a `_.flow` or `_.flowRight` function. -// * -// * @private -// * @param {boolean} [fromRight] Specify iterating from right to left. -// * @returns {Function} Returns the new flow function. -// */function createFlow(fromRight){return flatRest(function(funcs){var length=funcs.length,index=length,prereq=LodashWrapper.prototype.thru;if(fromRight){funcs.reverse();}while(index--){var func=funcs[index];if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}if(prereq&&!wrapper&&getFuncName(func)=='wrapper'){var wrapper=new LodashWrapper([],true);}}index=wrapper?index:length;while(++index1){args.reverse();}if(isAry&&aryarrLength)){return false;}// Check that cyclic values are equal. -// var arrStacked=stack.get(array);var othStacked=stack.get(other);if(arrStacked&&othStacked){return arrStacked==other&&othStacked==array;}var index=-1,result=true,seen=bitmask&COMPARE_UNORDERED_FLAG?new SetCache():undefined$1;stack.set(array,other);stack.set(other,array);// Ignore non-index properties. -// while(++index1?'& ':'')+details[lastIndex];details=details.join(length>2?', ':' ');return source.replace(reWrapComment,'{\n/* [wrapped with '+details+'] */\n');}/** -// * Checks if `value` is a flattenable `arguments` object or array. -// * -// * @private -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. -// */function isFlattenable(value){return isArray(value)||isArguments(value)||!!(spreadableSymbol&&value&&value[spreadableSymbol]);}/** -// * Checks if `value` is a valid array-like index. -// * -// * @private -// * @param {*} value The value to check. -// * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. -// * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. -// */function isIndex(value,length){var type=typeof value;length=length==null?MAX_SAFE_INTEGER:length;return !!length&&(type=='number'||type!='symbol'&&reIsUint.test(value))&&value>-1&&value%1==0&&value0){if(++count>=HOT_COUNT){return arguments[0];}}else {count=0;}return func.apply(undefined$1,arguments);};}/** -// * A specialized version of `_.shuffle` which mutates and sets the size of `array`. -// * -// * @private -// * @param {Array} array The array to shuffle. -// * @param {number} [size=array.length] The size of `array`. -// * @returns {Array} Returns `array`. -// */function shuffleSelf(array,size){var index=-1,length=array.length,lastIndex=length-1;size=size===undefined$1?length:size;while(++index [['a', 'b'], ['c', 'd']] -// * -// * _.chunk(['a', 'b', 'c', 'd'], 3); -// * // => [['a', 'b', 'c'], ['d']] -// */function chunk(array,size,guard){if(guard?isIterateeCall(array,size,guard):size===undefined$1){size=1;}else {size=nativeMax(toInteger(size),0);}var length=array==null?0:array.length;if(!length||size<1){return [];}var index=0,resIndex=0,result=Array(nativeCeil(length/size));while(index [1, 2, 3] -// */function compact(array){var index=-1,length=array==null?0:array.length,resIndex=0,result=[];while(++index [1, 2, 3, [4]] -// * -// * console.log(array); -// * // => [1] -// */function concat(){var length=arguments.length;if(!length){return [];}var args=Array(length-1),array=arguments[0],index=length;while(index--){args[index-1]=arguments[index];}return arrayPush(isArray(array)?copyArray(array):[array],baseFlatten(args,1));}/** -// * Creates an array of `array` values not included in the other given arrays -// * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) -// * for equality comparisons. The order and references of result values are -// * determined by the first array. -// * -// * **Note:** Unlike `_.pullAll`, this method returns a new array. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Array -// * @param {Array} array The array to inspect. -// * @param {...Array} [values] The values to exclude. -// * @returns {Array} Returns the new array of filtered values. -// * @see _.without, _.xor -// * @example -// * -// * _.difference([2, 1], [2, 3]); -// * // => [1] -// */var difference=baseRest(function(array,values){return isArrayLikeObject(array)?baseDifference(array,baseFlatten(values,1,isArrayLikeObject,true)):[];});/** -// * This method is like `_.difference` except that it accepts `iteratee` which -// * is invoked for each element of `array` and `values` to generate the criterion -// * by which they're compared. The order and references of result values are -// * determined by the first array. The iteratee is invoked with one argument: -// * (value). -// * -// * **Note:** Unlike `_.pullAllBy`, this method returns a new array. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {Array} array The array to inspect. -// * @param {...Array} [values] The values to exclude. -// * @param {Function} [iteratee=_.identity] The iteratee invoked per element. -// * @returns {Array} Returns the new array of filtered values. -// * @example -// * -// * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); -// * // => [1.2] -// * -// * // The `_.property` iteratee shorthand. -// * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); -// * // => [{ 'x': 2 }] -// */var differenceBy=baseRest(function(array,values){var iteratee=last(values);if(isArrayLikeObject(iteratee)){iteratee=undefined$1;}return isArrayLikeObject(array)?baseDifference(array,baseFlatten(values,1,isArrayLikeObject,true),getIteratee(iteratee,2)):[];});/** -// * This method is like `_.difference` except that it accepts `comparator` -// * which is invoked to compare elements of `array` to `values`. The order and -// * references of result values are determined by the first array. The comparator -// * is invoked with two arguments: (arrVal, othVal). -// * -// * **Note:** Unlike `_.pullAllWith`, this method returns a new array. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {Array} array The array to inspect. -// * @param {...Array} [values] The values to exclude. -// * @param {Function} [comparator] The comparator invoked per element. -// * @returns {Array} Returns the new array of filtered values. -// * @example -// * -// * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; -// * -// * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); -// * // => [{ 'x': 2, 'y': 1 }] -// */var differenceWith=baseRest(function(array,values){var comparator=last(values);if(isArrayLikeObject(comparator)){comparator=undefined$1;}return isArrayLikeObject(array)?baseDifference(array,baseFlatten(values,1,isArrayLikeObject,true),undefined$1,comparator):[];});/** -// * Creates a slice of `array` with `n` elements dropped from the beginning. -// * -// * @static -// * @memberOf _ -// * @since 0.5.0 -// * @category Array -// * @param {Array} array The array to query. -// * @param {number} [n=1] The number of elements to drop. -// * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. -// * @returns {Array} Returns the slice of `array`. -// * @example -// * -// * _.drop([1, 2, 3]); -// * // => [2, 3] -// * -// * _.drop([1, 2, 3], 2); -// * // => [3] -// * -// * _.drop([1, 2, 3], 5); -// * // => [] -// * -// * _.drop([1, 2, 3], 0); -// * // => [1, 2, 3] -// */function drop(array,n,guard){var length=array==null?0:array.length;if(!length){return [];}n=guard||n===undefined$1?1:toInteger(n);return baseSlice(array,n<0?0:n,length);}/** -// * Creates a slice of `array` with `n` elements dropped from the end. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Array -// * @param {Array} array The array to query. -// * @param {number} [n=1] The number of elements to drop. -// * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. -// * @returns {Array} Returns the slice of `array`. -// * @example -// * -// * _.dropRight([1, 2, 3]); -// * // => [1, 2] -// * -// * _.dropRight([1, 2, 3], 2); -// * // => [1] -// * -// * _.dropRight([1, 2, 3], 5); -// * // => [] -// * -// * _.dropRight([1, 2, 3], 0); -// * // => [1, 2, 3] -// */function dropRight(array,n,guard){var length=array==null?0:array.length;if(!length){return [];}n=guard||n===undefined$1?1:toInteger(n);n=length-n;return baseSlice(array,0,n<0?0:n);}/** -// * Creates a slice of `array` excluding elements dropped from the end. -// * Elements are dropped until `predicate` returns falsey. The predicate is -// * invoked with three arguments: (value, index, array). -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Array -// * @param {Array} array The array to query. -// * @param {Function} [predicate=_.identity] The function invoked per iteration. -// * @returns {Array} Returns the slice of `array`. -// * @example -// * -// * var users = [ -// * { 'user': 'barney', 'active': true }, -// * { 'user': 'fred', 'active': false }, -// * { 'user': 'pebbles', 'active': false } -// * ]; -// * -// * _.dropRightWhile(users, function(o) { return !o.active; }); -// * // => objects for ['barney'] -// * -// * // The `_.matches` iteratee shorthand. -// * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); -// * // => objects for ['barney', 'fred'] -// * -// * // The `_.matchesProperty` iteratee shorthand. -// * _.dropRightWhile(users, ['active', false]); -// * // => objects for ['barney'] -// * -// * // The `_.property` iteratee shorthand. -// * _.dropRightWhile(users, 'active'); -// * // => objects for ['barney', 'fred', 'pebbles'] -// */function dropRightWhile(array,predicate){return array&&array.length?baseWhile(array,getIteratee(predicate,3),true,true):[];}/** -// * Creates a slice of `array` excluding elements dropped from the beginning. -// * Elements are dropped until `predicate` returns falsey. The predicate is -// * invoked with three arguments: (value, index, array). -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Array -// * @param {Array} array The array to query. -// * @param {Function} [predicate=_.identity] The function invoked per iteration. -// * @returns {Array} Returns the slice of `array`. -// * @example -// * -// * var users = [ -// * { 'user': 'barney', 'active': false }, -// * { 'user': 'fred', 'active': false }, -// * { 'user': 'pebbles', 'active': true } -// * ]; -// * -// * _.dropWhile(users, function(o) { return !o.active; }); -// * // => objects for ['pebbles'] -// * -// * // The `_.matches` iteratee shorthand. -// * _.dropWhile(users, { 'user': 'barney', 'active': false }); -// * // => objects for ['fred', 'pebbles'] -// * -// * // The `_.matchesProperty` iteratee shorthand. -// * _.dropWhile(users, ['active', false]); -// * // => objects for ['pebbles'] -// * -// * // The `_.property` iteratee shorthand. -// * _.dropWhile(users, 'active'); -// * // => objects for ['barney', 'fred', 'pebbles'] -// */function dropWhile(array,predicate){return array&&array.length?baseWhile(array,getIteratee(predicate,3),true):[];}/** -// * Fills elements of `array` with `value` from `start` up to, but not -// * including, `end`. -// * -// * **Note:** This method mutates `array`. -// * -// * @static -// * @memberOf _ -// * @since 3.2.0 -// * @category Array -// * @param {Array} array The array to fill. -// * @param {*} value The value to fill `array` with. -// * @param {number} [start=0] The start position. -// * @param {number} [end=array.length] The end position. -// * @returns {Array} Returns `array`. -// * @example -// * -// * var array = [1, 2, 3]; -// * -// * _.fill(array, 'a'); -// * console.log(array); -// * // => ['a', 'a', 'a'] -// * -// * _.fill(Array(3), 2); -// * // => [2, 2, 2] -// * -// * _.fill([4, 6, 8, 10], '*', 1, 3); -// * // => [4, '*', '*', 10] -// */function fill(array,value,start,end){var length=array==null?0:array.length;if(!length){return [];}if(start&&typeof start!='number'&&isIterateeCall(array,value,start)){start=0;end=length;}return baseFill(array,value,start,end);}/** -// * This method is like `_.find` except that it returns the index of the first -// * element `predicate` returns truthy for instead of the element itself. -// * -// * @static -// * @memberOf _ -// * @since 1.1.0 -// * @category Array -// * @param {Array} array The array to inspect. -// * @param {Function} [predicate=_.identity] The function invoked per iteration. -// * @param {number} [fromIndex=0] The index to search from. -// * @returns {number} Returns the index of the found element, else `-1`. -// * @example -// * -// * var users = [ -// * { 'user': 'barney', 'active': false }, -// * { 'user': 'fred', 'active': false }, -// * { 'user': 'pebbles', 'active': true } -// * ]; -// * -// * _.findIndex(users, function(o) { return o.user == 'barney'; }); -// * // => 0 -// * -// * // The `_.matches` iteratee shorthand. -// * _.findIndex(users, { 'user': 'fred', 'active': false }); -// * // => 1 -// * -// * // The `_.matchesProperty` iteratee shorthand. -// * _.findIndex(users, ['active', false]); -// * // => 0 -// * -// * // The `_.property` iteratee shorthand. -// * _.findIndex(users, 'active'); -// * // => 2 -// */function findIndex(array,predicate,fromIndex){var length=array==null?0:array.length;if(!length){return -1;}var index=fromIndex==null?0:toInteger(fromIndex);if(index<0){index=nativeMax(length+index,0);}return baseFindIndex(array,getIteratee(predicate,3),index);}/** -// * This method is like `_.findIndex` except that it iterates over elements -// * of `collection` from right to left. -// * -// * @static -// * @memberOf _ -// * @since 2.0.0 -// * @category Array -// * @param {Array} array The array to inspect. -// * @param {Function} [predicate=_.identity] The function invoked per iteration. -// * @param {number} [fromIndex=array.length-1] The index to search from. -// * @returns {number} Returns the index of the found element, else `-1`. -// * @example -// * -// * var users = [ -// * { 'user': 'barney', 'active': true }, -// * { 'user': 'fred', 'active': false }, -// * { 'user': 'pebbles', 'active': false } -// * ]; -// * -// * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); -// * // => 2 -// * -// * // The `_.matches` iteratee shorthand. -// * _.findLastIndex(users, { 'user': 'barney', 'active': true }); -// * // => 0 -// * -// * // The `_.matchesProperty` iteratee shorthand. -// * _.findLastIndex(users, ['active', false]); -// * // => 2 -// * -// * // The `_.property` iteratee shorthand. -// * _.findLastIndex(users, 'active'); -// * // => 0 -// */function findLastIndex(array,predicate,fromIndex){var length=array==null?0:array.length;if(!length){return -1;}var index=length-1;if(fromIndex!==undefined$1){index=toInteger(fromIndex);index=fromIndex<0?nativeMax(length+index,0):nativeMin(index,length-1);}return baseFindIndex(array,getIteratee(predicate,3),index,true);}/** -// * Flattens `array` a single level deep. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Array -// * @param {Array} array The array to flatten. -// * @returns {Array} Returns the new flattened array. -// * @example -// * -// * _.flatten([1, [2, [3, [4]], 5]]); -// * // => [1, 2, [3, [4]], 5] -// */function flatten(array){var length=array==null?0:array.length;return length?baseFlatten(array,1):[];}/** -// * Recursively flattens `array`. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Array -// * @param {Array} array The array to flatten. -// * @returns {Array} Returns the new flattened array. -// * @example -// * -// * _.flattenDeep([1, [2, [3, [4]], 5]]); -// * // => [1, 2, 3, 4, 5] -// */function flattenDeep(array){var length=array==null?0:array.length;return length?baseFlatten(array,INFINITY):[];}/** -// * Recursively flatten `array` up to `depth` times. -// * -// * @static -// * @memberOf _ -// * @since 4.4.0 -// * @category Array -// * @param {Array} array The array to flatten. -// * @param {number} [depth=1] The maximum recursion depth. -// * @returns {Array} Returns the new flattened array. -// * @example -// * -// * var array = [1, [2, [3, [4]], 5]]; -// * -// * _.flattenDepth(array, 1); -// * // => [1, 2, [3, [4]], 5] -// * -// * _.flattenDepth(array, 2); -// * // => [1, 2, 3, [4], 5] -// */function flattenDepth(array,depth){var length=array==null?0:array.length;if(!length){return [];}depth=depth===undefined$1?1:toInteger(depth);return baseFlatten(array,depth);}/** -// * The inverse of `_.toPairs`; this method returns an object composed -// * from key-value `pairs`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {Array} pairs The key-value pairs. -// * @returns {Object} Returns the new object. -// * @example -// * -// * _.fromPairs([['a', 1], ['b', 2]]); -// * // => { 'a': 1, 'b': 2 } -// */function fromPairs(pairs){var index=-1,length=pairs==null?0:pairs.length,result={};while(++index 1 -// * -// * _.head([]); -// * // => undefined -// */function head(array){return array&&array.length?array[0]:undefined$1;}/** -// * Gets the index at which the first occurrence of `value` is found in `array` -// * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) -// * for equality comparisons. If `fromIndex` is negative, it's used as the -// * offset from the end of `array`. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Array -// * @param {Array} array The array to inspect. -// * @param {*} value The value to search for. -// * @param {number} [fromIndex=0] The index to search from. -// * @returns {number} Returns the index of the matched value, else `-1`. -// * @example -// * -// * _.indexOf([1, 2, 1, 2], 2); -// * // => 1 -// * -// * // Search from the `fromIndex`. -// * _.indexOf([1, 2, 1, 2], 2, 2); -// * // => 3 -// */function indexOf(array,value,fromIndex){var length=array==null?0:array.length;if(!length){return -1;}var index=fromIndex==null?0:toInteger(fromIndex);if(index<0){index=nativeMax(length+index,0);}return baseIndexOf(array,value,index);}/** -// * Gets all but the last element of `array`. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Array -// * @param {Array} array The array to query. -// * @returns {Array} Returns the slice of `array`. -// * @example -// * -// * _.initial([1, 2, 3]); -// * // => [1, 2] -// */function initial(array){var length=array==null?0:array.length;return length?baseSlice(array,0,-1):[];}/** -// * Creates an array of unique values that are included in all given arrays -// * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) -// * for equality comparisons. The order and references of result values are -// * determined by the first array. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Array -// * @param {...Array} [arrays] The arrays to inspect. -// * @returns {Array} Returns the new array of intersecting values. -// * @example -// * -// * _.intersection([2, 1], [2, 3]); -// * // => [2] -// */var intersection=baseRest(function(arrays){var mapped=arrayMap(arrays,castArrayLikeObject);return mapped.length&&mapped[0]===arrays[0]?baseIntersection(mapped):[];});/** -// * This method is like `_.intersection` except that it accepts `iteratee` -// * which is invoked for each element of each `arrays` to generate the criterion -// * by which they're compared. The order and references of result values are -// * determined by the first array. The iteratee is invoked with one argument: -// * (value). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {...Array} [arrays] The arrays to inspect. -// * @param {Function} [iteratee=_.identity] The iteratee invoked per element. -// * @returns {Array} Returns the new array of intersecting values. -// * @example -// * -// * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); -// * // => [2.1] -// * -// * // The `_.property` iteratee shorthand. -// * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); -// * // => [{ 'x': 1 }] -// */var intersectionBy=baseRest(function(arrays){var iteratee=last(arrays),mapped=arrayMap(arrays,castArrayLikeObject);if(iteratee===last(mapped)){iteratee=undefined$1;}else {mapped.pop();}return mapped.length&&mapped[0]===arrays[0]?baseIntersection(mapped,getIteratee(iteratee,2)):[];});/** -// * This method is like `_.intersection` except that it accepts `comparator` -// * which is invoked to compare elements of `arrays`. The order and references -// * of result values are determined by the first array. The comparator is -// * invoked with two arguments: (arrVal, othVal). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {...Array} [arrays] The arrays to inspect. -// * @param {Function} [comparator] The comparator invoked per element. -// * @returns {Array} Returns the new array of intersecting values. -// * @example -// * -// * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; -// * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; -// * -// * _.intersectionWith(objects, others, _.isEqual); -// * // => [{ 'x': 1, 'y': 2 }] -// */var intersectionWith=baseRest(function(arrays){var comparator=last(arrays),mapped=arrayMap(arrays,castArrayLikeObject);comparator=typeof comparator=='function'?comparator:undefined$1;if(comparator){mapped.pop();}return mapped.length&&mapped[0]===arrays[0]?baseIntersection(mapped,undefined$1,comparator):[];});/** -// * Converts all elements in `array` into a string separated by `separator`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {Array} array The array to convert. -// * @param {string} [separator=','] The element separator. -// * @returns {string} Returns the joined string. -// * @example -// * -// * _.join(['a', 'b', 'c'], '~'); -// * // => 'a~b~c' -// */function join(array,separator){return array==null?'':nativeJoin.call(array,separator);}/** -// * Gets the last element of `array`. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Array -// * @param {Array} array The array to query. -// * @returns {*} Returns the last element of `array`. -// * @example -// * -// * _.last([1, 2, 3]); -// * // => 3 -// */function last(array){var length=array==null?0:array.length;return length?array[length-1]:undefined$1;}/** -// * This method is like `_.indexOf` except that it iterates over elements of -// * `array` from right to left. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Array -// * @param {Array} array The array to inspect. -// * @param {*} value The value to search for. -// * @param {number} [fromIndex=array.length-1] The index to search from. -// * @returns {number} Returns the index of the matched value, else `-1`. -// * @example -// * -// * _.lastIndexOf([1, 2, 1, 2], 2); -// * // => 3 -// * -// * // Search from the `fromIndex`. -// * _.lastIndexOf([1, 2, 1, 2], 2, 2); -// * // => 1 -// */function lastIndexOf(array,value,fromIndex){var length=array==null?0:array.length;if(!length){return -1;}var index=length;if(fromIndex!==undefined$1){index=toInteger(fromIndex);index=index<0?nativeMax(length+index,0):nativeMin(index,length-1);}return value===value?strictLastIndexOf(array,value,index):baseFindIndex(array,baseIsNaN,index,true);}/** -// * Gets the element at index `n` of `array`. If `n` is negative, the nth -// * element from the end is returned. -// * -// * @static -// * @memberOf _ -// * @since 4.11.0 -// * @category Array -// * @param {Array} array The array to query. -// * @param {number} [n=0] The index of the element to return. -// * @returns {*} Returns the nth element of `array`. -// * @example -// * -// * var array = ['a', 'b', 'c', 'd']; -// * -// * _.nth(array, 1); -// * // => 'b' -// * -// * _.nth(array, -2); -// * // => 'c'; -// */function nth(array,n){return array&&array.length?baseNth(array,toInteger(n)):undefined$1;}/** -// * Removes all given values from `array` using -// * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) -// * for equality comparisons. -// * -// * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` -// * to remove elements from an array by predicate. -// * -// * @static -// * @memberOf _ -// * @since 2.0.0 -// * @category Array -// * @param {Array} array The array to modify. -// * @param {...*} [values] The values to remove. -// * @returns {Array} Returns `array`. -// * @example -// * -// * var array = ['a', 'b', 'c', 'a', 'b', 'c']; -// * -// * _.pull(array, 'a', 'c'); -// * console.log(array); -// * // => ['b', 'b'] -// */var pull=baseRest(pullAll);/** -// * This method is like `_.pull` except that it accepts an array of values to remove. -// * -// * **Note:** Unlike `_.difference`, this method mutates `array`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {Array} array The array to modify. -// * @param {Array} values The values to remove. -// * @returns {Array} Returns `array`. -// * @example -// * -// * var array = ['a', 'b', 'c', 'a', 'b', 'c']; -// * -// * _.pullAll(array, ['a', 'c']); -// * console.log(array); -// * // => ['b', 'b'] -// */function pullAll(array,values){return array&&array.length&&values&&values.length?basePullAll(array,values):array;}/** -// * This method is like `_.pullAll` except that it accepts `iteratee` which is -// * invoked for each element of `array` and `values` to generate the criterion -// * by which they're compared. The iteratee is invoked with one argument: (value). -// * -// * **Note:** Unlike `_.differenceBy`, this method mutates `array`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {Array} array The array to modify. -// * @param {Array} values The values to remove. -// * @param {Function} [iteratee=_.identity] The iteratee invoked per element. -// * @returns {Array} Returns `array`. -// * @example -// * -// * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; -// * -// * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); -// * console.log(array); -// * // => [{ 'x': 2 }] -// */function pullAllBy(array,values,iteratee){return array&&array.length&&values&&values.length?basePullAll(array,values,getIteratee(iteratee,2)):array;}/** -// * This method is like `_.pullAll` except that it accepts `comparator` which -// * is invoked to compare elements of `array` to `values`. The comparator is -// * invoked with two arguments: (arrVal, othVal). -// * -// * **Note:** Unlike `_.differenceWith`, this method mutates `array`. -// * -// * @static -// * @memberOf _ -// * @since 4.6.0 -// * @category Array -// * @param {Array} array The array to modify. -// * @param {Array} values The values to remove. -// * @param {Function} [comparator] The comparator invoked per element. -// * @returns {Array} Returns `array`. -// * @example -// * -// * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; -// * -// * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); -// * console.log(array); -// * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] -// */function pullAllWith(array,values,comparator){return array&&array.length&&values&&values.length?basePullAll(array,values,undefined$1,comparator):array;}/** -// * Removes elements from `array` corresponding to `indexes` and returns an -// * array of removed elements. -// * -// * **Note:** Unlike `_.at`, this method mutates `array`. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Array -// * @param {Array} array The array to modify. -// * @param {...(number|number[])} [indexes] The indexes of elements to remove. -// * @returns {Array} Returns the new array of removed elements. -// * @example -// * -// * var array = ['a', 'b', 'c', 'd']; -// * var pulled = _.pullAt(array, [1, 3]); -// * -// * console.log(array); -// * // => ['a', 'c'] -// * -// * console.log(pulled); -// * // => ['b', 'd'] -// */var pullAt=flatRest(function(array,indexes){var length=array==null?0:array.length,result=baseAt(array,indexes);basePullAt(array,arrayMap(indexes,function(index){return isIndex(index,length)?+index:index;}).sort(compareAscending));return result;});/** -// * Removes all elements from `array` that `predicate` returns truthy for -// * and returns an array of the removed elements. The predicate is invoked -// * with three arguments: (value, index, array). -// * -// * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` -// * to pull elements from an array by value. -// * -// * @static -// * @memberOf _ -// * @since 2.0.0 -// * @category Array -// * @param {Array} array The array to modify. -// * @param {Function} [predicate=_.identity] The function invoked per iteration. -// * @returns {Array} Returns the new array of removed elements. -// * @example -// * -// * var array = [1, 2, 3, 4]; -// * var evens = _.remove(array, function(n) { -// * return n % 2 == 0; -// * }); -// * -// * console.log(array); -// * // => [1, 3] -// * -// * console.log(evens); -// * // => [2, 4] -// */function remove(array,predicate){var result=[];if(!(array&&array.length)){return result;}var index=-1,indexes=[],length=array.length;predicate=getIteratee(predicate,3);while(++index [3, 2, 1] -// * -// * console.log(array); -// * // => [3, 2, 1] -// */function reverse(array){return array==null?array:nativeReverse.call(array);}/** -// * Creates a slice of `array` from `start` up to, but not including, `end`. -// * -// * **Note:** This method is used instead of -// * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are -// * returned. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Array -// * @param {Array} array The array to slice. -// * @param {number} [start=0] The start position. -// * @param {number} [end=array.length] The end position. -// * @returns {Array} Returns the slice of `array`. -// */function slice(array,start,end){var length=array==null?0:array.length;if(!length){return [];}if(end&&typeof end!='number'&&isIterateeCall(array,start,end)){start=0;end=length;}else {start=start==null?0:toInteger(start);end=end===undefined$1?length:toInteger(end);}return baseSlice(array,start,end);}/** -// * Uses a binary search to determine the lowest index at which `value` -// * should be inserted into `array` in order to maintain its sort order. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Array -// * @param {Array} array The sorted array to inspect. -// * @param {*} value The value to evaluate. -// * @returns {number} Returns the index at which `value` should be inserted -// * into `array`. -// * @example -// * -// * _.sortedIndex([30, 50], 40); -// * // => 1 -// */function sortedIndex(array,value){return baseSortedIndex(array,value);}/** -// * This method is like `_.sortedIndex` except that it accepts `iteratee` -// * which is invoked for `value` and each element of `array` to compute their -// * sort ranking. The iteratee is invoked with one argument: (value). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {Array} array The sorted array to inspect. -// * @param {*} value The value to evaluate. -// * @param {Function} [iteratee=_.identity] The iteratee invoked per element. -// * @returns {number} Returns the index at which `value` should be inserted -// * into `array`. -// * @example -// * -// * var objects = [{ 'x': 4 }, { 'x': 5 }]; -// * -// * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); -// * // => 0 -// * -// * // The `_.property` iteratee shorthand. -// * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); -// * // => 0 -// */function sortedIndexBy(array,value,iteratee){return baseSortedIndexBy(array,value,getIteratee(iteratee,2));}/** -// * This method is like `_.indexOf` except that it performs a binary -// * search on a sorted `array`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {Array} array The array to inspect. -// * @param {*} value The value to search for. -// * @returns {number} Returns the index of the matched value, else `-1`. -// * @example -// * -// * _.sortedIndexOf([4, 5, 5, 5, 6], 5); -// * // => 1 -// */function sortedIndexOf(array,value){var length=array==null?0:array.length;if(length){var index=baseSortedIndex(array,value);if(index 4 -// */function sortedLastIndex(array,value){return baseSortedIndex(array,value,true);}/** -// * This method is like `_.sortedLastIndex` except that it accepts `iteratee` -// * which is invoked for `value` and each element of `array` to compute their -// * sort ranking. The iteratee is invoked with one argument: (value). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {Array} array The sorted array to inspect. -// * @param {*} value The value to evaluate. -// * @param {Function} [iteratee=_.identity] The iteratee invoked per element. -// * @returns {number} Returns the index at which `value` should be inserted -// * into `array`. -// * @example -// * -// * var objects = [{ 'x': 4 }, { 'x': 5 }]; -// * -// * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); -// * // => 1 -// * -// * // The `_.property` iteratee shorthand. -// * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); -// * // => 1 -// */function sortedLastIndexBy(array,value,iteratee){return baseSortedIndexBy(array,value,getIteratee(iteratee,2),true);}/** -// * This method is like `_.lastIndexOf` except that it performs a binary -// * search on a sorted `array`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {Array} array The array to inspect. -// * @param {*} value The value to search for. -// * @returns {number} Returns the index of the matched value, else `-1`. -// * @example -// * -// * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); -// * // => 3 -// */function sortedLastIndexOf(array,value){var length=array==null?0:array.length;if(length){var index=baseSortedIndex(array,value,true)-1;if(eq(array[index],value)){return index;}}return -1;}/** -// * This method is like `_.uniq` except that it's designed and optimized -// * for sorted arrays. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {Array} array The array to inspect. -// * @returns {Array} Returns the new duplicate free array. -// * @example -// * -// * _.sortedUniq([1, 1, 2]); -// * // => [1, 2] -// */function sortedUniq(array){return array&&array.length?baseSortedUniq(array):[];}/** -// * This method is like `_.uniqBy` except that it's designed and optimized -// * for sorted arrays. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {Array} array The array to inspect. -// * @param {Function} [iteratee] The iteratee invoked per element. -// * @returns {Array} Returns the new duplicate free array. -// * @example -// * -// * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); -// * // => [1.1, 2.3] -// */function sortedUniqBy(array,iteratee){return array&&array.length?baseSortedUniq(array,getIteratee(iteratee,2)):[];}/** -// * Gets all but the first element of `array`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {Array} array The array to query. -// * @returns {Array} Returns the slice of `array`. -// * @example -// * -// * _.tail([1, 2, 3]); -// * // => [2, 3] -// */function tail(array){var length=array==null?0:array.length;return length?baseSlice(array,1,length):[];}/** -// * Creates a slice of `array` with `n` elements taken from the beginning. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Array -// * @param {Array} array The array to query. -// * @param {number} [n=1] The number of elements to take. -// * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. -// * @returns {Array} Returns the slice of `array`. -// * @example -// * -// * _.take([1, 2, 3]); -// * // => [1] -// * -// * _.take([1, 2, 3], 2); -// * // => [1, 2] -// * -// * _.take([1, 2, 3], 5); -// * // => [1, 2, 3] -// * -// * _.take([1, 2, 3], 0); -// * // => [] -// */function take(array,n,guard){if(!(array&&array.length)){return [];}n=guard||n===undefined$1?1:toInteger(n);return baseSlice(array,0,n<0?0:n);}/** -// * Creates a slice of `array` with `n` elements taken from the end. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Array -// * @param {Array} array The array to query. -// * @param {number} [n=1] The number of elements to take. -// * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. -// * @returns {Array} Returns the slice of `array`. -// * @example -// * -// * _.takeRight([1, 2, 3]); -// * // => [3] -// * -// * _.takeRight([1, 2, 3], 2); -// * // => [2, 3] -// * -// * _.takeRight([1, 2, 3], 5); -// * // => [1, 2, 3] -// * -// * _.takeRight([1, 2, 3], 0); -// * // => [] -// */function takeRight(array,n,guard){var length=array==null?0:array.length;if(!length){return [];}n=guard||n===undefined$1?1:toInteger(n);n=length-n;return baseSlice(array,n<0?0:n,length);}/** -// * Creates a slice of `array` with elements taken from the end. Elements are -// * taken until `predicate` returns falsey. The predicate is invoked with -// * three arguments: (value, index, array). -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Array -// * @param {Array} array The array to query. -// * @param {Function} [predicate=_.identity] The function invoked per iteration. -// * @returns {Array} Returns the slice of `array`. -// * @example -// * -// * var users = [ -// * { 'user': 'barney', 'active': true }, -// * { 'user': 'fred', 'active': false }, -// * { 'user': 'pebbles', 'active': false } -// * ]; -// * -// * _.takeRightWhile(users, function(o) { return !o.active; }); -// * // => objects for ['fred', 'pebbles'] -// * -// * // The `_.matches` iteratee shorthand. -// * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); -// * // => objects for ['pebbles'] -// * -// * // The `_.matchesProperty` iteratee shorthand. -// * _.takeRightWhile(users, ['active', false]); -// * // => objects for ['fred', 'pebbles'] -// * -// * // The `_.property` iteratee shorthand. -// * _.takeRightWhile(users, 'active'); -// * // => [] -// */function takeRightWhile(array,predicate){return array&&array.length?baseWhile(array,getIteratee(predicate,3),false,true):[];}/** -// * Creates a slice of `array` with elements taken from the beginning. Elements -// * are taken until `predicate` returns falsey. The predicate is invoked with -// * three arguments: (value, index, array). -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Array -// * @param {Array} array The array to query. -// * @param {Function} [predicate=_.identity] The function invoked per iteration. -// * @returns {Array} Returns the slice of `array`. -// * @example -// * -// * var users = [ -// * { 'user': 'barney', 'active': false }, -// * { 'user': 'fred', 'active': false }, -// * { 'user': 'pebbles', 'active': true } -// * ]; -// * -// * _.takeWhile(users, function(o) { return !o.active; }); -// * // => objects for ['barney', 'fred'] -// * -// * // The `_.matches` iteratee shorthand. -// * _.takeWhile(users, { 'user': 'barney', 'active': false }); -// * // => objects for ['barney'] -// * -// * // The `_.matchesProperty` iteratee shorthand. -// * _.takeWhile(users, ['active', false]); -// * // => objects for ['barney', 'fred'] -// * -// * // The `_.property` iteratee shorthand. -// * _.takeWhile(users, 'active'); -// * // => [] -// */function takeWhile(array,predicate){return array&&array.length?baseWhile(array,getIteratee(predicate,3)):[];}/** -// * Creates an array of unique values, in order, from all given arrays using -// * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) -// * for equality comparisons. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Array -// * @param {...Array} [arrays] The arrays to inspect. -// * @returns {Array} Returns the new array of combined values. -// * @example -// * -// * _.union([2], [1, 2]); -// * // => [2, 1] -// */var union=baseRest(function(arrays){return baseUniq(baseFlatten(arrays,1,isArrayLikeObject,true));});/** -// * This method is like `_.union` except that it accepts `iteratee` which is -// * invoked for each element of each `arrays` to generate the criterion by -// * which uniqueness is computed. Result values are chosen from the first -// * array in which the value occurs. The iteratee is invoked with one argument: -// * (value). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {...Array} [arrays] The arrays to inspect. -// * @param {Function} [iteratee=_.identity] The iteratee invoked per element. -// * @returns {Array} Returns the new array of combined values. -// * @example -// * -// * _.unionBy([2.1], [1.2, 2.3], Math.floor); -// * // => [2.1, 1.2] -// * -// * // The `_.property` iteratee shorthand. -// * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); -// * // => [{ 'x': 1 }, { 'x': 2 }] -// */var unionBy=baseRest(function(arrays){var iteratee=last(arrays);if(isArrayLikeObject(iteratee)){iteratee=undefined$1;}return baseUniq(baseFlatten(arrays,1,isArrayLikeObject,true),getIteratee(iteratee,2));});/** -// * This method is like `_.union` except that it accepts `comparator` which -// * is invoked to compare elements of `arrays`. Result values are chosen from -// * the first array in which the value occurs. The comparator is invoked -// * with two arguments: (arrVal, othVal). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {...Array} [arrays] The arrays to inspect. -// * @param {Function} [comparator] The comparator invoked per element. -// * @returns {Array} Returns the new array of combined values. -// * @example -// * -// * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; -// * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; -// * -// * _.unionWith(objects, others, _.isEqual); -// * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] -// */var unionWith=baseRest(function(arrays){var comparator=last(arrays);comparator=typeof comparator=='function'?comparator:undefined$1;return baseUniq(baseFlatten(arrays,1,isArrayLikeObject,true),undefined$1,comparator);});/** -// * Creates a duplicate-free version of an array, using -// * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) -// * for equality comparisons, in which only the first occurrence of each element -// * is kept. The order of result values is determined by the order they occur -// * in the array. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Array -// * @param {Array} array The array to inspect. -// * @returns {Array} Returns the new duplicate free array. -// * @example -// * -// * _.uniq([2, 1, 2]); -// * // => [2, 1] -// */function uniq(array){return array&&array.length?baseUniq(array):[];}/** -// * This method is like `_.uniq` except that it accepts `iteratee` which is -// * invoked for each element in `array` to generate the criterion by which -// * uniqueness is computed. The order of result values is determined by the -// * order they occur in the array. The iteratee is invoked with one argument: -// * (value). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {Array} array The array to inspect. -// * @param {Function} [iteratee=_.identity] The iteratee invoked per element. -// * @returns {Array} Returns the new duplicate free array. -// * @example -// * -// * _.uniqBy([2.1, 1.2, 2.3], Math.floor); -// * // => [2.1, 1.2] -// * -// * // The `_.property` iteratee shorthand. -// * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); -// * // => [{ 'x': 1 }, { 'x': 2 }] -// */function uniqBy(array,iteratee){return array&&array.length?baseUniq(array,getIteratee(iteratee,2)):[];}/** -// * This method is like `_.uniq` except that it accepts `comparator` which -// * is invoked to compare elements of `array`. The order of result values is -// * determined by the order they occur in the array.The comparator is invoked -// * with two arguments: (arrVal, othVal). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {Array} array The array to inspect. -// * @param {Function} [comparator] The comparator invoked per element. -// * @returns {Array} Returns the new duplicate free array. -// * @example -// * -// * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; -// * -// * _.uniqWith(objects, _.isEqual); -// * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] -// */function uniqWith(array,comparator){comparator=typeof comparator=='function'?comparator:undefined$1;return array&&array.length?baseUniq(array,undefined$1,comparator):[];}/** -// * This method is like `_.zip` except that it accepts an array of grouped -// * elements and creates an array regrouping the elements to their pre-zip -// * configuration. -// * -// * @static -// * @memberOf _ -// * @since 1.2.0 -// * @category Array -// * @param {Array} array The array of grouped elements to process. -// * @returns {Array} Returns the new array of regrouped elements. -// * @example -// * -// * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); -// * // => [['a', 1, true], ['b', 2, false]] -// * -// * _.unzip(zipped); -// * // => [['a', 'b'], [1, 2], [true, false]] -// */function unzip(array){if(!(array&&array.length)){return [];}var length=0;array=arrayFilter(array,function(group){if(isArrayLikeObject(group)){length=nativeMax(group.length,length);return true;}});return baseTimes(length,function(index){return arrayMap(array,baseProperty(index));});}/** -// * This method is like `_.unzip` except that it accepts `iteratee` to specify -// * how regrouped values should be combined. The iteratee is invoked with the -// * elements of each group: (...group). -// * -// * @static -// * @memberOf _ -// * @since 3.8.0 -// * @category Array -// * @param {Array} array The array of grouped elements to process. -// * @param {Function} [iteratee=_.identity] The function to combine -// * regrouped values. -// * @returns {Array} Returns the new array of regrouped elements. -// * @example -// * -// * var zipped = _.zip([1, 2], [10, 20], [100, 200]); -// * // => [[1, 10, 100], [2, 20, 200]] -// * -// * _.unzipWith(zipped, _.add); -// * // => [3, 30, 300] -// */function unzipWith(array,iteratee){if(!(array&&array.length)){return [];}var result=unzip(array);if(iteratee==null){return result;}return arrayMap(result,function(group){return apply(iteratee,undefined$1,group);});}/** -// * Creates an array excluding all given values using -// * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) -// * for equality comparisons. -// * -// * **Note:** Unlike `_.pull`, this method returns a new array. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Array -// * @param {Array} array The array to inspect. -// * @param {...*} [values] The values to exclude. -// * @returns {Array} Returns the new array of filtered values. -// * @see _.difference, _.xor -// * @example -// * -// * _.without([2, 1, 2, 3], 1, 2); -// * // => [3] -// */var without=baseRest(function(array,values){return isArrayLikeObject(array)?baseDifference(array,values):[];});/** -// * Creates an array of unique values that is the -// * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) -// * of the given arrays. The order of result values is determined by the order -// * they occur in the arrays. -// * -// * @static -// * @memberOf _ -// * @since 2.4.0 -// * @category Array -// * @param {...Array} [arrays] The arrays to inspect. -// * @returns {Array} Returns the new array of filtered values. -// * @see _.difference, _.without -// * @example -// * -// * _.xor([2, 1], [2, 3]); -// * // => [1, 3] -// */var xor=baseRest(function(arrays){return baseXor(arrayFilter(arrays,isArrayLikeObject));});/** -// * This method is like `_.xor` except that it accepts `iteratee` which is -// * invoked for each element of each `arrays` to generate the criterion by -// * which by which they're compared. The order of result values is determined -// * by the order they occur in the arrays. The iteratee is invoked with one -// * argument: (value). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {...Array} [arrays] The arrays to inspect. -// * @param {Function} [iteratee=_.identity] The iteratee invoked per element. -// * @returns {Array} Returns the new array of filtered values. -// * @example -// * -// * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); -// * // => [1.2, 3.4] -// * -// * // The `_.property` iteratee shorthand. -// * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); -// * // => [{ 'x': 2 }] -// */var xorBy=baseRest(function(arrays){var iteratee=last(arrays);if(isArrayLikeObject(iteratee)){iteratee=undefined$1;}return baseXor(arrayFilter(arrays,isArrayLikeObject),getIteratee(iteratee,2));});/** -// * This method is like `_.xor` except that it accepts `comparator` which is -// * invoked to compare elements of `arrays`. The order of result values is -// * determined by the order they occur in the arrays. The comparator is invoked -// * with two arguments: (arrVal, othVal). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Array -// * @param {...Array} [arrays] The arrays to inspect. -// * @param {Function} [comparator] The comparator invoked per element. -// * @returns {Array} Returns the new array of filtered values. -// * @example -// * -// * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; -// * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; -// * -// * _.xorWith(objects, others, _.isEqual); -// * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] -// */var xorWith=baseRest(function(arrays){var comparator=last(arrays);comparator=typeof comparator=='function'?comparator:undefined$1;return baseXor(arrayFilter(arrays,isArrayLikeObject),undefined$1,comparator);});/** -// * Creates an array of grouped elements, the first of which contains the -// * first elements of the given arrays, the second of which contains the -// * second elements of the given arrays, and so on. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Array -// * @param {...Array} [arrays] The arrays to process. -// * @returns {Array} Returns the new array of grouped elements. -// * @example -// * -// * _.zip(['a', 'b'], [1, 2], [true, false]); -// * // => [['a', 1, true], ['b', 2, false]] -// */var zip=baseRest(unzip);/** -// * This method is like `_.fromPairs` except that it accepts two arrays, -// * one of property identifiers and one of corresponding values. -// * -// * @static -// * @memberOf _ -// * @since 0.4.0 -// * @category Array -// * @param {Array} [props=[]] The property identifiers. -// * @param {Array} [values=[]] The property values. -// * @returns {Object} Returns the new object. -// * @example -// * -// * _.zipObject(['a', 'b'], [1, 2]); -// * // => { 'a': 1, 'b': 2 } -// */function zipObject(props,values){return baseZipObject(props||[],values||[],assignValue);}/** -// * This method is like `_.zipObject` except that it supports property paths. -// * -// * @static -// * @memberOf _ -// * @since 4.1.0 -// * @category Array -// * @param {Array} [props=[]] The property identifiers. -// * @param {Array} [values=[]] The property values. -// * @returns {Object} Returns the new object. -// * @example -// * -// * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); -// * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } -// */function zipObjectDeep(props,values){return baseZipObject(props||[],values||[],baseSet);}/** -// * This method is like `_.zip` except that it accepts `iteratee` to specify -// * how grouped values should be combined. The iteratee is invoked with the -// * elements of each group: (...group). -// * -// * @static -// * @memberOf _ -// * @since 3.8.0 -// * @category Array -// * @param {...Array} [arrays] The arrays to process. -// * @param {Function} [iteratee=_.identity] The function to combine -// * grouped values. -// * @returns {Array} Returns the new array of grouped elements. -// * @example -// * -// * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { -// * return a + b + c; -// * }); -// * // => [111, 222] -// */var zipWith=baseRest(function(arrays){var length=arrays.length,iteratee=length>1?arrays[length-1]:undefined$1;iteratee=typeof iteratee=='function'?(arrays.pop(),iteratee):undefined$1;return unzipWith(arrays,iteratee);});/*------------------------------------------------------------------------*/ /** -// * Creates a `lodash` wrapper instance that wraps `value` with explicit method -// * chain sequences enabled. The result of such sequences must be unwrapped -// * with `_#value`. -// * -// * @static -// * @memberOf _ -// * @since 1.3.0 -// * @category Seq -// * @param {*} value The value to wrap. -// * @returns {Object} Returns the new `lodash` wrapper instance. -// * @example -// * -// * var users = [ -// * { 'user': 'barney', 'age': 36 }, -// * { 'user': 'fred', 'age': 40 }, -// * { 'user': 'pebbles', 'age': 1 } -// * ]; -// * -// * var youngest = _ -// * .chain(users) -// * .sortBy('age') -// * .map(function(o) { -// * return o.user + ' is ' + o.age; -// * }) -// * .head() -// * .value(); -// * // => 'pebbles is 1' -// */function chain(value){var result=lodash(value);result.__chain__=true;return result;}/** -// * This method invokes `interceptor` and returns `value`. The interceptor -// * is invoked with one argument; (value). The purpose of this method is to -// * "tap into" a method chain sequence in order to modify intermediate results. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Seq -// * @param {*} value The value to provide to `interceptor`. -// * @param {Function} interceptor The function to invoke. -// * @returns {*} Returns `value`. -// * @example -// * -// * _([1, 2, 3]) -// * .tap(function(array) { -// * // Mutate input array. -// * array.pop(); -// * }) -// * .reverse() -// * .value(); -// * // => [2, 1] -// */function tap(value,interceptor){interceptor(value);return value;}/** -// * This method is like `_.tap` except that it returns the result of `interceptor`. -// * The purpose of this method is to "pass thru" values replacing intermediate -// * results in a method chain sequence. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Seq -// * @param {*} value The value to provide to `interceptor`. -// * @param {Function} interceptor The function to invoke. -// * @returns {*} Returns the result of `interceptor`. -// * @example -// * -// * _(' abc ') -// * .chain() -// * .trim() -// * .thru(function(value) { -// * return [value]; -// * }) -// * .value(); -// * // => ['abc'] -// */function thru(value,interceptor){return interceptor(value);}/** -// * This method is the wrapper version of `_.at`. -// * -// * @name at -// * @memberOf _ -// * @since 1.0.0 -// * @category Seq -// * @param {...(string|string[])} [paths] The property paths to pick. -// * @returns {Object} Returns the new `lodash` wrapper instance. -// * @example -// * -// * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; -// * -// * _(object).at(['a[0].b.c', 'a[1]']).value(); -// * // => [3, 4] -// */var wrapperAt=flatRest(function(paths){var length=paths.length,start=length?paths[0]:0,value=this.__wrapped__,interceptor=function(object){return baseAt(object,paths);};if(length>1||this.__actions__.length||!(value instanceof LazyWrapper)||!isIndex(start)){return this.thru(interceptor);}value=value.slice(start,+start+(length?1:0));value.__actions__.push({'func':thru,'args':[interceptor],'thisArg':undefined$1});return new LodashWrapper(value,this.__chain__).thru(function(array){if(length&&!array.length){array.push(undefined$1);}return array;});});/** -// * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. -// * -// * @name chain -// * @memberOf _ -// * @since 0.1.0 -// * @category Seq -// * @returns {Object} Returns the new `lodash` wrapper instance. -// * @example -// * -// * var users = [ -// * { 'user': 'barney', 'age': 36 }, -// * { 'user': 'fred', 'age': 40 } -// * ]; -// * -// * // A sequence without explicit chaining. -// * _(users).head(); -// * // => { 'user': 'barney', 'age': 36 } -// * -// * // A sequence with explicit chaining. -// * _(users) -// * .chain() -// * .head() -// * .pick('user') -// * .value(); -// * // => { 'user': 'barney' } -// */function wrapperChain(){return chain(this);}/** -// * Executes the chain sequence and returns the wrapped result. -// * -// * @name commit -// * @memberOf _ -// * @since 3.2.0 -// * @category Seq -// * @returns {Object} Returns the new `lodash` wrapper instance. -// * @example -// * -// * var array = [1, 2]; -// * var wrapped = _(array).push(3); -// * -// * console.log(array); -// * // => [1, 2] -// * -// * wrapped = wrapped.commit(); -// * console.log(array); -// * // => [1, 2, 3] -// * -// * wrapped.last(); -// * // => 3 -// * -// * console.log(array); -// * // => [1, 2, 3] -// */function wrapperCommit(){return new LodashWrapper(this.value(),this.__chain__);}/** -// * Gets the next value on a wrapped object following the -// * [iterator protocol](https://mdn.io/iteration_protocols#iterator). -// * -// * @name next -// * @memberOf _ -// * @since 4.0.0 -// * @category Seq -// * @returns {Object} Returns the next iterator value. -// * @example -// * -// * var wrapped = _([1, 2]); -// * -// * wrapped.next(); -// * // => { 'done': false, 'value': 1 } -// * -// * wrapped.next(); -// * // => { 'done': false, 'value': 2 } -// * -// * wrapped.next(); -// * // => { 'done': true, 'value': undefined } -// */function wrapperNext(){if(this.__values__===undefined$1){this.__values__=toArray(this.value());}var done=this.__index__>=this.__values__.length,value=done?undefined$1:this.__values__[this.__index__++];return {'done':done,'value':value};}/** -// * Enables the wrapper to be iterable. -// * -// * @name Symbol.iterator -// * @memberOf _ -// * @since 4.0.0 -// * @category Seq -// * @returns {Object} Returns the wrapper object. -// * @example -// * -// * var wrapped = _([1, 2]); -// * -// * wrapped[Symbol.iterator]() === wrapped; -// * // => true -// * -// * Array.from(wrapped); -// * // => [1, 2] -// */function wrapperToIterator(){return this;}/** -// * Creates a clone of the chain sequence planting `value` as the wrapped value. -// * -// * @name plant -// * @memberOf _ -// * @since 3.2.0 -// * @category Seq -// * @param {*} value The value to plant. -// * @returns {Object} Returns the new `lodash` wrapper instance. -// * @example -// * -// * function square(n) { -// * return n * n; -// * } -// * -// * var wrapped = _([1, 2]).map(square); -// * var other = wrapped.plant([3, 4]); -// * -// * other.value(); -// * // => [9, 16] -// * -// * wrapped.value(); -// * // => [1, 4] -// */function wrapperPlant(value){var result,parent=this;while(parent instanceof baseLodash){var clone=wrapperClone(parent);clone.__index__=0;clone.__values__=undefined$1;if(result){previous.__wrapped__=clone;}else {result=clone;}var previous=clone;parent=parent.__wrapped__;}previous.__wrapped__=value;return result;}/** -// * This method is the wrapper version of `_.reverse`. -// * -// * **Note:** This method mutates the wrapped array. -// * -// * @name reverse -// * @memberOf _ -// * @since 0.1.0 -// * @category Seq -// * @returns {Object} Returns the new `lodash` wrapper instance. -// * @example -// * -// * var array = [1, 2, 3]; -// * -// * _(array).reverse().value() -// * // => [3, 2, 1] -// * -// * console.log(array); -// * // => [3, 2, 1] -// */function wrapperReverse(){var value=this.__wrapped__;if(value instanceof LazyWrapper){var wrapped=value;if(this.__actions__.length){wrapped=new LazyWrapper(this);}wrapped=wrapped.reverse();wrapped.__actions__.push({'func':thru,'args':[reverse],'thisArg':undefined$1});return new LodashWrapper(wrapped,this.__chain__);}return this.thru(reverse);}/** -// * Executes the chain sequence to resolve the unwrapped value. -// * -// * @name value -// * @memberOf _ -// * @since 0.1.0 -// * @alias toJSON, valueOf -// * @category Seq -// * @returns {*} Returns the resolved unwrapped value. -// * @example -// * -// * _([1, 2, 3]).value(); -// * // => [1, 2, 3] -// */function wrapperValue(){return baseWrapperValue(this.__wrapped__,this.__actions__);}/*------------------------------------------------------------------------*/ /** -// * Creates an object composed of keys generated from the results of running -// * each element of `collection` thru `iteratee`. The corresponding value of -// * each key is the number of times the key was returned by `iteratee`. The -// * iteratee is invoked with one argument: (value). -// * -// * @static -// * @memberOf _ -// * @since 0.5.0 -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Function} [iteratee=_.identity] The iteratee to transform keys. -// * @returns {Object} Returns the composed aggregate object. -// * @example -// * -// * _.countBy([6.1, 4.2, 6.3], Math.floor); -// * // => { '4': 1, '6': 2 } -// * -// * // The `_.property` iteratee shorthand. -// * _.countBy(['one', 'two', 'three'], 'length'); -// * // => { '3': 2, '5': 1 } -// */var countBy=createAggregator(function(result,value,key){if(hasOwnProperty.call(result,key)){++result[key];}else {baseAssignValue(result,key,1);}});/** -// * Checks if `predicate` returns truthy for **all** elements of `collection`. -// * Iteration is stopped once `predicate` returns falsey. The predicate is -// * invoked with three arguments: (value, index|key, collection). -// * -// * **Note:** This method returns `true` for -// * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because -// * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of -// * elements of empty collections. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Function} [predicate=_.identity] The function invoked per iteration. -// * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. -// * @returns {boolean} Returns `true` if all elements pass the predicate check, -// * else `false`. -// * @example -// * -// * _.every([true, 1, null, 'yes'], Boolean); -// * // => false -// * -// * var users = [ -// * { 'user': 'barney', 'age': 36, 'active': false }, -// * { 'user': 'fred', 'age': 40, 'active': false } -// * ]; -// * -// * // The `_.matches` iteratee shorthand. -// * _.every(users, { 'user': 'barney', 'active': false }); -// * // => false -// * -// * // The `_.matchesProperty` iteratee shorthand. -// * _.every(users, ['active', false]); -// * // => true -// * -// * // The `_.property` iteratee shorthand. -// * _.every(users, 'active'); -// * // => false -// */function every(collection,predicate,guard){var func=isArray(collection)?arrayEvery:baseEvery;if(guard&&isIterateeCall(collection,predicate,guard)){predicate=undefined$1;}return func(collection,getIteratee(predicate,3));}/** -// * Iterates over elements of `collection`, returning an array of all elements -// * `predicate` returns truthy for. The predicate is invoked with three -// * arguments: (value, index|key, collection). -// * -// * **Note:** Unlike `_.remove`, this method returns a new array. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Function} [predicate=_.identity] The function invoked per iteration. -// * @returns {Array} Returns the new filtered array. -// * @see _.reject -// * @example -// * -// * var users = [ -// * { 'user': 'barney', 'age': 36, 'active': true }, -// * { 'user': 'fred', 'age': 40, 'active': false } -// * ]; -// * -// * _.filter(users, function(o) { return !o.active; }); -// * // => objects for ['fred'] -// * -// * // The `_.matches` iteratee shorthand. -// * _.filter(users, { 'age': 36, 'active': true }); -// * // => objects for ['barney'] -// * -// * // The `_.matchesProperty` iteratee shorthand. -// * _.filter(users, ['active', false]); -// * // => objects for ['fred'] -// * -// * // The `_.property` iteratee shorthand. -// * _.filter(users, 'active'); -// * // => objects for ['barney'] -// * -// * // Combining several predicates using `_.overEvery` or `_.overSome`. -// * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); -// * // => objects for ['fred', 'barney'] -// */function filter(collection,predicate){var func=isArray(collection)?arrayFilter:baseFilter;return func(collection,getIteratee(predicate,3));}/** -// * Iterates over elements of `collection`, returning the first element -// * `predicate` returns truthy for. The predicate is invoked with three -// * arguments: (value, index|key, collection). -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Collection -// * @param {Array|Object} collection The collection to inspect. -// * @param {Function} [predicate=_.identity] The function invoked per iteration. -// * @param {number} [fromIndex=0] The index to search from. -// * @returns {*} Returns the matched element, else `undefined`. -// * @example -// * -// * var users = [ -// * { 'user': 'barney', 'age': 36, 'active': true }, -// * { 'user': 'fred', 'age': 40, 'active': false }, -// * { 'user': 'pebbles', 'age': 1, 'active': true } -// * ]; -// * -// * _.find(users, function(o) { return o.age < 40; }); -// * // => object for 'barney' -// * -// * // The `_.matches` iteratee shorthand. -// * _.find(users, { 'age': 1, 'active': true }); -// * // => object for 'pebbles' -// * -// * // The `_.matchesProperty` iteratee shorthand. -// * _.find(users, ['active', false]); -// * // => object for 'fred' -// * -// * // The `_.property` iteratee shorthand. -// * _.find(users, 'active'); -// * // => object for 'barney' -// */var find=createFind(findIndex);/** -// * This method is like `_.find` except that it iterates over elements of -// * `collection` from right to left. -// * -// * @static -// * @memberOf _ -// * @since 2.0.0 -// * @category Collection -// * @param {Array|Object} collection The collection to inspect. -// * @param {Function} [predicate=_.identity] The function invoked per iteration. -// * @param {number} [fromIndex=collection.length-1] The index to search from. -// * @returns {*} Returns the matched element, else `undefined`. -// * @example -// * -// * _.findLast([1, 2, 3, 4], function(n) { -// * return n % 2 == 1; -// * }); -// * // => 3 -// */var findLast=createFind(findLastIndex);/** -// * Creates a flattened array of values by running each element in `collection` -// * thru `iteratee` and flattening the mapped results. The iteratee is invoked -// * with three arguments: (value, index|key, collection). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Function} [iteratee=_.identity] The function invoked per iteration. -// * @returns {Array} Returns the new flattened array. -// * @example -// * -// * function duplicate(n) { -// * return [n, n]; -// * } -// * -// * _.flatMap([1, 2], duplicate); -// * // => [1, 1, 2, 2] -// */function flatMap(collection,iteratee){return baseFlatten(map(collection,iteratee),1);}/** -// * This method is like `_.flatMap` except that it recursively flattens the -// * mapped results. -// * -// * @static -// * @memberOf _ -// * @since 4.7.0 -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Function} [iteratee=_.identity] The function invoked per iteration. -// * @returns {Array} Returns the new flattened array. -// * @example -// * -// * function duplicate(n) { -// * return [[[n, n]]]; -// * } -// * -// * _.flatMapDeep([1, 2], duplicate); -// * // => [1, 1, 2, 2] -// */function flatMapDeep(collection,iteratee){return baseFlatten(map(collection,iteratee),INFINITY);}/** -// * This method is like `_.flatMap` except that it recursively flattens the -// * mapped results up to `depth` times. -// * -// * @static -// * @memberOf _ -// * @since 4.7.0 -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Function} [iteratee=_.identity] The function invoked per iteration. -// * @param {number} [depth=1] The maximum recursion depth. -// * @returns {Array} Returns the new flattened array. -// * @example -// * -// * function duplicate(n) { -// * return [[[n, n]]]; -// * } -// * -// * _.flatMapDepth([1, 2], duplicate, 2); -// * // => [[1, 1], [2, 2]] -// */function flatMapDepth(collection,iteratee,depth){depth=depth===undefined$1?1:toInteger(depth);return baseFlatten(map(collection,iteratee),depth);}/** -// * Iterates over elements of `collection` and invokes `iteratee` for each element. -// * The iteratee is invoked with three arguments: (value, index|key, collection). -// * Iteratee functions may exit iteration early by explicitly returning `false`. -// * -// * **Note:** As with other "Collections" methods, objects with a "length" -// * property are iterated like arrays. To avoid this behavior use `_.forIn` -// * or `_.forOwn` for object iteration. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @alias each -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Function} [iteratee=_.identity] The function invoked per iteration. -// * @returns {Array|Object} Returns `collection`. -// * @see _.forEachRight -// * @example -// * -// * _.forEach([1, 2], function(value) { -// * console.log(value); -// * }); -// * // => Logs `1` then `2`. -// * -// * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { -// * console.log(key); -// * }); -// * // => Logs 'a' then 'b' (iteration order is not guaranteed). -// */function forEach(collection,iteratee){var func=isArray(collection)?arrayEach:baseEach;return func(collection,getIteratee(iteratee,3));}/** -// * This method is like `_.forEach` except that it iterates over elements of -// * `collection` from right to left. -// * -// * @static -// * @memberOf _ -// * @since 2.0.0 -// * @alias eachRight -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Function} [iteratee=_.identity] The function invoked per iteration. -// * @returns {Array|Object} Returns `collection`. -// * @see _.forEach -// * @example -// * -// * _.forEachRight([1, 2], function(value) { -// * console.log(value); -// * }); -// * // => Logs `2` then `1`. -// */function forEachRight(collection,iteratee){var func=isArray(collection)?arrayEachRight:baseEachRight;return func(collection,getIteratee(iteratee,3));}/** -// * Creates an object composed of keys generated from the results of running -// * each element of `collection` thru `iteratee`. The order of grouped values -// * is determined by the order they occur in `collection`. The corresponding -// * value of each key is an array of elements responsible for generating the -// * key. The iteratee is invoked with one argument: (value). -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Function} [iteratee=_.identity] The iteratee to transform keys. -// * @returns {Object} Returns the composed aggregate object. -// * @example -// * -// * _.groupBy([6.1, 4.2, 6.3], Math.floor); -// * // => { '4': [4.2], '6': [6.1, 6.3] } -// * -// * // The `_.property` iteratee shorthand. -// * _.groupBy(['one', 'two', 'three'], 'length'); -// * // => { '3': ['one', 'two'], '5': ['three'] } -// */var groupBy=createAggregator(function(result,value,key){if(hasOwnProperty.call(result,key)){result[key].push(value);}else {baseAssignValue(result,key,[value]);}});/** -// * Checks if `value` is in `collection`. If `collection` is a string, it's -// * checked for a substring of `value`, otherwise -// * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) -// * is used for equality comparisons. If `fromIndex` is negative, it's used as -// * the offset from the end of `collection`. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Collection -// * @param {Array|Object|string} collection The collection to inspect. -// * @param {*} value The value to search for. -// * @param {number} [fromIndex=0] The index to search from. -// * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. -// * @returns {boolean} Returns `true` if `value` is found, else `false`. -// * @example -// * -// * _.includes([1, 2, 3], 1); -// * // => true -// * -// * _.includes([1, 2, 3], 1, 2); -// * // => false -// * -// * _.includes({ 'a': 1, 'b': 2 }, 1); -// * // => true -// * -// * _.includes('abcd', 'bc'); -// * // => true -// */function includes(collection,value,fromIndex,guard){collection=isArrayLike(collection)?collection:values(collection);fromIndex=fromIndex&&!guard?toInteger(fromIndex):0;var length=collection.length;if(fromIndex<0){fromIndex=nativeMax(length+fromIndex,0);}return isString(collection)?fromIndex<=length&&collection.indexOf(value,fromIndex)>-1:!!length&&baseIndexOf(collection,value,fromIndex)>-1;}/** -// * Invokes the method at `path` of each element in `collection`, returning -// * an array of the results of each invoked method. Any additional arguments -// * are provided to each invoked method. If `path` is a function, it's invoked -// * for, and `this` bound to, each element in `collection`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Array|Function|string} path The path of the method to invoke or -// * the function invoked per iteration. -// * @param {...*} [args] The arguments to invoke each method with. -// * @returns {Array} Returns the array of results. -// * @example -// * -// * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); -// * // => [[1, 5, 7], [1, 2, 3]] -// * -// * _.invokeMap([123, 456], String.prototype.split, ''); -// * // => [['1', '2', '3'], ['4', '5', '6']] -// */var invokeMap=baseRest(function(collection,path,args){var index=-1,isFunc=typeof path=='function',result=isArrayLike(collection)?Array(collection.length):[];baseEach(collection,function(value){result[++index]=isFunc?apply(path,value,args):baseInvoke(value,path,args);});return result;});/** -// * Creates an object composed of keys generated from the results of running -// * each element of `collection` thru `iteratee`. The corresponding value of -// * each key is the last element responsible for generating the key. The -// * iteratee is invoked with one argument: (value). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Function} [iteratee=_.identity] The iteratee to transform keys. -// * @returns {Object} Returns the composed aggregate object. -// * @example -// * -// * var array = [ -// * { 'dir': 'left', 'code': 97 }, -// * { 'dir': 'right', 'code': 100 } -// * ]; -// * -// * _.keyBy(array, function(o) { -// * return String.fromCharCode(o.code); -// * }); -// * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } -// * -// * _.keyBy(array, 'dir'); -// * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } -// */var keyBy=createAggregator(function(result,value,key){baseAssignValue(result,key,value);});/** -// * Creates an array of values by running each element in `collection` thru -// * `iteratee`. The iteratee is invoked with three arguments: -// * (value, index|key, collection). -// * -// * Many lodash methods are guarded to work as iteratees for methods like -// * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. -// * -// * The guarded methods are: -// * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, -// * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, -// * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, -// * `template`, `trim`, `trimEnd`, `trimStart`, and `words` -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Function} [iteratee=_.identity] The function invoked per iteration. -// * @returns {Array} Returns the new mapped array. -// * @example -// * -// * function square(n) { -// * return n * n; -// * } -// * -// * _.map([4, 8], square); -// * // => [16, 64] -// * -// * _.map({ 'a': 4, 'b': 8 }, square); -// * // => [16, 64] (iteration order is not guaranteed) -// * -// * var users = [ -// * { 'user': 'barney' }, -// * { 'user': 'fred' } -// * ]; -// * -// * // The `_.property` iteratee shorthand. -// * _.map(users, 'user'); -// * // => ['barney', 'fred'] -// */function map(collection,iteratee){var func=isArray(collection)?arrayMap:baseMap;return func(collection,getIteratee(iteratee,3));}/** -// * This method is like `_.sortBy` except that it allows specifying the sort -// * orders of the iteratees to sort by. If `orders` is unspecified, all values -// * are sorted in ascending order. Otherwise, specify an order of "desc" for -// * descending or "asc" for ascending sort order of corresponding values. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] -// * The iteratees to sort by. -// * @param {string[]} [orders] The sort orders of `iteratees`. -// * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. -// * @returns {Array} Returns the new sorted array. -// * @example -// * -// * var users = [ -// * { 'user': 'fred', 'age': 48 }, -// * { 'user': 'barney', 'age': 34 }, -// * { 'user': 'fred', 'age': 40 }, -// * { 'user': 'barney', 'age': 36 } -// * ]; -// * -// * // Sort by `user` in ascending order and by `age` in descending order. -// * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); -// * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] -// */function orderBy(collection,iteratees,orders,guard){if(collection==null){return [];}if(!isArray(iteratees)){iteratees=iteratees==null?[]:[iteratees];}orders=guard?undefined$1:orders;if(!isArray(orders)){orders=orders==null?[]:[orders];}return baseOrderBy(collection,iteratees,orders);}/** -// * Creates an array of elements split into two groups, the first of which -// * contains elements `predicate` returns truthy for, the second of which -// * contains elements `predicate` returns falsey for. The predicate is -// * invoked with one argument: (value). -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Function} [predicate=_.identity] The function invoked per iteration. -// * @returns {Array} Returns the array of grouped elements. -// * @example -// * -// * var users = [ -// * { 'user': 'barney', 'age': 36, 'active': false }, -// * { 'user': 'fred', 'age': 40, 'active': true }, -// * { 'user': 'pebbles', 'age': 1, 'active': false } -// * ]; -// * -// * _.partition(users, function(o) { return o.active; }); -// * // => objects for [['fred'], ['barney', 'pebbles']] -// * -// * // The `_.matches` iteratee shorthand. -// * _.partition(users, { 'age': 1, 'active': false }); -// * // => objects for [['pebbles'], ['barney', 'fred']] -// * -// * // The `_.matchesProperty` iteratee shorthand. -// * _.partition(users, ['active', false]); -// * // => objects for [['barney', 'pebbles'], ['fred']] -// * -// * // The `_.property` iteratee shorthand. -// * _.partition(users, 'active'); -// * // => objects for [['fred'], ['barney', 'pebbles']] -// */var partition=createAggregator(function(result,value,key){result[key?0:1].push(value);},function(){return [[],[]];});/** -// * Reduces `collection` to a value which is the accumulated result of running -// * each element in `collection` thru `iteratee`, where each successive -// * invocation is supplied the return value of the previous. If `accumulator` -// * is not given, the first element of `collection` is used as the initial -// * value. The iteratee is invoked with four arguments: -// * (accumulator, value, index|key, collection). -// * -// * Many lodash methods are guarded to work as iteratees for methods like -// * `_.reduce`, `_.reduceRight`, and `_.transform`. -// * -// * The guarded methods are: -// * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, -// * and `sortBy` -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Function} [iteratee=_.identity] The function invoked per iteration. -// * @param {*} [accumulator] The initial value. -// * @returns {*} Returns the accumulated value. -// * @see _.reduceRight -// * @example -// * -// * _.reduce([1, 2], function(sum, n) { -// * return sum + n; -// * }, 0); -// * // => 3 -// * -// * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { -// * (result[value] || (result[value] = [])).push(key); -// * return result; -// * }, {}); -// * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) -// */function reduce(collection,iteratee,accumulator){var func=isArray(collection)?arrayReduce:baseReduce,initAccum=arguments.length<3;return func(collection,getIteratee(iteratee,4),accumulator,initAccum,baseEach);}/** -// * This method is like `_.reduce` except that it iterates over elements of -// * `collection` from right to left. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Function} [iteratee=_.identity] The function invoked per iteration. -// * @param {*} [accumulator] The initial value. -// * @returns {*} Returns the accumulated value. -// * @see _.reduce -// * @example -// * -// * var array = [[0, 1], [2, 3], [4, 5]]; -// * -// * _.reduceRight(array, function(flattened, other) { -// * return flattened.concat(other); -// * }, []); -// * // => [4, 5, 2, 3, 0, 1] -// */function reduceRight(collection,iteratee,accumulator){var func=isArray(collection)?arrayReduceRight:baseReduce,initAccum=arguments.length<3;return func(collection,getIteratee(iteratee,4),accumulator,initAccum,baseEachRight);}/** -// * The opposite of `_.filter`; this method returns the elements of `collection` -// * that `predicate` does **not** return truthy for. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Function} [predicate=_.identity] The function invoked per iteration. -// * @returns {Array} Returns the new filtered array. -// * @see _.filter -// * @example -// * -// * var users = [ -// * { 'user': 'barney', 'age': 36, 'active': false }, -// * { 'user': 'fred', 'age': 40, 'active': true } -// * ]; -// * -// * _.reject(users, function(o) { return !o.active; }); -// * // => objects for ['fred'] -// * -// * // The `_.matches` iteratee shorthand. -// * _.reject(users, { 'age': 40, 'active': true }); -// * // => objects for ['barney'] -// * -// * // The `_.matchesProperty` iteratee shorthand. -// * _.reject(users, ['active', false]); -// * // => objects for ['fred'] -// * -// * // The `_.property` iteratee shorthand. -// * _.reject(users, 'active'); -// * // => objects for ['barney'] -// */function reject(collection,predicate){var func=isArray(collection)?arrayFilter:baseFilter;return func(collection,negate(getIteratee(predicate,3)));}/** -// * Gets a random element from `collection`. -// * -// * @static -// * @memberOf _ -// * @since 2.0.0 -// * @category Collection -// * @param {Array|Object} collection The collection to sample. -// * @returns {*} Returns the random element. -// * @example -// * -// * _.sample([1, 2, 3, 4]); -// * // => 2 -// */function sample(collection){var func=isArray(collection)?arraySample:baseSample;return func(collection);}/** -// * Gets `n` random elements at unique keys from `collection` up to the -// * size of `collection`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Collection -// * @param {Array|Object} collection The collection to sample. -// * @param {number} [n=1] The number of elements to sample. -// * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. -// * @returns {Array} Returns the random elements. -// * @example -// * -// * _.sampleSize([1, 2, 3], 2); -// * // => [3, 1] -// * -// * _.sampleSize([1, 2, 3], 4); -// * // => [2, 3, 1] -// */function sampleSize(collection,n,guard){if(guard?isIterateeCall(collection,n,guard):n===undefined$1){n=1;}else {n=toInteger(n);}var func=isArray(collection)?arraySampleSize:baseSampleSize;return func(collection,n);}/** -// * Creates an array of shuffled values, using a version of the -// * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Collection -// * @param {Array|Object} collection The collection to shuffle. -// * @returns {Array} Returns the new shuffled array. -// * @example -// * -// * _.shuffle([1, 2, 3, 4]); -// * // => [4, 1, 3, 2] -// */function shuffle(collection){var func=isArray(collection)?arrayShuffle:baseShuffle;return func(collection);}/** -// * Gets the size of `collection` by returning its length for array-like -// * values or the number of own enumerable string keyed properties for objects. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Collection -// * @param {Array|Object|string} collection The collection to inspect. -// * @returns {number} Returns the collection size. -// * @example -// * -// * _.size([1, 2, 3]); -// * // => 3 -// * -// * _.size({ 'a': 1, 'b': 2 }); -// * // => 2 -// * -// * _.size('pebbles'); -// * // => 7 -// */function size(collection){if(collection==null){return 0;}if(isArrayLike(collection)){return isString(collection)?stringSize(collection):collection.length;}var tag=getTag(collection);if(tag==mapTag||tag==setTag){return collection.size;}return baseKeys(collection).length;}/** -// * Checks if `predicate` returns truthy for **any** element of `collection`. -// * Iteration is stopped once `predicate` returns truthy. The predicate is -// * invoked with three arguments: (value, index|key, collection). -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {Function} [predicate=_.identity] The function invoked per iteration. -// * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. -// * @returns {boolean} Returns `true` if any element passes the predicate check, -// * else `false`. -// * @example -// * -// * _.some([null, 0, 'yes', false], Boolean); -// * // => true -// * -// * var users = [ -// * { 'user': 'barney', 'active': true }, -// * { 'user': 'fred', 'active': false } -// * ]; -// * -// * // The `_.matches` iteratee shorthand. -// * _.some(users, { 'user': 'barney', 'active': false }); -// * // => false -// * -// * // The `_.matchesProperty` iteratee shorthand. -// * _.some(users, ['active', false]); -// * // => true -// * -// * // The `_.property` iteratee shorthand. -// * _.some(users, 'active'); -// * // => true -// */function some(collection,predicate,guard){var func=isArray(collection)?arraySome:baseSome;if(guard&&isIterateeCall(collection,predicate,guard)){predicate=undefined$1;}return func(collection,getIteratee(predicate,3));}/** -// * Creates an array of elements, sorted in ascending order by the results of -// * running each element in a collection thru each iteratee. This method -// * performs a stable sort, that is, it preserves the original sort order of -// * equal elements. The iteratees are invoked with one argument: (value). -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Collection -// * @param {Array|Object} collection The collection to iterate over. -// * @param {...(Function|Function[])} [iteratees=[_.identity]] -// * The iteratees to sort by. -// * @returns {Array} Returns the new sorted array. -// * @example -// * -// * var users = [ -// * { 'user': 'fred', 'age': 48 }, -// * { 'user': 'barney', 'age': 36 }, -// * { 'user': 'fred', 'age': 30 }, -// * { 'user': 'barney', 'age': 34 } -// * ]; -// * -// * _.sortBy(users, [function(o) { return o.user; }]); -// * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] -// * -// * _.sortBy(users, ['user', 'age']); -// * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] -// */var sortBy=baseRest(function(collection,iteratees){if(collection==null){return [];}var length=iteratees.length;if(length>1&&isIterateeCall(collection,iteratees[0],iteratees[1])){iteratees=[];}else if(length>2&&isIterateeCall(iteratees[0],iteratees[1],iteratees[2])){iteratees=[iteratees[0]];}return baseOrderBy(collection,baseFlatten(iteratees,1),[]);});/*------------------------------------------------------------------------*/ /** -// * Gets the timestamp of the number of milliseconds that have elapsed since -// * the Unix epoch (1 January 1970 00:00:00 UTC). -// * -// * @static -// * @memberOf _ -// * @since 2.4.0 -// * @category Date -// * @returns {number} Returns the timestamp. -// * @example -// * -// * _.defer(function(stamp) { -// * console.log(_.now() - stamp); -// * }, _.now()); -// * // => Logs the number of milliseconds it took for the deferred invocation. -// */var now=ctxNow||function(){return root.Date.now();};/*------------------------------------------------------------------------*/ /** -// * The opposite of `_.before`; this method creates a function that invokes -// * `func` once it's called `n` or more times. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Function -// * @param {number} n The number of calls before `func` is invoked. -// * @param {Function} func The function to restrict. -// * @returns {Function} Returns the new restricted function. -// * @example -// * -// * var saves = ['profile', 'settings']; -// * -// * var done = _.after(saves.length, function() { -// * console.log('done saving!'); -// * }); -// * -// * _.forEach(saves, function(type) { -// * asyncSave({ 'type': type, 'complete': done }); -// * }); -// * // => Logs 'done saving!' after the two async saves have completed. -// */function after(n,func){if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}n=toInteger(n);return function(){if(--n<1){return func.apply(this,arguments);}};}/** -// * Creates a function that invokes `func`, with up to `n` arguments, -// * ignoring any additional arguments. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Function -// * @param {Function} func The function to cap arguments for. -// * @param {number} [n=func.length] The arity cap. -// * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. -// * @returns {Function} Returns the new capped function. -// * @example -// * -// * _.map(['6', '8', '10'], _.ary(parseInt, 1)); -// * // => [6, 8, 10] -// */function ary(func,n,guard){n=guard?undefined$1:n;n=func&&n==null?func.length:n;return createWrap(func,WRAP_ARY_FLAG,undefined$1,undefined$1,undefined$1,undefined$1,n);}/** -// * Creates a function that invokes `func`, with the `this` binding and arguments -// * of the created function, while it's called less than `n` times. Subsequent -// * calls to the created function return the result of the last `func` invocation. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Function -// * @param {number} n The number of calls at which `func` is no longer invoked. -// * @param {Function} func The function to restrict. -// * @returns {Function} Returns the new restricted function. -// * @example -// * -// * jQuery(element).on('click', _.before(5, addContactToList)); -// * // => Allows adding up to 4 contacts to the list. -// */function before(n,func){var result;if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}n=toInteger(n);return function(){if(--n>0){result=func.apply(this,arguments);}if(n<=1){func=undefined$1;}return result;};}/** -// * Creates a function that invokes `func` with the `this` binding of `thisArg` -// * and `partials` prepended to the arguments it receives. -// * -// * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, -// * may be used as a placeholder for partially applied arguments. -// * -// * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" -// * property of bound functions. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Function -// * @param {Function} func The function to bind. -// * @param {*} thisArg The `this` binding of `func`. -// * @param {...*} [partials] The arguments to be partially applied. -// * @returns {Function} Returns the new bound function. -// * @example -// * -// * function greet(greeting, punctuation) { -// * return greeting + ' ' + this.user + punctuation; -// * } -// * -// * var object = { 'user': 'fred' }; -// * -// * var bound = _.bind(greet, object, 'hi'); -// * bound('!'); -// * // => 'hi fred!' -// * -// * // Bound with placeholders. -// * var bound = _.bind(greet, object, _, '!'); -// * bound('hi'); -// * // => 'hi fred!' -// */var bind=baseRest(function(func,thisArg,partials){var bitmask=WRAP_BIND_FLAG;if(partials.length){var holders=replaceHolders(partials,getHolder(bind));bitmask|=WRAP_PARTIAL_FLAG;}return createWrap(func,bitmask,thisArg,partials,holders);});/** -// * Creates a function that invokes the method at `object[key]` with `partials` -// * prepended to the arguments it receives. -// * -// * This method differs from `_.bind` by allowing bound functions to reference -// * methods that may be redefined or don't yet exist. See -// * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) -// * for more details. -// * -// * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic -// * builds, may be used as a placeholder for partially applied arguments. -// * -// * @static -// * @memberOf _ -// * @since 0.10.0 -// * @category Function -// * @param {Object} object The object to invoke the method on. -// * @param {string} key The key of the method. -// * @param {...*} [partials] The arguments to be partially applied. -// * @returns {Function} Returns the new bound function. -// * @example -// * -// * var object = { -// * 'user': 'fred', -// * 'greet': function(greeting, punctuation) { -// * return greeting + ' ' + this.user + punctuation; -// * } -// * }; -// * -// * var bound = _.bindKey(object, 'greet', 'hi'); -// * bound('!'); -// * // => 'hi fred!' -// * -// * object.greet = function(greeting, punctuation) { -// * return greeting + 'ya ' + this.user + punctuation; -// * }; -// * -// * bound('!'); -// * // => 'hiya fred!' -// * -// * // Bound with placeholders. -// * var bound = _.bindKey(object, 'greet', _, '!'); -// * bound('hi'); -// * // => 'hiya fred!' -// */var bindKey=baseRest(function(object,key,partials){var bitmask=WRAP_BIND_FLAG|WRAP_BIND_KEY_FLAG;if(partials.length){var holders=replaceHolders(partials,getHolder(bindKey));bitmask|=WRAP_PARTIAL_FLAG;}return createWrap(key,bitmask,object,partials,holders);});/** -// * Creates a function that accepts arguments of `func` and either invokes -// * `func` returning its result, if at least `arity` number of arguments have -// * been provided, or returns a function that accepts the remaining `func` -// * arguments, and so on. The arity of `func` may be specified if `func.length` -// * is not sufficient. -// * -// * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, -// * may be used as a placeholder for provided arguments. -// * -// * **Note:** This method doesn't set the "length" property of curried functions. -// * -// * @static -// * @memberOf _ -// * @since 2.0.0 -// * @category Function -// * @param {Function} func The function to curry. -// * @param {number} [arity=func.length] The arity of `func`. -// * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. -// * @returns {Function} Returns the new curried function. -// * @example -// * -// * var abc = function(a, b, c) { -// * return [a, b, c]; -// * }; -// * -// * var curried = _.curry(abc); -// * -// * curried(1)(2)(3); -// * // => [1, 2, 3] -// * -// * curried(1, 2)(3); -// * // => [1, 2, 3] -// * -// * curried(1, 2, 3); -// * // => [1, 2, 3] -// * -// * // Curried with placeholders. -// * curried(1)(_, 3)(2); -// * // => [1, 2, 3] -// */function curry(func,arity,guard){arity=guard?undefined$1:arity;var result=createWrap(func,WRAP_CURRY_FLAG,undefined$1,undefined$1,undefined$1,undefined$1,undefined$1,arity);result.placeholder=curry.placeholder;return result;}/** -// * This method is like `_.curry` except that arguments are applied to `func` -// * in the manner of `_.partialRight` instead of `_.partial`. -// * -// * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic -// * builds, may be used as a placeholder for provided arguments. -// * -// * **Note:** This method doesn't set the "length" property of curried functions. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Function -// * @param {Function} func The function to curry. -// * @param {number} [arity=func.length] The arity of `func`. -// * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. -// * @returns {Function} Returns the new curried function. -// * @example -// * -// * var abc = function(a, b, c) { -// * return [a, b, c]; -// * }; -// * -// * var curried = _.curryRight(abc); -// * -// * curried(3)(2)(1); -// * // => [1, 2, 3] -// * -// * curried(2, 3)(1); -// * // => [1, 2, 3] -// * -// * curried(1, 2, 3); -// * // => [1, 2, 3] -// * -// * // Curried with placeholders. -// * curried(3)(1, _)(2); -// * // => [1, 2, 3] -// */function curryRight(func,arity,guard){arity=guard?undefined$1:arity;var result=createWrap(func,WRAP_CURRY_RIGHT_FLAG,undefined$1,undefined$1,undefined$1,undefined$1,undefined$1,arity);result.placeholder=curryRight.placeholder;return result;}/** -// * Creates a debounced function that delays invoking `func` until after `wait` -// * milliseconds have elapsed since the last time the debounced function was -// * invoked. The debounced function comes with a `cancel` method to cancel -// * delayed `func` invocations and a `flush` method to immediately invoke them. -// * Provide `options` to indicate whether `func` should be invoked on the -// * leading and/or trailing edge of the `wait` timeout. The `func` is invoked -// * with the last arguments provided to the debounced function. Subsequent -// * calls to the debounced function return the result of the last `func` -// * invocation. -// * -// * **Note:** If `leading` and `trailing` options are `true`, `func` is -// * invoked on the trailing edge of the timeout only if the debounced function -// * is invoked more than once during the `wait` timeout. -// * -// * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred -// * until to the next tick, similar to `setTimeout` with a timeout of `0`. -// * -// * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) -// * for details over the differences between `_.debounce` and `_.throttle`. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Function -// * @param {Function} func The function to debounce. -// * @param {number} [wait=0] The number of milliseconds to delay. -// * @param {Object} [options={}] The options object. -// * @param {boolean} [options.leading=false] -// * Specify invoking on the leading edge of the timeout. -// * @param {number} [options.maxWait] -// * The maximum time `func` is allowed to be delayed before it's invoked. -// * @param {boolean} [options.trailing=true] -// * Specify invoking on the trailing edge of the timeout. -// * @returns {Function} Returns the new debounced function. -// * @example -// * -// * // Avoid costly calculations while the window size is in flux. -// * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); -// * -// * // Invoke `sendMail` when clicked, debouncing subsequent calls. -// * jQuery(element).on('click', _.debounce(sendMail, 300, { -// * 'leading': true, -// * 'trailing': false -// * })); -// * -// * // Ensure `batchLog` is invoked once after 1 second of debounced calls. -// * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); -// * var source = new EventSource('/stream'); -// * jQuery(source).on('message', debounced); -// * -// * // Cancel the trailing debounced invocation. -// * jQuery(window).on('popstate', debounced.cancel); -// */function debounce(func,wait,options){var lastArgs,lastThis,maxWait,result,timerId,lastCallTime,lastInvokeTime=0,leading=false,maxing=false,trailing=true;if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}wait=toNumber(wait)||0;if(isObject(options)){leading=!!options.leading;maxing='maxWait'in options;maxWait=maxing?nativeMax(toNumber(options.maxWait)||0,wait):maxWait;trailing='trailing'in options?!!options.trailing:trailing;}function invokeFunc(time){var args=lastArgs,thisArg=lastThis;lastArgs=lastThis=undefined$1;lastInvokeTime=time;result=func.apply(thisArg,args);return result;}function leadingEdge(time){// Reset any `maxWait` timer. -// lastInvokeTime=time;// Start the timer for the trailing edge. -// timerId=setTimeout(timerExpired,wait);// Invoke the leading edge. -// return leading?invokeFunc(time):result;}function remainingWait(time){var timeSinceLastCall=time-lastCallTime,timeSinceLastInvoke=time-lastInvokeTime,timeWaiting=wait-timeSinceLastCall;return maxing?nativeMin(timeWaiting,maxWait-timeSinceLastInvoke):timeWaiting;}function shouldInvoke(time){var timeSinceLastCall=time-lastCallTime,timeSinceLastInvoke=time-lastInvokeTime;// Either this is the first call, activity has stopped and we're at the -// // trailing edge, the system time has gone backwards and we're treating -// // it as the trailing edge, or we've hit the `maxWait` limit. -// return lastCallTime===undefined$1||timeSinceLastCall>=wait||timeSinceLastCall<0||maxing&&timeSinceLastInvoke>=maxWait;}function timerExpired(){var time=now();if(shouldInvoke(time)){return trailingEdge(time);}// Restart the timer. -// timerId=setTimeout(timerExpired,remainingWait(time));}function trailingEdge(time){timerId=undefined$1;// Only invoke if we have `lastArgs` which means `func` has been -// // debounced at least once. -// if(trailing&&lastArgs){return invokeFunc(time);}lastArgs=lastThis=undefined$1;return result;}function cancel(){if(timerId!==undefined$1){clearTimeout(timerId);}lastInvokeTime=0;lastArgs=lastCallTime=lastThis=timerId=undefined$1;}function flush(){return timerId===undefined$1?result:trailingEdge(now());}function debounced(){var time=now(),isInvoking=shouldInvoke(time);lastArgs=arguments;lastThis=this;lastCallTime=time;if(isInvoking){if(timerId===undefined$1){return leadingEdge(lastCallTime);}if(maxing){// Handle invocations in a tight loop. -// clearTimeout(timerId);timerId=setTimeout(timerExpired,wait);return invokeFunc(lastCallTime);}}if(timerId===undefined$1){timerId=setTimeout(timerExpired,wait);}return result;}debounced.cancel=cancel;debounced.flush=flush;return debounced;}/** -// * Defers invoking the `func` until the current call stack has cleared. Any -// * additional arguments are provided to `func` when it's invoked. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Function -// * @param {Function} func The function to defer. -// * @param {...*} [args] The arguments to invoke `func` with. -// * @returns {number} Returns the timer id. -// * @example -// * -// * _.defer(function(text) { -// * console.log(text); -// * }, 'deferred'); -// * // => Logs 'deferred' after one millisecond. -// */var defer=baseRest(function(func,args){return baseDelay(func,1,args);});/** -// * Invokes `func` after `wait` milliseconds. Any additional arguments are -// * provided to `func` when it's invoked. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Function -// * @param {Function} func The function to delay. -// * @param {number} wait The number of milliseconds to delay invocation. -// * @param {...*} [args] The arguments to invoke `func` with. -// * @returns {number} Returns the timer id. -// * @example -// * -// * _.delay(function(text) { -// * console.log(text); -// * }, 1000, 'later'); -// * // => Logs 'later' after one second. -// */var delay=baseRest(function(func,wait,args){return baseDelay(func,toNumber(wait)||0,args);});/** -// * Creates a function that invokes `func` with arguments reversed. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Function -// * @param {Function} func The function to flip arguments for. -// * @returns {Function} Returns the new flipped function. -// * @example -// * -// * var flipped = _.flip(function() { -// * return _.toArray(arguments); -// * }); -// * -// * flipped('a', 'b', 'c', 'd'); -// * // => ['d', 'c', 'b', 'a'] -// */function flip(func){return createWrap(func,WRAP_FLIP_FLAG);}/** -// * Creates a function that memoizes the result of `func`. If `resolver` is -// * provided, it determines the cache key for storing the result based on the -// * arguments provided to the memoized function. By default, the first argument -// * provided to the memoized function is used as the map cache key. The `func` -// * is invoked with the `this` binding of the memoized function. -// * -// * **Note:** The cache is exposed as the `cache` property on the memoized -// * function. Its creation may be customized by replacing the `_.memoize.Cache` -// * constructor with one whose instances implement the -// * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) -// * method interface of `clear`, `delete`, `get`, `has`, and `set`. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Function -// * @param {Function} func The function to have its output memoized. -// * @param {Function} [resolver] The function to resolve the cache key. -// * @returns {Function} Returns the new memoized function. -// * @example -// * -// * var object = { 'a': 1, 'b': 2 }; -// * var other = { 'c': 3, 'd': 4 }; -// * -// * var values = _.memoize(_.values); -// * values(object); -// * // => [1, 2] -// * -// * values(other); -// * // => [3, 4] -// * -// * object.a = 2; -// * values(object); -// * // => [1, 2] -// * -// * // Modify the result cache. -// * values.cache.set(object, ['a', 'b']); -// * values(object); -// * // => ['a', 'b'] -// * -// * // Replace `_.memoize.Cache`. -// * _.memoize.Cache = WeakMap; -// */function memoize(func,resolver){if(typeof func!='function'||resolver!=null&&typeof resolver!='function'){throw new TypeError(FUNC_ERROR_TEXT);}var memoized=function(){var args=arguments,key=resolver?resolver.apply(this,args):args[0],cache=memoized.cache;if(cache.has(key)){return cache.get(key);}var result=func.apply(this,args);memoized.cache=cache.set(key,result)||cache;return result;};memoized.cache=new(memoize.Cache||MapCache)();return memoized;}// Expose `MapCache`. -// memoize.Cache=MapCache;/** -// * Creates a function that negates the result of the predicate `func`. The -// * `func` predicate is invoked with the `this` binding and arguments of the -// * created function. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Function -// * @param {Function} predicate The predicate to negate. -// * @returns {Function} Returns the new negated function. -// * @example -// * -// * function isEven(n) { -// * return n % 2 == 0; -// * } -// * -// * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); -// * // => [1, 3, 5] -// */function negate(predicate){if(typeof predicate!='function'){throw new TypeError(FUNC_ERROR_TEXT);}return function(){var args=arguments;switch(args.length){case 0:return !predicate.call(this);case 1:return !predicate.call(this,args[0]);case 2:return !predicate.call(this,args[0],args[1]);case 3:return !predicate.call(this,args[0],args[1],args[2]);}return !predicate.apply(this,args);};}/** -// * Creates a function that is restricted to invoking `func` once. Repeat calls -// * to the function return the value of the first invocation. The `func` is -// * invoked with the `this` binding and arguments of the created function. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Function -// * @param {Function} func The function to restrict. -// * @returns {Function} Returns the new restricted function. -// * @example -// * -// * var initialize = _.once(createApplication); -// * initialize(); -// * initialize(); -// * // => `createApplication` is invoked once -// */function once(func){return before(2,func);}/** -// * Creates a function that invokes `func` with its arguments transformed. -// * -// * @static -// * @since 4.0.0 -// * @memberOf _ -// * @category Function -// * @param {Function} func The function to wrap. -// * @param {...(Function|Function[])} [transforms=[_.identity]] -// * The argument transforms. -// * @returns {Function} Returns the new function. -// * @example -// * -// * function doubled(n) { -// * return n * 2; -// * } -// * -// * function square(n) { -// * return n * n; -// * } -// * -// * var func = _.overArgs(function(x, y) { -// * return [x, y]; -// * }, [square, doubled]); -// * -// * func(9, 3); -// * // => [81, 6] -// * -// * func(10, 5); -// * // => [100, 10] -// */var overArgs=castRest(function(func,transforms){transforms=transforms.length==1&&isArray(transforms[0])?arrayMap(transforms[0],baseUnary(getIteratee())):arrayMap(baseFlatten(transforms,1),baseUnary(getIteratee()));var funcsLength=transforms.length;return baseRest(function(args){var index=-1,length=nativeMin(args.length,funcsLength);while(++index 'hello fred' -// * -// * // Partially applied with placeholders. -// * var greetFred = _.partial(greet, _, 'fred'); -// * greetFred('hi'); -// * // => 'hi fred' -// */var partial=baseRest(function(func,partials){var holders=replaceHolders(partials,getHolder(partial));return createWrap(func,WRAP_PARTIAL_FLAG,undefined$1,partials,holders);});/** -// * This method is like `_.partial` except that partially applied arguments -// * are appended to the arguments it receives. -// * -// * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic -// * builds, may be used as a placeholder for partially applied arguments. -// * -// * **Note:** This method doesn't set the "length" property of partially -// * applied functions. -// * -// * @static -// * @memberOf _ -// * @since 1.0.0 -// * @category Function -// * @param {Function} func The function to partially apply arguments to. -// * @param {...*} [partials] The arguments to be partially applied. -// * @returns {Function} Returns the new partially applied function. -// * @example -// * -// * function greet(greeting, name) { -// * return greeting + ' ' + name; -// * } -// * -// * var greetFred = _.partialRight(greet, 'fred'); -// * greetFred('hi'); -// * // => 'hi fred' -// * -// * // Partially applied with placeholders. -// * var sayHelloTo = _.partialRight(greet, 'hello', _); -// * sayHelloTo('fred'); -// * // => 'hello fred' -// */var partialRight=baseRest(function(func,partials){var holders=replaceHolders(partials,getHolder(partialRight));return createWrap(func,WRAP_PARTIAL_RIGHT_FLAG,undefined$1,partials,holders);});/** -// * Creates a function that invokes `func` with arguments arranged according -// * to the specified `indexes` where the argument value at the first index is -// * provided as the first argument, the argument value at the second index is -// * provided as the second argument, and so on. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Function -// * @param {Function} func The function to rearrange arguments for. -// * @param {...(number|number[])} indexes The arranged argument indexes. -// * @returns {Function} Returns the new function. -// * @example -// * -// * var rearged = _.rearg(function(a, b, c) { -// * return [a, b, c]; -// * }, [2, 0, 1]); -// * -// * rearged('b', 'c', 'a') -// * // => ['a', 'b', 'c'] -// */var rearg=flatRest(function(func,indexes){return createWrap(func,WRAP_REARG_FLAG,undefined$1,undefined$1,undefined$1,indexes);});/** -// * Creates a function that invokes `func` with the `this` binding of the -// * created function and arguments from `start` and beyond provided as -// * an array. -// * -// * **Note:** This method is based on the -// * [rest parameter](https://mdn.io/rest_parameters). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Function -// * @param {Function} func The function to apply a rest parameter to. -// * @param {number} [start=func.length-1] The start position of the rest parameter. -// * @returns {Function} Returns the new function. -// * @example -// * -// * var say = _.rest(function(what, names) { -// * return what + ' ' + _.initial(names).join(', ') + -// * (_.size(names) > 1 ? ', & ' : '') + _.last(names); -// * }); -// * -// * say('hello', 'fred', 'barney', 'pebbles'); -// * // => 'hello fred, barney, & pebbles' -// */function rest(func,start){if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}start=start===undefined$1?start:toInteger(start);return baseRest(func,start);}/** -// * Creates a function that invokes `func` with the `this` binding of the -// * create function and an array of arguments much like -// * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). -// * -// * **Note:** This method is based on the -// * [spread operator](https://mdn.io/spread_operator). -// * -// * @static -// * @memberOf _ -// * @since 3.2.0 -// * @category Function -// * @param {Function} func The function to spread arguments over. -// * @param {number} [start=0] The start position of the spread. -// * @returns {Function} Returns the new function. -// * @example -// * -// * var say = _.spread(function(who, what) { -// * return who + ' says ' + what; -// * }); -// * -// * say(['fred', 'hello']); -// * // => 'fred says hello' -// * -// * var numbers = Promise.all([ -// * Promise.resolve(40), -// * Promise.resolve(36) -// * ]); -// * -// * numbers.then(_.spread(function(x, y) { -// * return x + y; -// * })); -// * // => a Promise of 76 -// */function spread(func,start){if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}start=start==null?0:nativeMax(toInteger(start),0);return baseRest(function(args){var array=args[start],otherArgs=castSlice(args,0,start);if(array){arrayPush(otherArgs,array);}return apply(func,this,otherArgs);});}/** -// * Creates a throttled function that only invokes `func` at most once per -// * every `wait` milliseconds. The throttled function comes with a `cancel` -// * method to cancel delayed `func` invocations and a `flush` method to -// * immediately invoke them. Provide `options` to indicate whether `func` -// * should be invoked on the leading and/or trailing edge of the `wait` -// * timeout. The `func` is invoked with the last arguments provided to the -// * throttled function. Subsequent calls to the throttled function return the -// * result of the last `func` invocation. -// * -// * **Note:** If `leading` and `trailing` options are `true`, `func` is -// * invoked on the trailing edge of the timeout only if the throttled function -// * is invoked more than once during the `wait` timeout. -// * -// * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred -// * until to the next tick, similar to `setTimeout` with a timeout of `0`. -// * -// * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) -// * for details over the differences between `_.throttle` and `_.debounce`. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Function -// * @param {Function} func The function to throttle. -// * @param {number} [wait=0] The number of milliseconds to throttle invocations to. -// * @param {Object} [options={}] The options object. -// * @param {boolean} [options.leading=true] -// * Specify invoking on the leading edge of the timeout. -// * @param {boolean} [options.trailing=true] -// * Specify invoking on the trailing edge of the timeout. -// * @returns {Function} Returns the new throttled function. -// * @example -// * -// * // Avoid excessively updating the position while scrolling. -// * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); -// * -// * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. -// * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); -// * jQuery(element).on('click', throttled); -// * -// * // Cancel the trailing throttled invocation. -// * jQuery(window).on('popstate', throttled.cancel); -// */function throttle(func,wait,options){var leading=true,trailing=true;if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}if(isObject(options)){leading='leading'in options?!!options.leading:leading;trailing='trailing'in options?!!options.trailing:trailing;}return debounce(func,wait,{'leading':leading,'maxWait':wait,'trailing':trailing});}/** -// * Creates a function that accepts up to one argument, ignoring any -// * additional arguments. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Function -// * @param {Function} func The function to cap arguments for. -// * @returns {Function} Returns the new capped function. -// * @example -// * -// * _.map(['6', '8', '10'], _.unary(parseInt)); -// * // => [6, 8, 10] -// */function unary(func){return ary(func,1);}/** -// * Creates a function that provides `value` to `wrapper` as its first -// * argument. Any additional arguments provided to the function are appended -// * to those provided to the `wrapper`. The wrapper is invoked with the `this` -// * binding of the created function. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Function -// * @param {*} value The value to wrap. -// * @param {Function} [wrapper=identity] The wrapper function. -// * @returns {Function} Returns the new function. -// * @example -// * -// * var p = _.wrap(_.escape, function(func, text) { -// * return '

' + func(text) + '

'; -// * }); -// * -// * p('fred, barney, & pebbles'); -// * // => '

fred, barney, & pebbles

' -// */function wrap(value,wrapper){return partial(castFunction(wrapper),value);}/*------------------------------------------------------------------------*/ /** -// * Casts `value` as an array if it's not one. -// * -// * @static -// * @memberOf _ -// * @since 4.4.0 -// * @category Lang -// * @param {*} value The value to inspect. -// * @returns {Array} Returns the cast array. -// * @example -// * -// * _.castArray(1); -// * // => [1] -// * -// * _.castArray({ 'a': 1 }); -// * // => [{ 'a': 1 }] -// * -// * _.castArray('abc'); -// * // => ['abc'] -// * -// * _.castArray(null); -// * // => [null] -// * -// * _.castArray(undefined); -// * // => [undefined] -// * -// * _.castArray(); -// * // => [] -// * -// * var array = [1, 2, 3]; -// * console.log(_.castArray(array) === array); -// * // => true -// */function castArray(){if(!arguments.length){return [];}var value=arguments[0];return isArray(value)?value:[value];}/** -// * Creates a shallow clone of `value`. -// * -// * **Note:** This method is loosely based on the -// * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) -// * and supports cloning arrays, array buffers, booleans, date objects, maps, -// * numbers, `Object` objects, regexes, sets, strings, symbols, and typed -// * arrays. The own enumerable properties of `arguments` objects are cloned -// * as plain objects. An empty object is returned for uncloneable values such -// * as error objects, functions, DOM nodes, and WeakMaps. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Lang -// * @param {*} value The value to clone. -// * @returns {*} Returns the cloned value. -// * @see _.cloneDeep -// * @example -// * -// * var objects = [{ 'a': 1 }, { 'b': 2 }]; -// * -// * var shallow = _.clone(objects); -// * console.log(shallow[0] === objects[0]); -// * // => true -// */function clone(value){return baseClone(value,CLONE_SYMBOLS_FLAG);}/** -// * This method is like `_.clone` except that it accepts `customizer` which -// * is invoked to produce the cloned value. If `customizer` returns `undefined`, -// * cloning is handled by the method instead. The `customizer` is invoked with -// * up to four arguments; (value [, index|key, object, stack]). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {*} value The value to clone. -// * @param {Function} [customizer] The function to customize cloning. -// * @returns {*} Returns the cloned value. -// * @see _.cloneDeepWith -// * @example -// * -// * function customizer(value) { -// * if (_.isElement(value)) { -// * return value.cloneNode(false); -// * } -// * } -// * -// * var el = _.cloneWith(document.body, customizer); -// * -// * console.log(el === document.body); -// * // => false -// * console.log(el.nodeName); -// * // => 'BODY' -// * console.log(el.childNodes.length); -// * // => 0 -// */function cloneWith(value,customizer){customizer=typeof customizer=='function'?customizer:undefined$1;return baseClone(value,CLONE_SYMBOLS_FLAG,customizer);}/** -// * This method is like `_.clone` except that it recursively clones `value`. -// * -// * @static -// * @memberOf _ -// * @since 1.0.0 -// * @category Lang -// * @param {*} value The value to recursively clone. -// * @returns {*} Returns the deep cloned value. -// * @see _.clone -// * @example -// * -// * var objects = [{ 'a': 1 }, { 'b': 2 }]; -// * -// * var deep = _.cloneDeep(objects); -// * console.log(deep[0] === objects[0]); -// * // => false -// */function cloneDeep(value){return baseClone(value,CLONE_DEEP_FLAG|CLONE_SYMBOLS_FLAG);}/** -// * This method is like `_.cloneWith` except that it recursively clones `value`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {*} value The value to recursively clone. -// * @param {Function} [customizer] The function to customize cloning. -// * @returns {*} Returns the deep cloned value. -// * @see _.cloneWith -// * @example -// * -// * function customizer(value) { -// * if (_.isElement(value)) { -// * return value.cloneNode(true); -// * } -// * } -// * -// * var el = _.cloneDeepWith(document.body, customizer); -// * -// * console.log(el === document.body); -// * // => false -// * console.log(el.nodeName); -// * // => 'BODY' -// * console.log(el.childNodes.length); -// * // => 20 -// */function cloneDeepWith(value,customizer){customizer=typeof customizer=='function'?customizer:undefined$1;return baseClone(value,CLONE_DEEP_FLAG|CLONE_SYMBOLS_FLAG,customizer);}/** -// * Checks if `object` conforms to `source` by invoking the predicate -// * properties of `source` with the corresponding property values of `object`. -// * -// * **Note:** This method is equivalent to `_.conforms` when `source` is -// * partially applied. -// * -// * @static -// * @memberOf _ -// * @since 4.14.0 -// * @category Lang -// * @param {Object} object The object to inspect. -// * @param {Object} source The object of property predicates to conform to. -// * @returns {boolean} Returns `true` if `object` conforms, else `false`. -// * @example -// * -// * var object = { 'a': 1, 'b': 2 }; -// * -// * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); -// * // => true -// * -// * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); -// * // => false -// */function conformsTo(object,source){return source==null||baseConformsTo(object,source,keys(source));}/** -// * Performs a -// * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) -// * comparison between two values to determine if they are equivalent. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {*} value The value to compare. -// * @param {*} other The other value to compare. -// * @returns {boolean} Returns `true` if the values are equivalent, else `false`. -// * @example -// * -// * var object = { 'a': 1 }; -// * var other = { 'a': 1 }; -// * -// * _.eq(object, object); -// * // => true -// * -// * _.eq(object, other); -// * // => false -// * -// * _.eq('a', 'a'); -// * // => true -// * -// * _.eq('a', Object('a')); -// * // => false -// * -// * _.eq(NaN, NaN); -// * // => true -// */function eq(value,other){return value===other||value!==value&&other!==other;}/** -// * Checks if `value` is greater than `other`. -// * -// * @static -// * @memberOf _ -// * @since 3.9.0 -// * @category Lang -// * @param {*} value The value to compare. -// * @param {*} other The other value to compare. -// * @returns {boolean} Returns `true` if `value` is greater than `other`, -// * else `false`. -// * @see _.lt -// * @example -// * -// * _.gt(3, 1); -// * // => true -// * -// * _.gt(3, 3); -// * // => false -// * -// * _.gt(1, 3); -// * // => false -// */var gt=createRelationalOperation(baseGt);/** -// * Checks if `value` is greater than or equal to `other`. -// * -// * @static -// * @memberOf _ -// * @since 3.9.0 -// * @category Lang -// * @param {*} value The value to compare. -// * @param {*} other The other value to compare. -// * @returns {boolean} Returns `true` if `value` is greater than or equal to -// * `other`, else `false`. -// * @see _.lte -// * @example -// * -// * _.gte(3, 1); -// * // => true -// * -// * _.gte(3, 3); -// * // => true -// * -// * _.gte(1, 3); -// * // => false -// */var gte=createRelationalOperation(function(value,other){return value>=other;});/** -// * Checks if `value` is likely an `arguments` object. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is an `arguments` object, -// * else `false`. -// * @example -// * -// * _.isArguments(function() { return arguments; }()); -// * // => true -// * -// * _.isArguments([1, 2, 3]); -// * // => false -// */var isArguments=baseIsArguments(function(){return arguments;}())?baseIsArguments:function(value){return isObjectLike(value)&&hasOwnProperty.call(value,'callee')&&!propertyIsEnumerable.call(value,'callee');};/** -// * Checks if `value` is classified as an `Array` object. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is an array, else `false`. -// * @example -// * -// * _.isArray([1, 2, 3]); -// * // => true -// * -// * _.isArray(document.body.children); -// * // => false -// * -// * _.isArray('abc'); -// * // => false -// * -// * _.isArray(_.noop); -// * // => false -// */var isArray=Array.isArray;/** -// * Checks if `value` is classified as an `ArrayBuffer` object. -// * -// * @static -// * @memberOf _ -// * @since 4.3.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. -// * @example -// * -// * _.isArrayBuffer(new ArrayBuffer(2)); -// * // => true -// * -// * _.isArrayBuffer(new Array(2)); -// * // => false -// */var isArrayBuffer=nodeIsArrayBuffer?baseUnary(nodeIsArrayBuffer):baseIsArrayBuffer;/** -// * Checks if `value` is array-like. A value is considered array-like if it's -// * not a function and has a `value.length` that's an integer greater than or -// * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is array-like, else `false`. -// * @example -// * -// * _.isArrayLike([1, 2, 3]); -// * // => true -// * -// * _.isArrayLike(document.body.children); -// * // => true -// * -// * _.isArrayLike('abc'); -// * // => true -// * -// * _.isArrayLike(_.noop); -// * // => false -// */function isArrayLike(value){return value!=null&&isLength(value.length)&&!isFunction(value);}/** -// * This method is like `_.isArrayLike` except that it also checks if `value` -// * is an object. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is an array-like object, -// * else `false`. -// * @example -// * -// * _.isArrayLikeObject([1, 2, 3]); -// * // => true -// * -// * _.isArrayLikeObject(document.body.children); -// * // => true -// * -// * _.isArrayLikeObject('abc'); -// * // => false -// * -// * _.isArrayLikeObject(_.noop); -// * // => false -// */function isArrayLikeObject(value){return isObjectLike(value)&&isArrayLike(value);}/** -// * Checks if `value` is classified as a boolean primitive or object. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. -// * @example -// * -// * _.isBoolean(false); -// * // => true -// * -// * _.isBoolean(null); -// * // => false -// */function isBoolean(value){return value===true||value===false||isObjectLike(value)&&baseGetTag(value)==boolTag;}/** -// * Checks if `value` is a buffer. -// * -// * @static -// * @memberOf _ -// * @since 4.3.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. -// * @example -// * -// * _.isBuffer(new Buffer(2)); -// * // => true -// * -// * _.isBuffer(new Uint8Array(2)); -// * // => false -// */var isBuffer=nativeIsBuffer||stubFalse;/** -// * Checks if `value` is classified as a `Date` object. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a date object, else `false`. -// * @example -// * -// * _.isDate(new Date); -// * // => true -// * -// * _.isDate('Mon April 23 2012'); -// * // => false -// */var isDate=nodeIsDate?baseUnary(nodeIsDate):baseIsDate;/** -// * Checks if `value` is likely a DOM element. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. -// * @example -// * -// * _.isElement(document.body); -// * // => true -// * -// * _.isElement(''); -// * // => false -// */function isElement(value){return isObjectLike(value)&&value.nodeType===1&&!isPlainObject(value);}/** -// * Checks if `value` is an empty object, collection, map, or set. -// * -// * Objects are considered empty if they have no own enumerable string keyed -// * properties. -// * -// * Array-like values such as `arguments` objects, arrays, buffers, strings, or -// * jQuery-like collections are considered empty if they have a `length` of `0`. -// * Similarly, maps and sets are considered empty if they have a `size` of `0`. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is empty, else `false`. -// * @example -// * -// * _.isEmpty(null); -// * // => true -// * -// * _.isEmpty(true); -// * // => true -// * -// * _.isEmpty(1); -// * // => true -// * -// * _.isEmpty([1, 2, 3]); -// * // => false -// * -// * _.isEmpty({ 'a': 1 }); -// * // => false -// */function isEmpty(value){if(value==null){return true;}if(isArrayLike(value)&&(isArray(value)||typeof value=='string'||typeof value.splice=='function'||isBuffer(value)||isTypedArray(value)||isArguments(value))){return !value.length;}var tag=getTag(value);if(tag==mapTag||tag==setTag){return !value.size;}if(isPrototype(value)){return !baseKeys(value).length;}for(var key in value){if(hasOwnProperty.call(value,key)){return false;}}return true;}/** -// * Performs a deep comparison between two values to determine if they are -// * equivalent. -// * -// * **Note:** This method supports comparing arrays, array buffers, booleans, -// * date objects, error objects, maps, numbers, `Object` objects, regexes, -// * sets, strings, symbols, and typed arrays. `Object` objects are compared -// * by their own, not inherited, enumerable properties. Functions and DOM -// * nodes are compared by strict equality, i.e. `===`. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Lang -// * @param {*} value The value to compare. -// * @param {*} other The other value to compare. -// * @returns {boolean} Returns `true` if the values are equivalent, else `false`. -// * @example -// * -// * var object = { 'a': 1 }; -// * var other = { 'a': 1 }; -// * -// * _.isEqual(object, other); -// * // => true -// * -// * object === other; -// * // => false -// */function isEqual(value,other){return baseIsEqual(value,other);}/** -// * This method is like `_.isEqual` except that it accepts `customizer` which -// * is invoked to compare values. If `customizer` returns `undefined`, comparisons -// * are handled by the method instead. The `customizer` is invoked with up to -// * six arguments: (objValue, othValue [, index|key, object, other, stack]). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {*} value The value to compare. -// * @param {*} other The other value to compare. -// * @param {Function} [customizer] The function to customize comparisons. -// * @returns {boolean} Returns `true` if the values are equivalent, else `false`. -// * @example -// * -// * function isGreeting(value) { -// * return /^h(?:i|ello)$/.test(value); -// * } -// * -// * function customizer(objValue, othValue) { -// * if (isGreeting(objValue) && isGreeting(othValue)) { -// * return true; -// * } -// * } -// * -// * var array = ['hello', 'goodbye']; -// * var other = ['hi', 'goodbye']; -// * -// * _.isEqualWith(array, other, customizer); -// * // => true -// */function isEqualWith(value,other,customizer){customizer=typeof customizer=='function'?customizer:undefined$1;var result=customizer?customizer(value,other):undefined$1;return result===undefined$1?baseIsEqual(value,other,undefined$1,customizer):!!result;}/** -// * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, -// * `SyntaxError`, `TypeError`, or `URIError` object. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is an error object, else `false`. -// * @example -// * -// * _.isError(new Error); -// * // => true -// * -// * _.isError(Error); -// * // => false -// */function isError(value){if(!isObjectLike(value)){return false;}var tag=baseGetTag(value);return tag==errorTag||tag==domExcTag||typeof value.message=='string'&&typeof value.name=='string'&&!isPlainObject(value);}/** -// * Checks if `value` is a finite primitive number. -// * -// * **Note:** This method is based on -// * [`Number.isFinite`](https://mdn.io/Number/isFinite). -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. -// * @example -// * -// * _.isFinite(3); -// * // => true -// * -// * _.isFinite(Number.MIN_VALUE); -// * // => true -// * -// * _.isFinite(Infinity); -// * // => false -// * -// * _.isFinite('3'); -// * // => false -// */function isFinite(value){return typeof value=='number'&&nativeIsFinite(value);}/** -// * Checks if `value` is classified as a `Function` object. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a function, else `false`. -// * @example -// * -// * _.isFunction(_); -// * // => true -// * -// * _.isFunction(/abc/); -// * // => false -// */function isFunction(value){if(!isObject(value)){return false;}// The use of `Object#toString` avoids issues with the `typeof` operator -// // in Safari 9 which returns 'object' for typed arrays and other constructors. -// var tag=baseGetTag(value);return tag==funcTag||tag==genTag||tag==asyncTag||tag==proxyTag;}/** -// * Checks if `value` is an integer. -// * -// * **Note:** This method is based on -// * [`Number.isInteger`](https://mdn.io/Number/isInteger). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is an integer, else `false`. -// * @example -// * -// * _.isInteger(3); -// * // => true -// * -// * _.isInteger(Number.MIN_VALUE); -// * // => false -// * -// * _.isInteger(Infinity); -// * // => false -// * -// * _.isInteger('3'); -// * // => false -// */function isInteger(value){return typeof value=='number'&&value==toInteger(value);}/** -// * Checks if `value` is a valid array-like length. -// * -// * **Note:** This method is loosely based on -// * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. -// * @example -// * -// * _.isLength(3); -// * // => true -// * -// * _.isLength(Number.MIN_VALUE); -// * // => false -// * -// * _.isLength(Infinity); -// * // => false -// * -// * _.isLength('3'); -// * // => false -// */function isLength(value){return typeof value=='number'&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER;}/** -// * Checks if `value` is the -// * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) -// * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is an object, else `false`. -// * @example -// * -// * _.isObject({}); -// * // => true -// * -// * _.isObject([1, 2, 3]); -// * // => true -// * -// * _.isObject(_.noop); -// * // => true -// * -// * _.isObject(null); -// * // => false -// */function isObject(value){var type=typeof value;return value!=null&&(type=='object'||type=='function');}/** -// * Checks if `value` is object-like. A value is object-like if it's not `null` -// * and has a `typeof` result of "object". -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is object-like, else `false`. -// * @example -// * -// * _.isObjectLike({}); -// * // => true -// * -// * _.isObjectLike([1, 2, 3]); -// * // => true -// * -// * _.isObjectLike(_.noop); -// * // => false -// * -// * _.isObjectLike(null); -// * // => false -// */function isObjectLike(value){return value!=null&&typeof value=='object';}/** -// * Checks if `value` is classified as a `Map` object. -// * -// * @static -// * @memberOf _ -// * @since 4.3.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a map, else `false`. -// * @example -// * -// * _.isMap(new Map); -// * // => true -// * -// * _.isMap(new WeakMap); -// * // => false -// */var isMap=nodeIsMap?baseUnary(nodeIsMap):baseIsMap;/** -// * Performs a partial deep comparison between `object` and `source` to -// * determine if `object` contains equivalent property values. -// * -// * **Note:** This method is equivalent to `_.matches` when `source` is -// * partially applied. -// * -// * Partial comparisons will match empty array and empty object `source` -// * values against any array or object value, respectively. See `_.isEqual` -// * for a list of supported value comparisons. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Lang -// * @param {Object} object The object to inspect. -// * @param {Object} source The object of property values to match. -// * @returns {boolean} Returns `true` if `object` is a match, else `false`. -// * @example -// * -// * var object = { 'a': 1, 'b': 2 }; -// * -// * _.isMatch(object, { 'b': 2 }); -// * // => true -// * -// * _.isMatch(object, { 'b': 1 }); -// * // => false -// */function isMatch(object,source){return object===source||baseIsMatch(object,source,getMatchData(source));}/** -// * This method is like `_.isMatch` except that it accepts `customizer` which -// * is invoked to compare values. If `customizer` returns `undefined`, comparisons -// * are handled by the method instead. The `customizer` is invoked with five -// * arguments: (objValue, srcValue, index|key, object, source). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {Object} object The object to inspect. -// * @param {Object} source The object of property values to match. -// * @param {Function} [customizer] The function to customize comparisons. -// * @returns {boolean} Returns `true` if `object` is a match, else `false`. -// * @example -// * -// * function isGreeting(value) { -// * return /^h(?:i|ello)$/.test(value); -// * } -// * -// * function customizer(objValue, srcValue) { -// * if (isGreeting(objValue) && isGreeting(srcValue)) { -// * return true; -// * } -// * } -// * -// * var object = { 'greeting': 'hello' }; -// * var source = { 'greeting': 'hi' }; -// * -// * _.isMatchWith(object, source, customizer); -// * // => true -// */function isMatchWith(object,source,customizer){customizer=typeof customizer=='function'?customizer:undefined$1;return baseIsMatch(object,source,getMatchData(source),customizer);}/** -// * Checks if `value` is `NaN`. -// * -// * **Note:** This method is based on -// * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as -// * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for -// * `undefined` and other non-number values. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. -// * @example -// * -// * _.isNaN(NaN); -// * // => true -// * -// * _.isNaN(new Number(NaN)); -// * // => true -// * -// * isNaN(undefined); -// * // => true -// * -// * _.isNaN(undefined); -// * // => false -// */function isNaN(value){// An `NaN` primitive is the only value that is not equal to itself. -// // Perform the `toStringTag` check first to avoid errors with some -// // ActiveX objects in IE. -// return isNumber(value)&&value!=+value;}/** -// * Checks if `value` is a pristine native function. -// * -// * **Note:** This method can't reliably detect native functions in the presence -// * of the core-js package because core-js circumvents this kind of detection. -// * Despite multiple requests, the core-js maintainer has made it clear: any -// * attempt to fix the detection will be obstructed. As a result, we're left -// * with little choice but to throw an error. Unfortunately, this also affects -// * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), -// * which rely on core-js. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a native function, -// * else `false`. -// * @example -// * -// * _.isNative(Array.prototype.push); -// * // => true -// * -// * _.isNative(_); -// * // => false -// */function isNative(value){if(isMaskable(value)){throw new Error(CORE_ERROR_TEXT);}return baseIsNative(value);}/** -// * Checks if `value` is `null`. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is `null`, else `false`. -// * @example -// * -// * _.isNull(null); -// * // => true -// * -// * _.isNull(void 0); -// * // => false -// */function isNull(value){return value===null;}/** -// * Checks if `value` is `null` or `undefined`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is nullish, else `false`. -// * @example -// * -// * _.isNil(null); -// * // => true -// * -// * _.isNil(void 0); -// * // => true -// * -// * _.isNil(NaN); -// * // => false -// */function isNil(value){return value==null;}/** -// * Checks if `value` is classified as a `Number` primitive or object. -// * -// * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are -// * classified as numbers, use the `_.isFinite` method. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a number, else `false`. -// * @example -// * -// * _.isNumber(3); -// * // => true -// * -// * _.isNumber(Number.MIN_VALUE); -// * // => true -// * -// * _.isNumber(Infinity); -// * // => true -// * -// * _.isNumber('3'); -// * // => false -// */function isNumber(value){return typeof value=='number'||isObjectLike(value)&&baseGetTag(value)==numberTag;}/** -// * Checks if `value` is a plain object, that is, an object created by the -// * `Object` constructor or one with a `[[Prototype]]` of `null`. -// * -// * @static -// * @memberOf _ -// * @since 0.8.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. -// * @example -// * -// * function Foo() { -// * this.a = 1; -// * } -// * -// * _.isPlainObject(new Foo); -// * // => false -// * -// * _.isPlainObject([1, 2, 3]); -// * // => false -// * -// * _.isPlainObject({ 'x': 0, 'y': 0 }); -// * // => true -// * -// * _.isPlainObject(Object.create(null)); -// * // => true -// */function isPlainObject(value){if(!isObjectLike(value)||baseGetTag(value)!=objectTag){return false;}var proto=getPrototype(value);if(proto===null){return true;}var Ctor=hasOwnProperty.call(proto,'constructor')&&proto.constructor;return typeof Ctor=='function'&&Ctor instanceof Ctor&&funcToString.call(Ctor)==objectCtorString;}/** -// * Checks if `value` is classified as a `RegExp` object. -// * -// * @static -// * @memberOf _ -// * @since 0.1.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. -// * @example -// * -// * _.isRegExp(/abc/); -// * // => true -// * -// * _.isRegExp('/abc/'); -// * // => false -// */var isRegExp=nodeIsRegExp?baseUnary(nodeIsRegExp):baseIsRegExp;/** -// * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 -// * double precision number which isn't the result of a rounded unsafe integer. -// * -// * **Note:** This method is based on -// * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. -// * @example -// * -// * _.isSafeInteger(3); -// * // => true -// * -// * _.isSafeInteger(Number.MIN_VALUE); -// * // => false -// * -// * _.isSafeInteger(Infinity); -// * // => false -// * -// * _.isSafeInteger('3'); -// * // => false -// */function isSafeInteger(value){return isInteger(value)&&value>=-MAX_SAFE_INTEGER&&value<=MAX_SAFE_INTEGER;}/** -// * Checks if `value` is classified as a `Set` object. -// * -// * @static -// * @memberOf _ -// * @since 4.3.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a set, else `false`. -// * @example -// * -// * _.isSet(new Set); -// * // => true -// * -// * _.isSet(new WeakSet); -// * // => false -// */var isSet=nodeIsSet?baseUnary(nodeIsSet):baseIsSet;/** -// * Checks if `value` is classified as a `String` primitive or object. -// * -// * @static -// * @since 0.1.0 -// * @memberOf _ -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a string, else `false`. -// * @example -// * -// * _.isString('abc'); -// * // => true -// * -// * _.isString(1); -// * // => false -// */function isString(value){return typeof value=='string'||!isArray(value)&&isObjectLike(value)&&baseGetTag(value)==stringTag;}/** -// * Checks if `value` is classified as a `Symbol` primitive or object. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. -// * @example -// * -// * _.isSymbol(Symbol.iterator); -// * // => true -// * -// * _.isSymbol('abc'); -// * // => false -// */function isSymbol(value){return typeof value=='symbol'||isObjectLike(value)&&baseGetTag(value)==symbolTag;}/** -// * Checks if `value` is classified as a typed array. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. -// * @example -// * -// * _.isTypedArray(new Uint8Array); -// * // => true -// * -// * _.isTypedArray([]); -// * // => false -// */var isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray;/** -// * Checks if `value` is `undefined`. -// * -// * @static -// * @since 0.1.0 -// * @memberOf _ -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. -// * @example -// * -// * _.isUndefined(void 0); -// * // => true -// * -// * _.isUndefined(null); -// * // => false -// */function isUndefined(value){return value===undefined$1;}/** -// * Checks if `value` is classified as a `WeakMap` object. -// * -// * @static -// * @memberOf _ -// * @since 4.3.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. -// * @example -// * -// * _.isWeakMap(new WeakMap); -// * // => true -// * -// * _.isWeakMap(new Map); -// * // => false -// */function isWeakMap(value){return isObjectLike(value)&&getTag(value)==weakMapTag;}/** -// * Checks if `value` is classified as a `WeakSet` object. -// * -// * @static -// * @memberOf _ -// * @since 4.3.0 -// * @category Lang -// * @param {*} value The value to check. -// * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. -// * @example -// * -// * _.isWeakSet(new WeakSet); -// * // => true -// * -// * _.isWeakSet(new Set); -// * // => false -// */function isWeakSet(value){return isObjectLike(value)&&baseGetTag(value)==weakSetTag;}/** -// * Checks if `value` is less than `other`. -// * -// * @static -// * @memberOf _ -// * @since 3.9.0 -// * @category Lang -// * @param {*} value The value to compare. -// * @param {*} other The other value to compare. -// * @returns {boolean} Returns `true` if `value` is less than `other`, -// * else `false`. -// * @see _.gt -// * @example -// * -// * _.lt(1, 3); -// * // => true -// * -// * _.lt(3, 3); -// * // => false -// * -// * _.lt(3, 1); -// * // => false -// */var lt=createRelationalOperation(baseLt);/** -// * Checks if `value` is less than or equal to `other`. -// * -// * @static -// * @memberOf _ -// * @since 3.9.0 -// * @category Lang -// * @param {*} value The value to compare. -// * @param {*} other The other value to compare. -// * @returns {boolean} Returns `true` if `value` is less than or equal to -// * `other`, else `false`. -// * @see _.gte -// * @example -// * -// * _.lte(1, 3); -// * // => true -// * -// * _.lte(3, 3); -// * // => true -// * -// * _.lte(3, 1); -// * // => false -// */var lte=createRelationalOperation(function(value,other){return value<=other;});/** -// * Converts `value` to an array. -// * -// * @static -// * @since 0.1.0 -// * @memberOf _ -// * @category Lang -// * @param {*} value The value to convert. -// * @returns {Array} Returns the converted array. -// * @example -// * -// * _.toArray({ 'a': 1, 'b': 2 }); -// * // => [1, 2] -// * -// * _.toArray('abc'); -// * // => ['a', 'b', 'c'] -// * -// * _.toArray(1); -// * // => [] -// * -// * _.toArray(null); -// * // => [] -// */function toArray(value){if(!value){return [];}if(isArrayLike(value)){return isString(value)?stringToArray(value):copyArray(value);}if(symIterator&&value[symIterator]){return iteratorToArray(value[symIterator]());}var tag=getTag(value),func=tag==mapTag?mapToArray:tag==setTag?setToArray:values;return func(value);}/** -// * Converts `value` to a finite number. -// * -// * @static -// * @memberOf _ -// * @since 4.12.0 -// * @category Lang -// * @param {*} value The value to convert. -// * @returns {number} Returns the converted number. -// * @example -// * -// * _.toFinite(3.2); -// * // => 3.2 -// * -// * _.toFinite(Number.MIN_VALUE); -// * // => 5e-324 -// * -// * _.toFinite(Infinity); -// * // => 1.7976931348623157e+308 -// * -// * _.toFinite('3.2'); -// * // => 3.2 -// */function toFinite(value){if(!value){return value===0?value:0;}value=toNumber(value);if(value===INFINITY||value===-INFINITY){var sign=value<0?-1:1;return sign*MAX_INTEGER;}return value===value?value:0;}/** -// * Converts `value` to an integer. -// * -// * **Note:** This method is loosely based on -// * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {*} value The value to convert. -// * @returns {number} Returns the converted integer. -// * @example -// * -// * _.toInteger(3.2); -// * // => 3 -// * -// * _.toInteger(Number.MIN_VALUE); -// * // => 0 -// * -// * _.toInteger(Infinity); -// * // => 1.7976931348623157e+308 -// * -// * _.toInteger('3.2'); -// * // => 3 -// */function toInteger(value){var result=toFinite(value),remainder=result%1;return result===result?remainder?result-remainder:result:0;}/** -// * Converts `value` to an integer suitable for use as the length of an -// * array-like object. -// * -// * **Note:** This method is based on -// * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {*} value The value to convert. -// * @returns {number} Returns the converted integer. -// * @example -// * -// * _.toLength(3.2); -// * // => 3 -// * -// * _.toLength(Number.MIN_VALUE); -// * // => 0 -// * -// * _.toLength(Infinity); -// * // => 4294967295 -// * -// * _.toLength('3.2'); -// * // => 3 -// */function toLength(value){return value?baseClamp(toInteger(value),0,MAX_ARRAY_LENGTH):0;}/** -// * Converts `value` to a number. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {*} value The value to process. -// * @returns {number} Returns the number. -// * @example -// * -// * _.toNumber(3.2); -// * // => 3.2 -// * -// * _.toNumber(Number.MIN_VALUE); -// * // => 5e-324 -// * -// * _.toNumber(Infinity); -// * // => Infinity -// * -// * _.toNumber('3.2'); -// * // => 3.2 -// */function toNumber(value){if(typeof value=='number'){return value;}if(isSymbol(value)){return NAN;}if(isObject(value)){var other=typeof value.valueOf=='function'?value.valueOf():value;value=isObject(other)?other+'':other;}if(typeof value!='string'){return value===0?value:+value;}value=baseTrim(value);var isBinary=reIsBinary.test(value);return isBinary||reIsOctal.test(value)?freeParseInt(value.slice(2),isBinary?2:8):reIsBadHex.test(value)?NAN:+value;}/** -// * Converts `value` to a plain object flattening inherited enumerable string -// * keyed properties of `value` to own properties of the plain object. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Lang -// * @param {*} value The value to convert. -// * @returns {Object} Returns the converted plain object. -// * @example -// * -// * function Foo() { -// * this.b = 2; -// * } -// * -// * Foo.prototype.c = 3; -// * -// * _.assign({ 'a': 1 }, new Foo); -// * // => { 'a': 1, 'b': 2 } -// * -// * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); -// * // => { 'a': 1, 'b': 2, 'c': 3 } -// */function toPlainObject(value){return copyObject(value,keysIn(value));}/** -// * Converts `value` to a safe integer. A safe integer can be compared and -// * represented correctly. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {*} value The value to convert. -// * @returns {number} Returns the converted integer. -// * @example -// * -// * _.toSafeInteger(3.2); -// * // => 3 -// * -// * _.toSafeInteger(Number.MIN_VALUE); -// * // => 0 -// * -// * _.toSafeInteger(Infinity); -// * // => 9007199254740991 -// * -// * _.toSafeInteger('3.2'); -// * // => 3 -// */function toSafeInteger(value){return value?baseClamp(toInteger(value),-MAX_SAFE_INTEGER,MAX_SAFE_INTEGER):value===0?value:0;}/** -// * Converts `value` to a string. An empty string is returned for `null` -// * and `undefined` values. The sign of `-0` is preserved. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Lang -// * @param {*} value The value to convert. -// * @returns {string} Returns the converted string. -// * @example -// * -// * _.toString(null); -// * // => '' -// * -// * _.toString(-0); -// * // => '-0' -// * -// * _.toString([1, 2, 3]); -// * // => '1,2,3' -// */function toString(value){return value==null?'':baseToString(value);}/*------------------------------------------------------------------------*/ /** -// * Assigns own enumerable string keyed properties of source objects to the -// * destination object. Source objects are applied from left to right. -// * Subsequent sources overwrite property assignments of previous sources. -// * -// * **Note:** This method mutates `object` and is loosely based on -// * [`Object.assign`](https://mdn.io/Object/assign). -// * -// * @static -// * @memberOf _ -// * @since 0.10.0 -// * @category Object -// * @param {Object} object The destination object. -// * @param {...Object} [sources] The source objects. -// * @returns {Object} Returns `object`. -// * @see _.assignIn -// * @example -// * -// * function Foo() { -// * this.a = 1; -// * } -// * -// * function Bar() { -// * this.c = 3; -// * } -// * -// * Foo.prototype.b = 2; -// * Bar.prototype.d = 4; -// * -// * _.assign({ 'a': 0 }, new Foo, new Bar); -// * // => { 'a': 1, 'c': 3 } -// */var assign=createAssigner(function(object,source){if(isPrototype(source)||isArrayLike(source)){copyObject(source,keys(source),object);return;}for(var key in source){if(hasOwnProperty.call(source,key)){assignValue(object,key,source[key]);}}});/** -// * This method is like `_.assign` except that it iterates over own and -// * inherited source properties. -// * -// * **Note:** This method mutates `object`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @alias extend -// * @category Object -// * @param {Object} object The destination object. -// * @param {...Object} [sources] The source objects. -// * @returns {Object} Returns `object`. -// * @see _.assign -// * @example -// * -// * function Foo() { -// * this.a = 1; -// * } -// * -// * function Bar() { -// * this.c = 3; -// * } -// * -// * Foo.prototype.b = 2; -// * Bar.prototype.d = 4; -// * -// * _.assignIn({ 'a': 0 }, new Foo, new Bar); -// * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } -// */var assignIn=createAssigner(function(object,source){copyObject(source,keysIn(source),object);});/** -// * This method is like `_.assignIn` except that it accepts `customizer` -// * which is invoked to produce the assigned values. If `customizer` returns -// * `undefined`, assignment is handled by the method instead. The `customizer` -// * is invoked with five arguments: (objValue, srcValue, key, object, source). -// * -// * **Note:** This method mutates `object`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @alias extendWith -// * @category Object -// * @param {Object} object The destination object. -// * @param {...Object} sources The source objects. -// * @param {Function} [customizer] The function to customize assigned values. -// * @returns {Object} Returns `object`. -// * @see _.assignWith -// * @example -// * -// * function customizer(objValue, srcValue) { -// * return _.isUndefined(objValue) ? srcValue : objValue; -// * } -// * -// * var defaults = _.partialRight(_.assignInWith, customizer); -// * -// * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); -// * // => { 'a': 1, 'b': 2 } -// */var assignInWith=createAssigner(function(object,source,srcIndex,customizer){copyObject(source,keysIn(source),object,customizer);});/** -// * This method is like `_.assign` except that it accepts `customizer` -// * which is invoked to produce the assigned values. If `customizer` returns -// * `undefined`, assignment is handled by the method instead. The `customizer` -// * is invoked with five arguments: (objValue, srcValue, key, object, source). -// * -// * **Note:** This method mutates `object`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Object -// * @param {Object} object The destination object. -// * @param {...Object} sources The source objects. -// * @param {Function} [customizer] The function to customize assigned values. -// * @returns {Object} Returns `object`. -// * @see _.assignInWith -// * @example -// * -// * function customizer(objValue, srcValue) { -// * return _.isUndefined(objValue) ? srcValue : objValue; -// * } -// * -// * var defaults = _.partialRight(_.assignWith, customizer); -// * -// * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); -// * // => { 'a': 1, 'b': 2 } -// */var assignWith=createAssigner(function(object,source,srcIndex,customizer){copyObject(source,keys(source),object,customizer);});/** -// * Creates an array of values corresponding to `paths` of `object`. -// * -// * @static -// * @memberOf _ -// * @since 1.0.0 -// * @category Object -// * @param {Object} object The object to iterate over. -// * @param {...(string|string[])} [paths] The property paths to pick. -// * @returns {Array} Returns the picked values. -// * @example -// * -// * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; -// * -// * _.at(object, ['a[0].b.c', 'a[1]']); -// * // => [3, 4] -// */var at=flatRest(baseAt);/** -// * Creates an object that inherits from the `prototype` object. If a -// * `properties` object is given, its own enumerable string keyed properties -// * are assigned to the created object. -// * -// * @static -// * @memberOf _ -// * @since 2.3.0 -// * @category Object -// * @param {Object} prototype The object to inherit from. -// * @param {Object} [properties] The properties to assign to the object. -// * @returns {Object} Returns the new object. -// * @example -// * -// * function Shape() { -// * this.x = 0; -// * this.y = 0; -// * } -// * -// * function Circle() { -// * Shape.call(this); -// * } -// * -// * Circle.prototype = _.create(Shape.prototype, { -// * 'constructor': Circle -// * }); -// * -// * var circle = new Circle; -// * circle instanceof Circle; -// * // => true -// * -// * circle instanceof Shape; -// * // => true -// */function create(prototype,properties){var result=baseCreate(prototype);return properties==null?result:baseAssign(result,properties);}/** -// * Assigns own and inherited enumerable string keyed properties of source -// * objects to the destination object for all destination properties that -// * resolve to `undefined`. Source objects are applied from left to right. -// * Once a property is set, additional values of the same property are ignored. -// * -// * **Note:** This method mutates `object`. -// * -// * @static -// * @since 0.1.0 -// * @memberOf _ -// * @category Object -// * @param {Object} object The destination object. -// * @param {...Object} [sources] The source objects. -// * @returns {Object} Returns `object`. -// * @see _.defaultsDeep -// * @example -// * -// * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); -// * // => { 'a': 1, 'b': 2 } -// */var defaults=baseRest(function(object,sources){object=Object(object);var index=-1;var length=sources.length;var guard=length>2?sources[2]:undefined$1;if(guard&&isIterateeCall(sources[0],sources[1],guard)){length=1;}while(++index { 'a': { 'b': 2, 'c': 3 } } -// */var defaultsDeep=baseRest(function(args){args.push(undefined$1,customDefaultsMerge);return apply(mergeWith,undefined$1,args);});/** -// * This method is like `_.find` except that it returns the key of the first -// * element `predicate` returns truthy for instead of the element itself. -// * -// * @static -// * @memberOf _ -// * @since 1.1.0 -// * @category Object -// * @param {Object} object The object to inspect. -// * @param {Function} [predicate=_.identity] The function invoked per iteration. -// * @returns {string|undefined} Returns the key of the matched element, -// * else `undefined`. -// * @example -// * -// * var users = { -// * 'barney': { 'age': 36, 'active': true }, -// * 'fred': { 'age': 40, 'active': false }, -// * 'pebbles': { 'age': 1, 'active': true } -// * }; -// * -// * _.findKey(users, function(o) { return o.age < 40; }); -// * // => 'barney' (iteration order is not guaranteed) -// * -// * // The `_.matches` iteratee shorthand. -// * _.findKey(users, { 'age': 1, 'active': true }); -// * // => 'pebbles' -// * -// * // The `_.matchesProperty` iteratee shorthand. -// * _.findKey(users, ['active', false]); -// * // => 'fred' -// * -// * // The `_.property` iteratee shorthand. -// * _.findKey(users, 'active'); -// * // => 'barney' -// */function findKey(object,predicate){return baseFindKey(object,getIteratee(predicate,3),baseForOwn);}/** -// * This method is like `_.findKey` except that it iterates over elements of -// * a collection in the opposite order. -// * -// * @static -// * @memberOf _ -// * @since 2.0.0 -// * @category Object -// * @param {Object} object The object to inspect. -// * @param {Function} [predicate=_.identity] The function invoked per iteration. -// * @returns {string|undefined} Returns the key of the matched element, -// * else `undefined`. -// * @example -// * -// * var users = { -// * 'barney': { 'age': 36, 'active': true }, -// * 'fred': { 'age': 40, 'active': false }, -// * 'pebbles': { 'age': 1, 'active': true } -// * }; -// * -// * _.findLastKey(users, function(o) { return o.age < 40; }); -// * // => returns 'pebbles' assuming `_.findKey` returns 'barney' -// * -// * // The `_.matches` iteratee shorthand. -// * _.findLastKey(users, { 'age': 36, 'active': true }); -// * // => 'barney' -// * -// * // The `_.matchesProperty` iteratee shorthand. -// * _.findLastKey(users, ['active', false]); -// * // => 'fred' -// * -// * // The `_.property` iteratee shorthand. -// * _.findLastKey(users, 'active'); -// * // => 'pebbles' -// */function findLastKey(object,predicate){return baseFindKey(object,getIteratee(predicate,3),baseForOwnRight);}/** -// * Iterates over own and inherited enumerable string keyed properties of an -// * object and invokes `iteratee` for each property. The iteratee is invoked -// * with three arguments: (value, key, object). Iteratee functions may exit -// * iteration early by explicitly returning `false`. -// * -// * @static -// * @memberOf _ -// * @since 0.3.0 -// * @category Object -// * @param {Object} object The object to iterate over. -// * @param {Function} [iteratee=_.identity] The function invoked per iteration. -// * @returns {Object} Returns `object`. -// * @see _.forInRight -// * @example -// * -// * function Foo() { -// * this.a = 1; -// * this.b = 2; -// * } -// * -// * Foo.prototype.c = 3; -// * -// * _.forIn(new Foo, function(value, key) { -// * console.log(key); -// * }); -// * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). -// */function forIn(object,iteratee){return object==null?object:baseFor(object,getIteratee(iteratee,3),keysIn);}/** -// * This method is like `_.forIn` except that it iterates over properties of -// * `object` in the opposite order. -// * -// * @static -// * @memberOf _ -// * @since 2.0.0 -// * @category Object -// * @param {Object} object The object to iterate over. -// * @param {Function} [iteratee=_.identity] The function invoked per iteration. -// * @returns {Object} Returns `object`. -// * @see _.forIn -// * @example -// * -// * function Foo() { -// * this.a = 1; -// * this.b = 2; -// * } -// * -// * Foo.prototype.c = 3; -// * -// * _.forInRight(new Foo, function(value, key) { -// * console.log(key); -// * }); -// * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. -// */function forInRight(object,iteratee){return object==null?object:baseForRight(object,getIteratee(iteratee,3),keysIn);}/** -// * Iterates over own enumerable string keyed properties of an object and -// * invokes `iteratee` for each property. The iteratee is invoked with three -// * arguments: (value, key, object). Iteratee functions may exit iteration -// * early by explicitly returning `false`. -// * -// * @static -// * @memberOf _ -// * @since 0.3.0 -// * @category Object -// * @param {Object} object The object to iterate over. -// * @param {Function} [iteratee=_.identity] The function invoked per iteration. -// * @returns {Object} Returns `object`. -// * @see _.forOwnRight -// * @example -// * -// * function Foo() { -// * this.a = 1; -// * this.b = 2; -// * } -// * -// * Foo.prototype.c = 3; -// * -// * _.forOwn(new Foo, function(value, key) { -// * console.log(key); -// * }); -// * // => Logs 'a' then 'b' (iteration order is not guaranteed). -// */function forOwn(object,iteratee){return object&&baseForOwn(object,getIteratee(iteratee,3));}/** -// * This method is like `_.forOwn` except that it iterates over properties of -// * `object` in the opposite order. -// * -// * @static -// * @memberOf _ -// * @since 2.0.0 -// * @category Object -// * @param {Object} object The object to iterate over. -// * @param {Function} [iteratee=_.identity] The function invoked per iteration. -// * @returns {Object} Returns `object`. -// * @see _.forOwn -// * @example -// * -// * function Foo() { -// * this.a = 1; -// * this.b = 2; -// * } -// * -// * Foo.prototype.c = 3; -// * -// * _.forOwnRight(new Foo, function(value, key) { -// * console.log(key); -// * }); -// * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. -// */function forOwnRight(object,iteratee){return object&&baseForOwnRight(object,getIteratee(iteratee,3));}/** -// * Creates an array of function property names from own enumerable properties -// * of `object`. -// * -// * @static -// * @since 0.1.0 -// * @memberOf _ -// * @category Object -// * @param {Object} object The object to inspect. -// * @returns {Array} Returns the function names. -// * @see _.functionsIn -// * @example -// * -// * function Foo() { -// * this.a = _.constant('a'); -// * this.b = _.constant('b'); -// * } -// * -// * Foo.prototype.c = _.constant('c'); -// * -// * _.functions(new Foo); -// * // => ['a', 'b'] -// */function functions(object){return object==null?[]:baseFunctions(object,keys(object));}/** -// * Creates an array of function property names from own and inherited -// * enumerable properties of `object`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Object -// * @param {Object} object The object to inspect. -// * @returns {Array} Returns the function names. -// * @see _.functions -// * @example -// * -// * function Foo() { -// * this.a = _.constant('a'); -// * this.b = _.constant('b'); -// * } -// * -// * Foo.prototype.c = _.constant('c'); -// * -// * _.functionsIn(new Foo); -// * // => ['a', 'b', 'c'] -// */function functionsIn(object){return object==null?[]:baseFunctions(object,keysIn(object));}/** -// * Gets the value at `path` of `object`. If the resolved value is -// * `undefined`, the `defaultValue` is returned in its place. -// * -// * @static -// * @memberOf _ -// * @since 3.7.0 -// * @category Object -// * @param {Object} object The object to query. -// * @param {Array|string} path The path of the property to get. -// * @param {*} [defaultValue] The value returned for `undefined` resolved values. -// * @returns {*} Returns the resolved value. -// * @example -// * -// * var object = { 'a': [{ 'b': { 'c': 3 } }] }; -// * -// * _.get(object, 'a[0].b.c'); -// * // => 3 -// * -// * _.get(object, ['a', '0', 'b', 'c']); -// * // => 3 -// * -// * _.get(object, 'a.b.c', 'default'); -// * // => 'default' -// */function get(object,path,defaultValue){var result=object==null?undefined$1:baseGet(object,path);return result===undefined$1?defaultValue:result;}/** -// * Checks if `path` is a direct property of `object`. -// * -// * @static -// * @since 0.1.0 -// * @memberOf _ -// * @category Object -// * @param {Object} object The object to query. -// * @param {Array|string} path The path to check. -// * @returns {boolean} Returns `true` if `path` exists, else `false`. -// * @example -// * -// * var object = { 'a': { 'b': 2 } }; -// * var other = _.create({ 'a': _.create({ 'b': 2 }) }); -// * -// * _.has(object, 'a'); -// * // => true -// * -// * _.has(object, 'a.b'); -// * // => true -// * -// * _.has(object, ['a', 'b']); -// * // => true -// * -// * _.has(other, 'a'); -// * // => false -// */function has(object,path){return object!=null&&hasPath(object,path,baseHas);}/** -// * Checks if `path` is a direct or inherited property of `object`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Object -// * @param {Object} object The object to query. -// * @param {Array|string} path The path to check. -// * @returns {boolean} Returns `true` if `path` exists, else `false`. -// * @example -// * -// * var object = _.create({ 'a': _.create({ 'b': 2 }) }); -// * -// * _.hasIn(object, 'a'); -// * // => true -// * -// * _.hasIn(object, 'a.b'); -// * // => true -// * -// * _.hasIn(object, ['a', 'b']); -// * // => true -// * -// * _.hasIn(object, 'b'); -// * // => false -// */function hasIn(object,path){return object!=null&&hasPath(object,path,baseHasIn);}/** -// * Creates an object composed of the inverted keys and values of `object`. -// * If `object` contains duplicate values, subsequent values overwrite -// * property assignments of previous values. -// * -// * @static -// * @memberOf _ -// * @since 0.7.0 -// * @category Object -// * @param {Object} object The object to invert. -// * @returns {Object} Returns the new inverted object. -// * @example -// * -// * var object = { 'a': 1, 'b': 2, 'c': 1 }; -// * -// * _.invert(object); -// * // => { '1': 'c', '2': 'b' } -// */var invert=createInverter(function(result,value,key){if(value!=null&&typeof value.toString!='function'){value=nativeObjectToString.call(value);}result[value]=key;},constant(identity));/** -// * This method is like `_.invert` except that the inverted object is generated -// * from the results of running each element of `object` thru `iteratee`. The -// * corresponding inverted value of each inverted key is an array of keys -// * responsible for generating the inverted value. The iteratee is invoked -// * with one argument: (value). -// * -// * @static -// * @memberOf _ -// * @since 4.1.0 -// * @category Object -// * @param {Object} object The object to invert. -// * @param {Function} [iteratee=_.identity] The iteratee invoked per element. -// * @returns {Object} Returns the new inverted object. -// * @example -// * -// * var object = { 'a': 1, 'b': 2, 'c': 1 }; -// * -// * _.invertBy(object); -// * // => { '1': ['a', 'c'], '2': ['b'] } -// * -// * _.invertBy(object, function(value) { -// * return 'group' + value; -// * }); -// * // => { 'group1': ['a', 'c'], 'group2': ['b'] } -// */var invertBy=createInverter(function(result,value,key){if(value!=null&&typeof value.toString!='function'){value=nativeObjectToString.call(value);}if(hasOwnProperty.call(result,value)){result[value].push(key);}else {result[value]=[key];}},getIteratee);/** -// * Invokes the method at `path` of `object`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Object -// * @param {Object} object The object to query. -// * @param {Array|string} path The path of the method to invoke. -// * @param {...*} [args] The arguments to invoke the method with. -// * @returns {*} Returns the result of the invoked method. -// * @example -// * -// * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; -// * -// * _.invoke(object, 'a[0].b.c.slice', 1, 3); -// * // => [2, 3] -// */var invoke=baseRest(baseInvoke);/** -// * Creates an array of the own enumerable property names of `object`. -// * -// * **Note:** Non-object values are coerced to objects. See the -// * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) -// * for more details. -// * -// * @static -// * @since 0.1.0 -// * @memberOf _ -// * @category Object -// * @param {Object} object The object to query. -// * @returns {Array} Returns the array of property names. -// * @example -// * -// * function Foo() { -// * this.a = 1; -// * this.b = 2; -// * } -// * -// * Foo.prototype.c = 3; -// * -// * _.keys(new Foo); -// * // => ['a', 'b'] (iteration order is not guaranteed) -// * -// * _.keys('hi'); -// * // => ['0', '1'] -// */function keys(object){return isArrayLike(object)?arrayLikeKeys(object):baseKeys(object);}/** -// * Creates an array of the own and inherited enumerable property names of `object`. -// * -// * **Note:** Non-object values are coerced to objects. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Object -// * @param {Object} object The object to query. -// * @returns {Array} Returns the array of property names. -// * @example -// * -// * function Foo() { -// * this.a = 1; -// * this.b = 2; -// * } -// * -// * Foo.prototype.c = 3; -// * -// * _.keysIn(new Foo); -// * // => ['a', 'b', 'c'] (iteration order is not guaranteed) -// */function keysIn(object){return isArrayLike(object)?arrayLikeKeys(object,true):baseKeysIn(object);}/** -// * The opposite of `_.mapValues`; this method creates an object with the -// * same values as `object` and keys generated by running each own enumerable -// * string keyed property of `object` thru `iteratee`. The iteratee is invoked -// * with three arguments: (value, key, object). -// * -// * @static -// * @memberOf _ -// * @since 3.8.0 -// * @category Object -// * @param {Object} object The object to iterate over. -// * @param {Function} [iteratee=_.identity] The function invoked per iteration. -// * @returns {Object} Returns the new mapped object. -// * @see _.mapValues -// * @example -// * -// * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { -// * return key + value; -// * }); -// * // => { 'a1': 1, 'b2': 2 } -// */function mapKeys(object,iteratee){var result={};iteratee=getIteratee(iteratee,3);baseForOwn(object,function(value,key,object){baseAssignValue(result,iteratee(value,key,object),value);});return result;}/** -// * Creates an object with the same keys as `object` and values generated -// * by running each own enumerable string keyed property of `object` thru -// * `iteratee`. The iteratee is invoked with three arguments: -// * (value, key, object). -// * -// * @static -// * @memberOf _ -// * @since 2.4.0 -// * @category Object -// * @param {Object} object The object to iterate over. -// * @param {Function} [iteratee=_.identity] The function invoked per iteration. -// * @returns {Object} Returns the new mapped object. -// * @see _.mapKeys -// * @example -// * -// * var users = { -// * 'fred': { 'user': 'fred', 'age': 40 }, -// * 'pebbles': { 'user': 'pebbles', 'age': 1 } -// * }; -// * -// * _.mapValues(users, function(o) { return o.age; }); -// * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) -// * -// * // The `_.property` iteratee shorthand. -// * _.mapValues(users, 'age'); -// * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) -// */function mapValues(object,iteratee){var result={};iteratee=getIteratee(iteratee,3);baseForOwn(object,function(value,key,object){baseAssignValue(result,key,iteratee(value,key,object));});return result;}/** -// * This method is like `_.assign` except that it recursively merges own and -// * inherited enumerable string keyed properties of source objects into the -// * destination object. Source properties that resolve to `undefined` are -// * skipped if a destination value exists. Array and plain object properties -// * are merged recursively. Other objects and value types are overridden by -// * assignment. Source objects are applied from left to right. Subsequent -// * sources overwrite property assignments of previous sources. -// * -// * **Note:** This method mutates `object`. -// * -// * @static -// * @memberOf _ -// * @since 0.5.0 -// * @category Object -// * @param {Object} object The destination object. -// * @param {...Object} [sources] The source objects. -// * @returns {Object} Returns `object`. -// * @example -// * -// * var object = { -// * 'a': [{ 'b': 2 }, { 'd': 4 }] -// * }; -// * -// * var other = { -// * 'a': [{ 'c': 3 }, { 'e': 5 }] -// * }; -// * -// * _.merge(object, other); -// * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } -// */var merge=createAssigner(function(object,source,srcIndex){baseMerge(object,source,srcIndex);});/** -// * This method is like `_.merge` except that it accepts `customizer` which -// * is invoked to produce the merged values of the destination and source -// * properties. If `customizer` returns `undefined`, merging is handled by the -// * method instead. The `customizer` is invoked with six arguments: -// * (objValue, srcValue, key, object, source, stack). -// * -// * **Note:** This method mutates `object`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Object -// * @param {Object} object The destination object. -// * @param {...Object} sources The source objects. -// * @param {Function} customizer The function to customize assigned values. -// * @returns {Object} Returns `object`. -// * @example -// * -// * function customizer(objValue, srcValue) { -// * if (_.isArray(objValue)) { -// * return objValue.concat(srcValue); -// * } -// * } -// * -// * var object = { 'a': [1], 'b': [2] }; -// * var other = { 'a': [3], 'b': [4] }; -// * -// * _.mergeWith(object, other, customizer); -// * // => { 'a': [1, 3], 'b': [2, 4] } -// */var mergeWith=createAssigner(function(object,source,srcIndex,customizer){baseMerge(object,source,srcIndex,customizer);});/** -// * The opposite of `_.pick`; this method creates an object composed of the -// * own and inherited enumerable property paths of `object` that are not omitted. -// * -// * **Note:** This method is considerably slower than `_.pick`. -// * -// * @static -// * @since 0.1.0 -// * @memberOf _ -// * @category Object -// * @param {Object} object The source object. -// * @param {...(string|string[])} [paths] The property paths to omit. -// * @returns {Object} Returns the new object. -// * @example -// * -// * var object = { 'a': 1, 'b': '2', 'c': 3 }; -// * -// * _.omit(object, ['a', 'c']); -// * // => { 'b': '2' } -// */var omit=flatRest(function(object,paths){var result={};if(object==null){return result;}var isDeep=false;paths=arrayMap(paths,function(path){path=castPath(path,object);isDeep||(isDeep=path.length>1);return path;});copyObject(object,getAllKeysIn(object),result);if(isDeep){result=baseClone(result,CLONE_DEEP_FLAG|CLONE_FLAT_FLAG|CLONE_SYMBOLS_FLAG,customOmitClone);}var length=paths.length;while(length--){baseUnset(result,paths[length]);}return result;});/** -// * The opposite of `_.pickBy`; this method creates an object composed of -// * the own and inherited enumerable string keyed properties of `object` that -// * `predicate` doesn't return truthy for. The predicate is invoked with two -// * arguments: (value, key). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Object -// * @param {Object} object The source object. -// * @param {Function} [predicate=_.identity] The function invoked per property. -// * @returns {Object} Returns the new object. -// * @example -// * -// * var object = { 'a': 1, 'b': '2', 'c': 3 }; -// * -// * _.omitBy(object, _.isNumber); -// * // => { 'b': '2' } -// */function omitBy(object,predicate){return pickBy(object,negate(getIteratee(predicate)));}/** -// * Creates an object composed of the picked `object` properties. -// * -// * @static -// * @since 0.1.0 -// * @memberOf _ -// * @category Object -// * @param {Object} object The source object. -// * @param {...(string|string[])} [paths] The property paths to pick. -// * @returns {Object} Returns the new object. -// * @example -// * -// * var object = { 'a': 1, 'b': '2', 'c': 3 }; -// * -// * _.pick(object, ['a', 'c']); -// * // => { 'a': 1, 'c': 3 } -// */var pick=flatRest(function(object,paths){return object==null?{}:basePick(object,paths);});/** -// * Creates an object composed of the `object` properties `predicate` returns -// * truthy for. The predicate is invoked with two arguments: (value, key). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Object -// * @param {Object} object The source object. -// * @param {Function} [predicate=_.identity] The function invoked per property. -// * @returns {Object} Returns the new object. -// * @example -// * -// * var object = { 'a': 1, 'b': '2', 'c': 3 }; -// * -// * _.pickBy(object, _.isNumber); -// * // => { 'a': 1, 'c': 3 } -// */function pickBy(object,predicate){if(object==null){return {};}var props=arrayMap(getAllKeysIn(object),function(prop){return [prop];});predicate=getIteratee(predicate);return basePickBy(object,props,function(value,path){return predicate(value,path[0]);});}/** -// * This method is like `_.get` except that if the resolved value is a -// * function it's invoked with the `this` binding of its parent object and -// * its result is returned. -// * -// * @static -// * @since 0.1.0 -// * @memberOf _ -// * @category Object -// * @param {Object} object The object to query. -// * @param {Array|string} path The path of the property to resolve. -// * @param {*} [defaultValue] The value returned for `undefined` resolved values. -// * @returns {*} Returns the resolved value. -// * @example -// * -// * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; -// * -// * _.result(object, 'a[0].b.c1'); -// * // => 3 -// * -// * _.result(object, 'a[0].b.c2'); -// * // => 4 -// * -// * _.result(object, 'a[0].b.c3', 'default'); -// * // => 'default' -// * -// * _.result(object, 'a[0].b.c3', _.constant('default')); -// * // => 'default' -// */function result(object,path,defaultValue){path=castPath(path,object);var index=-1,length=path.length;// Ensure the loop is entered when path is empty. -// if(!length){length=1;object=undefined$1;}while(++index 4 -// * -// * _.set(object, ['x', '0', 'y', 'z'], 5); -// * console.log(object.x[0].y.z); -// * // => 5 -// */function set(object,path,value){return object==null?object:baseSet(object,path,value);}/** -// * This method is like `_.set` except that it accepts `customizer` which is -// * invoked to produce the objects of `path`. If `customizer` returns `undefined` -// * path creation is handled by the method instead. The `customizer` is invoked -// * with three arguments: (nsValue, key, nsObject). -// * -// * **Note:** This method mutates `object`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Object -// * @param {Object} object The object to modify. -// * @param {Array|string} path The path of the property to set. -// * @param {*} value The value to set. -// * @param {Function} [customizer] The function to customize assigned values. -// * @returns {Object} Returns `object`. -// * @example -// * -// * var object = {}; -// * -// * _.setWith(object, '[0][1]', 'a', Object); -// * // => { '0': { '1': 'a' } } -// */function setWith(object,path,value,customizer){customizer=typeof customizer=='function'?customizer:undefined$1;return object==null?object:baseSet(object,path,value,customizer);}/** -// * Creates an array of own enumerable string keyed-value pairs for `object` -// * which can be consumed by `_.fromPairs`. If `object` is a map or set, its -// * entries are returned. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @alias entries -// * @category Object -// * @param {Object} object The object to query. -// * @returns {Array} Returns the key-value pairs. -// * @example -// * -// * function Foo() { -// * this.a = 1; -// * this.b = 2; -// * } -// * -// * Foo.prototype.c = 3; -// * -// * _.toPairs(new Foo); -// * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) -// */var toPairs=createToPairs(keys);/** -// * Creates an array of own and inherited enumerable string keyed-value pairs -// * for `object` which can be consumed by `_.fromPairs`. If `object` is a map -// * or set, its entries are returned. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @alias entriesIn -// * @category Object -// * @param {Object} object The object to query. -// * @returns {Array} Returns the key-value pairs. -// * @example -// * -// * function Foo() { -// * this.a = 1; -// * this.b = 2; -// * } -// * -// * Foo.prototype.c = 3; -// * -// * _.toPairsIn(new Foo); -// * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) -// */var toPairsIn=createToPairs(keysIn);/** -// * An alternative to `_.reduce`; this method transforms `object` to a new -// * `accumulator` object which is the result of running each of its own -// * enumerable string keyed properties thru `iteratee`, with each invocation -// * potentially mutating the `accumulator` object. If `accumulator` is not -// * provided, a new object with the same `[[Prototype]]` will be used. The -// * iteratee is invoked with four arguments: (accumulator, value, key, object). -// * Iteratee functions may exit iteration early by explicitly returning `false`. -// * -// * @static -// * @memberOf _ -// * @since 1.3.0 -// * @category Object -// * @param {Object} object The object to iterate over. -// * @param {Function} [iteratee=_.identity] The function invoked per iteration. -// * @param {*} [accumulator] The custom accumulator value. -// * @returns {*} Returns the accumulated value. -// * @example -// * -// * _.transform([2, 3, 4], function(result, n) { -// * result.push(n *= n); -// * return n % 2 == 0; -// * }, []); -// * // => [4, 9] -// * -// * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { -// * (result[value] || (result[value] = [])).push(key); -// * }, {}); -// * // => { '1': ['a', 'c'], '2': ['b'] } -// */function transform(object,iteratee,accumulator){var isArr=isArray(object),isArrLike=isArr||isBuffer(object)||isTypedArray(object);iteratee=getIteratee(iteratee,4);if(accumulator==null){var Ctor=object&&object.constructor;if(isArrLike){accumulator=isArr?new Ctor():[];}else if(isObject(object)){accumulator=isFunction(Ctor)?baseCreate(getPrototype(object)):{};}else {accumulator={};}}(isArrLike?arrayEach:baseForOwn)(object,function(value,index,object){return iteratee(accumulator,value,index,object);});return accumulator;}/** -// * Removes the property at `path` of `object`. -// * -// * **Note:** This method mutates `object`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Object -// * @param {Object} object The object to modify. -// * @param {Array|string} path The path of the property to unset. -// * @returns {boolean} Returns `true` if the property is deleted, else `false`. -// * @example -// * -// * var object = { 'a': [{ 'b': { 'c': 7 } }] }; -// * _.unset(object, 'a[0].b.c'); -// * // => true -// * -// * console.log(object); -// * // => { 'a': [{ 'b': {} }] }; -// * -// * _.unset(object, ['a', '0', 'b', 'c']); -// * // => true -// * -// * console.log(object); -// * // => { 'a': [{ 'b': {} }] }; -// */function unset(object,path){return object==null?true:baseUnset(object,path);}/** -// * This method is like `_.set` except that accepts `updater` to produce the -// * value to set. Use `_.updateWith` to customize `path` creation. The `updater` -// * is invoked with one argument: (value). -// * -// * **Note:** This method mutates `object`. -// * -// * @static -// * @memberOf _ -// * @since 4.6.0 -// * @category Object -// * @param {Object} object The object to modify. -// * @param {Array|string} path The path of the property to set. -// * @param {Function} updater The function to produce the updated value. -// * @returns {Object} Returns `object`. -// * @example -// * -// * var object = { 'a': [{ 'b': { 'c': 3 } }] }; -// * -// * _.update(object, 'a[0].b.c', function(n) { return n * n; }); -// * console.log(object.a[0].b.c); -// * // => 9 -// * -// * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); -// * console.log(object.x[0].y.z); -// * // => 0 -// */function update(object,path,updater){return object==null?object:baseUpdate(object,path,castFunction(updater));}/** -// * This method is like `_.update` except that it accepts `customizer` which is -// * invoked to produce the objects of `path`. If `customizer` returns `undefined` -// * path creation is handled by the method instead. The `customizer` is invoked -// * with three arguments: (nsValue, key, nsObject). -// * -// * **Note:** This method mutates `object`. -// * -// * @static -// * @memberOf _ -// * @since 4.6.0 -// * @category Object -// * @param {Object} object The object to modify. -// * @param {Array|string} path The path of the property to set. -// * @param {Function} updater The function to produce the updated value. -// * @param {Function} [customizer] The function to customize assigned values. -// * @returns {Object} Returns `object`. -// * @example -// * -// * var object = {}; -// * -// * _.updateWith(object, '[0][1]', _.constant('a'), Object); -// * // => { '0': { '1': 'a' } } -// */function updateWith(object,path,updater,customizer){customizer=typeof customizer=='function'?customizer:undefined$1;return object==null?object:baseUpdate(object,path,castFunction(updater),customizer);}/** -// * Creates an array of the own enumerable string keyed property values of `object`. -// * -// * **Note:** Non-object values are coerced to objects. -// * -// * @static -// * @since 0.1.0 -// * @memberOf _ -// * @category Object -// * @param {Object} object The object to query. -// * @returns {Array} Returns the array of property values. -// * @example -// * -// * function Foo() { -// * this.a = 1; -// * this.b = 2; -// * } -// * -// * Foo.prototype.c = 3; -// * -// * _.values(new Foo); -// * // => [1, 2] (iteration order is not guaranteed) -// * -// * _.values('hi'); -// * // => ['h', 'i'] -// */function values(object){return object==null?[]:baseValues(object,keys(object));}/** -// * Creates an array of the own and inherited enumerable string keyed property -// * values of `object`. -// * -// * **Note:** Non-object values are coerced to objects. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category Object -// * @param {Object} object The object to query. -// * @returns {Array} Returns the array of property values. -// * @example -// * -// * function Foo() { -// * this.a = 1; -// * this.b = 2; -// * } -// * -// * Foo.prototype.c = 3; -// * -// * _.valuesIn(new Foo); -// * // => [1, 2, 3] (iteration order is not guaranteed) -// */function valuesIn(object){return object==null?[]:baseValues(object,keysIn(object));}/*------------------------------------------------------------------------*/ /** -// * Clamps `number` within the inclusive `lower` and `upper` bounds. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category Number -// * @param {number} number The number to clamp. -// * @param {number} [lower] The lower bound. -// * @param {number} upper The upper bound. -// * @returns {number} Returns the clamped number. -// * @example -// * -// * _.clamp(-10, -5, 5); -// * // => -5 -// * -// * _.clamp(10, -5, 5); -// * // => 5 -// */function clamp(number,lower,upper){if(upper===undefined$1){upper=lower;lower=undefined$1;}if(upper!==undefined$1){upper=toNumber(upper);upper=upper===upper?upper:0;}if(lower!==undefined$1){lower=toNumber(lower);lower=lower===lower?lower:0;}return baseClamp(toNumber(number),lower,upper);}/** -// * Checks if `n` is between `start` and up to, but not including, `end`. If -// * `end` is not specified, it's set to `start` with `start` then set to `0`. -// * If `start` is greater than `end` the params are swapped to support -// * negative ranges. -// * -// * @static -// * @memberOf _ -// * @since 3.3.0 -// * @category Number -// * @param {number} number The number to check. -// * @param {number} [start=0] The start of the range. -// * @param {number} end The end of the range. -// * @returns {boolean} Returns `true` if `number` is in the range, else `false`. -// * @see _.range, _.rangeRight -// * @example -// * -// * _.inRange(3, 2, 4); -// * // => true -// * -// * _.inRange(4, 8); -// * // => true -// * -// * _.inRange(4, 2); -// * // => false -// * -// * _.inRange(2, 2); -// * // => false -// * -// * _.inRange(1.2, 2); -// * // => true -// * -// * _.inRange(5.2, 4); -// * // => false -// * -// * _.inRange(-3, -2, -6); -// * // => true -// */function inRange(number,start,end){start=toFinite(start);if(end===undefined$1){end=start;start=0;}else {end=toFinite(end);}number=toNumber(number);return baseInRange(number,start,end);}/** -// * Produces a random number between the inclusive `lower` and `upper` bounds. -// * If only one argument is provided a number between `0` and the given number -// * is returned. If `floating` is `true`, or either `lower` or `upper` are -// * floats, a floating-point number is returned instead of an integer. -// * -// * **Note:** JavaScript follows the IEEE-754 standard for resolving -// * floating-point values which can produce unexpected results. -// * -// * @static -// * @memberOf _ -// * @since 0.7.0 -// * @category Number -// * @param {number} [lower=0] The lower bound. -// * @param {number} [upper=1] The upper bound. -// * @param {boolean} [floating] Specify returning a floating-point number. -// * @returns {number} Returns the random number. -// * @example -// * -// * _.random(0, 5); -// * // => an integer between 0 and 5 -// * -// * _.random(5); -// * // => also an integer between 0 and 5 -// * -// * _.random(5, true); -// * // => a floating-point number between 0 and 5 -// * -// * _.random(1.2, 5.2); -// * // => a floating-point number between 1.2 and 5.2 -// */function random(lower,upper,floating){if(floating&&typeof floating!='boolean'&&isIterateeCall(lower,upper,floating)){upper=floating=undefined$1;}if(floating===undefined$1){if(typeof upper=='boolean'){floating=upper;upper=undefined$1;}else if(typeof lower=='boolean'){floating=lower;lower=undefined$1;}}if(lower===undefined$1&&upper===undefined$1){lower=0;upper=1;}else {lower=toFinite(lower);if(upper===undefined$1){upper=lower;lower=0;}else {upper=toFinite(upper);}}if(lower>upper){var temp=lower;lower=upper;upper=temp;}if(floating||lower%1||upper%1){var rand=nativeRandom();return nativeMin(lower+rand*(upper-lower+freeParseFloat('1e-'+((rand+'').length-1))),upper);}return baseRandom(lower,upper);}/*------------------------------------------------------------------------*/ /** -// * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category String -// * @param {string} [string=''] The string to convert. -// * @returns {string} Returns the camel cased string. -// * @example -// * -// * _.camelCase('Foo Bar'); -// * // => 'fooBar' -// * -// * _.camelCase('--foo-bar--'); -// * // => 'fooBar' -// * -// * _.camelCase('__FOO_BAR__'); -// * // => 'fooBar' -// */var camelCase=createCompounder(function(result,word,index){word=word.toLowerCase();return result+(index?capitalize(word):word);});/** -// * Converts the first character of `string` to upper case and the remaining -// * to lower case. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category String -// * @param {string} [string=''] The string to capitalize. -// * @returns {string} Returns the capitalized string. -// * @example -// * -// * _.capitalize('FRED'); -// * // => 'Fred' -// */function capitalize(string){return upperFirst(toString(string).toLowerCase());}/** -// * Deburrs `string` by converting -// * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) -// * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) -// * letters to basic Latin letters and removing -// * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category String -// * @param {string} [string=''] The string to deburr. -// * @returns {string} Returns the deburred string. -// * @example -// * -// * _.deburr('déjà vu'); -// * // => 'deja vu' -// */function deburr(string){string=toString(string);return string&&string.replace(reLatin,deburrLetter).replace(reComboMark,'');}/** -// * Checks if `string` ends with the given target string. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category String -// * @param {string} [string=''] The string to inspect. -// * @param {string} [target] The string to search for. -// * @param {number} [position=string.length] The position to search up to. -// * @returns {boolean} Returns `true` if `string` ends with `target`, -// * else `false`. -// * @example -// * -// * _.endsWith('abc', 'c'); -// * // => true -// * -// * _.endsWith('abc', 'b'); -// * // => false -// * -// * _.endsWith('abc', 'b', 2); -// * // => true -// */function endsWith(string,target,position){string=toString(string);target=baseToString(target);var length=string.length;position=position===undefined$1?length:baseClamp(toInteger(position),0,length);var end=position;position-=target.length;return position>=0&&string.slice(position,end)==target;}/** -// * Converts the characters "&", "<", ">", '"', and "'" in `string` to their -// * corresponding HTML entities. -// * -// * **Note:** No other characters are escaped. To escape additional -// * characters use a third-party library like [_he_](https://mths.be/he). -// * -// * Though the ">" character is escaped for symmetry, characters like -// * ">" and "/" don't need escaping in HTML and have no special meaning -// * unless they're part of a tag or unquoted attribute value. See -// * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) -// * (under "semi-related fun fact") for more details. -// * -// * When working with HTML you should always -// * [quote attribute values](http://wonko.com/post/html-escaping) to reduce -// * XSS vectors. -// * -// * @static -// * @since 0.1.0 -// * @memberOf _ -// * @category String -// * @param {string} [string=''] The string to escape. -// * @returns {string} Returns the escaped string. -// * @example -// * -// * _.escape('fred, barney, & pebbles'); -// * // => 'fred, barney, & pebbles' -// */function escape(string){string=toString(string);return string&&reHasUnescapedHtml.test(string)?string.replace(reUnescapedHtml,escapeHtmlChar):string;}/** -// * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", -// * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category String -// * @param {string} [string=''] The string to escape. -// * @returns {string} Returns the escaped string. -// * @example -// * -// * _.escapeRegExp('[lodash](https://lodash.com/)'); -// * // => '\[lodash\]\(https://lodash\.com/\)' -// */function escapeRegExp(string){string=toString(string);return string&&reHasRegExpChar.test(string)?string.replace(reRegExpChar,'\\$&'):string;}/** -// * Converts `string` to -// * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category String -// * @param {string} [string=''] The string to convert. -// * @returns {string} Returns the kebab cased string. -// * @example -// * -// * _.kebabCase('Foo Bar'); -// * // => 'foo-bar' -// * -// * _.kebabCase('fooBar'); -// * // => 'foo-bar' -// * -// * _.kebabCase('__FOO_BAR__'); -// * // => 'foo-bar' -// */var kebabCase=createCompounder(function(result,word,index){return result+(index?'-':'')+word.toLowerCase();});/** -// * Converts `string`, as space separated words, to lower case. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category String -// * @param {string} [string=''] The string to convert. -// * @returns {string} Returns the lower cased string. -// * @example -// * -// * _.lowerCase('--Foo-Bar--'); -// * // => 'foo bar' -// * -// * _.lowerCase('fooBar'); -// * // => 'foo bar' -// * -// * _.lowerCase('__FOO_BAR__'); -// * // => 'foo bar' -// */var lowerCase=createCompounder(function(result,word,index){return result+(index?' ':'')+word.toLowerCase();});/** -// * Converts the first character of `string` to lower case. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category String -// * @param {string} [string=''] The string to convert. -// * @returns {string} Returns the converted string. -// * @example -// * -// * _.lowerFirst('Fred'); -// * // => 'fred' -// * -// * _.lowerFirst('FRED'); -// * // => 'fRED' -// */var lowerFirst=createCaseFirst('toLowerCase');/** -// * Pads `string` on the left and right sides if it's shorter than `length`. -// * Padding characters are truncated if they can't be evenly divided by `length`. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category String -// * @param {string} [string=''] The string to pad. -// * @param {number} [length=0] The padding length. -// * @param {string} [chars=' '] The string used as padding. -// * @returns {string} Returns the padded string. -// * @example -// * -// * _.pad('abc', 8); -// * // => ' abc ' -// * -// * _.pad('abc', 8, '_-'); -// * // => '_-abc_-_' -// * -// * _.pad('abc', 3); -// * // => 'abc' -// */function pad(string,length,chars){string=toString(string);length=toInteger(length);var strLength=length?stringSize(string):0;if(!length||strLength>=length){return string;}var mid=(length-strLength)/2;return createPadding(nativeFloor(mid),chars)+string+createPadding(nativeCeil(mid),chars);}/** -// * Pads `string` on the right side if it's shorter than `length`. Padding -// * characters are truncated if they exceed `length`. -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category String -// * @param {string} [string=''] The string to pad. -// * @param {number} [length=0] The padding length. -// * @param {string} [chars=' '] The string used as padding. -// * @returns {string} Returns the padded string. -// * @example -// * -// * _.padEnd('abc', 6); -// * // => 'abc ' -// * -// * _.padEnd('abc', 6, '_-'); -// * // => 'abc_-_' -// * -// * _.padEnd('abc', 3); -// * // => 'abc' -// */function padEnd(string,length,chars){string=toString(string);length=toInteger(length);var strLength=length?stringSize(string):0;return length&&strLength ' abc' -// * -// * _.padStart('abc', 6, '_-'); -// * // => '_-_abc' -// * -// * _.padStart('abc', 3); -// * // => 'abc' -// */function padStart(string,length,chars){string=toString(string);length=toInteger(length);var strLength=length?stringSize(string):0;return length&&strLength 8 -// * -// * _.map(['6', '08', '10'], _.parseInt); -// * // => [6, 8, 10] -// */function parseInt(string,radix,guard){if(guard||radix==null){radix=0;}else if(radix){radix=+radix;}return nativeParseInt(toString(string).replace(reTrimStart,''),radix||0);}/** -// * Repeats the given string `n` times. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category String -// * @param {string} [string=''] The string to repeat. -// * @param {number} [n=1] The number of times to repeat the string. -// * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. -// * @returns {string} Returns the repeated string. -// * @example -// * -// * _.repeat('*', 3); -// * // => '***' -// * -// * _.repeat('abc', 2); -// * // => 'abcabc' -// * -// * _.repeat('abc', 0); -// * // => '' -// */function repeat(string,n,guard){if(guard?isIterateeCall(string,n,guard):n===undefined$1){n=1;}else {n=toInteger(n);}return baseRepeat(toString(string),n);}/** -// * Replaces matches for `pattern` in `string` with `replacement`. -// * -// * **Note:** This method is based on -// * [`String#replace`](https://mdn.io/String/replace). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category String -// * @param {string} [string=''] The string to modify. -// * @param {RegExp|string} pattern The pattern to replace. -// * @param {Function|string} replacement The match replacement. -// * @returns {string} Returns the modified string. -// * @example -// * -// * _.replace('Hi Fred', 'Fred', 'Barney'); -// * // => 'Hi Barney' -// */function replace(){var args=arguments,string=toString(args[0]);return args.length<3?string:string.replace(args[1],args[2]);}/** -// * Converts `string` to -// * [snake case](https://en.wikipedia.org/wiki/Snake_case). -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category String -// * @param {string} [string=''] The string to convert. -// * @returns {string} Returns the snake cased string. -// * @example -// * -// * _.snakeCase('Foo Bar'); -// * // => 'foo_bar' -// * -// * _.snakeCase('fooBar'); -// * // => 'foo_bar' -// * -// * _.snakeCase('--FOO-BAR--'); -// * // => 'foo_bar' -// */var snakeCase=createCompounder(function(result,word,index){return result+(index?'_':'')+word.toLowerCase();});/** -// * Splits `string` by `separator`. -// * -// * **Note:** This method is based on -// * [`String#split`](https://mdn.io/String/split). -// * -// * @static -// * @memberOf _ -// * @since 4.0.0 -// * @category String -// * @param {string} [string=''] The string to split. -// * @param {RegExp|string} separator The separator pattern to split by. -// * @param {number} [limit] The length to truncate results to. -// * @returns {Array} Returns the string segments. -// * @example -// * -// * _.split('a-b-c', '-', 2); -// * // => ['a', 'b'] -// */function split(string,separator,limit){if(limit&&typeof limit!='number'&&isIterateeCall(string,separator,limit)){separator=limit=undefined$1;}limit=limit===undefined$1?MAX_ARRAY_LENGTH:limit>>>0;if(!limit){return [];}string=toString(string);if(string&&(typeof separator=='string'||separator!=null&&!isRegExp(separator))){separator=baseToString(separator);if(!separator&&hasUnicode(string)){return castSlice(stringToArray(string),0,limit);}}return string.split(separator,limit);}/** -// * Converts `string` to -// * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). -// * -// * @static -// * @memberOf _ -// * @since 3.1.0 -// * @category String -// * @param {string} [string=''] The string to convert. -// * @returns {string} Returns the start cased string. -// * @example -// * -// * _.startCase('--foo-bar--'); -// * // => 'Foo Bar' -// * -// * _.startCase('fooBar'); -// * // => 'Foo Bar' -// * -// * _.startCase('__FOO_BAR__'); -// * // => 'FOO BAR' -// */var startCase=createCompounder(function(result,word,index){return result+(index?' ':'')+upperFirst(word);});/** -// * Checks if `string` starts with the given target string. -// * -// * @static -// * @memberOf _ -// * @since 3.0.0 -// * @category String -// * @param {string} [string=''] The string to inspect. -// * @param {string} [target] The string to search for. -// * @param {number} [position=0] The position to search from. -// * @returns {boolean} Returns `true` if `string` starts with `target`, -// * else `false`. -// * @example -// * -// * _.startsWith('abc', 'a'); -// * // => true -// * -// * _.startsWith('abc', 'b'); -// * // => false -// * -// * _.startsWith('abc', 'b', 1); -// * // => true -// */function startsWith(string,target,position){string=toString(string);position=position==null?0:baseClamp(toInteger(position),0,string.length);target=baseToString(target);return string.slice(position,position+target.length)==target;}/** -// * Creates a compiled template function that can interpolate data properties -// * in "interpolate" delimiters, HTML-escape interpolated data properties in -// * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data -// * properties may be accessed as free variables in the template. If a setting -// * object is given, it takes precedence over `_.templateSettings` values. -// * -// * **Note:** In the development build `_.template` utilizes -// * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) -// * for easier debugging. -// * -// * For more information on precompiling templates see -// * [lodash's custom builds documentation](https://lodash.com/custom-builds). -// * -// * For more information on Chrome extension sandboxes see -// * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). -// * -// * @static -// * @since 0.1.0 -// * @memberOf _ -// * @category String -// * @param {string} [string=''] The template string. -// * @param {Object} [options={}] The options object. -// * @param {RegExp} [options.escape=_.templateSettings.escape] -// * The HTML "escape" delimiter. -// * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] -// * The "evaluate" delimiter. -// * @param {Object} [options.imports=_.templateSettings.imports] -// * An object to import into the template as free variables. -// * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] -// * The "interpolate" delimiter. -// * @param {string} [options.sourceURL='lodash.templateSources[n]'] -// * The sourceURL of the compiled template. -// * @param {string} [options.variable='obj'] -// * The data object variable name. -// * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. -// * @returns {Function} Returns the compiled template function. -// * @example -// * -// * // Use the "interpolate" delimiter to create a compiled template. -// * var compiled = _.template('hello <%= user %>!'); -// * compiled({ 'user': 'fred' }); -// * // => 'hello fred!' -// * -// * // Use the HTML "escape" delimiter to escape data property values. -// * var compiled = _.template('<%- value %>'); -// * compiled({ 'value': ' - - - - - - - - - - - - -
-
-
- - - - -
-
- - - - -
-
-
-
-
-
    -
-
-
-
-
-
-
-
-
- -
-
- - -
-
-
-
-
-
- -
-
- -
-
- - - - - \ No newline at end of file diff --git a/html/index1.html b/html/index1.html index 4678393..b530a58 100644 --- a/html/index1.html +++ b/html/index1.html @@ -72,8 +72,9 @@ margin:0 auto; } .btnc { - margin-left: 5px; - font-size: x-large; + margin-left: 15px; + /* margin-right: 15px; */ + font-size: larger; font-weight: 900; border-radius: 20px; } @@ -107,17 +108,17 @@
-
+
- +
-
+
- +
@@ -125,24 +126,24 @@
    + style="text-align: left;line-height: 40px;font-size: larger;font-weight: 900;">
-
- - + + - -
@@ -152,7 +153,7 @@