diff --git a/dist/flexio.js b/dist/flexio.js
index 8809936..101a52a 100644
--- a/dist/flexio.js
+++ b/dist/flexio.js
@@ -1,5 +1,5 @@
 /*!
- * Flex.io Javascript SDK v1.20.2 (https://github.com/flexiodata/flexio-sdk-js)
+ * Flex.io Javascript SDK v1.21.0 (https://github.com/flexiodata/flexio-sdk-js)
  * (c) 2018 Gold Prairie LLC
  */
 (function webpackUniversalModuleDefinition(root, factory) {
@@ -275,7 +275,7 @@ var Flexio = {
     this.pipes = __webpack_require__(30).getPipesObject(this);
     this.util = __webpack_require__(1).getUtilObject(this);
     this._http = null;
-    this.version = this.util.isNodeJs() ? __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"../package.json\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())).version : "1.20.2";
+    this.version = this.util.isNodeJs() ? __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"../package.json\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())).version : "1.21.0";
 
     var getPipeConstructor = __webpack_require__(31).getPipeConstructor;
     this.pipe = getPipeConstructor(this);
diff --git a/dist/flexio.min.js b/dist/flexio.min.js
index 1427e4e..016d041 100644
--- a/dist/flexio.min.js
+++ b/dist/flexio.min.js
@@ -1,5 +1,5 @@
 /*!
- * Flex.io Javascript SDK v1.20.2 (https://github.com/flexiodata/flexio-sdk-js)
+ * Flex.io Javascript SDK v1.21.0 (https://github.com/flexiodata/flexio-sdk-js)
  * (c) 2018 Gold Prairie LLC
  */
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Flexio=e():t.Flexio=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=2)}([function(t,e,n){"use strict";function r(t){return"[object Object]"===Object.prototype.toString.call(t)}function i(t,e,n){var o=Array.isArray(e)?e:e.replace(/(\[(\d)\])/g,".$2").split(".").filter(function(t){return t.length});return o.length?r(t)?i(t[o.shift()],o,n):n:void 0===t?n:t}function o(t,e){var n=Array.from(arguments);n.shift();for(var r=0;r<n.length;++r)for(var i in n[r])n[r].hasOwnProperty(i)&&(t[i]=n[r][i]);return t}function s(t,e){if(null==t||!Array.isArray(e))return{};for(var n,r={},i=0;i<e.length;++i)n=e[i],t.hasOwnProperty(n)&&(r[n]=t[n]);return r}t.exports={isPlainObject:r,assign:o,pick:s,get:i,isString:function(t){return"string"==typeof t||t instanceof String},isNumber:function(t){return!isNaN(parseFloat(t))&&isFinite(t)},isNil:function(t){return null==t},defaultTo:function(t,e){return null==t||t!==t?e:t},last:function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0},isFunction:function(t){return t instanceof Function}}},function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i={};t.exports=i,i.isPipeObject=function(t){return"object"===(void 0===t?"undefined":r(t))&&t.hasOwnProperty("pipe")&&"object"===r(t.pipe)},i.isPipeJson=function(t){return"object"===(void 0===t?"undefined":r(t))&&t.hasOwnProperty("op")&&t.hasOwnProperty("params")},i.isNodeJs=function(){return"[object process]"===Object.prototype.toString.call("undefined"!=typeof process?process:0)},i.arrayBufferToString=function(t){if(this.isNodeJs())return t instanceof Buffer?t.toString("utf-8"):Buffer.from(t).toString("utf-8");if("TextDecoder"in window)return new TextDecoder("utf-8").decode(t);var e,n=new Uint8Array(t),r="",i=n.length;for(e=0;e<i;++e)r+=String.fromCharCode(n[e]);return decodeURIComponent(escape(r))},i.callbackAdapter=function(t,e,n,r,i){"function"==typeof i?i(t,e):t?r(t):n(e)},t.exports.getUtilObject=function(t){return new function(){for(var e in i)i.hasOwnProperty(e)&&(this[e]=i[e]);this.debug=function(e){if(t.getConfig().debug){var e="flexio-sdk-js: "+e;console.log(e)}return this}}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(3);e.default=r},function(t,e,n){"use strict";var r=n(0),i=n(4),o={token:"",baseUrl:"https://www.flex.io/api/v1",insecure:!1,debug:!1},s={_init:function(){this.connections=n(29).getConnectionsObject(this),this.pipes=n(30).getPipesObject(this),this.util=n(1).getUtilObject(this),this._http=null,this.version=this.util.isNodeJs()?n(!function(){var t=new Error('Cannot find module "../package.json"');throw t.code="MODULE_NOT_FOUND",t}()).version:"1.20.2";var t=n(31).getPipeConstructor;this.pipe=t(this);var e=n(32).getConnectionConstructor;this.connection=e(this)},setup:function(t,e){return o=r.assign(o,{token:t},e),this._http=null,this._createHttp(),this},getConfig:function(){return r.assign({},o)},http:function(){return this._http||this._createHttp(),this._http},task:i,_createHttp:function(){var t={baseURL:o.baseUrl,headers:{Authorization:"Bearer "+o.token},insecure:!0===o.insecure};this._http=n(33).create(t)}};s._init(),t.exports=s},function(t,e,n){"use strict";var r=n(0),i=n(5),o=n(6),s=n(7),a=n(8),u=n(9),c=n(10),p=n(11),f=n(12),l=n(13),d=n(14),h=n(15),g=n(16),y=n(17),m=n(18),v=n(19),b=n(20),O=n(21),S=n(22),x=n(23),C=n(24),P=n(25),w=n(26),j=n(27),k=n(28),A=function(t,e){switch(r.get(t,"op","")){default:return w.toCode(t);case"create":return i.toCode(t,e);case"convert":return o.toCode(t,e);case"copy":return s.toCode(t,e);case"dump":return a.toCode(t,e);case"echo":return u.toCode(t,e);case"email":return c.toCode(t,e);case"execute":return p.toCode(t,e);case"filter":return f.toCode(t,e);case"foreach":return l.toCode(t,e);case"insert":return d.toCode(t,e);case"limit":return h.toCode(t,e);case"list":return m.toCode(t,e);case"merge":return g.toCode(t,e);case"mkdir":return y.toCode(t,e);case"read":return v.toCode(t,e);case"render":return b.toCode(t,e);case"request":return O.toCode(t,e);case"select":return S.toCode(t,e);case"sequence":return x.toCode(t,e);case"set":return C.toCode(t,e);case"sleep":return P.toCode(t,e);case"transform":return j.toCode(t,e);case"write":return k.toCode(t,e)}};t.exports={create:i,convert:o,copy:s,dump:a,echo:u,email:c,execute:p.execute,insert:d,filter:f,foreach:l,javascript:p.javascript,limit:h,list:m,merge:g,mkdir:y,python:p.python,read:v,render:b,request:O,select:S,sequence:x,set:C,sleep:P,task:w,transform:j,write:k,toCode:A}},function(t,e,n){"use strict";var r=n(0),i=function(t,e){if(Array.isArray(t))return{op:"create",params:{content_type:"application/vnd.flexio.table",columns:t}};var n={op:"create",params:{path:t}};return void 0!==e&&(Array.isArray(e)?n.params.columns=e:n.params.content_type=e),n};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=JSON.stringify(n.path)||void 0,o=JSON.stringify(n.content_type)||void 0,s=JSON.stringify(n.columns)||void 0;return void 0!==i?void 0!==s?"create("+i+", "+s+")":void 0!==o?"create("+i+", "+o+")":"create("+i+")":void 0!==s?"create("+s+")":void 0!==o?"":void 0},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t,e){return{op:"convert",params:{input:t,output:e}}};i.toCode=function(t,e){var n=r.get(t,"params.input",{}),i=r.get(t,"params.output",{});return"convert("+JSON.stringify(n)+", "+JSON.stringify(i)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t,e,n){var i={op:"copy",params:{from:t,to:e}};return r.isPlainObject(n)&&(i.params.options=n),i};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=JSON.stringify(n.from)||'""',o=JSON.stringify(n.to)||'""',s=n.hasOwnProperty("options")&&r.isPlainObject(n.options)?JSON.stringify(n.options):null,a="copy("+i+", "+o;return null!==s&&(a+=", "+s),a+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"dump",params:{msg:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"dump("+(JSON.stringify(n.msg)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"echo",params:{msg:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"echo("+(JSON.stringify(n.msg)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){if(!r.isPlainObject(t))throw"The first function parameter must be an object";if(!t.hasOwnProperty("to"))throw"The `to` parameter is required";if(!t.hasOwnProperty("body_text"))throw"The `body_text` parameter is required";return{op:"email",params:t}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"email("+JSON.stringify(n,null,2)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(){return"undefined"!=typeof process},o=function(t){try{return i()?Buffer(t,"utf8").toString("base64"):btoa(unescape(encodeURIComponent(t)))}catch(t){return t}},s=function(t){try{return i()?Buffer.from(t,"base64").toString("utf8"):decodeURIComponent(escape(atob(t)))}catch(t){return t}},a=function(t){var e;try{e=t.toString(),e=e.substring(e.indexOf("{")+1,e.lastIndexOf("}"))}catch(t){e=""}return e},u=function(t){if(r.isString(t))return t;if(r.isFunction(t)){var e;if(0==t.length)return"exports.flexio_handler = function(context) "+(e=a(t));if(e=t.toString(),"function"==e.substring(0,8))e=e.slice(8);else{var n=e.indexOf("=>"),i=e.indexOf("{");n>=0&&n<i&&(e=e.replace("=>s*{","{"))}return"exports.flexio_handler = function"+e}},c=function(){var t,e,n,i=Array.from(arguments),s=r.get(i,"[0]",null),a=r.get(i,"[1]",null),c=r.get(i,"[2]",null),p={};"python"==s||"javascript"==s?(t=s,e=a,null!==e&&void 0!==e||(e=""),n=c):(t="javascript",e=s,n=a),"javascript"==t&&(e=u(e)),p.lang=t;var f=/^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/;return e.match(f)?p.path=e:p.code=o(e),null!==n&&(p.integrity=n),{op:"execute",params:p}},p=function(){var t=Array.from(arguments);return t.unshift("javascript"),c.apply(this,t)},f=function(){var t=Array.from(arguments);return t.unshift("python"),c.apply(this,t)},l=function(t){var e=r.get(t,"params",{}),n=e.lang||"",i=s(e.code||"");switch(n){case"javascript":return-1!=i.indexOf("exports.flexio_handler")?(i=i.replace("exports.flexio_handler =",""),"javascript("+i.trim()+")"):"javascript("+JSON.stringify(i.trim())+")";case"python":return"python(`\n"+i+"\n`)";default:return"execute("+JSON.stringify(n)+", `\n"+i+"\n`)"}};t.exports={execute:c,javascript:p,python:f,toCode:l}},function(t,e,n){"use strict";var r=n(0),i=function(t){if(r.isNil(t))throw"The `filter` parameter is required";return{op:"filter",params:{where:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"filter("+(JSON.stringify(n.where)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=n(1),o=function(t,e){var n={op:"foreach",params:{}};return("string"==typeof t||t instanceof String)&&(n.params.spec=t),i.isPipeObject(t)?n.params.run=t.pipe.task:i.isPipeObject(e)&&(n.params.run=e.pipe.task),n};o.toCode=function(t,e){var n=r.get(t,"params",{}),i=[];return n.hasOwnProperty("spec")&&i.push(JSON.stringify(n.spec)),n.hasOwnProperty("run")&&i.push(e.task.toCode(n.run,e)),"foreach("+i.join(", ")+")"},t.exports=o},function(t,e,n){"use strict";var r=n(0),i=function(t,e){var n;return n=Array.isArray(e)?e:[e],{op:"insert",params:{path:t,values:n}}};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=r.get(n,"path",void 0),o=r.get(n,"values",void 0);return Array.isArray(o)||(o=[o]),i=JSON.stringify(i),o=JSON.stringify(o),"insert("+i+", "+o+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"limit",params:{value:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"limit("+(JSON.stringify(n.value)||"")+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){if(Array.isArray(t))var e=t;else for(var e=[],n=0;n<arguments.length;++n)e.push(arguments[n]);return{op:"merge",params:{files:e}}};i.toCode=function(t,e){for(var n=r.get(t,"params",{}),i=r.get(n,"files",[]),o=0;o<i.length;++o)"string"==typeof i[o]||i[o]instanceof String?i[o]=JSON.stringify(i[o]):i[o]=e.merge.toCode(i[o],e);return"merge("+(i.length>=10?"["+i.join(", ")+"]":i.join(", "))+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"mkdir",params:{path:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"mkdir("+(JSON.stringify(n.path)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"list",params:{path:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"list("+(JSON.stringify(n.path)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"read",params:{path:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"read("+(JSON.stringify(n.path)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t,e){var n={};return r.isPlainObject(t)?n=t:r.isString(t)&&(n.url=t),r.isPlainObject(e)&&r.assign(n,e),{op:"render",params:n}};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=JSON.stringify(n.url)||"";return delete n.url,0==Object.keys(n).length?"render("+i+")":"render("+i+", "+JSON.stringify(n,null,2)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(){var t=Array.from(arguments),e=r.get(t,"[0]",""),n=r.get(t,"[1]",{});return n=r.isPlainObject(r.get(t,"[0]",{}))?r.get(t,"[0]",{}):r.assign({},{url:e},n),{op:"request",params:n}};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=r.get(n,"url",""),o=Object.keys(n);return 1==o.length&&"url"==o[0]?"request("+JSON.stringify(i)+")":"request("+JSON.stringify(n,null,2)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(){var t=Array.from(arguments);return 1==t.length&&Array.isArray(r.get(t,"[0]"))&&(t=r.get(t,"[0]",[])),{op:"select",params:{columns:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=JSON.stringify(n.columns)||"";return-1!=i.indexOf("[")&&-1!=i.indexOf("]")&&(i=i.substring(1,i.length-1)),"select("+i+")"},t.exports=i},function(t,e,n){"use strict";var r=(n(0),function(t){return{op:"sequence",params:{steps:t}}});r.toCode=function(t,e){for(var n=[],r=0;r<t.params.items.length;++r){var i=t.params.items[r],o=e.task.toCode(i,e);i.hasOwnProperty("params")&&i.params.hasOwnProperty("lang")&&"python"!=i.params.lang&&(o=o.replace(/\n/g,"\n  ")),n.push(o)}var n=["Flexio.pipe()"].concat(n);return n.join("\n  .")},t.exports=r},function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=n(0),o=n(1),s=function(t,e){return o.isPipeObject(e)&&(e=e.pipe.task),{op:"set",params:{var:t,value:e}}};s.toCode=function(t,e){var n=i.get(t,"params",{}),o=i.get(n,"variable",""),s=i.get(n,"value","");return o=JSON.stringify(o),s="object"===(void 0===s?"undefined":r(s))&&null!==s&&s.hasOwnProperty("op")?e.task.toCode(s,e):JSON.stringify(s),"set("+o+", "+s+")"},t.exports=s},function(t,e,n){"use strict";var r=n(0),i=function(t){return t=r.defaultTo(t,10),{op:"sleep",params:{value:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"sleep("+(JSON.stringify(n.value)||"")+")"},t.exports=i},function(t,e,n){"use strict";var r=(n(0),function(t){return t});r.toCode=function(t,e){return"task("+JSON.stringify(t,null,2)+")"},t.exports=r},function(t,e,n){"use strict";var r=n(0),i=function(t){var e=Array.from(arguments),n={operations:[]},i={},o=[],s=r.get(e,"[0]");return r.isPlainObject(s)?(1==e.length&&r.has(s,"operations")?(i=r.pick(s,["columns","operations"]),i=r.assign(n,i)):(o=[].concat(e),i={operations:o}),{op:"transform",params:i}):{op:"transform",params:{columns:void 0,operations:o}}};i.toCode=function(t,e){var n=t.hasOwnProperty("params")?t.params:{};return!n.hasOwnProperty("columns")&&n.hasOwnProperty("operations")&&Array.isArray(n.operations)&&1==n.operations.length?"transform("+JSON.stringify(n.operations[0])+")":"transform("+JSON.stringify(n)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"write",params:{path:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"write("+(JSON.stringify(n.path)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0);n(1);t.exports={},t.exports.getConnectionsObject=function(t){return new function(){this.create=function(e,n){var i;if(r.isPlainObject(e))i=e;else{if(!(e instanceof t.connection))throw"Unknown connection object type";i=e.connection}return new Promise(function(e,r){t.http().post("/connections",i).then(function(i){t.util.callbackAdapter(null,i.data,e,r,n)}).catch(function(i){t.util.debug("Flexio.connections.create(): Failed."),t.util.callbackAdapter(i,null,e,r,n)})})},this.list=function(e){var n=Array.from(arguments),e=r.get(n,"[0]");return new Promise(function(n,i){t.util.debug("Requesting Connections..."),t.http().get("/connections").then(function(o){var s=r.get(o,"data",[]);t.util.debug("Success!"),t.util.callbackAdapter(null,s,n,i,e)}).catch(function(r){t.util.debug("Failed."),t.util.callbackAdapter(r,null,n,i,e)})})}}}},function(t,e,n){"use strict";var r=n(0);t.exports={},t.exports.getPipesObject=function(t){return new function(){this.create=function(e,n){var i;if(r.isPlainObject(e))i=e;else{if(!(e instanceof t.pipe))throw"Unknown pipe object type";i=e.pipe}return new Promise(function(e,r){t.http().post("/pipes",i).then(function(i){t.util.callbackAdapter(null,i.data,e,r,n)}).catch(function(i){t.util.debug("Flexio.pipes.create(): Failed."),t.util.callbackAdapter(i,null,e,r,n)})})},this.list=function(e){var n=Array.from(arguments),e=r.get(n,"[0]");return new Promise(function(n,i){t.util.debug("Requesting Pipes..."),t.http().get("/pipes").then(function(o){var s=r.get(o,"data",[]);t.util.debug("Success!"),t.util.callbackAdapter(null,s,n,i,e)}).catch(function(r){t.util.debug("Failed."),t.util.callbackAdapter(r,null,n,i,e)})})},this.run=function(){var e=Array.from(arguments);e.push(null,null,null);var n,i,o={},s=null;e[0]instanceof t.pipe?(i=r.get(e[0],"pipe.eid",""),s=r.get(e[0],"pipe.task","")):Array.isArray(e[0])?(i="",s=e[0]):i=e[0],r.isPlainObject(e[1])&&(o=e[1]),n=r.isFunction(e[1])?e[1]:r.isFunction(e[2])?e[2]:null;var a=function(e,n){return{contentType:n,buffer:e,get blob(){return new Blob([this.buffer],{type:n})},get text(){return t.util.arrayBufferToString(this.buffer)},get data(){try{return JSON.parse(t.util.arrayBufferToString(this.buffer))}catch(t){return null}}}};return new Promise(function(e,u){if(t.util.debug("Running Pipe `"+(0==i.length?"[Pipe Object/Task Array]":i)+"`..."),0==i.length){var c={name:"SDK Pipe",description:"SDK Pipe",task:s,process_mode:"R"};t.http().post("/processes",c).then(function(i){var s=r.get(i,"data",{}),c=r.get(s,"eid","");t.util.debug("Created Process.");var p={method:"post",url:"/processes/"+c+"/run",responseType:"arraybuffer"};o.hasOwnProperty("data")&&(p.data=o.data),o.hasOwnProperty("query")&&(p.params=o.query),t.http().request(p).then(function(i){t.util.debug("Process Complete.");var o=r.get(i,"headers.content-type","text/plain"),s=a(i.data,o);t.util.callbackAdapter(null,s,e,u,n)}).catch(function(r){t.util.debug("Process Run Failed. "+r),t.util.callbackAdapter(r,null,e,u,n)})}).catch(function(r){t.util.debug("Process Create Failed. "+r),t.util.callbackAdapter(r,null,e,u,n)})}else{var p={method:"post",url:"/pipes/"+i+"/run",responseType:"arraybuffer"};o.hasOwnProperty("data")&&(p.data=o.data),o.hasOwnProperty("query")&&(p.params=o.query),o.hasOwnProperty("contentType")?p.headers={"Content-Type":o.contentType}:p.hasOwnProperty("data")&&(r.isPlainObject(p.data)||(r.isString(p.data)?p.headers={"Content-Type":"text/plain"}:p.headers={"Content-Type":"application/octet-stream"}));t.http()(p).then(function(i){t.util.debug("Process Complete.");var o=r.get(i,"headers.content-type","text/plain"),s=a(i.data,o);t.util.callbackAdapter(null,s,e,u,n)}).catch(function(r){t.util.debug("Pipe Run Call Failed. "+r),t.util.callbackAdapter(r,null,e,u,n)})}})}}}},function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=n(0);t.exports={},t.exports.getPipeConstructor=function(t){return function(e){if(!(this instanceof t.pipe))return new t.pipe(e);var n=i.assign(this,{pipe:{name:"Untitled",description:"",task:{op:"sequence",params:{items:[]}}},processes:[],_params:{},loading:!1,saving:!1,running:!1,getJSON:function(){return i.assign({},this.pipe)},getProcesses:function(){return[].concat(this.processes)},getLastProcess:function(){return i.last(this.processes)},addTask:function(t){return this.pipe.task.params.items.push(t),this},clearTasks:function(){return this.pipe.task.params.items=[],this},getTasks:function(){return this.pipe.task.params.items},load:function(){var e=this,n=arguments,r=Array.from(arguments),o=i.get(r,"[0]"),s=i.get(r,"[1]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){e.load.apply(e,n)},50),this):i.isNil(o)?t.util.debug("The `identifier` parameter is required. Either the pipe's eid or pipe's alias may be used."):(this.loading=!0,t.util.debug("Loading Pipe `"+o+"`..."),t.http().get("/pipes/"+o).then(function(n){var r=i.get(n,"data",{});e.pipe=i.assign({},r),e.loading=!1,t.util.debug("Pipe Loaded."),"function"==typeof s&&s.call(e,null,r)}).catch(function(n){e.loading=!1,t.util.debug("Pipe Load Failed. "),"function"==typeof s&&s.call(e,n,null)}),this)},save:function(){var e=this,n=arguments,r=Array.from(arguments),o=i.get(r,"[0]"),s=i.get(r,"[0]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){e.save.apply(e,n)},50),this):(i.isPlainObject(o)&&(i.assign(this.pipe,i.pick(o,["name","description","ename"])),s=i.get(r,"[1]")),this.saving=!0,t.util.debug("Saving Pipe `"+i.get(this.pipe,"name","Untitled Pipe")+"`..."),t.http().post("/pipes",this.pipe).then(function(n){var r=i.get(n,"data",{});e.pipe=i.assign({},r),e.saving=!1,t.util.debug("Pipe Saved."),"function"==typeof s&&s.call(e,null,e.pipe)}).catch(function(n){e.saving=!1,t.util.debug("Pipe Save Failed."),"function"==typeof s&&s.call(e,n,null)}),this)},run:function(){var e=Array.from(arguments);return e.unshift(this),t.pipes.run.apply(null,e)},params:function(t){return this._params=i.assign({},this.getParams(),t),this},getParams:function(){return i.assign({},this._params)},toCode:function(e){return t.task.toCode(this.pipe.task,t)}});return function(e){for(var n in t.task)t.task.hasOwnProperty(n)&&"toCode"!=n&&e(n,t.task[n])}(function(t,e){n[t]=function(){return n.addTask(e.apply(n,arguments))}}),void 0!==e&&("string"==typeof e||e instanceof String?n.pipe.eid=e:"object"===(void 0===e?"undefined":r(e))&&(e.hasOwnProperty("pipe")?n.pipe=JSON.parse(JSON.stringify(e.pipe)):e.hasOwnProperty("task")?n.pipe=JSON.parse(JSON.stringify(e)):e.hasOwnProperty("op")&&(n.pipe.task=e))),n}}},function(t,e,n){"use strict";var r=n(0),i=["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"],o=["","basic","bearer","oauth2"];t.exports={},t.exports.getConnectionConstructor=function(t){return function(){return this instanceof t.connection?r.assign(this,{connection:{name:"Untitled",description:"",connection_type:"http",connection_info:{method:"",url:"",auth:"",username:"",password:"",token:"",access_token:"",refresh_token:"",expires:"",data:{},headers:{}}},loading:!1,saving:!1,running:!1,getJSON:function(){return r.assign({},this.connection)},name:function(t){return this.connection.name=t,this},description:function(t){return this.connection.description=t,this},method:function(){var t=Array.from(arguments),e=r.get(t,"[0]");if(!r.isString(e))throw"Invalid/empty method";if(-1==i.indexOf(e))throw"Invalid method";return this._setInfo("method",e)},url:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("url",e):this},auth:function(){var t=Array.from(arguments),e=r.get(t,"[0]");if(!r.isString(e))throw"Invalid/empty auth";if(-1==o.indexOf(e))throw"Invalid auth";return"none"==e&&(e=""),this._setInfo("auth",e)},username:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("username",e):this},password:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("password",e):this},token:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("token",e):this},accessToken:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("access_token",e):this},refreshToken:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("refresh_token",e):this},expires:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isNumber(e)&&(e=""+e),r.isString(e)?this._setInfo("expires",e):this},data:function(){var t=Array.from(arguments),e=r.get(t,"[0]");if(!r.isPlainObject(e))return this;var n=this._getInfo("data",{});return e=r.assign({},n,e),this._setInfo("data",e)},headers:function(){var t=Array.from(arguments),e=r.get(t,"[0]");if(!r.isPlainObject(e))return this;var n=this._getInfo("headers",{});return e=r.assign({},n,e),this._setInfo("headers",e)},load:function(){var e=this,n=arguments,i=Array.from(arguments),o=r.get(i,"[0]"),s=r.get(i,"[1]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){e.load.apply(e,n)},50),this):r.isNil(o)?t.util.debug("The `identifier` parameter is required. Either the connection's eid or connection's alias may be used."):(this.loading=!0,t.util.debug("Loading Connection `"+o+"`..."),t.http().get("/connections/"+o).then(function(n){var i=r.get(n,"data",{});e.connection=r.assign({},i),e.loading=!1,t.util.debug("Connection Loaded."),"function"==typeof s&&s.call(e,null,i)}).catch(function(n){e.loading=!1,t.util.debug("Connection Load Failed."),"function"==typeof s&&s.call(e,n,null)}),this)},save:function(){var e=this,n=arguments,i=Array.from(arguments),o=r.get(i,"[0]"),s=r.get(i,"[0]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){e.save.apply(e,n)},50),this):(r.isPlainObject(o)&&(r.assign(this.connection,r.pick(o,["name","description","ename"])),s=r.get(i,"[1]")),this.saving=!0,t.util.debug("Saving Connection `"+r.get(this.connection,"name","Untitled Connection")+"`..."),t.http().post("/connections",this.connection).then(function(n){var i=r.get(n,"data",{});e.connection=r.assign({},i),e.saving=!1,t.util.debug("Connection Saved."),"function"==typeof s&&s.call(e,null,e.connection)}).catch(function(n){e.saving=!1,t.util.debug("Connection Save Failed."),"function"==typeof s&&s.call(e,n,null)}),this)},_getInfo:function(t,e){return r.get(this.connection,"connection_info."+t,e)},_setInfo:function(t,e){return this.connection.hasOwnProperty("connection_info")||(this.connection.connection_info={}),this.connection.connection_info[t]=e,this}}):new t.connection}}},function(t,e,n){"use strict";function r(t){this.options=i.isPlainObject(t)?t:{},this.post=function(t,e,n){return this.request(i.assign(n||{},{method:"POST",url:t,data:e}))},this.get=function(t,e){return this.request(i.assign(e||{},{method:"GET",url:t}))},this.request=function(t){var e=i.get(this.options,"baseURL",""),r=i.get(t,"url","");return-1!=r.indexOf("://")?e=r:(r="/"==r.substr(0,1)?r.substr(1):r,"/"!=e.slice(-1)&&(e+="/"),e+=r),t=i.assign({},t,{url:e}),o.isNodeJs()?n(!function(){var t=new Error('Cannot find module "./http-node"');throw t.code="MODULE_NOT_FOUND",t}()).apply(this,[t]):n(34).apply(this,[t])}}var i=n(0),o=n(1);t.exports={create:function(t){return new r(t)}}},function(t,e,n){"use strict";function r(t){function e(t){for(var e={},n=t?t.split("\r\n"):[],r=0,i=n.length;r<i;r++){var o=n[r].indexOf(":");o>0&&(e[n[r].substr(0,o).trim()]=n[r].substr(o+1).trim())}return e}var n=i.assign({},i.get(this.options,"headers",{}),i.get(t,"headers",{})),r=i.get(t,"data",null);return"undefined"!=typeof FormData&&r instanceof FormData?delete n["Content-Type"]:i.isPlainObject(r)&&(r=JSON.stringify(r),n["Content-Type"]="application/json"),new Promise(function(i,o){function s(e){var n=t.responseType&&"text"!==t.responseType?e.response:e.responseText;if("string"==typeof n)try{n=JSON.parse(n)}catch(t){}return n}var a=new XMLHttpRequest;if(a.open(t.method.toUpperCase(),t.url,!0),t.responseType&&(a.responseType=t.responseType),Object.keys(n).length>0)for(var u in n)n.hasOwnProperty(u)&&a.setRequestHeader(u,n[u]);a.onload=function(){var n=s(a),r={data:n,status:1223===a.status?204:a.status,statusText:1223===a.status?"No Content":a.statusText,headers:e(a.getAllResponseHeaders()),config:t,request:a};i(r),a=null},a.onerror=function(){var n=s(a),r={data:n,status:a.status,statusText:a.statusText,headers:e(a.getAllResponseHeaders()),config:t,request:a};o(r),a=null},a.send(r)})}var i=n(0);t.exports=r}]).default});
\ No newline at end of file
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Flexio=e():t.Flexio=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=2)}([function(t,e,n){"use strict";function r(t){return"[object Object]"===Object.prototype.toString.call(t)}function i(t,e,n){var o=Array.isArray(e)?e:e.replace(/(\[(\d)\])/g,".$2").split(".").filter(function(t){return t.length});return o.length?r(t)?i(t[o.shift()],o,n):n:void 0===t?n:t}function o(t,e){var n=Array.from(arguments);n.shift();for(var r=0;r<n.length;++r)for(var i in n[r])n[r].hasOwnProperty(i)&&(t[i]=n[r][i]);return t}function s(t,e){if(null==t||!Array.isArray(e))return{};for(var n,r={},i=0;i<e.length;++i)n=e[i],t.hasOwnProperty(n)&&(r[n]=t[n]);return r}t.exports={isPlainObject:r,assign:o,pick:s,get:i,isString:function(t){return"string"==typeof t||t instanceof String},isNumber:function(t){return!isNaN(parseFloat(t))&&isFinite(t)},isNil:function(t){return null==t},defaultTo:function(t,e){return null==t||t!==t?e:t},last:function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0},isFunction:function(t){return t instanceof Function}}},function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i={};t.exports=i,i.isPipeObject=function(t){return"object"===(void 0===t?"undefined":r(t))&&t.hasOwnProperty("pipe")&&"object"===r(t.pipe)},i.isPipeJson=function(t){return"object"===(void 0===t?"undefined":r(t))&&t.hasOwnProperty("op")&&t.hasOwnProperty("params")},i.isNodeJs=function(){return"[object process]"===Object.prototype.toString.call("undefined"!=typeof process?process:0)},i.arrayBufferToString=function(t){if(this.isNodeJs())return t instanceof Buffer?t.toString("utf-8"):Buffer.from(t).toString("utf-8");if("TextDecoder"in window)return new TextDecoder("utf-8").decode(t);var e,n=new Uint8Array(t),r="",i=n.length;for(e=0;e<i;++e)r+=String.fromCharCode(n[e]);return decodeURIComponent(escape(r))},i.callbackAdapter=function(t,e,n,r,i){"function"==typeof i?i(t,e):t?r(t):n(e)},t.exports.getUtilObject=function(t){return new function(){for(var e in i)i.hasOwnProperty(e)&&(this[e]=i[e]);this.debug=function(e){if(t.getConfig().debug){var e="flexio-sdk-js: "+e;console.log(e)}return this}}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(3);e.default=r},function(t,e,n){"use strict";var r=n(0),i=n(4),o={token:"",baseUrl:"https://www.flex.io/api/v1",insecure:!1,debug:!1},s={_init:function(){this.connections=n(29).getConnectionsObject(this),this.pipes=n(30).getPipesObject(this),this.util=n(1).getUtilObject(this),this._http=null,this.version=this.util.isNodeJs()?n(!function(){var t=new Error('Cannot find module "../package.json"');throw t.code="MODULE_NOT_FOUND",t}()).version:"1.21.0";var t=n(31).getPipeConstructor;this.pipe=t(this);var e=n(32).getConnectionConstructor;this.connection=e(this)},setup:function(t,e){return o=r.assign(o,{token:t},e),this._http=null,this._createHttp(),this},getConfig:function(){return r.assign({},o)},http:function(){return this._http||this._createHttp(),this._http},task:i,_createHttp:function(){var t={baseURL:o.baseUrl,headers:{Authorization:"Bearer "+o.token},insecure:!0===o.insecure};this._http=n(33).create(t)}};s._init(),t.exports=s},function(t,e,n){"use strict";var r=n(0),i=n(5),o=n(6),s=n(7),a=n(8),u=n(9),c=n(10),p=n(11),f=n(12),l=n(13),d=n(14),h=n(15),g=n(16),y=n(17),m=n(18),v=n(19),b=n(20),O=n(21),S=n(22),x=n(23),C=n(24),P=n(25),w=n(26),j=n(27),k=n(28),A=function(t,e){switch(r.get(t,"op","")){default:return w.toCode(t);case"create":return i.toCode(t,e);case"convert":return o.toCode(t,e);case"copy":return s.toCode(t,e);case"dump":return a.toCode(t,e);case"echo":return u.toCode(t,e);case"email":return c.toCode(t,e);case"execute":return p.toCode(t,e);case"filter":return f.toCode(t,e);case"foreach":return l.toCode(t,e);case"insert":return d.toCode(t,e);case"limit":return h.toCode(t,e);case"list":return m.toCode(t,e);case"merge":return g.toCode(t,e);case"mkdir":return y.toCode(t,e);case"read":return v.toCode(t,e);case"render":return b.toCode(t,e);case"request":return O.toCode(t,e);case"select":return S.toCode(t,e);case"sequence":return x.toCode(t,e);case"set":return C.toCode(t,e);case"sleep":return P.toCode(t,e);case"transform":return j.toCode(t,e);case"write":return k.toCode(t,e)}};t.exports={create:i,convert:o,copy:s,dump:a,echo:u,email:c,execute:p.execute,insert:d,filter:f,foreach:l,javascript:p.javascript,limit:h,list:m,merge:g,mkdir:y,python:p.python,read:v,render:b,request:O,select:S,sequence:x,set:C,sleep:P,task:w,transform:j,write:k,toCode:A}},function(t,e,n){"use strict";var r=n(0),i=function(t,e){if(Array.isArray(t))return{op:"create",params:{content_type:"application/vnd.flexio.table",columns:t}};var n={op:"create",params:{path:t}};return void 0!==e&&(Array.isArray(e)?n.params.columns=e:n.params.content_type=e),n};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=JSON.stringify(n.path)||void 0,o=JSON.stringify(n.content_type)||void 0,s=JSON.stringify(n.columns)||void 0;return void 0!==i?void 0!==s?"create("+i+", "+s+")":void 0!==o?"create("+i+", "+o+")":"create("+i+")":void 0!==s?"create("+s+")":void 0!==o?"":void 0},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t,e){return{op:"convert",params:{input:t,output:e}}};i.toCode=function(t,e){var n=r.get(t,"params.input",{}),i=r.get(t,"params.output",{});return"convert("+JSON.stringify(n)+", "+JSON.stringify(i)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t,e,n){var i={op:"copy",params:{from:t,to:e}};return r.isPlainObject(n)&&(i.params.options=n),i};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=JSON.stringify(n.from)||'""',o=JSON.stringify(n.to)||'""',s=n.hasOwnProperty("options")&&r.isPlainObject(n.options)?JSON.stringify(n.options):null,a="copy("+i+", "+o;return null!==s&&(a+=", "+s),a+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"dump",params:{msg:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"dump("+(JSON.stringify(n.msg)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"echo",params:{msg:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"echo("+(JSON.stringify(n.msg)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){if(!r.isPlainObject(t))throw"The first function parameter must be an object";if(!t.hasOwnProperty("to"))throw"The `to` parameter is required";if(!t.hasOwnProperty("body_text"))throw"The `body_text` parameter is required";return{op:"email",params:t}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"email("+JSON.stringify(n,null,2)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(){return"undefined"!=typeof process},o=function(t){try{return i()?Buffer(t,"utf8").toString("base64"):btoa(unescape(encodeURIComponent(t)))}catch(t){return t}},s=function(t){try{return i()?Buffer.from(t,"base64").toString("utf8"):decodeURIComponent(escape(atob(t)))}catch(t){return t}},a=function(t){var e;try{e=t.toString(),e=e.substring(e.indexOf("{")+1,e.lastIndexOf("}"))}catch(t){e=""}return e},u=function(t){if(r.isString(t))return t;if(r.isFunction(t)){var e;if(0==t.length)return"exports.flexio_handler = function(context) "+(e=a(t));if(e=t.toString(),"function"==e.substring(0,8))e=e.slice(8);else{var n=e.indexOf("=>"),i=e.indexOf("{");n>=0&&n<i&&(e=e.replace("=>s*{","{"))}return"exports.flexio_handler = function"+e}},c=function(){var t,e,n,i=Array.from(arguments),s=r.get(i,"[0]",null),a=r.get(i,"[1]",null),c=r.get(i,"[2]",null),p={};"python"==s||"javascript"==s?(t=s,e=a,null!==e&&void 0!==e||(e=""),n=c):(t="javascript",e=s,n=a),"javascript"==t&&(e=u(e)),p.lang=t;var f=/^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/;return e.match(f)?p.path=e:p.code=o(e),null!==n&&(p.integrity=n),{op:"execute",params:p}},p=function(){var t=Array.from(arguments);return t.unshift("javascript"),c.apply(this,t)},f=function(){var t=Array.from(arguments);return t.unshift("python"),c.apply(this,t)},l=function(t){var e=r.get(t,"params",{}),n=e.lang||"",i=s(e.code||"");switch(n){case"javascript":return-1!=i.indexOf("exports.flexio_handler")?(i=i.replace("exports.flexio_handler =",""),"javascript("+i.trim()+")"):"javascript("+JSON.stringify(i.trim())+")";case"python":return"python(`\n"+i+"\n`)";default:return"execute("+JSON.stringify(n)+", `\n"+i+"\n`)"}};t.exports={execute:c,javascript:p,python:f,toCode:l}},function(t,e,n){"use strict";var r=n(0),i=function(t){if(r.isNil(t))throw"The `filter` parameter is required";return{op:"filter",params:{where:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"filter("+(JSON.stringify(n.where)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=n(1),o=function(t,e){var n={op:"foreach",params:{}};return("string"==typeof t||t instanceof String)&&(n.params.spec=t),i.isPipeObject(t)?n.params.run=t.pipe.task:i.isPipeObject(e)&&(n.params.run=e.pipe.task),n};o.toCode=function(t,e){var n=r.get(t,"params",{}),i=[];return n.hasOwnProperty("spec")&&i.push(JSON.stringify(n.spec)),n.hasOwnProperty("run")&&i.push(e.task.toCode(n.run,e)),"foreach("+i.join(", ")+")"},t.exports=o},function(t,e,n){"use strict";var r=n(0),i=function(t,e){var n;return n=Array.isArray(e)?e:[e],{op:"insert",params:{path:t,values:n}}};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=r.get(n,"path",void 0),o=r.get(n,"values",void 0);return Array.isArray(o)||(o=[o]),i=JSON.stringify(i),o=JSON.stringify(o),"insert("+i+", "+o+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"limit",params:{value:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"limit("+(JSON.stringify(n.value)||"")+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){if(Array.isArray(t))var e=t;else for(var e=[],n=0;n<arguments.length;++n)e.push(arguments[n]);return{op:"merge",params:{files:e}}};i.toCode=function(t,e){for(var n=r.get(t,"params",{}),i=r.get(n,"files",[]),o=0;o<i.length;++o)"string"==typeof i[o]||i[o]instanceof String?i[o]=JSON.stringify(i[o]):i[o]=e.merge.toCode(i[o],e);return"merge("+(i.length>=10?"["+i.join(", ")+"]":i.join(", "))+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"mkdir",params:{path:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"mkdir("+(JSON.stringify(n.path)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"list",params:{path:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"list("+(JSON.stringify(n.path)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"read",params:{path:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"read("+(JSON.stringify(n.path)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t,e){var n={};return r.isPlainObject(t)?n=t:r.isString(t)&&(n.url=t),r.isPlainObject(e)&&r.assign(n,e),{op:"render",params:n}};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=JSON.stringify(n.url)||"";return delete n.url,0==Object.keys(n).length?"render("+i+")":"render("+i+", "+JSON.stringify(n,null,2)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(){var t=Array.from(arguments),e=r.get(t,"[0]",""),n=r.get(t,"[1]",{});return n=r.isPlainObject(r.get(t,"[0]",{}))?r.get(t,"[0]",{}):r.assign({},{url:e},n),{op:"request",params:n}};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=r.get(n,"url",""),o=Object.keys(n);return 1==o.length&&"url"==o[0]?"request("+JSON.stringify(i)+")":"request("+JSON.stringify(n,null,2)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(){var t=Array.from(arguments);return 1==t.length&&Array.isArray(r.get(t,"[0]"))&&(t=r.get(t,"[0]",[])),{op:"select",params:{columns:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=JSON.stringify(n.columns)||"";return-1!=i.indexOf("[")&&-1!=i.indexOf("]")&&(i=i.substring(1,i.length-1)),"select("+i+")"},t.exports=i},function(t,e,n){"use strict";var r=(n(0),function(t){return{op:"sequence",params:{steps:t}}});r.toCode=function(t,e){for(var n=[],r=0;r<t.params.items.length;++r){var i=t.params.items[r],o=e.task.toCode(i,e);i.hasOwnProperty("params")&&i.params.hasOwnProperty("lang")&&"python"!=i.params.lang&&(o=o.replace(/\n/g,"\n  ")),n.push(o)}var n=["Flexio.pipe()"].concat(n);return n.join("\n  .")},t.exports=r},function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=n(0),o=n(1),s=function(t,e){return o.isPipeObject(e)&&(e=e.pipe.task),{op:"set",params:{var:t,value:e}}};s.toCode=function(t,e){var n=i.get(t,"params",{}),o=i.get(n,"variable",""),s=i.get(n,"value","");return o=JSON.stringify(o),s="object"===(void 0===s?"undefined":r(s))&&null!==s&&s.hasOwnProperty("op")?e.task.toCode(s,e):JSON.stringify(s),"set("+o+", "+s+")"},t.exports=s},function(t,e,n){"use strict";var r=n(0),i=function(t){return t=r.defaultTo(t,10),{op:"sleep",params:{value:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"sleep("+(JSON.stringify(n.value)||"")+")"},t.exports=i},function(t,e,n){"use strict";var r=(n(0),function(t){return t});r.toCode=function(t,e){return"task("+JSON.stringify(t,null,2)+")"},t.exports=r},function(t,e,n){"use strict";var r=n(0),i=function(t){var e=Array.from(arguments),n={operations:[]},i={},o=[],s=r.get(e,"[0]");return r.isPlainObject(s)?(1==e.length&&r.has(s,"operations")?(i=r.pick(s,["columns","operations"]),i=r.assign(n,i)):(o=[].concat(e),i={operations:o}),{op:"transform",params:i}):{op:"transform",params:{columns:void 0,operations:o}}};i.toCode=function(t,e){var n=t.hasOwnProperty("params")?t.params:{};return!n.hasOwnProperty("columns")&&n.hasOwnProperty("operations")&&Array.isArray(n.operations)&&1==n.operations.length?"transform("+JSON.stringify(n.operations[0])+")":"transform("+JSON.stringify(n)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"write",params:{path:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"write("+(JSON.stringify(n.path)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0);n(1);t.exports={},t.exports.getConnectionsObject=function(t){return new function(){this.create=function(e,n){var i;if(r.isPlainObject(e))i=e;else{if(!(e instanceof t.connection))throw"Unknown connection object type";i=e.connection}return new Promise(function(e,r){t.http().post("/connections",i).then(function(i){t.util.callbackAdapter(null,i.data,e,r,n)}).catch(function(i){t.util.debug("Flexio.connections.create(): Failed."),t.util.callbackAdapter(i,null,e,r,n)})})},this.list=function(e){var n=Array.from(arguments),e=r.get(n,"[0]");return new Promise(function(n,i){t.util.debug("Requesting Connections..."),t.http().get("/connections").then(function(o){var s=r.get(o,"data",[]);t.util.debug("Success!"),t.util.callbackAdapter(null,s,n,i,e)}).catch(function(r){t.util.debug("Failed."),t.util.callbackAdapter(r,null,n,i,e)})})}}}},function(t,e,n){"use strict";var r=n(0);t.exports={},t.exports.getPipesObject=function(t){return new function(){this.create=function(e,n){var i;if(r.isPlainObject(e))i=e;else{if(!(e instanceof t.pipe))throw"Unknown pipe object type";i=e.pipe}return new Promise(function(e,r){t.http().post("/pipes",i).then(function(i){t.util.callbackAdapter(null,i.data,e,r,n)}).catch(function(i){t.util.debug("Flexio.pipes.create(): Failed."),t.util.callbackAdapter(i,null,e,r,n)})})},this.list=function(e){var n=Array.from(arguments),e=r.get(n,"[0]");return new Promise(function(n,i){t.util.debug("Requesting Pipes..."),t.http().get("/pipes").then(function(o){var s=r.get(o,"data",[]);t.util.debug("Success!"),t.util.callbackAdapter(null,s,n,i,e)}).catch(function(r){t.util.debug("Failed."),t.util.callbackAdapter(r,null,n,i,e)})})},this.run=function(){var e=Array.from(arguments);e.push(null,null,null);var n,i,o={},s=null;e[0]instanceof t.pipe?(i=r.get(e[0],"pipe.eid",""),s=r.get(e[0],"pipe.task","")):Array.isArray(e[0])?(i="",s=e[0]):i=e[0],r.isPlainObject(e[1])&&(o=e[1]),n=r.isFunction(e[1])?e[1]:r.isFunction(e[2])?e[2]:null;var a=function(e,n){return{contentType:n,buffer:e,get blob(){return new Blob([this.buffer],{type:n})},get text(){return t.util.arrayBufferToString(this.buffer)},get data(){try{return JSON.parse(t.util.arrayBufferToString(this.buffer))}catch(t){return null}}}};return new Promise(function(e,u){if(t.util.debug("Running Pipe `"+(0==i.length?"[Pipe Object/Task Array]":i)+"`..."),0==i.length){var c={name:"SDK Pipe",description:"SDK Pipe",task:s,process_mode:"R"};t.http().post("/processes",c).then(function(i){var s=r.get(i,"data",{}),c=r.get(s,"eid","");t.util.debug("Created Process.");var p={method:"post",url:"/processes/"+c+"/run",responseType:"arraybuffer"};o.hasOwnProperty("data")&&(p.data=o.data),o.hasOwnProperty("query")&&(p.params=o.query),t.http().request(p).then(function(i){t.util.debug("Process Complete.");var o=r.get(i,"headers.content-type","text/plain"),s=a(i.data,o);t.util.callbackAdapter(null,s,e,u,n)}).catch(function(r){t.util.debug("Process Run Failed. "+r),t.util.callbackAdapter(r,null,e,u,n)})}).catch(function(r){t.util.debug("Process Create Failed. "+r),t.util.callbackAdapter(r,null,e,u,n)})}else{var p={method:"post",url:"/pipes/"+i+"/run",responseType:"arraybuffer"};o.hasOwnProperty("data")&&(p.data=o.data),o.hasOwnProperty("query")&&(p.params=o.query),o.hasOwnProperty("contentType")?p.headers={"Content-Type":o.contentType}:p.hasOwnProperty("data")&&(r.isPlainObject(p.data)||(r.isString(p.data)?p.headers={"Content-Type":"text/plain"}:p.headers={"Content-Type":"application/octet-stream"}));t.http()(p).then(function(i){t.util.debug("Process Complete.");var o=r.get(i,"headers.content-type","text/plain"),s=a(i.data,o);t.util.callbackAdapter(null,s,e,u,n)}).catch(function(r){t.util.debug("Pipe Run Call Failed. "+r),t.util.callbackAdapter(r,null,e,u,n)})}})}}}},function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=n(0);t.exports={},t.exports.getPipeConstructor=function(t){return function(e){if(!(this instanceof t.pipe))return new t.pipe(e);var n=i.assign(this,{pipe:{name:"Untitled",description:"",task:{op:"sequence",params:{items:[]}}},processes:[],_params:{},loading:!1,saving:!1,running:!1,getJSON:function(){return i.assign({},this.pipe)},getProcesses:function(){return[].concat(this.processes)},getLastProcess:function(){return i.last(this.processes)},addTask:function(t){return this.pipe.task.params.items.push(t),this},clearTasks:function(){return this.pipe.task.params.items=[],this},getTasks:function(){return this.pipe.task.params.items},load:function(){var e=this,n=arguments,r=Array.from(arguments),o=i.get(r,"[0]"),s=i.get(r,"[1]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){e.load.apply(e,n)},50),this):i.isNil(o)?t.util.debug("The `identifier` parameter is required. Either the pipe's eid or pipe's alias may be used."):(this.loading=!0,t.util.debug("Loading Pipe `"+o+"`..."),t.http().get("/pipes/"+o).then(function(n){var r=i.get(n,"data",{});e.pipe=i.assign({},r),e.loading=!1,t.util.debug("Pipe Loaded."),"function"==typeof s&&s.call(e,null,r)}).catch(function(n){e.loading=!1,t.util.debug("Pipe Load Failed. "),"function"==typeof s&&s.call(e,n,null)}),this)},save:function(){var e=this,n=arguments,r=Array.from(arguments),o=i.get(r,"[0]"),s=i.get(r,"[0]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){e.save.apply(e,n)},50),this):(i.isPlainObject(o)&&(i.assign(this.pipe,i.pick(o,["name","description","ename"])),s=i.get(r,"[1]")),this.saving=!0,t.util.debug("Saving Pipe `"+i.get(this.pipe,"name","Untitled Pipe")+"`..."),t.http().post("/pipes",this.pipe).then(function(n){var r=i.get(n,"data",{});e.pipe=i.assign({},r),e.saving=!1,t.util.debug("Pipe Saved."),"function"==typeof s&&s.call(e,null,e.pipe)}).catch(function(n){e.saving=!1,t.util.debug("Pipe Save Failed."),"function"==typeof s&&s.call(e,n,null)}),this)},run:function(){var e=Array.from(arguments);return e.unshift(this),t.pipes.run.apply(null,e)},params:function(t){return this._params=i.assign({},this.getParams(),t),this},getParams:function(){return i.assign({},this._params)},toCode:function(e){return t.task.toCode(this.pipe.task,t)}});return function(e){for(var n in t.task)t.task.hasOwnProperty(n)&&"toCode"!=n&&e(n,t.task[n])}(function(t,e){n[t]=function(){return n.addTask(e.apply(n,arguments))}}),void 0!==e&&("string"==typeof e||e instanceof String?n.pipe.eid=e:"object"===(void 0===e?"undefined":r(e))&&(e.hasOwnProperty("pipe")?n.pipe=JSON.parse(JSON.stringify(e.pipe)):e.hasOwnProperty("task")?n.pipe=JSON.parse(JSON.stringify(e)):e.hasOwnProperty("op")&&(n.pipe.task=e))),n}}},function(t,e,n){"use strict";var r=n(0),i=["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"],o=["","basic","bearer","oauth2"];t.exports={},t.exports.getConnectionConstructor=function(t){return function(){return this instanceof t.connection?r.assign(this,{connection:{name:"Untitled",description:"",connection_type:"http",connection_info:{method:"",url:"",auth:"",username:"",password:"",token:"",access_token:"",refresh_token:"",expires:"",data:{},headers:{}}},loading:!1,saving:!1,running:!1,getJSON:function(){return r.assign({},this.connection)},name:function(t){return this.connection.name=t,this},description:function(t){return this.connection.description=t,this},method:function(){var t=Array.from(arguments),e=r.get(t,"[0]");if(!r.isString(e))throw"Invalid/empty method";if(-1==i.indexOf(e))throw"Invalid method";return this._setInfo("method",e)},url:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("url",e):this},auth:function(){var t=Array.from(arguments),e=r.get(t,"[0]");if(!r.isString(e))throw"Invalid/empty auth";if(-1==o.indexOf(e))throw"Invalid auth";return"none"==e&&(e=""),this._setInfo("auth",e)},username:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("username",e):this},password:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("password",e):this},token:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("token",e):this},accessToken:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("access_token",e):this},refreshToken:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("refresh_token",e):this},expires:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isNumber(e)&&(e=""+e),r.isString(e)?this._setInfo("expires",e):this},data:function(){var t=Array.from(arguments),e=r.get(t,"[0]");if(!r.isPlainObject(e))return this;var n=this._getInfo("data",{});return e=r.assign({},n,e),this._setInfo("data",e)},headers:function(){var t=Array.from(arguments),e=r.get(t,"[0]");if(!r.isPlainObject(e))return this;var n=this._getInfo("headers",{});return e=r.assign({},n,e),this._setInfo("headers",e)},load:function(){var e=this,n=arguments,i=Array.from(arguments),o=r.get(i,"[0]"),s=r.get(i,"[1]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){e.load.apply(e,n)},50),this):r.isNil(o)?t.util.debug("The `identifier` parameter is required. Either the connection's eid or connection's alias may be used."):(this.loading=!0,t.util.debug("Loading Connection `"+o+"`..."),t.http().get("/connections/"+o).then(function(n){var i=r.get(n,"data",{});e.connection=r.assign({},i),e.loading=!1,t.util.debug("Connection Loaded."),"function"==typeof s&&s.call(e,null,i)}).catch(function(n){e.loading=!1,t.util.debug("Connection Load Failed."),"function"==typeof s&&s.call(e,n,null)}),this)},save:function(){var e=this,n=arguments,i=Array.from(arguments),o=r.get(i,"[0]"),s=r.get(i,"[0]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){e.save.apply(e,n)},50),this):(r.isPlainObject(o)&&(r.assign(this.connection,r.pick(o,["name","description","ename"])),s=r.get(i,"[1]")),this.saving=!0,t.util.debug("Saving Connection `"+r.get(this.connection,"name","Untitled Connection")+"`..."),t.http().post("/connections",this.connection).then(function(n){var i=r.get(n,"data",{});e.connection=r.assign({},i),e.saving=!1,t.util.debug("Connection Saved."),"function"==typeof s&&s.call(e,null,e.connection)}).catch(function(n){e.saving=!1,t.util.debug("Connection Save Failed."),"function"==typeof s&&s.call(e,n,null)}),this)},_getInfo:function(t,e){return r.get(this.connection,"connection_info."+t,e)},_setInfo:function(t,e){return this.connection.hasOwnProperty("connection_info")||(this.connection.connection_info={}),this.connection.connection_info[t]=e,this}}):new t.connection}}},function(t,e,n){"use strict";function r(t){this.options=i.isPlainObject(t)?t:{},this.post=function(t,e,n){return this.request(i.assign(n||{},{method:"POST",url:t,data:e}))},this.get=function(t,e){return this.request(i.assign(e||{},{method:"GET",url:t}))},this.request=function(t){var e=i.get(this.options,"baseURL",""),r=i.get(t,"url","");return-1!=r.indexOf("://")?e=r:(r="/"==r.substr(0,1)?r.substr(1):r,"/"!=e.slice(-1)&&(e+="/"),e+=r),t=i.assign({},t,{url:e}),o.isNodeJs()?n(!function(){var t=new Error('Cannot find module "./http-node"');throw t.code="MODULE_NOT_FOUND",t}()).apply(this,[t]):n(34).apply(this,[t])}}var i=n(0),o=n(1);t.exports={create:function(t){return new r(t)}}},function(t,e,n){"use strict";function r(t){function e(t){for(var e={},n=t?t.split("\r\n"):[],r=0,i=n.length;r<i;r++){var o=n[r].indexOf(":");o>0&&(e[n[r].substr(0,o).trim()]=n[r].substr(o+1).trim())}return e}var n=i.assign({},i.get(this.options,"headers",{}),i.get(t,"headers",{})),r=i.get(t,"data",null);return"undefined"!=typeof FormData&&r instanceof FormData?delete n["Content-Type"]:i.isPlainObject(r)&&(r=JSON.stringify(r),n["Content-Type"]="application/json"),new Promise(function(i,o){function s(e){var n=t.responseType&&"text"!==t.responseType?e.response:e.responseText;if("string"==typeof n)try{n=JSON.parse(n)}catch(t){}return n}var a=new XMLHttpRequest;if(a.open(t.method.toUpperCase(),t.url,!0),t.responseType&&(a.responseType=t.responseType),Object.keys(n).length>0)for(var u in n)n.hasOwnProperty(u)&&a.setRequestHeader(u,n[u]);a.onload=function(){var n=s(a),r={data:n,status:1223===a.status?204:a.status,statusText:1223===a.status?"No Content":a.statusText,headers:e(a.getAllResponseHeaders()),config:t,request:a};i(r),a=null},a.onerror=function(){var n=s(a),r={data:n,status:a.status,statusText:a.statusText,headers:e(a.getAllResponseHeaders()),config:t,request:a};o(r),a=null},a.send(r)})}var i=n(0);t.exports=r}]).default});
\ No newline at end of file
diff --git a/dist/orig/flexio-node.js b/dist/orig/flexio-node.js
new file mode 100644
index 0000000..36f4e2c
--- /dev/null
+++ b/dist/orig/flexio-node.js
@@ -0,0 +1,22232 @@
+/*!
+ * Flex.io Javascript SDK v1.20.2 (https://github.com/flexiodata/flexio-sdk-js)
+ * (c) 2018 Gold Prairie LLC
+ */
+(function webpackUniversalModuleDefinition(root, factory) {
+	if(typeof exports === 'object' && typeof module === 'object')
+		module.exports = factory(require("http"), require("https"), require("url"), require("assert"), require("stream"), require("tty"), require("util"), require("fs"), require("net"), require("zlib"));
+	else if(typeof define === 'function' && define.amd)
+		define(["http", "https", "url", "assert", "stream", "tty", "util", "fs", "net", "zlib"], factory);
+	else if(typeof exports === 'object')
+		exports["Flexio"] = factory(require("http"), require("https"), require("url"), require("assert"), require("stream"), require("tty"), require("util"), require("fs"), require("net"), require("zlib"));
+	else
+		root["Flexio"] = factory(root["http"], root["https"], root["url"], root["assert"], root["stream"], root["tty"], root["util"], root["fs"], root["net"], root["zlib"]);
+})(this, function(__WEBPACK_EXTERNAL_MODULE_10__, __WEBPACK_EXTERNAL_MODULE_11__, __WEBPACK_EXTERNAL_MODULE_13__, __WEBPACK_EXTERNAL_MODULE_31__, __WEBPACK_EXTERNAL_MODULE_32__, __WEBPACK_EXTERNAL_MODULE_37__, __WEBPACK_EXTERNAL_MODULE_38__, __WEBPACK_EXTERNAL_MODULE_39__, __WEBPACK_EXTERNAL_MODULE_40__, __WEBPACK_EXTERNAL_MODULE_41__) {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, {
+/******/ 				configurable: false,
+/******/ 				enumerable: true,
+/******/ 				get: getter
+/******/ 			});
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 17);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_RESULT__;/**
+ * @license
+ * Lodash <https://lodash.com/>
+ * Copyright JS Foundation and other contributors <https://js.foundation/>
+ * Released under MIT license <https://lodash.com/license>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+;(function() {
+
+  /** Used as a safe reference for `undefined` in pre-ES5 environments. */
+  var undefined;
+
+  /** Used as the semantic version number. */
+  var VERSION = '4.17.4';
+
+  /** 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';
+
+  /** 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*$/,
+      reLeadingDot = /^\./,
+      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 and trailing whitespace. */
+  var reTrim = /^\s+|\s+$/g,
+      reTrimStart = /^\s+/,
+      reTrimEnd = /\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 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)',
+      rsOrdUpper = '\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)',
+      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 = {
+    '&': '&amp;',
+    '<': '&lt;',
+    '>': '&gt;',
+    '"': '&quot;',
+    "'": '&#39;'
+  };
+
+  /** Used to map HTML entities to characters. */
+  var htmlUnescapes = {
+    '&amp;': '&',
+    '&lt;': '<',
+    '&gt;': '>',
+    '&quot;': '"',
+    '&#39;': "'"
+  };
+
+  /** 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 global == 'object' && global && global.Object === Object && global;
+
+  /** 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 = typeof exports == 'object' && exports && !exports.nodeType && exports;
+
+  /** Detect free variable `module`. */
+  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
+
+  /** Detect the popular CommonJS extension `module.exports`. */
+  var moduleExports = freeModule && freeModule.exports === freeExports;
+
+  /** Detect free variable `process` from Node.js. */
+  var freeProcess = moduleExports && freeGlobal.process;
+
+  /** Used to access faster Node.js helpers. */
+  var nodeUtil = (function() {
+    try {
+      return freeProcess && freeProcess.binding && freeProcess.binding('util');
+    } catch (e) {}
+  }());
+
+  /* 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;
+
+  /*--------------------------------------------------------------------------*/
+
+  /**
+   * Adds the key-value `pair` to `map`.
+   *
+   * @private
+   * @param {Object} map The map to modify.
+   * @param {Array} pair The key-value pair to add.
+   * @returns {Object} Returns `map`.
+   */
+  function addMapEntry(map, pair) {
+    // Don't return `map.set` because it's not chainable in IE 11.
+    map.set(pair[0], pair[1]);
+    return map;
+  }
+
+  /**
+   * Adds `value` to `set`.
+   *
+   * @private
+   * @param {Object} set The set to modify.
+   * @param {*} value The value to add.
+   * @returns {Object} Returns `set`.
+   */
+  function addSetEntry(set, value) {
+    // Don't return `set.add` because it's not chainable in IE 11.
+    set.add(value);
+    return set;
+  }
+
+  /**
+   * 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 < length) {
+      var value = array[index];
+      setter(accumulator, value, iteratee(value), array);
+    }
+    return accumulator;
+  }
+
+  /**
+   * A specialized version of `_.forEach` for arrays without support for
+   * iteratee shorthands.
+   *
+   * @private
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @returns {Array} Returns `array`.
+   */
+  function arrayEach(array, iteratee) {
+    var index = -1,
+        length = array == null ? 0 : array.length;
+
+    while (++index < length) {
+      if (iteratee(array[index], index, array) === false) {
+        break;
+      }
+    }
+    return array;
+  }
+
+  /**
+   * A specialized version of `_.forEachRight` for arrays without support for
+   * iteratee shorthands.
+   *
+   * @private
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @returns {Array} Returns `array`.
+   */
+  function arrayEachRight(array, iteratee) {
+    var length = array == null ? 0 : array.length;
+
+    while (length--) {
+      if (iteratee(array[length], length, array) === false) {
+        break;
+      }
+    }
+    return array;
+  }
+
+  /**
+   * A specialized version of `_.every` for arrays without support for
+   * iteratee shorthands.
+   *
+   * @private
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} predicate The function invoked per iteration.
+   * @returns {boolean} Returns `true` if all elements pass the predicate check,
+   *  else `false`.
+   */
+  function arrayEvery(array, predicate) {
+    var index = -1,
+        length = array == null ? 0 : array.length;
+
+    while (++index < length) {
+      if (!predicate(array[index], index, array)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  /**
+   * A specialized version of `_.filter` for arrays without support for
+   * iteratee shorthands.
+   *
+   * @private
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} predicate The function invoked per iteration.
+   * @returns {Array} Returns the new filtered array.
+   */
+  function arrayFilter(array, predicate) {
+    var index = -1,
+        length = array == null ? 0 : array.length,
+        resIndex = 0,
+        result = [];
+
+    while (++index < length) {
+      var value = array[index];
+      if (predicate(value, index, array)) {
+        result[resIndex++] = value;
+      }
+    }
+    return result;
+  }
+
+  /**
+   * A specialized version of `_.includes` for arrays without support for
+   * specifying an index to search from.
+   *
+   * @private
+   * @param {Array} [array] The array to inspect.
+   * @param {*} target The value to search for.
+   * @returns {boolean} Returns `true` if `target` is found, else `false`.
+   */
+  function arrayIncludes(array, value) {
+    var length = array == null ? 0 : array.length;
+    return !!length && baseIndexOf(array, value, 0) > -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 < length) {
+      if (comparator(value, array[index])) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * A specialized version of `_.map` for arrays without support for iteratee
+   * shorthands.
+   *
+   * @private
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @returns {Array} Returns the new mapped array.
+   */
+  function arrayMap(array, iteratee) {
+    var index = -1,
+        length = array == null ? 0 : array.length,
+        result = Array(length);
+
+    while (++index < length) {
+      result[index] = iteratee(array[index], index, array);
+    }
+    return result;
+  }
+
+  /**
+   * Appends the elements of `values` to `array`.
+   *
+   * @private
+   * @param {Array} array The array to modify.
+   * @param {Array} values The values to append.
+   * @returns {Array} Returns `array`.
+   */
+  function arrayPush(array, values) {
+    var index = -1,
+        length = values.length,
+        offset = array.length;
+
+    while (++index < length) {
+      array[offset + index] = values[index];
+    }
+    return array;
+  }
+
+  /**
+   * A specialized version of `_.reduce` for arrays without support for
+   * iteratee shorthands.
+   *
+   * @private
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @param {*} [accumulator] The initial value.
+   * @param {boolean} [initAccum] Specify using the first element of `array` as
+   *  the initial value.
+   * @returns {*} Returns the accumulated value.
+   */
+  function arrayReduce(array, iteratee, accumulator, initAccum) {
+    var index = -1,
+        length = array == null ? 0 : array.length;
+
+    if (initAccum && length) {
+      accumulator = array[++index];
+    }
+    while (++index < length) {
+      accumulator = iteratee(accumulator, array[index], index, array);
+    }
+    return accumulator;
+  }
+
+  /**
+   * A specialized version of `_.reduceRight` for arrays without support for
+   * iteratee shorthands.
+   *
+   * @private
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @param {*} [accumulator] The initial value.
+   * @param {boolean} [initAccum] Specify using the last element of `array` as
+   *  the initial value.
+   * @returns {*} Returns the accumulated value.
+   */
+  function arrayReduceRight(array, iteratee, accumulator, initAccum) {
+    var length = array == null ? 0 : array.length;
+    if (initAccum && length) {
+      accumulator = array[--length];
+    }
+    while (length--) {
+      accumulator = iteratee(accumulator, array[length], length, array);
+    }
+    return accumulator;
+  }
+
+  /**
+   * A specialized version of `_.some` for arrays without support for iteratee
+   * shorthands.
+   *
+   * @private
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} predicate The function invoked per iteration.
+   * @returns {boolean} Returns `true` if any element passes the predicate check,
+   *  else `false`.
+   */
+  function arraySome(array, predicate) {
+    var index = -1,
+        length = array == null ? 0 : array.length;
+
+    while (++index < length) {
+      if (predicate(array[index], index, array)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Gets the size of an ASCII `string`.
+   *
+   * @private
+   * @param {string} string The string inspect.
+   * @returns {number} Returns the string size.
+   */
+  var asciiSize = baseProperty('length');
+
+  /**
+   * Converts an ASCII `string` to an array.
+   *
+   * @private
+   * @param {string} string The string to convert.
+   * @returns {Array} Returns the converted array.
+   */
+  function asciiToArray(string) {
+    return string.split('');
+  }
+
+  /**
+   * Splits an ASCII `string` into an array of its words.
+   *
+   * @private
+   * @param {string} The string to inspect.
+   * @returns {Array} Returns the words of `string`.
+   */
+  function asciiWords(string) {
+    return string.match(reAsciiWord) || [];
+  }
+
+  /**
+   * The base implementation of methods like `_.findKey` and `_.findLastKey`,
+   * without support for iteratee shorthands, which iterates over `collection`
+   * using `eachFunc`.
+   *
+   * @private
+   * @param {Array|Object} collection The collection to inspect.
+   * @param {Function} predicate The function invoked per iteration.
+   * @param {Function} eachFunc The function to iterate over `collection`.
+   * @returns {*} Returns the found element or its key, else `undefined`.
+   */
+  function baseFindKey(collection, predicate, eachFunc) {
+    var result;
+    eachFunc(collection, function(value, key, collection) {
+      if (predicate(value, key, collection)) {
+        result = key;
+        return false;
+      }
+    });
+    return result;
+  }
+
+  /**
+   * The base implementation of `_.findIndex` and `_.findLastIndex` without
+   * support for iteratee shorthands.
+   *
+   * @private
+   * @param {Array} array The array to inspect.
+   * @param {Function} predicate The function invoked per iteration.
+   * @param {number} fromIndex The index to search from.
+   * @param {boolean} [fromRight] Specify iterating from right to left.
+   * @returns {number} Returns the index of the matched value, else `-1`.
+   */
+  function baseFindIndex(array, predicate, fromIndex, fromRight) {
+    var length = array.length,
+        index = fromIndex + (fromRight ? 1 : -1);
+
+    while ((fromRight ? index-- : ++index < length)) {
+      if (predicate(array[index], index, array)) {
+        return index;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
+   *
+   * @private
+   * @param {Array} array The array to inspect.
+   * @param {*} value The value to search for.
+   * @param {number} fromIndex The index to search from.
+   * @returns {number} Returns the index of the matched value, else `-1`.
+   */
+  function baseIndexOf(array, value, fromIndex) {
+    return value === value
+      ? strictIndexOf(array, value, fromIndex)
+      : baseFindIndex(array, baseIsNaN, fromIndex);
+  }
+
+  /**
+   * This function is like `baseIndexOf` except that it accepts a comparator.
+   *
+   * @private
+   * @param {Array} array The array to inspect.
+   * @param {*} value The value to search for.
+   * @param {number} fromIndex The index to search from.
+   * @param {Function} comparator The comparator invoked per element.
+   * @returns {number} Returns the index of the matched value, else `-1`.
+   */
+  function baseIndexOfWith(array, value, fromIndex, comparator) {
+    var index = fromIndex - 1,
+        length = array.length;
+
+    while (++index < length) {
+      if (comparator(array[index], value)) {
+        return index;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * The base implementation of `_.isNaN` without support for number objects.
+   *
+   * @private
+   * @param {*} value The value to check.
+   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
+   */
+  function baseIsNaN(value) {
+    return value !== value;
+  }
+
+  /**
+   * The base implementation of `_.mean` and `_.meanBy` without support for
+   * iteratee shorthands.
+   *
+   * @private
+   * @param {Array} array The array to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @returns {number} Returns the mean.
+   */
+  function baseMean(array, iteratee) {
+    var length = array == null ? 0 : array.length;
+    return length ? (baseSum(array, iteratee) / length) : NAN;
+  }
+
+  /**
+   * The base implementation of `_.property` without support for deep paths.
+   *
+   * @private
+   * @param {string} key The key of the property to get.
+   * @returns {Function} Returns the new accessor function.
+   */
+  function baseProperty(key) {
+    return function(object) {
+      return object == null ? undefined : object[key];
+    };
+  }
+
+  /**
+   * The base implementation of `_.propertyOf` without support for deep paths.
+   *
+   * @private
+   * @param {Object} object The object to query.
+   * @returns {Function} Returns the new accessor function.
+   */
+  function basePropertyOf(object) {
+    return function(key) {
+      return object == null ? undefined : object[key];
+    };
+  }
+
+  /**
+   * The base implementation of `_.reduce` and `_.reduceRight`, without support
+   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
+   *
+   * @private
+   * @param {Array|Object} collection The collection to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @param {*} accumulator The initial value.
+   * @param {boolean} initAccum Specify using the first or last element of
+   *  `collection` as the initial value.
+   * @param {Function} eachFunc The function to iterate over `collection`.
+   * @returns {*} Returns the accumulated value.
+   */
+  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
+    eachFunc(collection, function(value, index, collection) {
+      accumulator = initAccum
+        ? (initAccum = false, value)
+        : iteratee(accumulator, value, index, collection);
+    });
+    return accumulator;
+  }
+
+  /**
+   * The base implementation of `_.sortBy` which uses `comparer` to define the
+   * sort order of `array` and replaces criteria objects with their corresponding
+   * values.
+   *
+   * @private
+   * @param {Array} array The array to sort.
+   * @param {Function} comparer The function to define sort order.
+   * @returns {Array} Returns `array`.
+   */
+  function baseSortBy(array, comparer) {
+    var length = array.length;
+
+    array.sort(comparer);
+    while (length--) {
+      array[length] = array[length].value;
+    }
+    return array;
+  }
+
+  /**
+   * The base implementation of `_.sum` and `_.sumBy` without support for
+   * iteratee shorthands.
+   *
+   * @private
+   * @param {Array} array The array to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @returns {number} Returns the sum.
+   */
+  function baseSum(array, iteratee) {
+    var result,
+        index = -1,
+        length = array.length;
+
+    while (++index < length) {
+      var current = iteratee(array[index]);
+      if (current !== undefined) {
+        result = result === undefined ? current : (result + current);
+      }
+    }
+    return result;
+  }
+
+  /**
+   * The base implementation of `_.times` without support for iteratee shorthands
+   * or max array length checks.
+   *
+   * @private
+   * @param {number} n The number of times to invoke `iteratee`.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @returns {Array} Returns the array of results.
+   */
+  function baseTimes(n, iteratee) {
+    var index = -1,
+        result = Array(n);
+
+    while (++index < n) {
+      result[index] = iteratee(index);
+    }
+    return result;
+  }
+
+  /**
+   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
+   * of key-value pairs for `object` corresponding to the property names of `props`.
+   *
+   * @private
+   * @param {Object} object The object to query.
+   * @param {Array} props The property names to get values for.
+   * @returns {Object} Returns the key-value pairs.
+   */
+  function baseToPairs(object, props) {
+    return arrayMap(props, function(key) {
+      return [key, object[key]];
+    });
+  }
+
+  /**
+   * The base implementation of `_.unary` without support for storing metadata.
+   *
+   * @private
+   * @param {Function} func The function to cap arguments for.
+   * @returns {Function} Returns the new capped function.
+   */
+  function baseUnary(func) {
+    return function(value) {
+      return func(value);
+    };
+  }
+
+  /**
+   * The base implementation of `_.values` and `_.valuesIn` which creates an
+   * array of `object` property values corresponding to the property names
+   * of `props`.
+   *
+   * @private
+   * @param {Object} object The object to query.
+   * @param {Array} props The property names to get values for.
+   * @returns {Object} Returns the array of property values.
+   */
+  function baseValues(object, props) {
+    return arrayMap(props, function(key) {
+      return object[key];
+    });
+  }
+
+  /**
+   * Checks if a `cache` value for `key` exists.
+   *
+   * @private
+   * @param {Object} cache The cache to query.
+   * @param {string} key The key of the entry to check.
+   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+   */
+  function cacheHas(cache, key) {
+    return cache.has(key);
+  }
+
+  /**
+   * Used by `_.trim` and `_.trimStart` to get the index of the first 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 first unmatched string symbol.
+   */
+  function charsStartIndex(strSymbols, chrSymbols) {
+    var index = -1,
+        length = strSymbols.length;
+
+    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -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 : 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 < length) {
+      var value = array[index];
+      if (value === placeholder || value === PLACEHOLDER) {
+        array[index] = PLACEHOLDER;
+        result[resIndex++] = index;
+      }
+    }
+    return result;
+  }
+
+  /**
+   * Converts `set` to an array of its values.
+   *
+   * @private
+   * @param {Object} set The set to convert.
+   * @returns {Array} Returns the values.
+   */
+  function setToArray(set) {
+    var index = -1,
+        result = Array(set.size);
+
+    set.forEach(function(value) {
+      result[++index] = value;
+    });
+    return result;
+  }
+
+  /**
+   * Converts `set` to its value-value pairs.
+   *
+   * @private
+   * @param {Object} set The set to convert.
+   * @returns {Array} Returns the value-value pairs.
+   */
+  function setToPairs(set) {
+    var index = -1,
+        result = Array(set.size);
+
+    set.forEach(function(value) {
+      result[++index] = [value, value];
+    });
+    return result;
+  }
+
+  /**
+   * A specialized version of `_.indexOf` which performs strict equality
+   * comparisons of values, i.e. `===`.
+   *
+   * @private
+   * @param {Array} array The array to inspect.
+   * @param {*} value The value to search for.
+   * @param {number} fromIndex The index to search from.
+   * @returns {number} Returns the index of the matched value, else `-1`.
+   */
+  function strictIndexOf(array, value, fromIndex) {
+    var index = fromIndex - 1,
+        length = array.length;
+
+    while (++index < length) {
+      if (array[index] === value) {
+        return index;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * A specialized version of `_.lastIndexOf` which performs strict equality
+   * comparisons of values, i.e. `===`.
+   *
+   * @private
+   * @param {Array} array The array to inspect.
+   * @param {*} value The value to search for.
+   * @param {number} fromIndex The index to search from.
+   * @returns {number} Returns the index of the matched value, else `-1`.
+   */
+  function strictLastIndexOf(array, value, fromIndex) {
+    var index = fromIndex + 1;
+    while (index--) {
+      if (array[index] === value) {
+        return index;
+      }
+    }
+    return index;
+  }
+
+  /**
+   * Gets the number of symbols in `string`.
+   *
+   * @private
+   * @param {string} string The string to inspect.
+   * @returns {number} Returns the string size.
+   */
+  function stringSize(string) {
+    return hasUnicode(string)
+      ? unicodeSize(string)
+      : asciiSize(string);
+  }
+
+  /**
+   * Converts `string` to an array.
+   *
+   * @private
+   * @param {string} string The string to convert.
+   * @returns {Array} Returns the converted array.
+   */
+  function stringToArray(string) {
+    return hasUnicode(string)
+      ? unicodeToArray(string)
+      : asciiToArray(string);
+  }
+
+  /**
+   * Used by `_.unescape` to convert HTML entities to characters.
+   *
+   * @private
+   * @param {string} chr The matched character to unescape.
+   * @returns {string} Returns the unescaped character.
+   */
+  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);
+
+  /**
+   * Gets the size of a Unicode `string`.
+   *
+   * @private
+   * @param {string} string The string inspect.
+   * @returns {number} Returns the string size.
+   */
+  function unicodeSize(string) {
+    var result = reUnicode.lastIndex = 0;
+    while (reUnicode.test(string)) {
+      ++result;
+    }
+    return result;
+  }
+
+  /**
+   * Converts a Unicode `string` to an array.
+   *
+   * @private
+   * @param {string} string The string to convert.
+   * @returns {Array} Returns the converted array.
+   */
+  function unicodeToArray(string) {
+    return string.match(reUnicode) || [];
+  }
+
+  /**
+   * Splits a Unicode `string` into an array of its words.
+   *
+   * @private
+   * @param {string} The string to inspect.
+   * @returns {Array} Returns the words of `string`.
+   */
+  function unicodeWords(string) {
+    return string.match(reUnicodeWord) || [];
+  }
+
+  /*--------------------------------------------------------------------------*/
+
+  /**
+   * Create a new pristine `lodash` function using the `context` object.
+   *
+   * @static
+   * @memberOf _
+   * @since 1.1.0
+   * @category Util
+   * @param {Object} [context=root] The context object.
+   * @returns {Function} Returns a new `lodash` function.
+   * @example
+   *
+   * _.mixin({ 'foo': _.constant('foo') });
+   *
+   * var lodash = _.runInContext();
+   * lodash.mixin({ 'bar': lodash.constant('bar') });
+   *
+   * _.isFunction(_.foo);
+   * // => 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,
+        Symbol = context.Symbol,
+        Uint8Array = context.Uint8Array,
+        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
+        getPrototype = overArg(Object.getPrototypeOf, Object),
+        objectCreate = Object.create,
+        propertyIsEnumerable = objectProto.propertyIsEnumerable,
+        splice = arrayProto.splice,
+        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
+        symIterator = Symbol ? Symbol.iterator : undefined,
+        symToStringTag = Symbol ? Symbol.toStringTag : undefined;
+
+    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,
+        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,
+        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
+        symbolToString = symbolProto ? symbolProto.toString : undefined;
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * 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;
+        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;
+    }
+
+    /**
+     * 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 < takeCount) {
+        index += dir;
+
+        var iterIndex = -1,
+            value = array[index];
+
+        while (++iterIndex < iterLength) {
+          var data = iteratees[iterIndex],
+              iteratee = data.iteratee,
+              type = data.type,
+              computed = iteratee(value);
+
+          if (type == LAZY_MAP_FLAG) {
+            value = computed;
+          } else if (!computed) {
+            if (type == LAZY_FILTER_FLAG) {
+              continue outer;
+            } else {
+              break outer;
+            }
+          }
+        }
+        result[resIndex++] = value;
+      }
+      return result;
+    }
+
+    // Ensure `LazyWrapper` is an instance of `baseLodash`.
+    LazyWrapper.prototype = baseCreate(baseLodash.prototype);
+    LazyWrapper.prototype.constructor = LazyWrapper;
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates a hash object.
+     *
+     * @private
+     * @constructor
+     * @param {Array} [entries] The key-value pairs to cache.
+     */
+    function Hash(entries) {
+      var index = -1,
+          length = entries == null ? 0 : entries.length;
+
+      this.clear();
+      while (++index < length) {
+        var entry = entries[index];
+        this.set(entry[0], entry[1]);
+      }
+    }
+
+    /**
+     * Removes all key-value entries from the hash.
+     *
+     * @private
+     * @name clear
+     * @memberOf Hash
+     */
+    function hashClear() {
+      this.__data__ = nativeCreate ? nativeCreate(null) : {};
+      this.size = 0;
+    }
+
+    /**
+     * Removes `key` and its value from the hash.
+     *
+     * @private
+     * @name delete
+     * @memberOf Hash
+     * @param {Object} hash The hash to modify.
+     * @param {string} key The key of the value to remove.
+     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+     */
+    function hashDelete(key) {
+      var result = this.has(key) && delete this.__data__[key];
+      this.size -= result ? 1 : 0;
+      return result;
+    }
+
+    /**
+     * Gets the hash value for `key`.
+     *
+     * @private
+     * @name get
+     * @memberOf Hash
+     * @param {string} key The key of the value to get.
+     * @returns {*} Returns the entry value.
+     */
+    function hashGet(key) {
+      var data = this.__data__;
+      if (nativeCreate) {
+        var result = data[key];
+        return result === HASH_UNDEFINED ? undefined : result;
+      }
+      return hasOwnProperty.call(data, key) ? data[key] : undefined;
+    }
+
+    /**
+     * Checks if a hash value for `key` exists.
+     *
+     * @private
+     * @name has
+     * @memberOf Hash
+     * @param {string} key The key of the entry to check.
+     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+     */
+    function hashHas(key) {
+      var data = this.__data__;
+      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
+    }
+
+    /**
+     * Sets the hash `key` to `value`.
+     *
+     * @private
+     * @name set
+     * @memberOf Hash
+     * @param {string} key The key of the value to set.
+     * @param {*} value The value to set.
+     * @returns {Object} Returns the hash instance.
+     */
+    function hashSet(key, value) {
+      var data = this.__data__;
+      this.size += this.has(key) ? 0 : 1;
+      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+      return this;
+    }
+
+    // Add methods to `Hash`.
+    Hash.prototype.clear = hashClear;
+    Hash.prototype['delete'] = hashDelete;
+    Hash.prototype.get = hashGet;
+    Hash.prototype.has = hashHas;
+    Hash.prototype.set = hashSet;
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates an list cache object.
+     *
+     * @private
+     * @constructor
+     * @param {Array} [entries] The key-value pairs to cache.
+     */
+    function ListCache(entries) {
+      var index = -1,
+          length = entries == null ? 0 : entries.length;
+
+      this.clear();
+      while (++index < length) {
+        var entry = entries[index];
+        this.set(entry[0], entry[1]);
+      }
+    }
+
+    /**
+     * Removes all key-value entries from the list cache.
+     *
+     * @private
+     * @name clear
+     * @memberOf ListCache
+     */
+    function listCacheClear() {
+      this.__data__ = [];
+      this.size = 0;
+    }
+
+    /**
+     * Removes `key` and its value from the list cache.
+     *
+     * @private
+     * @name delete
+     * @memberOf ListCache
+     * @param {string} key The key of the value to remove.
+     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+     */
+    function listCacheDelete(key) {
+      var data = this.__data__,
+          index = assocIndexOf(data, key);
+
+      if (index < 0) {
+        return false;
+      }
+      var lastIndex = data.length - 1;
+      if (index == lastIndex) {
+        data.pop();
+      } else {
+        splice.call(data, index, 1);
+      }
+      --this.size;
+      return true;
+    }
+
+    /**
+     * Gets the list cache value for `key`.
+     *
+     * @private
+     * @name get
+     * @memberOf ListCache
+     * @param {string} key The key of the value to get.
+     * @returns {*} Returns the entry value.
+     */
+    function listCacheGet(key) {
+      var data = this.__data__,
+          index = assocIndexOf(data, key);
+
+      return index < 0 ? undefined : data[index][1];
+    }
+
+    /**
+     * Checks if a list cache value for `key` exists.
+     *
+     * @private
+     * @name has
+     * @memberOf ListCache
+     * @param {string} key The key of the entry to check.
+     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+     */
+    function listCacheHas(key) {
+      return assocIndexOf(this.__data__, key) > -1;
+    }
+
+    /**
+     * 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 < length) {
+        var entry = entries[index];
+        this.set(entry[0], entry[1]);
+      }
+    }
+
+    /**
+     * Removes all key-value entries from the map.
+     *
+     * @private
+     * @name clear
+     * @memberOf MapCache
+     */
+    function mapCacheClear() {
+      this.size = 0;
+      this.__data__ = {
+        'hash': new Hash,
+        'map': new (Map || ListCache),
+        'string': new Hash
+      };
+    }
+
+    /**
+     * Removes `key` and its value from the map.
+     *
+     * @private
+     * @name delete
+     * @memberOf MapCache
+     * @param {string} key The key of the value to remove.
+     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+     */
+    function mapCacheDelete(key) {
+      var result = getMapData(this, key)['delete'](key);
+      this.size -= result ? 1 : 0;
+      return result;
+    }
+
+    /**
+     * Gets the map value for `key`.
+     *
+     * @private
+     * @name get
+     * @memberOf MapCache
+     * @param {string} key The key of the value to get.
+     * @returns {*} Returns the entry value.
+     */
+    function mapCacheGet(key) {
+      return getMapData(this, key).get(key);
+    }
+
+    /**
+     * Checks if a map value for `key` exists.
+     *
+     * @private
+     * @name has
+     * @memberOf MapCache
+     * @param {string} key The key of the entry to check.
+     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+     */
+    function mapCacheHas(key) {
+      return getMapData(this, key).has(key);
+    }
+
+    /**
+     * Sets the map `key` to `value`.
+     *
+     * @private
+     * @name set
+     * @memberOf MapCache
+     * @param {string} key The key of the value to set.
+     * @param {*} value The value to set.
+     * @returns {Object} Returns the map cache instance.
+     */
+    function mapCacheSet(key, value) {
+      var data = getMapData(this, key),
+          size = data.size;
+
+      data.set(key, value);
+      this.size += data.size == size ? 0 : 1;
+      return this;
+    }
+
+    // Add methods to `MapCache`.
+    MapCache.prototype.clear = mapCacheClear;
+    MapCache.prototype['delete'] = mapCacheDelete;
+    MapCache.prototype.get = mapCacheGet;
+    MapCache.prototype.has = mapCacheHas;
+    MapCache.prototype.set = mapCacheSet;
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     *
+     * Creates an array cache object to store unique values.
+     *
+     * @private
+     * @constructor
+     * @param {Array} [values] The values to cache.
+     */
+    function SetCache(values) {
+      var index = -1,
+          length = values == null ? 0 : values.length;
+
+      this.__data__ = new MapCache;
+      while (++index < length) {
+        this.add(values[index]);
+      }
+    }
+
+    /**
+     * Adds `value` to the array cache.
+     *
+     * @private
+     * @name add
+     * @memberOf SetCache
+     * @alias push
+     * @param {*} value The value to cache.
+     * @returns {Object} Returns the cache instance.
+     */
+    function setCacheAdd(value) {
+      this.__data__.set(value, HASH_UNDEFINED);
+      return this;
+    }
+
+    /**
+     * Checks if `value` is in the array cache.
+     *
+     * @private
+     * @name has
+     * @memberOf SetCache
+     * @param {*} value The value to search for.
+     * @returns {number} Returns `true` if `value` is found, else `false`.
+     */
+    function setCacheHas(value) {
+      return this.__data__.has(value);
+    }
+
+    // Add methods to `SetCache`.
+    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
+    SetCache.prototype.has = setCacheHas;
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates a stack cache object to store key-value pairs.
+     *
+     * @private
+     * @constructor
+     * @param {Array} [entries] The key-value pairs to cache.
+     */
+    function Stack(entries) {
+      var data = this.__data__ = new ListCache(entries);
+      this.size = data.size;
+    }
+
+    /**
+     * Removes all key-value entries from the stack.
+     *
+     * @private
+     * @name clear
+     * @memberOf Stack
+     */
+    function stackClear() {
+      this.__data__ = new ListCache;
+      this.size = 0;
+    }
+
+    /**
+     * Removes `key` and its value from the stack.
+     *
+     * @private
+     * @name delete
+     * @memberOf Stack
+     * @param {string} key The key of the value to remove.
+     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+     */
+    function stackDelete(key) {
+      var data = this.__data__,
+          result = data['delete'](key);
+
+      this.size = data.size;
+      return result;
+    }
+
+    /**
+     * Gets the stack value for `key`.
+     *
+     * @private
+     * @name get
+     * @memberOf Stack
+     * @param {string} key The key of the value to get.
+     * @returns {*} Returns the entry value.
+     */
+    function stackGet(key) {
+      return this.__data__.get(key);
+    }
+
+    /**
+     * Checks if a stack value for `key` exists.
+     *
+     * @private
+     * @name has
+     * @memberOf Stack
+     * @param {string} key The key of the entry to check.
+     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+     */
+    function stackHas(key) {
+      return this.__data__.has(key);
+    }
+
+    /**
+     * Sets the stack `key` to `value`.
+     *
+     * @private
+     * @name set
+     * @memberOf Stack
+     * @param {string} key The key of the value to set.
+     * @param {*} value The value to set.
+     * @returns {Object} Returns the stack cache instance.
+     */
+    function stackSet(key, value) {
+      var data = this.__data__;
+      if (data instanceof ListCache) {
+        var pairs = data.__data__;
+        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
+          pairs.push([key, value]);
+          this.size = ++data.size;
+          return this;
+        }
+        data = this.__data__ = new MapCache(pairs);
+      }
+      data.set(key, value);
+      this.size = data.size;
+      return this;
+    }
+
+    // Add methods to `Stack`.
+    Stack.prototype.clear = stackClear;
+    Stack.prototype['delete'] = stackDelete;
+    Stack.prototype.get = stackGet;
+    Stack.prototype.has = stackHas;
+    Stack.prototype.set = stackSet;
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates an array of the enumerable property names of the array-like `value`.
+     *
+     * @private
+     * @param {*} value The value to query.
+     * @param {boolean} inherited Specify returning inherited property names.
+     * @returns {Array} Returns the array of property names.
+     */
+    function arrayLikeKeys(value, inherited) {
+      var isArr = isArray(value),
+          isArg = !isArr && isArguments(value),
+          isBuff = !isArr && !isArg && isBuffer(value),
+          isType = !isArr && !isArg && !isBuff && isTypedArray(value),
+          skipIndexes = isArr || isArg || isBuff || isType,
+          result = skipIndexes ? baseTimes(value.length, String) : [],
+          length = result.length;
+
+      for (var key in value) {
+        if ((inherited || hasOwnProperty.call(value, key)) &&
+            !(skipIndexes && (
+               // Safari 9 has enumerable `arguments.length` in strict mode.
+               key == 'length' ||
+               // Node.js 0.10 has enumerable non-index properties on buffers.
+               (isBuff && (key == 'offset' || key == 'parent')) ||
+               // PhantomJS 2 has enumerable non-index properties on typed arrays.
+               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
+               // Skip index properties.
+               isIndex(key, length)
+            ))) {
+          result.push(key);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * A specialized version of `_.sample` for arrays.
+     *
+     * @private
+     * @param {Array} array The array to sample.
+     * @returns {*} Returns the random element.
+     */
+    function arraySample(array) {
+      var length = array.length;
+      return length ? array[baseRandom(0, length - 1)] : undefined;
+    }
+
+    /**
+     * A specialized version of `_.sampleSize` for arrays.
+     *
+     * @private
+     * @param {Array} array The array to sample.
+     * @param {number} n The number of elements to sample.
+     * @returns {Array} Returns the random elements.
+     */
+    function arraySampleSize(array, n) {
+      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
+    }
+
+    /**
+     * A specialized version of `_.shuffle` for arrays.
+     *
+     * @private
+     * @param {Array} array The array to shuffle.
+     * @returns {Array} Returns the new shuffled array.
+     */
+    function arrayShuffle(array) {
+      return shuffleSelf(copyArray(array));
+    }
+
+    /**
+     * This function is like `assignValue` except that it doesn't assign
+     * `undefined` values.
+     *
+     * @private
+     * @param {Object} object The object to modify.
+     * @param {string} key The key of the property to assign.
+     * @param {*} value The value to assign.
+     */
+    function assignMergeValue(object, key, value) {
+      if ((value !== undefined && !eq(object[key], value)) ||
+          (value === undefined && !(key in object))) {
+        baseAssignValue(object, key, value);
+      }
+    }
+
+    /**
+     * Assigns `value` to `key` of `object` if the existing value is not equivalent
+     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+     * for equality comparisons.
+     *
+     * @private
+     * @param {Object} object The object to modify.
+     * @param {string} key The key of the property to assign.
+     * @param {*} value The value to assign.
+     */
+    function assignValue(object, key, value) {
+      var objValue = object[key];
+      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
+          (value === undefined && !(key in object))) {
+        baseAssignValue(object, key, value);
+      }
+    }
+
+    /**
+     * Gets the index at which the `key` is found in `array` of key-value pairs.
+     *
+     * @private
+     * @param {Array} array The array to inspect.
+     * @param {*} key The key to search for.
+     * @returns {number} Returns the index of the matched value, else `-1`.
+     */
+    function assocIndexOf(array, key) {
+      var length = array.length;
+      while (length--) {
+        if (eq(array[length][0], key)) {
+          return length;
+        }
+      }
+      return -1;
+    }
+
+    /**
+     * Aggregates elements of `collection` on `accumulator` with keys transformed
+     * by `iteratee` and values set by `setter`.
+     *
+     * @private
+     * @param {Array|Object} collection The collection 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 baseAggregator(collection, setter, iteratee, accumulator) {
+      baseEach(collection, function(value, key, collection) {
+        setter(accumulator, value, iteratee(value), collection);
+      });
+      return accumulator;
+    }
+
+    /**
+     * The base implementation of `_.assign` without support for multiple sources
+     * or `customizer` functions.
+     *
+     * @private
+     * @param {Object} object The destination object.
+     * @param {Object} source The source object.
+     * @returns {Object} Returns `object`.
+     */
+    function baseAssign(object, source) {
+      return object && copyObject(source, keys(source), object);
+    }
+
+    /**
+     * The base implementation of `_.assignIn` without support for multiple sources
+     * or `customizer` functions.
+     *
+     * @private
+     * @param {Object} object The destination object.
+     * @param {Object} source The source object.
+     * @returns {Object} Returns `object`.
+     */
+    function baseAssignIn(object, source) {
+      return object && copyObject(source, keysIn(source), object);
+    }
+
+    /**
+     * The base implementation of `assignValue` and `assignMergeValue` without
+     * value checks.
+     *
+     * @private
+     * @param {Object} object The object to modify.
+     * @param {string} key The key of the property to assign.
+     * @param {*} value The value to assign.
+     */
+    function baseAssignValue(object, key, value) {
+      if (key == '__proto__' && defineProperty) {
+        defineProperty(object, key, {
+          'configurable': true,
+          'enumerable': true,
+          'value': value,
+          'writable': true
+        });
+      } else {
+        object[key] = value;
+      }
+    }
+
+    /**
+     * The base implementation of `_.at` without support for individual paths.
+     *
+     * @private
+     * @param {Object} object The object to iterate over.
+     * @param {string[]} paths The property paths to pick.
+     * @returns {Array} Returns the picked elements.
+     */
+    function baseAt(object, paths) {
+      var index = -1,
+          length = paths.length,
+          result = Array(length),
+          skip = object == null;
+
+      while (++index < length) {
+        result[index] = skip ? undefined : get(object, paths[index]);
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.clamp` which doesn't coerce arguments.
+     *
+     * @private
+     * @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.
+     */
+    function baseClamp(number, lower, upper) {
+      if (number === number) {
+        if (upper !== undefined) {
+          number = number <= upper ? number : upper;
+        }
+        if (lower !== undefined) {
+          number = number >= 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) {
+        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, baseClone, 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);
+
+      var keysFunc = isFull
+        ? (isFlat ? getAllKeysIn : getAllKeys)
+        : (isFlat ? keysIn : keys);
+
+      var props = isArr ? undefined : 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 && !(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, 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 (++index < length) {
+        var value = array[index],
+            computed = iteratee == null ? value : iteratee(value);
+
+        value = (comparator || value !== 0) ? value : 0;
+        if (isCommon && computed === computed) {
+          var valuesIndex = valuesLength;
+          while (valuesIndex--) {
+            if (values[valuesIndex] === computed) {
+              continue outer;
+            }
+          }
+          result.push(value);
+        }
+        else if (!includes(values, computed, comparator)) {
+          result.push(value);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.forEach` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array|Object} collection The collection to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @returns {Array|Object} Returns `collection`.
+     */
+    var baseEach = createBaseEach(baseForOwn);
+
+    /**
+     * The base implementation of `_.forEachRight` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array|Object} collection The collection to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @returns {Array|Object} Returns `collection`.
+     */
+    var baseEachRight = createBaseEach(baseForOwnRight, true);
+
+    /**
+     * The base implementation of `_.every` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array|Object} collection The collection to iterate over.
+     * @param {Function} predicate The function invoked per iteration.
+     * @returns {boolean} Returns `true` if all elements pass the predicate check,
+     *  else `false`
+     */
+    function baseEvery(collection, predicate) {
+      var result = true;
+      baseEach(collection, function(value, index, collection) {
+        result = !!predicate(value, index, collection);
+        return result;
+      });
+      return result;
+    }
+
+    /**
+     * The base implementation of methods like `_.max` and `_.min` which accepts a
+     * `comparator` to determine the extremum value.
+     *
+     * @private
+     * @param {Array} array The array to iterate over.
+     * @param {Function} iteratee The iteratee invoked per iteration.
+     * @param {Function} comparator The comparator used to compare values.
+     * @returns {*} Returns the extremum value.
+     */
+    function baseExtremum(array, iteratee, comparator) {
+      var index = -1,
+          length = array.length;
+
+      while (++index < length) {
+        var value = array[index],
+            current = iteratee(value);
+
+        if (current != null && (computed === undefined
+              ? (current === current && !isSymbol(current))
+              : comparator(current, computed)
+            )) {
+          var computed = current,
+              result = value;
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.fill` without an iteratee call guard.
+     *
+     * @private
+     * @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`.
+     */
+    function baseFill(array, value, start, end) {
+      var length = array.length;
+
+      start = toInteger(start);
+      if (start < 0) {
+        start = -start > length ? 0 : (length + start);
+      }
+      end = (end === undefined || end > length) ? length : toInteger(end);
+      if (end < 0) {
+        end += length;
+      }
+      end = start > end ? 0 : toLength(end);
+      while (start < end) {
+        array[start++] = value;
+      }
+      return array;
+    }
+
+    /**
+     * The base implementation of `_.filter` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array|Object} collection The collection to iterate over.
+     * @param {Function} predicate The function invoked per iteration.
+     * @returns {Array} Returns the new filtered array.
+     */
+    function baseFilter(collection, predicate) {
+      var result = [];
+      baseEach(collection, function(value, index, collection) {
+        if (predicate(value, index, collection)) {
+          result.push(value);
+        }
+      });
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.flatten` with support for restricting flattening.
+     *
+     * @private
+     * @param {Array} array The array to flatten.
+     * @param {number} depth The maximum recursion depth.
+     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
+     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
+     * @param {Array} [result=[]] The initial result value.
+     * @returns {Array} Returns the new flattened array.
+     */
+    function baseFlatten(array, depth, predicate, isStrict, result) {
+      var index = -1,
+          length = array.length;
+
+      predicate || (predicate = isFlattenable);
+      result || (result = []);
+
+      while (++index < length) {
+        var value = array[index];
+        if (depth > 0 && 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 && index < length) {
+        object = object[toKey(path[index++])];
+      }
+      return (index && index == length) ? object : undefined;
+    }
+
+    /**
+     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
+     * `keysFunc` and `symbolsFunc` to get the enumerable property names and
+     * symbols of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @param {Function} keysFunc The function to get the keys of `object`.
+     * @param {Function} symbolsFunc The function to get the symbols of `object`.
+     * @returns {Array} Returns the array of property names and symbols.
+     */
+    function baseGetAllKeys(object, keysFunc, symbolsFunc) {
+      var result = keysFunc(object);
+      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
+    }
+
+    /**
+     * The base implementation of `getTag` without fallbacks for buggy environments.
+     *
+     * @private
+     * @param {*} value The value to query.
+     * @returns {string} Returns the `toStringTag`.
+     */
+    function baseGetTag(value) {
+      if (value == null) {
+        return value === undefined ? undefinedTag : nullTag;
+      }
+      return (symToStringTag && symToStringTag in Object(value))
+        ? getRawTag(value)
+        : objectToString(value);
+    }
+
+    /**
+     * The base implementation of `_.gt` which doesn't coerce arguments.
+     *
+     * @private
+     * @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`.
+     */
+    function baseGt(value, other) {
+      return value > other;
+    }
+
+    /**
+     * 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 < nativeMax(start, end);
+    }
+
+    /**
+     * The base implementation of methods like `_.intersection`, without support
+     * for iteratee shorthands, that accepts an array of arrays to inspect.
+     *
+     * @private
+     * @param {Array} arrays The arrays to inspect.
+     * @param {Function} [iteratee] The iteratee invoked per element.
+     * @param {Function} [comparator] The comparator invoked per element.
+     * @returns {Array} Returns the new array of shared values.
+     */
+    function baseIntersection(arrays, iteratee, comparator) {
+      var includes = comparator ? arrayIncludesWith : arrayIncludes,
+          length = arrays[0].length,
+          othLength = arrays.length,
+          othIndex = othLength,
+          caches = Array(othLength),
+          maxLength = Infinity,
+          result = [];
+
+      while (othIndex--) {
+        var array = arrays[othIndex];
+        if (othIndex && iteratee) {
+          array = arrayMap(array, baseUnary(iteratee));
+        }
+        maxLength = nativeMin(array.length, maxLength);
+        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
+          ? new SetCache(othIndex && array)
+          : undefined;
+      }
+      array = arrays[0];
+
+      var index = -1,
+          seen = caches[0];
+
+      outer:
+      while (++index < length && result.length < maxLength) {
+        var value = array[index],
+            computed = iteratee ? iteratee(value) : value;
+
+        value = (comparator || value !== 0) ? value : 0;
+        if (!(seen
+              ? cacheHas(seen, computed)
+              : includes(result, computed, comparator)
+            )) {
+          othIndex = othLength;
+          while (--othIndex) {
+            var cache = caches[othIndex];
+            if (!(cache
+                  ? cacheHas(cache, computed)
+                  : includes(arrays[othIndex], computed, comparator))
+                ) {
+              continue outer;
+            }
+          }
+          if (seen) {
+            seen.push(computed);
+          }
+          result.push(value);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.invert` and `_.invertBy` which inverts
+     * `object` with values transformed by `iteratee` and set by `setter`.
+     *
+     * @private
+     * @param {Object} object The object to iterate over.
+     * @param {Function} setter The function to set `accumulator` values.
+     * @param {Function} iteratee The iteratee to transform values.
+     * @param {Object} accumulator The initial inverted object.
+     * @returns {Function} Returns `accumulator`.
+     */
+    function baseInverter(object, setter, iteratee, accumulator) {
+      baseForOwn(object, function(value, key, object) {
+        setter(accumulator, iteratee(value), key, object);
+      });
+      return accumulator;
+    }
+
+    /**
+     * The base implementation of `_.invoke` without support for individual
+     * method arguments.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @param {Array|string} path The path of the method to invoke.
+     * @param {Array} args The arguments to invoke the method with.
+     * @returns {*} Returns the result of the invoked method.
+     */
+    function baseInvoke(object, path, args) {
+      path = castPath(path, object);
+      object = parent(object, path);
+      var func = object == null ? object : object[toKey(last(path))];
+      return func == null ? undefined : apply(func, object, args);
+    }
+
+    /**
+     * The base implementation of `_.isArguments`.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
+     */
+    function baseIsArguments(value) {
+      return isObjectLike(value) && baseGetTag(value) == argsTag;
+    }
+
+    /**
+     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
+     */
+    function baseIsArrayBuffer(value) {
+      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
+    }
+
+    /**
+     * The base implementation of `_.isDate` without Node.js optimizations.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
+     */
+    function baseIsDate(value) {
+      return isObjectLike(value) && baseGetTag(value) == dateTag;
+    }
+
+    /**
+     * The base implementation of `_.isEqual` which supports partial comparisons
+     * and tracks traversed objects.
+     *
+     * @private
+     * @param {*} value The value to compare.
+     * @param {*} other The other value to compare.
+     * @param {boolean} bitmask The bitmask flags.
+     *  1 - Unordered comparison
+     *  2 - Partial comparison
+     * @param {Function} [customizer] The function to customize comparisons.
+     * @param {Object} [stack] Tracks traversed `value` and `other` objects.
+     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+     */
+    function baseIsEqual(value, other, bitmask, customizer, stack) {
+      if (value === other) {
+        return true;
+      }
+      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
+        return value !== value && other !== other;
+      }
+      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
+    }
+
+    /**
+     * A specialized version of `baseIsEqual` for arrays and objects which performs
+     * deep comparisons and tracks traversed objects enabling objects with circular
+     * references to be compared.
+     *
+     * @private
+     * @param {Object} object The object to compare.
+     * @param {Object} other The other object to compare.
+     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+     * @param {Function} customizer The function to customize comparisons.
+     * @param {Function} equalFunc The function to determine equivalents of values.
+     * @param {Object} [stack] Tracks traversed `object` and `other` objects.
+     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+     */
+    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
+      var objIsArr = isArray(object),
+          othIsArr = isArray(other),
+          objTag = objIsArr ? arrayTag : getTag(object),
+          othTag = othIsArr ? arrayTag : getTag(other);
+
+      objTag = objTag == argsTag ? objectTag : objTag;
+      othTag = othTag == argsTag ? objectTag : othTag;
+
+      var objIsObj = objTag == objectTag,
+          othIsObj = othTag == objectTag,
+          isSameTag = objTag == othTag;
+
+      if (isSameTag && isBuffer(object)) {
+        if (!isBuffer(other)) {
+          return false;
+        }
+        objIsArr = true;
+        objIsObj = false;
+      }
+      if (isSameTag && !objIsObj) {
+        stack || (stack = new Stack);
+        return (objIsArr || isTypedArray(object))
+          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
+          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
+      }
+      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
+        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
+            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
+
+        if (objIsWrapped || othIsWrapped) {
+          var objUnwrapped = objIsWrapped ? object.value() : object,
+              othUnwrapped = othIsWrapped ? other.value() : other;
+
+          stack || (stack = new Stack);
+          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
+        }
+      }
+      if (!isSameTag) {
+        return false;
+      }
+      stack || (stack = new Stack);
+      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
+    }
+
+    /**
+     * The base implementation of `_.isMap` without Node.js optimizations.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
+     */
+    function baseIsMap(value) {
+      return isObjectLike(value) && getTag(value) == mapTag;
+    }
+
+    /**
+     * The base implementation of `_.isMatch` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Object} object The object to inspect.
+     * @param {Object} source The object of property values to match.
+     * @param {Array} matchData The property names, values, and compare flags to match.
+     * @param {Function} [customizer] The function to customize comparisons.
+     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+     */
+    function baseIsMatch(object, source, matchData, customizer) {
+      var index = matchData.length,
+          length = index,
+          noCustomizer = !customizer;
+
+      if (object == null) {
+        return !length;
+      }
+      object = Object(object);
+      while (index--) {
+        var data = matchData[index];
+        if ((noCustomizer && data[2])
+              ? data[1] !== object[data[0]]
+              : !(data[0] in object)
+            ) {
+          return false;
+        }
+      }
+      while (++index < length) {
+        data = matchData[index];
+        var key = data[0],
+            objValue = object[key],
+            srcValue = data[1];
+
+        if (noCustomizer && data[2]) {
+          if (objValue === undefined && !(key in object)) {
+            return false;
+          }
+        } else {
+          var stack = new Stack;
+          if (customizer) {
+            var result = customizer(objValue, srcValue, key, object, source, stack);
+          }
+          if (!(result === undefined
+                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
+                : result
+              )) {
+            return false;
+          }
+        }
+      }
+      return true;
+    }
+
+    /**
+     * The base implementation of `_.isNative` without bad shim checks.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a native function,
+     *  else `false`.
+     */
+    function baseIsNative(value) {
+      if (!isObject(value) || isMasked(value)) {
+        return false;
+      }
+      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
+      return pattern.test(toSource(value));
+    }
+
+    /**
+     * The base implementation of `_.isRegExp` without Node.js optimizations.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
+     */
+    function baseIsRegExp(value) {
+      return isObjectLike(value) && baseGetTag(value) == regexpTag;
+    }
+
+    /**
+     * The base implementation of `_.isSet` without Node.js optimizations.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
+     */
+    function baseIsSet(value) {
+      return isObjectLike(value) && getTag(value) == setTag;
+    }
+
+    /**
+     * The base implementation of `_.isTypedArray` without Node.js optimizations.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
+     */
+    function baseIsTypedArray(value) {
+      return isObjectLike(value) &&
+        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
+    }
+
+    /**
+     * The base implementation of `_.iteratee`.
+     *
+     * @private
+     * @param {*} [value=_.identity] The value to convert to an iteratee.
+     * @returns {Function} Returns the iteratee.
+     */
+    function baseIteratee(value) {
+      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
+      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
+      if (typeof value == 'function') {
+        return value;
+      }
+      if (value == null) {
+        return identity;
+      }
+      if (typeof value == 'object') {
+        return isArray(value)
+          ? baseMatchesProperty(value[0], value[1])
+          : baseMatches(value);
+      }
+      return property(value);
+    }
+
+    /**
+     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of property names.
+     */
+    function baseKeys(object) {
+      if (!isPrototype(object)) {
+        return nativeKeys(object);
+      }
+      var result = [];
+      for (var key in Object(object)) {
+        if (hasOwnProperty.call(object, key) && key != 'constructor') {
+          result.push(key);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of property names.
+     */
+    function baseKeysIn(object) {
+      if (!isObject(object)) {
+        return nativeKeysIn(object);
+      }
+      var isProto = isPrototype(object),
+          result = [];
+
+      for (var key in object) {
+        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
+          result.push(key);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.lt` which doesn't coerce arguments.
+     *
+     * @private
+     * @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`.
+     */
+    function baseLt(value, other) {
+      return value < other;
+    }
+
+    /**
+     * The base implementation of `_.map` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array|Object} collection The collection to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @returns {Array} Returns the new mapped array.
+     */
+    function baseMap(collection, iteratee) {
+      var index = -1,
+          result = isArrayLike(collection) ? Array(collection.length) : [];
+
+      baseEach(collection, function(value, key, collection) {
+        result[++index] = iteratee(value, key, collection);
+      });
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.matches` which doesn't clone `source`.
+     *
+     * @private
+     * @param {Object} source The object of property values to match.
+     * @returns {Function} Returns the new spec function.
+     */
+    function baseMatches(source) {
+      var matchData = getMatchData(source);
+      if (matchData.length == 1 && matchData[0][2]) {
+        return matchesStrictComparable(matchData[0][0], matchData[0][1]);
+      }
+      return function(object) {
+        return object === source || baseIsMatch(object, source, matchData);
+      };
+    }
+
+    /**
+     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
+     *
+     * @private
+     * @param {string} path The path of the property to get.
+     * @param {*} srcValue The value to match.
+     * @returns {Function} Returns the new spec function.
+     */
+    function baseMatchesProperty(path, srcValue) {
+      if (isKey(path) && isStrictComparable(srcValue)) {
+        return matchesStrictComparable(toKey(path), srcValue);
+      }
+      return function(object) {
+        var objValue = get(object, path);
+        return (objValue === undefined && objValue === srcValue)
+          ? hasIn(object, path)
+          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
+      };
+    }
+
+    /**
+     * The base implementation of `_.merge` without support for multiple sources.
+     *
+     * @private
+     * @param {Object} object The destination object.
+     * @param {Object} source The source object.
+     * @param {number} srcIndex The index of `source`.
+     * @param {Function} [customizer] The function to customize merged values.
+     * @param {Object} [stack] Tracks traversed source values and their merged
+     *  counterparts.
+     */
+    function baseMerge(object, source, srcIndex, customizer, stack) {
+      if (object === source) {
+        return;
+      }
+      baseFor(source, function(srcValue, key) {
+        if (isObject(srcValue)) {
+          stack || (stack = new Stack);
+          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
+        }
+        else {
+          var newValue = customizer
+            ? customizer(object[key], srcValue, (key + ''), object, source, stack)
+            : undefined;
+
+          if (newValue === undefined) {
+            newValue = srcValue;
+          }
+          assignMergeValue(object, key, newValue);
+        }
+      }, keysIn);
+    }
+
+    /**
+     * A specialized version of `baseMerge` for arrays and objects which performs
+     * deep merges and tracks traversed objects enabling objects with circular
+     * references to be merged.
+     *
+     * @private
+     * @param {Object} object The destination object.
+     * @param {Object} source The source object.
+     * @param {string} key The key of the value to merge.
+     * @param {number} srcIndex The index of `source`.
+     * @param {Function} mergeFunc The function to merge values.
+     * @param {Function} [customizer] The function to customize assigned values.
+     * @param {Object} [stack] Tracks traversed source values and their merged
+     *  counterparts.
+     */
+    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
+      var objValue = object[key],
+          srcValue = source[key],
+          stacked = stack.get(srcValue);
+
+      if (stacked) {
+        assignMergeValue(object, key, stacked);
+        return;
+      }
+      var newValue = customizer
+        ? customizer(objValue, srcValue, (key + ''), object, source, stack)
+        : undefined;
+
+      var isCommon = newValue === undefined;
+
+      if (isCommon) {
+        var isArr = isArray(srcValue),
+            isBuff = !isArr && isBuffer(srcValue),
+            isTyped = !isArr && !isBuff && isTypedArray(srcValue);
+
+        newValue = srcValue;
+        if (isArr || isBuff || isTyped) {
+          if (isArray(objValue)) {
+            newValue = objValue;
+          }
+          else if (isArrayLikeObject(objValue)) {
+            newValue = copyArray(objValue);
+          }
+          else if (isBuff) {
+            isCommon = false;
+            newValue = cloneBuffer(srcValue, true);
+          }
+          else if (isTyped) {
+            isCommon = false;
+            newValue = cloneTypedArray(srcValue, true);
+          }
+          else {
+            newValue = [];
+          }
+        }
+        else if (isPlainObject(srcValue) || isArguments(srcValue)) {
+          newValue = objValue;
+          if (isArguments(objValue)) {
+            newValue = toPlainObject(objValue);
+          }
+          else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {
+            newValue = initCloneObject(srcValue);
+          }
+        }
+        else {
+          isCommon = false;
+        }
+      }
+      if (isCommon) {
+        // Recursively merge objects and arrays (susceptible to call stack limits).
+        stack.set(srcValue, newValue);
+        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
+        stack['delete'](srcValue);
+      }
+      assignMergeValue(object, key, newValue);
+    }
+
+    /**
+     * The base implementation of `_.nth` which doesn't coerce arguments.
+     *
+     * @private
+     * @param {Array} array The array to query.
+     * @param {number} n The index of the element to return.
+     * @returns {*} Returns the nth element of `array`.
+     */
+    function baseNth(array, n) {
+      var length = array.length;
+      if (!length) {
+        return;
+      }
+      n += n < 0 ? length : 0;
+      return isIndex(n, length) ? array[n] : undefined;
+    }
+
+    /**
+     * The base implementation of `_.orderBy` without param guards.
+     *
+     * @private
+     * @param {Array|Object} collection The collection to iterate over.
+     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
+     * @param {string[]} orders The sort orders of `iteratees`.
+     * @returns {Array} Returns the new sorted array.
+     */
+    function baseOrderBy(collection, iteratees, orders) {
+      var index = -1;
+      iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));
+
+      var result = baseMap(collection, function(value, key, collection) {
+        var criteria = arrayMap(iteratees, function(iteratee) {
+          return iteratee(value);
+        });
+        return { 'criteria': criteria, 'index': ++index, 'value': value };
+      });
+
+      return baseSortBy(result, function(object, other) {
+        return compareMultiple(object, other, orders);
+      });
+    }
+
+    /**
+     * The base implementation of `_.pick` without support for individual
+     * property identifiers.
+     *
+     * @private
+     * @param {Object} object The source object.
+     * @param {string[]} paths The property paths to pick.
+     * @returns {Object} Returns the new object.
+     */
+    function basePick(object, paths) {
+      return basePickBy(object, paths, function(value, path) {
+        return hasIn(object, path);
+      });
+    }
+
+    /**
+     * The base implementation of  `_.pickBy` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Object} object The source object.
+     * @param {string[]} paths The property paths to pick.
+     * @param {Function} predicate The function invoked per property.
+     * @returns {Object} Returns the new object.
+     */
+    function basePickBy(object, paths, predicate) {
+      var index = -1,
+          length = paths.length,
+          result = {};
+
+      while (++index < length) {
+        var path = paths[index],
+            value = baseGet(object, path);
+
+        if (predicate(value, path)) {
+          baseSet(result, castPath(path, object), value);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * A specialized version of `baseProperty` which supports deep paths.
+     *
+     * @private
+     * @param {Array|string} path The path of the property to get.
+     * @returns {Function} Returns the new accessor function.
+     */
+    function basePropertyDeep(path) {
+      return function(object) {
+        return baseGet(object, path);
+      };
+    }
+
+    /**
+     * The base implementation of `_.pullAllBy` without support for iteratee
+     * shorthands.
+     *
+     * @private
+     * @param {Array} array The array to modify.
+     * @param {Array} values The values to remove.
+     * @param {Function} [iteratee] The iteratee invoked per element.
+     * @param {Function} [comparator] The comparator invoked per element.
+     * @returns {Array} Returns `array`.
+     */
+    function basePullAll(array, values, iteratee, comparator) {
+      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
+          index = -1,
+          length = values.length,
+          seen = array;
+
+      if (array === values) {
+        values = copyArray(values);
+      }
+      if (iteratee) {
+        seen = arrayMap(array, baseUnary(iteratee));
+      }
+      while (++index < length) {
+        var fromIndex = 0,
+            value = values[index],
+            computed = iteratee ? iteratee(value) : value;
+
+        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -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 && ++index < length) {
+        var key = toKey(path[index]),
+            newValue = value;
+
+        if (index != lastIndex) {
+          var objValue = nested[key];
+          newValue = customizer ? customizer(objValue, key, nested) : undefined;
+          if (newValue === undefined) {
+            newValue = isObject(objValue)
+              ? objValue
+              : (isIndex(path[index + 1]) ? [] : {});
+          }
+        }
+        assignValue(nested, key, newValue);
+        nested = nested[key];
+      }
+      return object;
+    }
+
+    /**
+     * The base implementation of `setData` without support for hot loop shorting.
+     *
+     * @private
+     * @param {Function} func The function to associate metadata with.
+     * @param {*} data The metadata.
+     * @returns {Function} Returns `func`.
+     */
+    var baseSetData = !metaMap ? identity : function(func, data) {
+      metaMap.set(func, data);
+      return func;
+    };
+
+    /**
+     * The base implementation of `setToString` without support for hot loop shorting.
+     *
+     * @private
+     * @param {Function} func The function to modify.
+     * @param {Function} string The `toString` result.
+     * @returns {Function} Returns `func`.
+     */
+    var baseSetToString = !defineProperty ? identity : function(func, string) {
+      return defineProperty(func, 'toString', {
+        'configurable': true,
+        'enumerable': false,
+        'value': constant(string),
+        'writable': true
+      });
+    };
+
+    /**
+     * The base implementation of `_.shuffle`.
+     *
+     * @private
+     * @param {Array|Object} collection The collection to shuffle.
+     * @returns {Array} Returns the new shuffled array.
+     */
+    function baseShuffle(collection) {
+      return shuffleSelf(values(collection));
+    }
+
+    /**
+     * The base implementation of `_.slice` without an iteratee call guard.
+     *
+     * @private
+     * @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 baseSlice(array, start, end) {
+      var index = -1,
+          length = array.length;
+
+      if (start < 0) {
+        start = -start > length ? 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 < length) {
+        result[index] = array[index + start];
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.some` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array|Object} collection The collection to iterate over.
+     * @param {Function} predicate The function invoked per iteration.
+     * @returns {boolean} Returns `true` if any element passes the predicate check,
+     *  else `false`.
+     */
+    function baseSome(collection, predicate) {
+      var result;
+
+      baseEach(collection, function(value, index, collection) {
+        result = predicate(value, index, collection);
+        return !result;
+      });
+      return !!result;
+    }
+
+    /**
+     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
+     * performs a binary search of `array` to determine the index at which `value`
+     * should be inserted into `array` in order to maintain its sort order.
+     *
+     * @private
+     * @param {Array} array The sorted array to inspect.
+     * @param {*} value The value to evaluate.
+     * @param {boolean} [retHighest] Specify returning the highest qualified index.
+     * @returns {number} Returns the index at which `value` should be inserted
+     *  into `array`.
+     */
+    function baseSortedIndex(array, value, retHighest) {
+      var low = 0,
+          high = array == null ? low : array.length;
+
+      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
+        while (low < high) {
+          var mid = (low + high) >>> 1,
+              computed = array[mid];
+
+          if (computed !== null && !isSymbol(computed) &&
+              (retHighest ? (computed <= value) : (computed < value))) {
+            low = mid + 1;
+          } else {
+            high = mid;
+          }
+        }
+        return high;
+      }
+      return baseSortedIndexBy(array, value, identity, retHighest);
+    }
+
+    /**
+     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
+     * which invokes `iteratee` for `value` and each element of `array` to compute
+     * their sort ranking. The iteratee is invoked with one argument; (value).
+     *
+     * @private
+     * @param {Array} array The sorted array to inspect.
+     * @param {*} value The value to evaluate.
+     * @param {Function} iteratee The iteratee invoked per element.
+     * @param {boolean} [retHighest] Specify returning the highest qualified index.
+     * @returns {number} Returns the index at which `value` should be inserted
+     *  into `array`.
+     */
+    function baseSortedIndexBy(array, value, iteratee, retHighest) {
+      value = iteratee(value);
+
+      var low = 0,
+          high = array == null ? 0 : array.length,
+          valIsNaN = value !== value,
+          valIsNull = value === null,
+          valIsSymbol = isSymbol(value),
+          valIsUndefined = value === undefined;
+
+      while (low < high) {
+        var mid = nativeFloor((low + high) / 2),
+            computed = iteratee(array[mid]),
+            othIsDefined = computed !== undefined,
+            othIsNull = computed === null,
+            othIsReflexive = computed === computed,
+            othIsSymbol = isSymbol(computed);
+
+        if (valIsNaN) {
+          var setLow = retHighest || othIsReflexive;
+        } else if (valIsUndefined) {
+          setLow = othIsReflexive && (retHighest || othIsDefined);
+        } else if (valIsNull) {
+          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
+        } else if (valIsSymbol) {
+          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
+        } else if (othIsNull || othIsSymbol) {
+          setLow = false;
+        } else {
+          setLow = retHighest ? (computed <= value) : (computed < value);
+        }
+        if (setLow) {
+          low = mid + 1;
+        } else {
+          high = mid;
+        }
+      }
+      return nativeMin(high, MAX_ARRAY_INDEX);
+    }
+
+    /**
+     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
+     * support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array} array The array to inspect.
+     * @param {Function} [iteratee] The iteratee invoked per element.
+     * @returns {Array} Returns the new duplicate free array.
+     */
+    function baseSortedUniq(array, iteratee) {
+      var index = -1,
+          length = array.length,
+          resIndex = 0,
+          result = [];
+
+      while (++index < length) {
+        var value = array[index],
+            computed = iteratee ? iteratee(value) : value;
+
+        if (!index || !eq(computed, seen)) {
+          var seen = computed;
+          result[resIndex++] = value === 0 ? 0 : value;
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.toNumber` which doesn't ensure correct
+     * conversions of binary, hexadecimal, or octal string values.
+     *
+     * @private
+     * @param {*} value The value to process.
+     * @returns {number} Returns the number.
+     */
+    function baseToNumber(value) {
+      if (typeof value == 'number') {
+        return value;
+      }
+      if (isSymbol(value)) {
+        return NAN;
+      }
+      return +value;
+    }
+
+    /**
+     * The base implementation of `_.toString` which doesn't convert nullish
+     * values to empty strings.
+     *
+     * @private
+     * @param {*} value The value to process.
+     * @returns {string} Returns the string.
+     */
+    function baseToString(value) {
+      // Exit early for strings to avoid a performance hit in some environments.
+      if (typeof value == 'string') {
+        return value;
+      }
+      if (isArray(value)) {
+        // Recursively convert values (susceptible to call stack limits).
+        return arrayMap(value, baseToString) + '';
+      }
+      if (isSymbol(value)) {
+        return symbolToString ? symbolToString.call(value) : '';
+      }
+      var result = (value + '');
+      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+    }
+
+    /**
+     * The base implementation of `_.uniqBy` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array} array The array to inspect.
+     * @param {Function} [iteratee] The iteratee invoked per element.
+     * @param {Function} [comparator] The comparator invoked per element.
+     * @returns {Array} Returns the new duplicate free array.
+     */
+    function baseUniq(array, iteratee, comparator) {
+      var index = -1,
+          includes = arrayIncludes,
+          length = array.length,
+          isCommon = true,
+          result = [],
+          seen = result;
+
+      if (comparator) {
+        isCommon = false;
+        includes = arrayIncludesWith;
+      }
+      else if (length >= 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) {
+        var value = array[index],
+            computed = iteratee ? iteratee(value) : value;
+
+        value = (comparator || value !== 0) ? value : 0;
+        if (isCommon && computed === computed) {
+          var seenIndex = seen.length;
+          while (seenIndex--) {
+            if (seen[seenIndex] === computed) {
+              continue outer;
+            }
+          }
+          if (iteratee) {
+            seen.push(computed);
+          }
+          result.push(value);
+        }
+        else if (!includes(seen, computed, comparator)) {
+          if (seen !== result) {
+            seen.push(computed);
+          }
+          result.push(value);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.unset`.
+     *
+     * @private
+     * @param {Object} object The object to modify.
+     * @param {Array|string} path The property path to unset.
+     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
+     */
+    function baseUnset(object, path) {
+      path = castPath(path, object);
+      object = parent(object, path);
+      return object == null || delete object[toKey(last(path))];
+    }
+
+    /**
+     * The base implementation of `_.update`.
+     *
+     * @private
+     * @param {Object} object The object to modify.
+     * @param {Array|string} path The path of the property to update.
+     * @param {Function} updater The function to produce the updated value.
+     * @param {Function} [customizer] The function to customize path creation.
+     * @returns {Object} Returns `object`.
+     */
+    function baseUpdate(object, path, updater, customizer) {
+      return baseSet(object, path, updater(baseGet(object, path)), customizer);
+    }
+
+    /**
+     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`
+     * without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array} array The array to query.
+     * @param {Function} predicate The function invoked per iteration.
+     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
+     * @param {boolean} [fromRight] Specify iterating from right to left.
+     * @returns {Array} Returns the slice of `array`.
+     */
+    function baseWhile(array, predicate, isDrop, fromRight) {
+      var length = array.length,
+          index = fromRight ? length : -1;
+
+      while ((fromRight ? index-- : ++index < length) &&
+        predicate(array[index], index, array)) {}
+
+      return isDrop
+        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
+        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
+    }
+
+    /**
+     * The base implementation of `wrapperValue` which returns the result of
+     * performing a sequence of actions on the unwrapped `value`, where each
+     * successive action is supplied the return value of the previous.
+     *
+     * @private
+     * @param {*} value The unwrapped value.
+     * @param {Array} actions Actions to perform to resolve the unwrapped value.
+     * @returns {*} Returns the resolved value.
+     */
+    function baseWrapperValue(value, actions) {
+      var result = value;
+      if (result instanceof LazyWrapper) {
+        result = result.value();
+      }
+      return arrayReduce(actions, function(result, action) {
+        return action.func.apply(action.thisArg, arrayPush([result], action.args));
+      }, result);
+    }
+
+    /**
+     * The base implementation of methods like `_.xor`, without support for
+     * iteratee shorthands, that accepts an array of arrays to inspect.
+     *
+     * @private
+     * @param {Array} arrays The arrays to inspect.
+     * @param {Function} [iteratee] The iteratee invoked per element.
+     * @param {Function} [comparator] The comparator invoked per element.
+     * @returns {Array} Returns the new array of values.
+     */
+    function baseXor(arrays, iteratee, comparator) {
+      var length = arrays.length;
+      if (length < 2) {
+        return length ? baseUniq(arrays[0]) : [];
+      }
+      var index = -1,
+          result = Array(length);
+
+      while (++index < length) {
+        var array = arrays[index],
+            othIndex = -1;
+
+        while (++othIndex < length) {
+          if (othIndex != index) {
+            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
+          }
+        }
+      }
+      return baseUniq(baseFlatten(result, 1), iteratee, comparator);
+    }
+
+    /**
+     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
+     *
+     * @private
+     * @param {Array} props The property identifiers.
+     * @param {Array} values The property values.
+     * @param {Function} assignFunc The function to assign values.
+     * @returns {Object} Returns the new object.
+     */
+    function baseZipObject(props, values, assignFunc) {
+      var index = -1,
+          length = props.length,
+          valsLength = values.length,
+          result = {};
+
+      while (++index < length) {
+        var value = index < valsLength ? values[index] : undefined;
+        assignFunc(result, props[index], value);
+      }
+      return result;
+    }
+
+    /**
+     * Casts `value` to an empty array if it's not an array like object.
+     *
+     * @private
+     * @param {*} value The value to inspect.
+     * @returns {Array|Object} Returns the cast array-like object.
+     */
+    function castArrayLikeObject(value) {
+      return isArrayLikeObject(value) ? value : [];
+    }
+
+    /**
+     * Casts `value` to `identity` if it's not a function.
+     *
+     * @private
+     * @param {*} value The value to inspect.
+     * @returns {Function} Returns cast function.
+     */
+    function castFunction(value) {
+      return typeof value == 'function' ? value : identity;
+    }
+
+    /**
+     * Casts `value` to a path array if it's not one.
+     *
+     * @private
+     * @param {*} value The value to inspect.
+     * @param {Object} [object] The object to query keys on.
+     * @returns {Array} Returns the cast property path array.
+     */
+    function castPath(value, object) {
+      if (isArray(value)) {
+        return value;
+      }
+      return isKey(value, object) ? [value] : stringToPath(toString(value));
+    }
+
+    /**
+     * A `baseRest` alias which can be replaced with `identity` by module
+     * replacement plugins.
+     *
+     * @private
+     * @type {Function}
+     * @param {Function} func The function to apply a rest parameter to.
+     * @returns {Function} Returns the new function.
+     */
+    var castRest = baseRest;
+
+    /**
+     * Casts `array` to a slice if it's needed.
+     *
+     * @private
+     * @param {Array} array The array to inspect.
+     * @param {number} start The start position.
+     * @param {number} [end=array.length] The end position.
+     * @returns {Array} Returns the cast slice.
+     */
+    function castSlice(array, start, end) {
+      var length = array.length;
+      end = end === undefined ? length : end;
+      return (!start && end >= 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 `map`.
+     *
+     * @private
+     * @param {Object} map The map to clone.
+     * @param {Function} cloneFunc The function to clone values.
+     * @param {boolean} [isDeep] Specify a deep clone.
+     * @returns {Object} Returns the cloned map.
+     */
+    function cloneMap(map, isDeep, cloneFunc) {
+      var array = isDeep ? cloneFunc(mapToArray(map), CLONE_DEEP_FLAG) : mapToArray(map);
+      return arrayReduce(array, addMapEntry, new map.constructor);
+    }
+
+    /**
+     * 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 `set`.
+     *
+     * @private
+     * @param {Object} set The set to clone.
+     * @param {Function} cloneFunc The function to clone values.
+     * @param {boolean} [isDeep] Specify a deep clone.
+     * @returns {Object} Returns the cloned set.
+     */
+    function cloneSet(set, isDeep, cloneFunc) {
+      var array = isDeep ? cloneFunc(setToArray(set), CLONE_DEEP_FLAG) : setToArray(set);
+      return arrayReduce(array, addSetEntry, new set.constructor);
+    }
+
+    /**
+     * 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,
+            valIsNull = value === null,
+            valIsReflexive = value === value,
+            valIsSymbol = isSymbol(value);
+
+        var othIsDefined = other !== undefined,
+            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 < other) ||
+            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
+            (othIsNull && valIsDefined && valIsReflexive) ||
+            (!othIsDefined && valIsReflexive) ||
+            !othIsReflexive) {
+          return -1;
+        }
+      }
+      return 0;
+    }
+
+    /**
+     * Used by `_.orderBy` to compare multiple properties of a value to another
+     * and stable sort them.
+     *
+     * 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.
+     *
+     * @private
+     * @param {Object} object The object to compare.
+     * @param {Object} other The other object to compare.
+     * @param {boolean[]|string[]} orders The order to sort by for each property.
+     * @returns {number} Returns the sort order indicator for `object`.
+     */
+    function compareMultiple(object, other, orders) {
+      var index = -1,
+          objCriteria = object.criteria,
+          othCriteria = other.criteria,
+          length = objCriteria.length,
+          ordersLength = orders.length;
+
+      while (++index < length) {
+        var result = compareAscending(objCriteria[index], othCriteria[index]);
+        if (result) {
+          if (index >= 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 (++leftIndex < leftLength) {
+        result[leftIndex] = partials[leftIndex];
+      }
+      while (++argsIndex < holdersLength) {
+        if (isUncurried || argsIndex < argsLength) {
+          result[holders[argsIndex]] = args[argsIndex];
+        }
+      }
+      while (rangeLength--) {
+        result[leftIndex++] = args[argsIndex++];
+      }
+      return result;
+    }
+
+    /**
+     * This function is like `composeArgs` except that the arguments composition
+     * is tailored for `_.partialRight`.
+     *
+     * @private
+     * @param {Array} args The provided arguments.
+     * @param {Array} partials The arguments to append 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 composeArgsRight(args, partials, holders, isCurried) {
+      var argsIndex = -1,
+          argsLength = args.length,
+          holdersIndex = -1,
+          holdersLength = holders.length,
+          rightIndex = -1,
+          rightLength = partials.length,
+          rangeLength = nativeMax(argsLength - holdersLength, 0),
+          result = Array(rangeLength + rightLength),
+          isUncurried = !isCurried;
+
+      while (++argsIndex < rangeLength) {
+        result[argsIndex] = args[argsIndex];
+      }
+      var offset = argsIndex;
+      while (++rightIndex < rightLength) {
+        result[offset + rightIndex] = partials[rightIndex];
+      }
+      while (++holdersIndex < holdersLength) {
+        if (isUncurried || argsIndex < argsLength) {
+          result[offset + holders[holdersIndex]] = args[argsIndex++];
+        }
+      }
+      return result;
+    }
+
+    /**
+     * Copies the values of `source` to `array`.
+     *
+     * @private
+     * @param {Array} source The array to copy values from.
+     * @param {Array} [array=[]] The array to copy values to.
+     * @returns {Array} Returns `array`.
+     */
+    function copyArray(source, array) {
+      var index = -1,
+          length = source.length;
+
+      array || (array = Array(length));
+      while (++index < length) {
+        array[index] = source[index];
+      }
+      return array;
+    }
+
+    /**
+     * Copies properties of `source` to `object`.
+     *
+     * @private
+     * @param {Object} source The object to copy properties from.
+     * @param {Array} props The property identifiers to copy.
+     * @param {Object} [object={}] The object to copy properties to.
+     * @param {Function} [customizer] The function to customize copied values.
+     * @returns {Object} Returns `object`.
+     */
+    function copyObject(source, props, object, customizer) {
+      var isNew = !object;
+      object || (object = {});
+
+      var index = -1,
+          length = props.length;
+
+      while (++index < length) {
+        var key = props[index];
+
+        var newValue = customizer
+          ? customizer(object[key], source[key], key, object, source)
+          : undefined;
+
+        if (newValue === undefined) {
+          newValue = source[key];
+        }
+        if (isNew) {
+          baseAssignValue(object, key, newValue);
+        } else {
+          assignValue(object, key, newValue);
+        }
+      }
+      return object;
+    }
+
+    /**
+     * Copies own symbols of `source` to `object`.
+     *
+     * @private
+     * @param {Object} source The object to copy symbols from.
+     * @param {Object} [object={}] The object to copy symbols to.
+     * @returns {Object} Returns `object`.
+     */
+    function copySymbols(source, object) {
+      return copyObject(source, getSymbols(source), object);
+    }
+
+    /**
+     * Copies own and inherited symbols of `source` to `object`.
+     *
+     * @private
+     * @param {Object} source The object to copy symbols from.
+     * @param {Object} [object={}] The object to copy symbols to.
+     * @returns {Object} Returns `object`.
+     */
+    function copySymbolsIn(source, object) {
+      return copyObject(source, getSymbolsIn(source), object);
+    }
+
+    /**
+     * Creates a function like `_.groupBy`.
+     *
+     * @private
+     * @param {Function} setter The function to set accumulator values.
+     * @param {Function} [initializer] The accumulator object initializer.
+     * @returns {Function} Returns the new aggregator function.
+     */
+    function createAggregator(setter, initializer) {
+      return function(collection, iteratee) {
+        var func = isArray(collection) ? arrayAggregator : baseAggregator,
+            accumulator = initializer ? initializer() : {};
+
+        return func(collection, setter, getIteratee(iteratee, 2), accumulator);
+      };
+    }
+
+    /**
+     * Creates a function like `_.assign`.
+     *
+     * @private
+     * @param {Function} assigner The function to assign values.
+     * @returns {Function} Returns the new assigner function.
+     */
+    function createAssigner(assigner) {
+      return baseRest(function(object, sources) {
+        var index = -1,
+            length = sources.length,
+            customizer = length > 1 ? sources[length - 1] : undefined,
+            guard = length > 2 ? sources[2] : undefined;
+
+        customizer = (assigner.length > 3 && typeof customizer == 'function')
+          ? (length--, customizer)
+          : undefined;
+
+        if (guard && isIterateeCall(sources[0], sources[1], guard)) {
+          customizer = length < 3 ? undefined : customizer;
+          length = 1;
+        }
+        object = Object(object);
+        while (++index < length) {
+          var source = sources[index];
+          if (source) {
+            assigner(object, source, index, customizer);
+          }
+        }
+        return object;
+      });
+    }
+
+    /**
+     * Creates a `baseEach` or `baseEachRight` function.
+     *
+     * @private
+     * @param {Function} eachFunc The function to iterate over a collection.
+     * @param {boolean} [fromRight] Specify iterating from right to left.
+     * @returns {Function} Returns the new base function.
+     */
+    function createBaseEach(eachFunc, fromRight) {
+      return function(collection, iteratee) {
+        if (collection == null) {
+          return collection;
+        }
+        if (!isArrayLike(collection)) {
+          return eachFunc(collection, iteratee);
+        }
+        var length = collection.length,
+            index = fromRight ? length : -1,
+            iterable = Object(collection);
+
+        while ((fromRight ? index-- : ++index < length)) {
+          if (iteratee(iterable[index], index, iterable) === false) {
+            break;
+          }
+        }
+        return collection;
+      };
+    }
+
+    /**
+     * Creates a base function for methods like `_.forIn` and `_.forOwn`.
+     *
+     * @private
+     * @param {boolean} [fromRight] Specify iterating from right to left.
+     * @returns {Function} Returns the new base function.
+     */
+    function createBaseFor(fromRight) {
+      return function(object, iteratee, keysFunc) {
+        var index = -1,
+            iterable = Object(object),
+            props = keysFunc(object),
+            length = props.length;
+
+        while (length--) {
+          var key = props[fromRight ? length : ++index];
+          if (iteratee(iterable[key], key, iterable) === false) {
+            break;
+          }
+        }
+        return object;
+      };
+    }
+
+    /**
+     * Creates a function that wraps `func` to invoke it with the optional `this`
+     * binding of `thisArg`.
+     *
+     * @private
+     * @param {Function} func The function to wrap.
+     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+     * @param {*} [thisArg] The `this` binding of `func`.
+     * @returns {Function} Returns the new wrapped function.
+     */
+    function createBind(func, bitmask, thisArg) {
+      var isBind = bitmask & WRAP_BIND_FLAG,
+          Ctor = createCtor(func);
+
+      function wrapper() {
+        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
+        return fn.apply(isBind ? thisArg : this, arguments);
+      }
+      return wrapper;
+    }
+
+    /**
+     * Creates a function like `_.lowerFirst`.
+     *
+     * @private
+     * @param {string} methodName The name of the `String` case method to use.
+     * @returns {Function} Returns the new case function.
+     */
+    function createCaseFirst(methodName) {
+      return function(string) {
+        string = toString(string);
+
+        var strSymbols = hasUnicode(string)
+          ? stringToArray(string)
+          : undefined;
+
+        var chr = strSymbols
+          ? strSymbols[0]
+          : string.charAt(0);
+
+        var trailing = strSymbols
+          ? castSlice(strSymbols, 1).join('')
+          : string.slice(1);
+
+        return chr[methodName]() + trailing;
+      };
+    }
+
+    /**
+     * Creates a function like `_.camelCase`.
+     *
+     * @private
+     * @param {Function} callback The function to combine each word.
+     * @returns {Function} Returns the new compounder function.
+     */
+    function createCompounder(callback) {
+      return function(string) {
+        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
+      };
+    }
+
+    /**
+     * Creates a function that produces an instance of `Ctor` regardless of
+     * whether it was invoked as part of a `new` expression or by `call` or `apply`.
+     *
+     * @private
+     * @param {Function} Ctor The constructor to wrap.
+     * @returns {Function} Returns the new wrapped function.
+     */
+    function createCtor(Ctor) {
+      return function() {
+        // Use a `switch` statement to work with class constructors. See
+        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
+        // for more details.
+        var args = arguments;
+        switch (args.length) {
+          case 0: return new Ctor;
+          case 1: return new Ctor(args[0]);
+          case 2: return new Ctor(args[0], args[1]);
+          case 3: return new Ctor(args[0], args[1], args[2]);
+          case 4: return new Ctor(args[0], args[1], args[2], args[3]);
+          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
+          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
+          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
+        }
+        var thisBinding = baseCreate(Ctor.prototype),
+            result = Ctor.apply(thisBinding, args);
+
+        // Mimic the constructor's `return` behavior.
+        // See https://es5.github.io/#x13.2.2 for more details.
+        return isObject(result) ? result : thisBinding;
+      };
+    }
+
+    /**
+     * Creates a function that wraps `func` to enable currying.
+     *
+     * @private
+     * @param {Function} func The function to wrap.
+     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+     * @param {number} arity The arity of `func`.
+     * @returns {Function} Returns the new wrapped function.
+     */
+    function createCurry(func, bitmask, arity) {
+      var Ctor = createCtor(func);
+
+      function wrapper() {
+        var length = arguments.length,
+            args = Array(length),
+            index = length,
+            placeholder = getHolder(wrapper);
+
+        while (index--) {
+          args[index] = arguments[index];
+        }
+        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
+          ? []
+          : replaceHolders(args, placeholder);
+
+        length -= holders.length;
+        if (length < arity) {
+          return createRecurry(
+            func, bitmask, createHybrid, wrapper.placeholder, undefined,
+            args, holders, undefined, undefined, arity - length);
+        }
+        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
+        return apply(fn, this, args);
+      }
+      return wrapper;
+    }
+
+    /**
+     * Creates a `_.find` or `_.findLast` function.
+     *
+     * @private
+     * @param {Function} findIndexFunc The function to find the collection index.
+     * @returns {Function} Returns the new find function.
+     */
+    function createFind(findIndexFunc) {
+      return function(collection, predicate, fromIndex) {
+        var iterable = Object(collection);
+        if (!isArrayLike(collection)) {
+          var iteratee = getIteratee(predicate, 3);
+          collection = keys(collection);
+          predicate = function(key) { return iteratee(iterable[key], key, iterable); };
+        }
+        var index = findIndexFunc(collection, predicate, fromIndex);
+        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
+      };
+    }
+
+    /**
+     * 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 (++index < length) {
+          func = funcs[index];
+
+          var funcName = getFuncName(func),
+              data = funcName == 'wrapper' ? getData(func) : undefined;
+
+          if (data && isLaziable(data[0]) &&
+                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
+                !data[4].length && data[9] == 1
+              ) {
+            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
+          } else {
+            wrapper = (func.length == 1 && isLaziable(func))
+              ? wrapper[funcName]()
+              : wrapper.thru(func);
+          }
+        }
+        return function() {
+          var args = arguments,
+              value = args[0];
+
+          if (wrapper && args.length == 1 && isArray(value)) {
+            return wrapper.plant(value).value();
+          }
+          var index = 0,
+              result = length ? funcs[index].apply(this, args) : value;
+
+          while (++index < length) {
+            result = funcs[index].call(this, result);
+          }
+          return result;
+        };
+      });
+    }
+
+    /**
+     * Creates a function that wraps `func` to invoke it with optional `this`
+     * binding of `thisArg`, partial application, and currying.
+     *
+     * @private
+     * @param {Function|string} func The function or method name to wrap.
+     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+     * @param {*} [thisArg] The `this` binding of `func`.
+     * @param {Array} [partials] The arguments to prepend to those provided to
+     *  the new function.
+     * @param {Array} [holders] The `partials` placeholder indexes.
+     * @param {Array} [partialsRight] The arguments to append to those provided
+     *  to the new function.
+     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
+     * @param {Array} [argPos] The argument positions of the new function.
+     * @param {number} [ary] The arity cap of `func`.
+     * @param {number} [arity] The arity of `func`.
+     * @returns {Function} Returns the new wrapped function.
+     */
+    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
+      var isAry = bitmask & WRAP_ARY_FLAG,
+          isBind = bitmask & WRAP_BIND_FLAG,
+          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
+          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
+          isFlip = bitmask & WRAP_FLIP_FLAG,
+          Ctor = isBindKey ? undefined : createCtor(func);
+
+      function wrapper() {
+        var length = arguments.length,
+            args = Array(length),
+            index = length;
+
+        while (index--) {
+          args[index] = arguments[index];
+        }
+        if (isCurried) {
+          var placeholder = getHolder(wrapper),
+              holdersCount = countHolders(args, placeholder);
+        }
+        if (partials) {
+          args = composeArgs(args, partials, holders, isCurried);
+        }
+        if (partialsRight) {
+          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
+        }
+        length -= holdersCount;
+        if (isCurried && length < arity) {
+          var newHolders = replaceHolders(args, placeholder);
+          return createRecurry(
+            func, bitmask, createHybrid, wrapper.placeholder, thisArg,
+            args, newHolders, argPos, ary, arity - length
+          );
+        }
+        var thisBinding = isBind ? thisArg : this,
+            fn = isBindKey ? thisBinding[func] : func;
+
+        length = args.length;
+        if (argPos) {
+          args = reorder(args, argPos);
+        } else if (isFlip && length > 1) {
+          args.reverse();
+        }
+        if (isAry && ary < length) {
+          args.length = ary;
+        }
+        if (this && this !== root && this instanceof wrapper) {
+          fn = Ctor || createCtor(fn);
+        }
+        return fn.apply(thisBinding, args);
+      }
+      return wrapper;
+    }
+
+    /**
+     * Creates a function like `_.invertBy`.
+     *
+     * @private
+     * @param {Function} setter The function to set accumulator values.
+     * @param {Function} toIteratee The function to resolve iteratees.
+     * @returns {Function} Returns the new inverter function.
+     */
+    function createInverter(setter, toIteratee) {
+      return function(object, iteratee) {
+        return baseInverter(object, setter, toIteratee(iteratee), {});
+      };
+    }
+
+    /**
+     * Creates a function that performs a mathematical operation on two values.
+     *
+     * @private
+     * @param {Function} operator The function to perform the operation.
+     * @param {number} [defaultValue] The value used for `undefined` arguments.
+     * @returns {Function} Returns the new mathematical operation function.
+     */
+    function createMathOperation(operator, defaultValue) {
+      return function(value, other) {
+        var result;
+        if (value === undefined && other === undefined) {
+          return defaultValue;
+        }
+        if (value !== undefined) {
+          result = value;
+        }
+        if (other !== undefined) {
+          if (result === undefined) {
+            return other;
+          }
+          if (typeof value == 'string' || typeof other == 'string') {
+            value = baseToString(value);
+            other = baseToString(other);
+          } else {
+            value = baseToNumber(value);
+            other = baseToNumber(other);
+          }
+          result = operator(value, other);
+        }
+        return result;
+      };
+    }
+
+    /**
+     * Creates a function like `_.over`.
+     *
+     * @private
+     * @param {Function} arrayFunc The function to iterate over iteratees.
+     * @returns {Function} Returns the new over function.
+     */
+    function createOver(arrayFunc) {
+      return flatRest(function(iteratees) {
+        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
+        return baseRest(function(args) {
+          var thisArg = this;
+          return arrayFunc(iteratees, function(iteratee) {
+            return apply(iteratee, thisArg, args);
+          });
+        });
+      });
+    }
+
+    /**
+     * Creates the padding for `string` based on `length`. The `chars` string
+     * is truncated if the number of characters exceeds `length`.
+     *
+     * @private
+     * @param {number} length The padding length.
+     * @param {string} [chars=' '] The string used as padding.
+     * @returns {string} Returns the padding for `string`.
+     */
+    function createPadding(length, chars) {
+      chars = chars === undefined ? ' ' : baseToString(chars);
+
+      var charsLength = chars.length;
+      if (charsLength < 2) {
+        return charsLength ? baseRepeat(chars, length) : chars;
+      }
+      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
+      return hasUnicode(chars)
+        ? castSlice(stringToArray(result), 0, length).join('')
+        : result.slice(0, length);
+    }
+
+    /**
+     * Creates a function that wraps `func` to invoke it with the `this` binding
+     * of `thisArg` and `partials` prepended to the arguments it receives.
+     *
+     * @private
+     * @param {Function} func The function to wrap.
+     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+     * @param {*} thisArg The `this` binding of `func`.
+     * @param {Array} partials The arguments to prepend to those provided to
+     *  the new function.
+     * @returns {Function} Returns the new wrapped function.
+     */
+    function createPartial(func, bitmask, thisArg, partials) {
+      var isBind = bitmask & WRAP_BIND_FLAG,
+          Ctor = createCtor(func);
+
+      function wrapper() {
+        var argsIndex = -1,
+            argsLength = arguments.length,
+            leftIndex = -1,
+            leftLength = partials.length,
+            args = Array(leftLength + argsLength),
+            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
+
+        while (++leftIndex < leftLength) {
+          args[leftIndex] = partials[leftIndex];
+        }
+        while (argsLength--) {
+          args[leftIndex++] = arguments[++argsIndex];
+        }
+        return apply(fn, isBind ? thisArg : this, args);
+      }
+      return wrapper;
+    }
+
+    /**
+     * Creates a `_.range` or `_.rangeRight` function.
+     *
+     * @private
+     * @param {boolean} [fromRight] Specify iterating from right to left.
+     * @returns {Function} Returns the new range function.
+     */
+    function createRange(fromRight) {
+      return function(start, end, step) {
+        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
+          end = step = undefined;
+        }
+        // Ensure the sign of `-0` is preserved.
+        start = toFinite(start);
+        if (end === undefined) {
+          end = start;
+          start = 0;
+        } else {
+          end = toFinite(end);
+        }
+        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
+        return baseRange(start, end, step, fromRight);
+      };
+    }
+
+    /**
+     * Creates a function that performs a relational operation on two values.
+     *
+     * @private
+     * @param {Function} operator The function to perform the operation.
+     * @returns {Function} Returns the new relational operation function.
+     */
+    function createRelationalOperation(operator) {
+      return function(value, other) {
+        if (!(typeof value == 'string' && typeof other == 'string')) {
+          value = toNumber(value);
+          other = toNumber(other);
+        }
+        return operator(value, other);
+      };
+    }
+
+    /**
+     * Creates a function that wraps `func` to continue currying.
+     *
+     * @private
+     * @param {Function} func The function to wrap.
+     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+     * @param {Function} wrapFunc The function to create the `func` wrapper.
+     * @param {*} placeholder The placeholder value.
+     * @param {*} [thisArg] The `this` binding of `func`.
+     * @param {Array} [partials] The arguments to prepend to those provided to
+     *  the new function.
+     * @param {Array} [holders] The `partials` placeholder indexes.
+     * @param {Array} [argPos] The argument positions of the new function.
+     * @param {number} [ary] The arity cap of `func`.
+     * @param {number} [arity] The arity of `func`.
+     * @returns {Function} Returns the new wrapped function.
+     */
+    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
+      var isCurry = bitmask & WRAP_CURRY_FLAG,
+          newHolders = isCurry ? holders : undefined,
+          newHoldersRight = isCurry ? undefined : holders,
+          newPartials = isCurry ? partials : undefined,
+          newPartialsRight = isCurry ? undefined : partials;
+
+      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
+      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
+
+      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
+        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
+      }
+      var newData = [
+        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
+        newHoldersRight, argPos, ary, arity
+      ];
+
+      var result = wrapFunc.apply(undefined, newData);
+      if (isLaziable(func)) {
+        setData(result, newData);
+      }
+      result.placeholder = placeholder;
+      return setWrapToString(result, func, bitmask);
+    }
+
+    /**
+     * Creates a function like `_.round`.
+     *
+     * @private
+     * @param {string} methodName The name of the `Math` method to use when rounding.
+     * @returns {Function} Returns the new round function.
+     */
+    function createRound(methodName) {
+      var func = Math[methodName];
+      return function(number, precision) {
+        number = toNumber(number);
+        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
+        if (precision) {
+          // Shift with exponential notation to avoid floating-point issues.
+          // See [MDN](https://mdn.io/round#Examples) for more details.
+          var pair = (toString(number) + 'e').split('e'),
+              value = func(pair[0] + 'e' + (+pair[1] + precision));
+
+          pair = (toString(value) + 'e').split('e');
+          return +(pair[0] + 'e' + (+pair[1] - precision));
+        }
+        return func(number);
+      };
+    }
+
+    /**
+     * Creates a set object of `values`.
+     *
+     * @private
+     * @param {Array} values The values to add to the set.
+     * @returns {Object} Returns the new set.
+     */
+    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
+      return new Set(values);
+    };
+
+    /**
+     * Creates a `_.toPairs` or `_.toPairsIn` function.
+     *
+     * @private
+     * @param {Function} keysFunc The function to get the keys of a given object.
+     * @returns {Function} Returns the new pairs function.
+     */
+    function createToPairs(keysFunc) {
+      return function(object) {
+        var tag = getTag(object);
+        if (tag == mapTag) {
+          return mapToArray(object);
+        }
+        if (tag == setTag) {
+          return setToPairs(object);
+        }
+        return baseToPairs(object, keysFunc(object));
+      };
+    }
+
+    /**
+     * Creates a function that either curries or invokes `func` with optional
+     * `this` binding and partially applied arguments.
+     *
+     * @private
+     * @param {Function|string} func The function or method name to wrap.
+     * @param {number} bitmask The bitmask flags.
+     *    1 - `_.bind`
+     *    2 - `_.bindKey`
+     *    4 - `_.curry` or `_.curryRight` of a bound function
+     *    8 - `_.curry`
+     *   16 - `_.curryRight`
+     *   32 - `_.partial`
+     *   64 - `_.partialRight`
+     *  128 - `_.rearg`
+     *  256 - `_.ary`
+     *  512 - `_.flip`
+     * @param {*} [thisArg] The `this` binding of `func`.
+     * @param {Array} [partials] The arguments to be partially applied.
+     * @param {Array} [holders] The `partials` placeholder indexes.
+     * @param {Array} [argPos] The argument positions of the new function.
+     * @param {number} [ary] The arity cap of `func`.
+     * @param {number} [arity] The arity of `func`.
+     * @returns {Function} Returns the new wrapped function.
+     */
+    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
+      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
+      if (!isBindKey && typeof func != 'function') {
+        throw new TypeError(FUNC_ERROR_TEXT);
+      }
+      var length = partials ? partials.length : 0;
+      if (!length) {
+        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
+        partials = holders = undefined;
+      }
+      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
+      arity = arity === undefined ? arity : toInteger(arity);
+      length -= holders ? holders.length : 0;
+
+      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
+        var partialsRight = partials,
+            holdersRight = holders;
+
+        partials = holders = undefined;
+      }
+      var data = isBindKey ? undefined : getData(func);
+
+      var newData = [
+        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
+        argPos, ary, arity
+      ];
+
+      if (data) {
+        mergeData(newData, data);
+      }
+      func = newData[0];
+      bitmask = newData[1];
+      thisArg = newData[2];
+      partials = newData[3];
+      holders = newData[4];
+      arity = newData[9] = newData[9] === undefined
+        ? (isBindKey ? 0 : func.length)
+        : nativeMax(newData[9] - length, 0);
+
+      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
+        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
+      }
+      if (!bitmask || bitmask == WRAP_BIND_FLAG) {
+        var result = createBind(func, bitmask, thisArg);
+      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
+        result = createCurry(func, bitmask, arity);
+      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
+        result = createPartial(func, bitmask, thisArg, partials);
+      } else {
+        result = createHybrid.apply(undefined, newData);
+      }
+      var setter = data ? baseSetData : setData;
+      return setWrapToString(setter(result, newData), func, bitmask);
+    }
+
+    /**
+     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties
+     * of source objects to the destination object for all destination properties
+     * that resolve to `undefined`.
+     *
+     * @private
+     * @param {*} objValue The destination value.
+     * @param {*} srcValue The source value.
+     * @param {string} key The key of the property to assign.
+     * @param {Object} object The parent object of `objValue`.
+     * @returns {*} Returns the value to assign.
+     */
+    function customDefaultsAssignIn(objValue, srcValue, key, object) {
+      if (objValue === undefined ||
+          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
+        return srcValue;
+      }
+      return objValue;
+    }
+
+    /**
+     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
+     * objects into destination objects that are passed thru.
+     *
+     * @private
+     * @param {*} objValue The destination value.
+     * @param {*} srcValue The source value.
+     * @param {string} key The key of the property to merge.
+     * @param {Object} object The parent object of `objValue`.
+     * @param {Object} source The parent object of `srcValue`.
+     * @param {Object} [stack] Tracks traversed source values and their merged
+     *  counterparts.
+     * @returns {*} Returns the value to assign.
+     */
+    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
+      if (isObject(objValue) && isObject(srcValue)) {
+        // Recursively merge objects and arrays (susceptible to call stack limits).
+        stack.set(srcValue, objValue);
+        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
+        stack['delete'](srcValue);
+      }
+      return objValue;
+    }
+
+    /**
+     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
+     * objects.
+     *
+     * @private
+     * @param {*} value The value to inspect.
+     * @param {string} key The key of the property to inspect.
+     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
+     */
+    function customOmitClone(value) {
+      return isPlainObject(value) ? undefined : value;
+    }
+
+    /**
+     * A specialized version of `baseIsEqualDeep` for arrays with support for
+     * partial deep comparisons.
+     *
+     * @private
+     * @param {Array} array The array to compare.
+     * @param {Array} other The other array to compare.
+     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+     * @param {Function} customizer The function to customize comparisons.
+     * @param {Function} equalFunc The function to determine equivalents of values.
+     * @param {Object} stack Tracks traversed `array` and `other` objects.
+     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
+     */
+    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
+      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
+          arrLength = array.length,
+          othLength = other.length;
+
+      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
+        return false;
+      }
+      // Assume cyclic values are equal.
+      var stacked = stack.get(array);
+      if (stacked && stack.get(other)) {
+        return stacked == other;
+      }
+      var index = -1,
+          result = true,
+          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
+
+      stack.set(array, other);
+      stack.set(other, array);
+
+      // Ignore non-index properties.
+      while (++index < arrLength) {
+        var arrValue = array[index],
+            othValue = other[index];
+
+        if (customizer) {
+          var compared = isPartial
+            ? customizer(othValue, arrValue, index, other, array, stack)
+            : customizer(arrValue, othValue, index, array, other, stack);
+        }
+        if (compared !== undefined) {
+          if (compared) {
+            continue;
+          }
+          result = false;
+          break;
+        }
+        // Recursively compare arrays (susceptible to call stack limits).
+        if (seen) {
+          if (!arraySome(other, function(othValue, othIndex) {
+                if (!cacheHas(seen, othIndex) &&
+                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
+                  return seen.push(othIndex);
+                }
+              })) {
+            result = false;
+            break;
+          }
+        } else if (!(
+              arrValue === othValue ||
+                equalFunc(arrValue, othValue, bitmask, customizer, stack)
+            )) {
+          result = false;
+          break;
+        }
+      }
+      stack['delete'](array);
+      stack['delete'](other);
+      return result;
+    }
+
+    /**
+     * A specialized version of `baseIsEqualDeep` for comparing objects of
+     * the same `toStringTag`.
+     *
+     * **Note:** This function only supports comparing values with tags of
+     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+     *
+     * @private
+     * @param {Object} object The object to compare.
+     * @param {Object} other The other object to compare.
+     * @param {string} tag The `toStringTag` of the objects to compare.
+     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+     * @param {Function} customizer The function to customize comparisons.
+     * @param {Function} equalFunc The function to determine equivalents of values.
+     * @param {Object} stack Tracks traversed `object` and `other` objects.
+     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+     */
+    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
+      switch (tag) {
+        case dataViewTag:
+          if ((object.byteLength != other.byteLength) ||
+              (object.byteOffset != other.byteOffset)) {
+            return false;
+          }
+          object = object.buffer;
+          other = other.buffer;
+
+        case arrayBufferTag:
+          if ((object.byteLength != other.byteLength) ||
+              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
+            return false;
+          }
+          return true;
+
+        case boolTag:
+        case dateTag:
+        case numberTag:
+          // Coerce booleans to `1` or `0` and dates to milliseconds.
+          // Invalid dates are coerced to `NaN`.
+          return eq(+object, +other);
+
+        case errorTag:
+          return object.name == other.name && object.message == other.message;
+
+        case regexpTag:
+        case stringTag:
+          // Coerce regexes to strings and treat strings, primitives and objects,
+          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
+          // for more details.
+          return object == (other + '');
+
+        case mapTag:
+          var convert = mapToArray;
+
+        case setTag:
+          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
+          convert || (convert = setToArray);
+
+          if (object.size != other.size && !isPartial) {
+            return false;
+          }
+          // Assume cyclic values are equal.
+          var stacked = stack.get(object);
+          if (stacked) {
+            return stacked == other;
+          }
+          bitmask |= COMPARE_UNORDERED_FLAG;
+
+          // Recursively compare objects (susceptible to call stack limits).
+          stack.set(object, other);
+          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
+          stack['delete'](object);
+          return result;
+
+        case symbolTag:
+          if (symbolValueOf) {
+            return symbolValueOf.call(object) == symbolValueOf.call(other);
+          }
+      }
+      return false;
+    }
+
+    /**
+     * A specialized version of `baseIsEqualDeep` for objects with support for
+     * partial deep comparisons.
+     *
+     * @private
+     * @param {Object} object The object to compare.
+     * @param {Object} other The other object to compare.
+     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+     * @param {Function} customizer The function to customize comparisons.
+     * @param {Function} equalFunc The function to determine equivalents of values.
+     * @param {Object} stack Tracks traversed `object` and `other` objects.
+     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+     */
+    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
+      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
+          objProps = getAllKeys(object),
+          objLength = objProps.length,
+          othProps = getAllKeys(other),
+          othLength = othProps.length;
+
+      if (objLength != othLength && !isPartial) {
+        return false;
+      }
+      var index = objLength;
+      while (index--) {
+        var key = objProps[index];
+        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
+          return false;
+        }
+      }
+      // Assume cyclic values are equal.
+      var stacked = stack.get(object);
+      if (stacked && stack.get(other)) {
+        return stacked == other;
+      }
+      var result = true;
+      stack.set(object, other);
+      stack.set(other, object);
+
+      var skipCtor = isPartial;
+      while (++index < objLength) {
+        key = objProps[index];
+        var objValue = object[key],
+            othValue = other[key];
+
+        if (customizer) {
+          var compared = isPartial
+            ? customizer(othValue, objValue, key, other, object, stack)
+            : customizer(objValue, othValue, key, object, other, stack);
+        }
+        // Recursively compare objects (susceptible to call stack limits).
+        if (!(compared === undefined
+              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
+              : compared
+            )) {
+          result = false;
+          break;
+        }
+        skipCtor || (skipCtor = key == 'constructor');
+      }
+      if (result && !skipCtor) {
+        var objCtor = object.constructor,
+            othCtor = other.constructor;
+
+        // Non `Object` object instances with different constructors are not equal.
+        if (objCtor != othCtor &&
+            ('constructor' in object && 'constructor' in other) &&
+            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
+              typeof othCtor == 'function' && othCtor instanceof othCtor)) {
+          result = false;
+        }
+      }
+      stack['delete'](object);
+      stack['delete'](other);
+      return result;
+    }
+
+    /**
+     * A specialized version of `baseRest` which flattens the rest array.
+     *
+     * @private
+     * @param {Function} func The function to apply a rest parameter to.
+     * @returns {Function} Returns the new function.
+     */
+    function flatRest(func) {
+      return setToString(overRest(func, undefined, flatten), func + '');
+    }
+
+    /**
+     * Creates an array of own enumerable property names and symbols of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of property names and symbols.
+     */
+    function getAllKeys(object) {
+      return baseGetAllKeys(object, keys, getSymbols);
+    }
+
+    /**
+     * Creates an array of own and inherited enumerable property names and
+     * symbols of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of property names and symbols.
+     */
+    function getAllKeysIn(object) {
+      return baseGetAllKeys(object, keysIn, getSymbolsIn);
+    }
+
+    /**
+     * Gets metadata for `func`.
+     *
+     * @private
+     * @param {Function} func The function to query.
+     * @returns {*} Returns the metadata for `func`.
+     */
+    var getData = !metaMap ? noop : function(func) {
+      return metaMap.get(func);
+    };
+
+    /**
+     * Gets the name of `func`.
+     *
+     * @private
+     * @param {Function} func The function to query.
+     * @returns {string} Returns the function name.
+     */
+    function getFuncName(func) {
+      var result = (func.name + ''),
+          array = realNames[result],
+          length = hasOwnProperty.call(realNames, result) ? array.length : 0;
+
+      while (length--) {
+        var data = array[length],
+            otherFunc = data.func;
+        if (otherFunc == null || otherFunc == func) {
+          return data.name;
+        }
+      }
+      return result;
+    }
+
+    /**
+     * Gets the argument placeholder value for `func`.
+     *
+     * @private
+     * @param {Function} func The function to inspect.
+     * @returns {*} Returns the placeholder value.
+     */
+    function getHolder(func) {
+      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;
+      return object.placeholder;
+    }
+
+    /**
+     * Gets the appropriate "iteratee" function. If `_.iteratee` is customized,
+     * this function returns the custom method, otherwise it returns `baseIteratee`.
+     * If arguments are provided, the chosen function is invoked with them and
+     * its result is returned.
+     *
+     * @private
+     * @param {*} [value] The value to convert to an iteratee.
+     * @param {number} [arity] The arity of the created iteratee.
+     * @returns {Function} Returns the chosen function or its result.
+     */
+    function getIteratee() {
+      var result = lodash.iteratee || iteratee;
+      result = result === iteratee ? baseIteratee : result;
+      return arguments.length ? result(arguments[0], arguments[1]) : result;
+    }
+
+    /**
+     * Gets the data for `map`.
+     *
+     * @private
+     * @param {Object} map The map to query.
+     * @param {string} key The reference key.
+     * @returns {*} Returns the map data.
+     */
+    function getMapData(map, key) {
+      var data = map.__data__;
+      return isKeyable(key)
+        ? data[typeof key == 'string' ? 'string' : 'hash']
+        : data.map;
+    }
+
+    /**
+     * Gets the property names, values, and compare flags of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the match data of `object`.
+     */
+    function getMatchData(object) {
+      var result = keys(object),
+          length = result.length;
+
+      while (length--) {
+        var key = result[length],
+            value = object[key];
+
+        result[length] = [key, value, isStrictComparable(value)];
+      }
+      return result;
+    }
+
+    /**
+     * Gets the native function at `key` of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @param {string} key The key of the method to get.
+     * @returns {*} Returns the function if it's native, else `undefined`.
+     */
+    function getNative(object, key) {
+      var value = getValue(object, key);
+      return baseIsNative(value) ? value : undefined;
+    }
+
+    /**
+     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
+     *
+     * @private
+     * @param {*} value The value to query.
+     * @returns {string} Returns the raw `toStringTag`.
+     */
+    function getRawTag(value) {
+      var isOwn = hasOwnProperty.call(value, symToStringTag),
+          tag = value[symToStringTag];
+
+      try {
+        value[symToStringTag] = undefined;
+        var unmasked = true;
+      } catch (e) {}
+
+      var result = nativeObjectToString.call(value);
+      if (unmasked) {
+        if (isOwn) {
+          value[symToStringTag] = tag;
+        } else {
+          delete value[symToStringTag];
+        }
+      }
+      return result;
+    }
+
+    /**
+     * Creates an array of the own enumerable symbols of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of symbols.
+     */
+    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
+      if (object == null) {
+        return [];
+      }
+      object = Object(object);
+      return arrayFilter(nativeGetSymbols(object), function(symbol) {
+        return propertyIsEnumerable.call(object, symbol);
+      });
+    };
+
+    /**
+     * Creates an array of the own and inherited enumerable symbols of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of symbols.
+     */
+    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
+      var result = [];
+      while (object) {
+        arrayPush(result, getSymbols(object));
+        object = getPrototype(object);
+      }
+      return result;
+    };
+
+    /**
+     * Gets the `toStringTag` of `value`.
+     *
+     * @private
+     * @param {*} value The value to query.
+     * @returns {string} Returns the `toStringTag`.
+     */
+    var getTag = baseGetTag;
+
+    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
+    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
+        (Map && getTag(new Map) != mapTag) ||
+        (Promise && getTag(Promise.resolve()) != promiseTag) ||
+        (Set && getTag(new Set) != setTag) ||
+        (WeakMap && getTag(new WeakMap) != weakMapTag)) {
+      getTag = function(value) {
+        var result = baseGetTag(value),
+            Ctor = result == objectTag ? value.constructor : undefined,
+            ctorString = Ctor ? toSource(Ctor) : '';
+
+        if (ctorString) {
+          switch (ctorString) {
+            case dataViewCtorString: return dataViewTag;
+            case mapCtorString: return mapTag;
+            case promiseCtorString: return promiseTag;
+            case setCtorString: return setTag;
+            case weakMapCtorString: return weakMapTag;
+          }
+        }
+        return result;
+      };
+    }
+
+    /**
+     * Gets the view, applying any `transforms` to the `start` and `end` positions.
+     *
+     * @private
+     * @param {number} start The start of the view.
+     * @param {number} end The end of the view.
+     * @param {Array} transforms The transformations to apply to the view.
+     * @returns {Object} Returns an object containing the `start` and `end`
+     *  positions of the view.
+     */
+    function getView(start, end, transforms) {
+      var index = -1,
+          length = transforms.length;
+
+      while (++index < length) {
+        var data = transforms[index],
+            size = data.size;
+
+        switch (data.type) {
+          case 'drop':      start += size; break;
+          case 'dropRight': end -= size; break;
+          case 'take':      end = nativeMin(end, start + size); break;
+          case 'takeRight': start = nativeMax(start, end - size); break;
+        }
+      }
+      return { 'start': start, 'end': end };
+    }
+
+    /**
+     * Extracts wrapper details from the `source` body comment.
+     *
+     * @private
+     * @param {string} source The source to inspect.
+     * @returns {Array} Returns the wrapper details.
+     */
+    function getWrapDetails(source) {
+      var match = source.match(reWrapDetails);
+      return match ? match[1].split(reSplitDetails) : [];
+    }
+
+    /**
+     * Checks if `path` exists on `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @param {Array|string} path The path to check.
+     * @param {Function} hasFunc The function to check properties.
+     * @returns {boolean} Returns `true` if `path` exists, else `false`.
+     */
+    function hasPath(object, path, hasFunc) {
+      path = castPath(path, object);
+
+      var index = -1,
+          length = path.length,
+          result = false;
+
+      while (++index < length) {
+        var key = toKey(path[index]);
+        if (!(result = object != null && hasFunc(object, key))) {
+          break;
+        }
+        object = object[key];
+      }
+      if (result || ++index != length) {
+        return result;
+      }
+      length = object == null ? 0 : object.length;
+      return !!length && isLength(length) && isIndex(key, length) &&
+        (isArray(object) || isArguments(object));
+    }
+
+    /**
+     * Initializes an array clone.
+     *
+     * @private
+     * @param {Array} array The array to clone.
+     * @returns {Array} Returns the initialized clone.
+     */
+    function initCloneArray(array) {
+      var length = array.length,
+          result = array.constructor(length);
+
+      // Add properties assigned by `RegExp#exec`.
+      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
+        result.index = array.index;
+        result.input = array.input;
+      }
+      return result;
+    }
+
+    /**
+     * Initializes an object clone.
+     *
+     * @private
+     * @param {Object} object The object to clone.
+     * @returns {Object} Returns the initialized clone.
+     */
+    function initCloneObject(object) {
+      return (typeof object.constructor == 'function' && !isPrototype(object))
+        ? baseCreate(getPrototype(object))
+        : {};
+    }
+
+    /**
+     * Initializes an object clone based on its `toStringTag`.
+     *
+     * **Note:** This function only supports cloning values with tags of
+     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+     *
+     * @private
+     * @param {Object} object The object to clone.
+     * @param {string} tag The `toStringTag` of the object to clone.
+     * @param {Function} cloneFunc The function to clone values.
+     * @param {boolean} [isDeep] Specify a deep clone.
+     * @returns {Object} Returns the initialized clone.
+     */
+    function initCloneByTag(object, tag, cloneFunc, isDeep) {
+      var Ctor = object.constructor;
+      switch (tag) {
+        case arrayBufferTag:
+          return cloneArrayBuffer(object);
+
+        case boolTag:
+        case dateTag:
+          return new Ctor(+object);
+
+        case dataViewTag:
+          return cloneDataView(object, isDeep);
+
+        case float32Tag: case float64Tag:
+        case int8Tag: case int16Tag: case int32Tag:
+        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
+          return cloneTypedArray(object, isDeep);
+
+        case mapTag:
+          return cloneMap(object, isDeep, cloneFunc);
+
+        case numberTag:
+        case stringTag:
+          return new Ctor(object);
+
+        case regexpTag:
+          return cloneRegExp(object);
+
+        case setTag:
+          return cloneSet(object, isDeep, cloneFunc);
+
+        case symbolTag:
+          return cloneSymbol(object);
+      }
+    }
+
+    /**
+     * Inserts wrapper `details` in a comment at the top of the `source` body.
+     *
+     * @private
+     * @param {string} source The source to modify.
+     * @returns {Array} details The details to insert.
+     * @returns {string} Returns the modified source.
+     */
+    function insertWrapDetails(source, details) {
+      var length = details.length;
+      if (!length) {
+        return source;
+      }
+      var lastIndex = length - 1;
+      details[lastIndex] = (length > 1 ? '& ' : '') + 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) {
+      length = length == null ? MAX_SAFE_INTEGER : length;
+      return !!length &&
+        (typeof value == 'number' || reIsUint.test(value)) &&
+        (value > -1 && value % 1 == 0 && value < length);
+    }
+
+    /**
+     * Checks if the given arguments are from an iteratee call.
+     *
+     * @private
+     * @param {*} value The potential iteratee value argument.
+     * @param {*} index The potential iteratee index or key argument.
+     * @param {*} object The potential iteratee object argument.
+     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
+     *  else `false`.
+     */
+    function isIterateeCall(value, index, object) {
+      if (!isObject(object)) {
+        return false;
+      }
+      var type = typeof index;
+      if (type == 'number'
+            ? (isArrayLike(object) && isIndex(index, object.length))
+            : (type == 'string' && index in object)
+          ) {
+        return eq(object[index], value);
+      }
+      return false;
+    }
+
+    /**
+     * Checks if `value` is a property name and not a property path.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @param {Object} [object] The object to query keys on.
+     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
+     */
+    function isKey(value, object) {
+      if (isArray(value)) {
+        return false;
+      }
+      var type = typeof value;
+      if (type == 'number' || type == 'symbol' || type == 'boolean' ||
+          value == null || isSymbol(value)) {
+        return true;
+      }
+      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
+        (object != null && value in Object(object));
+    }
+
+    /**
+     * Checks if `value` is suitable for use as unique object key.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+     */
+    function isKeyable(value) {
+      var type = typeof value;
+      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
+        ? (value !== '__proto__')
+        : (value === null);
+    }
+
+    /**
+     * Checks if `func` has a lazy counterpart.
+     *
+     * @private
+     * @param {Function} func The function to check.
+     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
+     *  else `false`.
+     */
+    function isLaziable(func) {
+      var funcName = getFuncName(func),
+          other = lodash[funcName];
+
+      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
+        return false;
+      }
+      if (func === other) {
+        return true;
+      }
+      var data = getData(other);
+      return !!data && func === data[0];
+    }
+
+    /**
+     * Checks if `func` has its source masked.
+     *
+     * @private
+     * @param {Function} func The function to check.
+     * @returns {boolean} Returns `true` if `func` is masked, else `false`.
+     */
+    function isMasked(func) {
+      return !!maskSrcKey && (maskSrcKey in func);
+    }
+
+    /**
+     * Checks if `func` is capable of being masked.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.
+     */
+    var isMaskable = coreJsData ? isFunction : stubFalse;
+
+    /**
+     * Checks if `value` is likely a prototype object.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
+     */
+    function isPrototype(value) {
+      var Ctor = value && value.constructor,
+          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
+
+      return value === proto;
+    }
+
+    /**
+     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` if suitable for strict
+     *  equality comparisons, else `false`.
+     */
+    function isStrictComparable(value) {
+      return value === value && !isObject(value);
+    }
+
+    /**
+     * A specialized version of `matchesProperty` for source values suitable
+     * for strict equality comparisons, i.e. `===`.
+     *
+     * @private
+     * @param {string} key The key of the property to get.
+     * @param {*} srcValue The value to match.
+     * @returns {Function} Returns the new spec function.
+     */
+    function matchesStrictComparable(key, srcValue) {
+      return function(object) {
+        if (object == null) {
+          return false;
+        }
+        return object[key] === srcValue &&
+          (srcValue !== undefined || (key in Object(object)));
+      };
+    }
+
+    /**
+     * A specialized version of `_.memoize` which clears the memoized function's
+     * cache when it exceeds `MAX_MEMOIZE_SIZE`.
+     *
+     * @private
+     * @param {Function} func The function to have its output memoized.
+     * @returns {Function} Returns the new memoized function.
+     */
+    function memoizeCapped(func) {
+      var result = memoize(func, function(key) {
+        if (cache.size === MAX_MEMOIZE_SIZE) {
+          cache.clear();
+        }
+        return key;
+      });
+
+      var cache = result.cache;
+      return result;
+    }
+
+    /**
+     * Merges the function metadata of `source` into `data`.
+     *
+     * Merging metadata reduces the number of wrappers used to invoke a function.
+     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
+     * may be applied regardless of execution order. Methods like `_.ary` and
+     * `_.rearg` modify function arguments, making the order in which they are
+     * executed important, preventing the merging of metadata. However, we make
+     * an exception for a safe combined case where curried functions have `_.ary`
+     * and or `_.rearg` applied.
+     *
+     * @private
+     * @param {Array} data The destination metadata.
+     * @param {Array} source The source metadata.
+     * @returns {Array} Returns `data`.
+     */
+    function mergeData(data, source) {
+      var bitmask = data[1],
+          srcBitmask = source[1],
+          newBitmask = bitmask | srcBitmask,
+          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
+
+      var isCombo =
+        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
+        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
+        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));
+
+      // Exit early if metadata can't be merged.
+      if (!(isCommon || isCombo)) {
+        return data;
+      }
+      // Use source `thisArg` if available.
+      if (srcBitmask & WRAP_BIND_FLAG) {
+        data[2] = source[2];
+        // Set when currying a bound function.
+        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
+      }
+      // Compose partial arguments.
+      var value = source[3];
+      if (value) {
+        var partials = data[3];
+        data[3] = partials ? composeArgs(partials, value, source[4]) : value;
+        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
+      }
+      // Compose partial right arguments.
+      value = source[5];
+      if (value) {
+        partials = data[5];
+        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
+        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
+      }
+      // Use source `argPos` if available.
+      value = source[7];
+      if (value) {
+        data[7] = value;
+      }
+      // Use source `ary` if it's smaller.
+      if (srcBitmask & WRAP_ARY_FLAG) {
+        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
+      }
+      // Use source `arity` if one is not provided.
+      if (data[9] == null) {
+        data[9] = source[9];
+      }
+      // Use source `func` and merge bitmasks.
+      data[0] = source[0];
+      data[1] = newBitmask;
+
+      return data;
+    }
+
+    /**
+     * This function is like
+     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
+     * except that it includes inherited enumerable properties.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of property names.
+     */
+    function nativeKeysIn(object) {
+      var result = [];
+      if (object != null) {
+        for (var key in Object(object)) {
+          result.push(key);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * Converts `value` to a string using `Object.prototype.toString`.
+     *
+     * @private
+     * @param {*} value The value to convert.
+     * @returns {string} Returns the converted string.
+     */
+    function objectToString(value) {
+      return nativeObjectToString.call(value);
+    }
+
+    /**
+     * A specialized version of `baseRest` which transforms the rest array.
+     *
+     * @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.
+     * @param {Function} transform The rest array transform.
+     * @returns {Function} Returns the new function.
+     */
+    function overRest(func, start, transform) {
+      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
+      return function() {
+        var args = arguments,
+            index = -1,
+            length = nativeMax(args.length - start, 0),
+            array = Array(length);
+
+        while (++index < length) {
+          array[index] = args[start + index];
+        }
+        index = -1;
+        var otherArgs = Array(start + 1);
+        while (++index < start) {
+          otherArgs[index] = args[index];
+        }
+        otherArgs[start] = transform(array);
+        return apply(func, this, otherArgs);
+      };
+    }
+
+    /**
+     * Gets the parent value at `path` of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @param {Array} path The path to get the parent value of.
+     * @returns {*} Returns the parent value.
+     */
+    function parent(object, path) {
+      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
+    }
+
+    /**
+     * Reorder `array` according to the specified indexes where the element at
+     * the first index is assigned as the first element, the element at
+     * the second index is assigned as the second element, and so on.
+     *
+     * @private
+     * @param {Array} array The array to reorder.
+     * @param {Array} indexes The arranged array indexes.
+     * @returns {Array} Returns `array`.
+     */
+    function reorder(array, indexes) {
+      var arrLength = array.length,
+          length = nativeMin(indexes.length, arrLength),
+          oldArray = copyArray(array);
+
+      while (length--) {
+        var index = indexes[length];
+        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
+      }
+      return array;
+    }
+
+    /**
+     * Sets metadata for `func`.
+     *
+     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
+     * period of time, it will trip its breaker and transition to an identity
+     * function to avoid garbage collection pauses in V8. See
+     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
+     * for more details.
+     *
+     * @private
+     * @param {Function} func The function to associate metadata with.
+     * @param {*} data The metadata.
+     * @returns {Function} Returns `func`.
+     */
+    var setData = shortOut(baseSetData);
+
+    /**
+     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
+     *
+     * @private
+     * @param {Function} func The function to delay.
+     * @param {number} wait The number of milliseconds to delay invocation.
+     * @returns {number|Object} Returns the timer id or timeout object.
+     */
+    var setTimeout = ctxSetTimeout || function(func, wait) {
+      return root.setTimeout(func, wait);
+    };
+
+    /**
+     * Sets the `toString` method of `func` to return `string`.
+     *
+     * @private
+     * @param {Function} func The function to modify.
+     * @param {Function} string The `toString` result.
+     * @returns {Function} Returns `func`.
+     */
+    var setToString = shortOut(baseSetToString);
+
+    /**
+     * Sets the `toString` method of `wrapper` to mimic the source of `reference`
+     * with wrapper details in a comment at the top of the source body.
+     *
+     * @private
+     * @param {Function} wrapper The function to modify.
+     * @param {Function} reference The reference function.
+     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+     * @returns {Function} Returns `wrapper`.
+     */
+    function setWrapToString(wrapper, reference, bitmask) {
+      var source = (reference + '');
+      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
+    }
+
+    /**
+     * Creates a function that'll short out and invoke `identity` instead
+     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
+     * milliseconds.
+     *
+     * @private
+     * @param {Function} func The function to restrict.
+     * @returns {Function} Returns the new shortable function.
+     */
+    function shortOut(func) {
+      var count = 0,
+          lastCalled = 0;
+
+      return function() {
+        var stamp = nativeNow(),
+            remaining = HOT_SPAN - (stamp - lastCalled);
+
+        lastCalled = stamp;
+        if (remaining > 0) {
+          if (++count >= HOT_COUNT) {
+            return arguments[0];
+          }
+        } else {
+          count = 0;
+        }
+        return func.apply(undefined, 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 ? length : size;
+      while (++index < size) {
+        var rand = baseRandom(index, lastIndex),
+            value = array[rand];
+
+        array[rand] = array[index];
+        array[index] = value;
+      }
+      array.length = size;
+      return array;
+    }
+
+    /**
+     * Converts `string` to a property path array.
+     *
+     * @private
+     * @param {string} string The string to convert.
+     * @returns {Array} Returns the property path array.
+     */
+    var stringToPath = memoizeCapped(function(string) {
+      var result = [];
+      if (reLeadingDot.test(string)) {
+        result.push('');
+      }
+      string.replace(rePropName, function(match, number, quote, string) {
+        result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
+      });
+      return result;
+    });
+
+    /**
+     * Converts `value` to a string key if it's not a string or symbol.
+     *
+     * @private
+     * @param {*} value The value to inspect.
+     * @returns {string|symbol} Returns the key.
+     */
+    function toKey(value) {
+      if (typeof value == 'string' || isSymbol(value)) {
+        return value;
+      }
+      var result = (value + '');
+      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+    }
+
+    /**
+     * Converts `func` to its source code.
+     *
+     * @private
+     * @param {Function} func The function to convert.
+     * @returns {string} Returns the source code.
+     */
+    function toSource(func) {
+      if (func != null) {
+        try {
+          return funcToString.call(func);
+        } catch (e) {}
+        try {
+          return (func + '');
+        } catch (e) {}
+      }
+      return '';
+    }
+
+    /**
+     * Updates wrapper `details` based on `bitmask` flags.
+     *
+     * @private
+     * @returns {Array} details The details to modify.
+     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+     * @returns {Array} Returns `details`.
+     */
+    function updateWrapDetails(details, bitmask) {
+      arrayEach(wrapFlags, function(pair) {
+        var value = '_.' + pair[0];
+        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
+          details.push(value);
+        }
+      });
+      return details.sort();
+    }
+
+    /**
+     * Creates a clone of `wrapper`.
+     *
+     * @private
+     * @param {Object} wrapper The wrapper to clone.
+     * @returns {Object} Returns the cloned wrapper.
+     */
+    function wrapperClone(wrapper) {
+      if (wrapper instanceof LazyWrapper) {
+        return wrapper.clone();
+      }
+      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
+      result.__actions__ = copyArray(wrapper.__actions__);
+      result.__index__  = wrapper.__index__;
+      result.__values__ = wrapper.__values__;
+      return result;
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates an array of elements split into groups the length of `size`.
+     * If `array` can't be split evenly, the final chunk will be the remaining
+     * elements.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.0.0
+     * @category Array
+     * @param {Array} array The array to process.
+     * @param {number} [size=1] The length of each chunk
+     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+     * @returns {Array} Returns the new array of chunks.
+     * @example
+     *
+     * _.chunk(['a', 'b', 'c', 'd'], 2);
+     * // => [['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)) {
+        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 < length) {
+        result[resIndex++] = baseSlice(array, index, (index += size));
+      }
+      return result;
+    }
+
+    /**
+     * Creates an array with all falsey values removed. The values `false`, `null`,
+     * `0`, `""`, `undefined`, and `NaN` are falsey.
+     *
+     * @static
+     * @memberOf _
+     * @since 0.1.0
+     * @category Array
+     * @param {Array} array The array to compact.
+     * @returns {Array} Returns the new array of filtered values.
+     * @example
+     *
+     * _.compact([0, 1, false, 2, '', 3]);
+     * // => [1, 2, 3]
+     */
+    function compact(array) {
+      var index = -1,
+          length = array == null ? 0 : array.length,
+          resIndex = 0,
+          result = [];
+
+      while (++index < length) {
+        var value = array[index];
+        if (value) {
+          result[resIndex++] = value;
+        }
+      }
+      return result;
+    }
+
+    /**
+     * Creates a new array concatenating `array` with any additional arrays
+     * and/or values.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Array
+     * @param {Array} array The array to concatenate.
+     * @param {...*} [values] The values to concatenate.
+     * @returns {Array} Returns the new concatenated array.
+     * @example
+     *
+     * var array = [1];
+     * var other = _.concat(array, 2, [3], [[4]]);
+     *
+     * console.log(other);
+     * // => [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;
+      }
+      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;
+      }
+      return isArrayLikeObject(array)
+        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, 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 : 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 : 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) {
+        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 : 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 < length) {
+        var pair = pairs[index];
+        result[pair[0]] = pair[1];
+      }
+      return result;
+    }
+
+    /**
+     * Gets the first element of `array`.
+     *
+     * @static
+     * @memberOf _
+     * @since 0.1.0
+     * @alias first
+     * @category Array
+     * @param {Array} array The array to query.
+     * @returns {*} Returns the first element of `array`.
+     * @example
+     *
+     * _.head([1, 2, 3]);
+     * // => 1
+     *
+     * _.head([]);
+     * // => undefined
+     */
+    function head(array) {
+      return (array && array.length) ? array[0] : undefined;
+    }
+
+    /**
+     * 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;
+      } 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;
+      if (comparator) {
+        mapped.pop();
+      }
+      return (mapped.length && mapped[0] === arrays[0])
+        ? baseIntersection(mapped, undefined, 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;
+    }
+
+    /**
+     * 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) {
+        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;
+    }
+
+    /**
+     * 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, 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 < length) {
+        var value = array[index];
+        if (predicate(value, index, array)) {
+          result.push(value);
+          indexes.push(index);
+        }
+      }
+      basePullAt(array, indexes);
+      return result;
+    }
+
+    /**
+     * Reverses `array` so that the first element becomes the last, the second
+     * element becomes the second to last, and so on.
+     *
+     * **Note:** This method mutates `array` and is based on
+     * [`Array#reverse`](https://mdn.io/Array/reverse).
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Array
+     * @param {Array} array The array to modify.
+     * @returns {Array} Returns `array`.
+     * @example
+     *
+     * var array = [1, 2, 3];
+     *
+     * _.reverse(array);
+     * // => [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 ? 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 < length && eq(array[index], value)) {
+          return index;
+        }
+      }
+      return -1;
+    }
+
+    /**
+     * This method is like `_.sortedIndex` except that it returns the highest
+     * index at which `value` should be inserted into `array` in order to
+     * maintain its sort order.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.0.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
+     *
+     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);
+     * // => 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 : 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 : 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;
+      }
+      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;
+      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, 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;
+      return (array && array.length) ? baseUniq(array, undefined, 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, 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;
+      }
+      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;
+      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, 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;
+
+      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
+      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
+      });
+      return new LodashWrapper(value, this.__chain__).thru(function(array) {
+        if (length && !array.length) {
+          array.push(undefined);
+        }
+        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) {
+        this.__values__ = toArray(this.value());
+      }
+      var done = this.__index__ >= this.__values__.length,
+          value = done ? undefined : 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;
+        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
+        });
+        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;
+      }
+      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']
+     */
+    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 : 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 : 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)) {
+        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;
+      }
+      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': 40 },
+     *   { 'user': 'barney', 'age': 34 }
+     * ];
+     *
+     * _.sortBy(users, [function(o) { return o.user; }]);
+     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
+     *
+     * _.sortBy(users, ['user', 'age']);
+     * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['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 : n;
+      n = (func && n == null) ? func.length : n;
+      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, 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;
+        }
+        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 : arity;
+      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, 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 : arity;
+      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, 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;
+        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,
+            result = wait - timeSinceLastCall;
+
+        return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;
+      }
+
+      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 || (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;
+
+        // Only invoke if we have `lastArgs` which means `func` has been
+        // debounced at least once.
+        if (trailing && lastArgs) {
+          return invokeFunc(time);
+        }
+        lastArgs = lastThis = undefined;
+        return result;
+      }
+
+      function cancel() {
+        if (timerId !== undefined) {
+          clearTimeout(timerId);
+        }
+        lastInvokeTime = 0;
+        lastArgs = lastCallTime = lastThis = timerId = undefined;
+      }
+
+      function flush() {
+        return timerId === undefined ? result : trailingEdge(now());
+      }
+
+      function debounced() {
+        var time = now(),
+            isInvoking = shouldInvoke(time);
+
+        lastArgs = arguments;
+        lastThis = this;
+        lastCallTime = time;
+
+        if (isInvoking) {
+          if (timerId === undefined) {
+            return leadingEdge(lastCallTime);
+          }
+          if (maxing) {
+            // Handle invocations in a tight loop.
+            timerId = setTimeout(timerExpired, wait);
+            return invokeFunc(lastCallTime);
+          }
+        }
+        if (timerId === undefined) {
+          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 < length) {
+          args[index] = transforms[index].call(this, args[index]);
+        }
+        return apply(func, this, args);
+      });
+    });
+
+    /**
+     * Creates a function that invokes `func` with `partials` prepended to the
+     * arguments it receives. This method is like `_.bind` except it does **not**
+     * alter the `this` binding.
+     *
+     * The `_.partial.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 0.2.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 sayHelloTo = _.partial(greet, 'hello');
+     * sayHelloTo('fred');
+     * // => '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, 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, 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, undefined, undefined, 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 ? 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 '<p>' + func(text) + '</p>';
+     * });
+     *
+     * p('fred, barney, & pebbles');
+     * // => '<p>fred, barney, &amp; pebbles</p>'
+     */
+    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;
+      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;
+      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('<body>');
+     * // => 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;
+      var result = customizer ? customizer(value, other) : undefined;
+      return result === undefined ? baseIsEqual(value, other, undefined, 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;
+      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;
+    }
+
+    /**
+     * 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 = value.replace(reTrim, '');
+      var isBinary = reIsBinary.test(value);
+      return (isBinary || reIsOctal.test(value))
+        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
+        : (reIsBadHex.test(value) ? NAN : +value);
+    }
+
+    /**
+     * 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(args) {
+      args.push(undefined, customDefaultsAssignIn);
+      return apply(assignInWith, undefined, args);
+    });
+
+    /**
+     * This method is like `_.defaults` except that it recursively assigns
+     * default properties.
+     *
+     * **Note:** This method mutates `object`.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.10.0
+     * @category Object
+     * @param {Object} object The destination object.
+     * @param {...Object} [sources] The source objects.
+     * @returns {Object} Returns `object`.
+     * @see _.defaults
+     * @example
+     *
+     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
+     * // => { 'a': { 'b': 2, 'c': 3 } }
+     */
+    var defaultsDeep = baseRest(function(args) {
+      args.push(undefined, customDefaultsMerge);
+      return apply(mergeWith, undefined, 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 : baseGet(object, path);
+      return result === undefined ? 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) {
+      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 (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;
+      }
+      while (++index < length) {
+        var value = object == null ? undefined : object[toKey(path[index])];
+        if (value === undefined) {
+          index = length;
+          value = defaultValue;
+        }
+        object = isFunction(value) ? value.call(object) : value;
+      }
+      return object;
+    }
+
+    /**
+     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
+     * it's created. Arrays are created for missing index properties while objects
+     * are created for all other missing properties. Use `_.setWith` to customize
+     * `path` creation.
+     *
+     * **Note:** This method mutates `object`.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.7.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.
+     * @returns {Object} Returns `object`.
+     * @example
+     *
+     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+     *
+     * _.set(object, 'a[0].b.c', 4);
+     * console.log(object.a[0].b.c);
+     * // => 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;
+      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;
+      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) {
+        upper = lower;
+        lower = undefined;
+      }
+      if (upper !== undefined) {
+        upper = toNumber(upper);
+        upper = upper === upper ? upper : 0;
+      }
+      if (lower !== undefined) {
+        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) {
+        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;
+      }
+      if (floating === undefined) {
+        if (typeof upper == 'boolean') {
+          floating = upper;
+          upper = undefined;
+        }
+        else if (typeof lower == 'boolean') {
+          floating = lower;
+          lower = undefined;
+        }
+      }
+      if (lower === undefined && upper === undefined) {
+        lower = 0;
+        upper = 1;
+      }
+      else {
+        lower = toFinite(lower);
+        if (upper === undefined) {
+          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
+        ? 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, &amp; 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 < length)
+        ? (string + createPadding(length - strLength, chars))
+        : string;
+    }
+
+    /**
+     * Pads `string` on the left 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
+     *
+     * _.padStart('abc', 6);
+     * // => '   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 < length)
+        ? (createPadding(length - strLength, chars) + string)
+        : string;
+    }
+
+    /**
+     * Converts `string` to an integer of the specified radix. If `radix` is
+     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a
+     * hexadecimal, in which case a `radix` of `16` is used.
+     *
+     * **Note:** This method aligns with the
+     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
+     *
+     * @static
+     * @memberOf _
+     * @since 1.1.0
+     * @category String
+     * @param {string} string The string to convert.
+     * @param {number} [radix=10] The radix to interpret `value` by.
+     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+     * @returns {number} Returns the converted integer.
+     * @example
+     *
+     * _.parseInt('08');
+     * // => 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)) {
+        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;
+      }
+      limit = limit === undefined ? 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('<b><%- value %></b>');
+     * compiled({ 'value': '<script>' });
+     * // => '<b>&lt;script&gt;</b>'
+     *
+     * // Use the "evaluate" delimiter to execute JavaScript and generate HTML.
+     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
+     * compiled({ 'users': ['fred', 'barney'] });
+     * // => '<li>fred</li><li>barney</li>'
+     *
+     * // Use the internal `print` function in "evaluate" delimiters.
+     * var compiled = _.template('<% print("hello " + user); %>!');
+     * compiled({ 'user': 'barney' });
+     * // => 'hello barney!'
+     *
+     * // Use the ES template literal delimiter as an "interpolate" delimiter.
+     * // Disable support by replacing the "interpolate" delimiter.
+     * var compiled = _.template('hello ${ user }!');
+     * compiled({ 'user': 'pebbles' });
+     * // => 'hello pebbles!'
+     *
+     * // Use backslashes to treat delimiters as plain text.
+     * var compiled = _.template('<%= "\\<%- value %\\>" %>');
+     * compiled({ 'value': 'ignored' });
+     * // => '<%- value %>'
+     *
+     * // Use the `imports` option to import `jQuery` as `jq`.
+     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
+     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
+     * compiled({ 'users': ['fred', 'barney'] });
+     * // => '<li>fred</li><li>barney</li>'
+     *
+     * // Use the `sourceURL` option to specify a custom sourceURL for the template.
+     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
+     * compiled(data);
+     * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector.
+     *
+     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.
+     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
+     * compiled.source;
+     * // => function(data) {
+     * //   var __t, __p = '';
+     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
+     * //   return __p;
+     * // }
+     *
+     * // Use custom template delimiters.
+     * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
+     * var compiled = _.template('hello {{ user }}!');
+     * compiled({ 'user': 'mustache' });
+     * // => 'hello mustache!'
+     *
+     * // Use the `source` property to inline compiled templates for meaningful
+     * // line numbers in error messages and stack traces.
+     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\
+     *   var JST = {\
+     *     "main": ' + _.template(mainText).source + '\
+     *   };\
+     * ');
+     */
+    function template(string, options, guard) {
+      // Based on John Resig's `tmpl` implementation
+      // (http://ejohn.org/blog/javascript-micro-templating/)
+      // and Laura Doktorova's doT.js (https://github.com/olado/doT).
+      var settings = lodash.templateSettings;
+
+      if (guard && isIterateeCall(string, options, guard)) {
+        options = undefined;
+      }
+      string = toString(string);
+      options = assignInWith({}, options, settings, customDefaultsAssignIn);
+
+      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
+          importsKeys = keys(imports),
+          importsValues = baseValues(imports, importsKeys);
+
+      var isEscaping,
+          isEvaluating,
+          index = 0,
+          interpolate = options.interpolate || reNoMatch,
+          source = "__p += '";
+
+      // Compile the regexp to match each delimiter.
+      var reDelimiters = RegExp(
+        (options.escape || reNoMatch).source + '|' +
+        interpolate.source + '|' +
+        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
+        (options.evaluate || reNoMatch).source + '|$'
+      , 'g');
+
+      // Use a sourceURL for easier debugging.
+      var sourceURL = '//# sourceURL=' +
+        ('sourceURL' in options
+          ? options.sourceURL
+          : ('lodash.templateSources[' + (++templateCounter) + ']')
+        ) + '\n';
+
+      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
+        interpolateValue || (interpolateValue = esTemplateValue);
+
+        // Escape characters that can't be included in string literals.
+        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);
+
+        // Replace delimiters with snippets.
+        if (escapeValue) {
+          isEscaping = true;
+          source += "' +\n__e(" + escapeValue + ") +\n'";
+        }
+        if (evaluateValue) {
+          isEvaluating = true;
+          source += "';\n" + evaluateValue + ";\n__p += '";
+        }
+        if (interpolateValue) {
+          source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
+        }
+        index = offset + match.length;
+
+        // The JS engine embedded in Adobe products needs `match` returned in
+        // order to produce the correct `offset` value.
+        return match;
+      });
+
+      source += "';\n";
+
+      // If `variable` is not specified wrap a with-statement around the generated
+      // code to add the data object to the top of the scope chain.
+      var variable = options.variable;
+      if (!variable) {
+        source = 'with (obj) {\n' + source + '\n}\n';
+      }
+      // Cleanup code by stripping empty strings.
+      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
+        .replace(reEmptyStringMiddle, '$1')
+        .replace(reEmptyStringTrailing, '$1;');
+
+      // Frame code as the function body.
+      source = 'function(' + (variable || 'obj') + ') {\n' +
+        (variable
+          ? ''
+          : 'obj || (obj = {});\n'
+        ) +
+        "var __t, __p = ''" +
+        (isEscaping
+           ? ', __e = _.escape'
+           : ''
+        ) +
+        (isEvaluating
+          ? ', __j = Array.prototype.join;\n' +
+            "function print() { __p += __j.call(arguments, '') }\n"
+          : ';\n'
+        ) +
+        source +
+        'return __p\n}';
+
+      var result = attempt(function() {
+        return Function(importsKeys, sourceURL + 'return ' + source)
+          .apply(undefined, importsValues);
+      });
+
+      // Provide the compiled function's source by its `toString` method or
+      // the `source` property as a convenience for inlining compiled templates.
+      result.source = source;
+      if (isError(result)) {
+        throw result;
+      }
+      return result;
+    }
+
+    /**
+     * Converts `string`, as a whole, to lower case just like
+     * [String#toLowerCase](https://mdn.io/toLowerCase).
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category String
+     * @param {string} [string=''] The string to convert.
+     * @returns {string} Returns the lower cased string.
+     * @example
+     *
+     * _.toLower('--Foo-Bar--');
+     * // => '--foo-bar--'
+     *
+     * _.toLower('fooBar');
+     * // => 'foobar'
+     *
+     * _.toLower('__FOO_BAR__');
+     * // => '__foo_bar__'
+     */
+    function toLower(value) {
+      return toString(value).toLowerCase();
+    }
+
+    /**
+     * Converts `string`, as a whole, to upper case just like
+     * [String#toUpperCase](https://mdn.io/toUpperCase).
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category String
+     * @param {string} [string=''] The string to convert.
+     * @returns {string} Returns the upper cased string.
+     * @example
+     *
+     * _.toUpper('--foo-bar--');
+     * // => '--FOO-BAR--'
+     *
+     * _.toUpper('fooBar');
+     * // => 'FOOBAR'
+     *
+     * _.toUpper('__foo_bar__');
+     * // => '__FOO_BAR__'
+     */
+    function toUpper(value) {
+      return toString(value).toUpperCase();
+    }
+
+    /**
+     * Removes leading and trailing whitespace or specified characters from `string`.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.0.0
+     * @category String
+     * @param {string} [string=''] The string to trim.
+     * @param {string} [chars=whitespace] The characters to trim.
+     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+     * @returns {string} Returns the trimmed string.
+     * @example
+     *
+     * _.trim('  abc  ');
+     * // => 'abc'
+     *
+     * _.trim('-_-abc-_-', '_-');
+     * // => 'abc'
+     *
+     * _.map(['  foo  ', '  bar  '], _.trim);
+     * // => ['foo', 'bar']
+     */
+    function trim(string, chars, guard) {
+      string = toString(string);
+      if (string && (guard || chars === undefined)) {
+        return string.replace(reTrim, '');
+      }
+      if (!string || !(chars = baseToString(chars))) {
+        return string;
+      }
+      var strSymbols = stringToArray(string),
+          chrSymbols = stringToArray(chars),
+          start = charsStartIndex(strSymbols, chrSymbols),
+          end = charsEndIndex(strSymbols, chrSymbols) + 1;
+
+      return castSlice(strSymbols, start, end).join('');
+    }
+
+    /**
+     * Removes trailing whitespace or specified characters from `string`.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category String
+     * @param {string} [string=''] The string to trim.
+     * @param {string} [chars=whitespace] The characters to trim.
+     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+     * @returns {string} Returns the trimmed string.
+     * @example
+     *
+     * _.trimEnd('  abc  ');
+     * // => '  abc'
+     *
+     * _.trimEnd('-_-abc-_-', '_-');
+     * // => '-_-abc'
+     */
+    function trimEnd(string, chars, guard) {
+      string = toString(string);
+      if (string && (guard || chars === undefined)) {
+        return string.replace(reTrimEnd, '');
+      }
+      if (!string || !(chars = baseToString(chars))) {
+        return string;
+      }
+      var strSymbols = stringToArray(string),
+          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;
+
+      return castSlice(strSymbols, 0, end).join('');
+    }
+
+    /**
+     * Removes leading whitespace or specified characters from `string`.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category String
+     * @param {string} [string=''] The string to trim.
+     * @param {string} [chars=whitespace] The characters to trim.
+     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+     * @returns {string} Returns the trimmed string.
+     * @example
+     *
+     * _.trimStart('  abc  ');
+     * // => 'abc  '
+     *
+     * _.trimStart('-_-abc-_-', '_-');
+     * // => 'abc-_-'
+     */
+    function trimStart(string, chars, guard) {
+      string = toString(string);
+      if (string && (guard || chars === undefined)) {
+        return string.replace(reTrimStart, '');
+      }
+      if (!string || !(chars = baseToString(chars))) {
+        return string;
+      }
+      var strSymbols = stringToArray(string),
+          start = charsStartIndex(strSymbols, stringToArray(chars));
+
+      return castSlice(strSymbols, start).join('');
+    }
+
+    /**
+     * Truncates `string` if it's longer than the given maximum string length.
+     * The last characters of the truncated string are replaced with the omission
+     * string which defaults to "...".
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category String
+     * @param {string} [string=''] The string to truncate.
+     * @param {Object} [options={}] The options object.
+     * @param {number} [options.length=30] The maximum string length.
+     * @param {string} [options.omission='...'] The string to indicate text is omitted.
+     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
+     * @returns {string} Returns the truncated string.
+     * @example
+     *
+     * _.truncate('hi-diddly-ho there, neighborino');
+     * // => 'hi-diddly-ho there, neighbo...'
+     *
+     * _.truncate('hi-diddly-ho there, neighborino', {
+     *   'length': 24,
+     *   'separator': ' '
+     * });
+     * // => 'hi-diddly-ho there,...'
+     *
+     * _.truncate('hi-diddly-ho there, neighborino', {
+     *   'length': 24,
+     *   'separator': /,? +/
+     * });
+     * // => 'hi-diddly-ho there...'
+     *
+     * _.truncate('hi-diddly-ho there, neighborino', {
+     *   'omission': ' [...]'
+     * });
+     * // => 'hi-diddly-ho there, neig [...]'
+     */
+    function truncate(string, options) {
+      var length = DEFAULT_TRUNC_LENGTH,
+          omission = DEFAULT_TRUNC_OMISSION;
+
+      if (isObject(options)) {
+        var separator = 'separator' in options ? options.separator : separator;
+        length = 'length' in options ? toInteger(options.length) : length;
+        omission = 'omission' in options ? baseToString(options.omission) : omission;
+      }
+      string = toString(string);
+
+      var strLength = string.length;
+      if (hasUnicode(string)) {
+        var strSymbols = stringToArray(string);
+        strLength = strSymbols.length;
+      }
+      if (length >= strLength) {
+        return string;
+      }
+      var end = length - stringSize(omission);
+      if (end < 1) {
+        return omission;
+      }
+      var result = strSymbols
+        ? castSlice(strSymbols, 0, end).join('')
+        : string.slice(0, end);
+
+      if (separator === undefined) {
+        return result + omission;
+      }
+      if (strSymbols) {
+        end += (result.length - end);
+      }
+      if (isRegExp(separator)) {
+        if (string.slice(end).search(separator)) {
+          var match,
+              substring = result;
+
+          if (!separator.global) {
+            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
+          }
+          separator.lastIndex = 0;
+          while ((match = separator.exec(substring))) {
+            var newEnd = match.index;
+          }
+          result = result.slice(0, newEnd === undefined ? end : newEnd);
+        }
+      } else if (string.indexOf(baseToString(separator), end) != end) {
+        var index = result.lastIndexOf(separator);
+        if (index > -1) {
+          result = result.slice(0, index);
+        }
+      }
+      return result + omission;
+    }
+
+    /**
+     * The inverse of `_.escape`; this method converts the HTML entities
+     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to
+     * their corresponding characters.
+     *
+     * **Note:** No other HTML entities are unescaped. To unescape additional
+     * HTML entities use a third-party library like [_he_](https://mths.be/he).
+     *
+     * @static
+     * @memberOf _
+     * @since 0.6.0
+     * @category String
+     * @param {string} [string=''] The string to unescape.
+     * @returns {string} Returns the unescaped string.
+     * @example
+     *
+     * _.unescape('fred, barney, &amp; pebbles');
+     * // => 'fred, barney, & pebbles'
+     */
+    function unescape(string) {
+      string = toString(string);
+      return (string && reHasEscapedHtml.test(string))
+        ? string.replace(reEscapedHtml, unescapeHtmlChar)
+        : string;
+    }
+
+    /**
+     * Converts `string`, as space separated words, to upper case.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category String
+     * @param {string} [string=''] The string to convert.
+     * @returns {string} Returns the upper cased string.
+     * @example
+     *
+     * _.upperCase('--foo-bar');
+     * // => 'FOO BAR'
+     *
+     * _.upperCase('fooBar');
+     * // => 'FOO BAR'
+     *
+     * _.upperCase('__foo_bar__');
+     * // => 'FOO BAR'
+     */
+    var upperCase = createCompounder(function(result, word, index) {
+      return result + (index ? ' ' : '') + word.toUpperCase();
+    });
+
+    /**
+     * Converts the first character of `string` to upper case.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category String
+     * @param {string} [string=''] The string to convert.
+     * @returns {string} Returns the converted string.
+     * @example
+     *
+     * _.upperFirst('fred');
+     * // => 'Fred'
+     *
+     * _.upperFirst('FRED');
+     * // => 'FRED'
+     */
+    var upperFirst = createCaseFirst('toUpperCase');
+
+    /**
+     * Splits `string` into an array of its words.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.0.0
+     * @category String
+     * @param {string} [string=''] The string to inspect.
+     * @param {RegExp|string} [pattern] The pattern to match words.
+     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+     * @returns {Array} Returns the words of `string`.
+     * @example
+     *
+     * _.words('fred, barney, & pebbles');
+     * // => ['fred', 'barney', 'pebbles']
+     *
+     * _.words('fred, barney, & pebbles', /[^, ]+/g);
+     * // => ['fred', 'barney', '&', 'pebbles']
+     */
+    function words(string, pattern, guard) {
+      string = toString(string);
+      pattern = guard ? undefined : pattern;
+
+      if (pattern === undefined) {
+        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
+      }
+      return string.match(pattern) || [];
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Attempts to invoke `func`, returning either the result or the caught error
+     * object. Any additional arguments are provided to `func` when it's invoked.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.0.0
+     * @category Util
+     * @param {Function} func The function to attempt.
+     * @param {...*} [args] The arguments to invoke `func` with.
+     * @returns {*} Returns the `func` result or error object.
+     * @example
+     *
+     * // Avoid throwing errors for invalid selectors.
+     * var elements = _.attempt(function(selector) {
+     *   return document.querySelectorAll(selector);
+     * }, '>_>');
+     *
+     * if (_.isError(elements)) {
+     *   elements = [];
+     * }
+     */
+    var attempt = baseRest(function(func, args) {
+      try {
+        return apply(func, undefined, args);
+      } catch (e) {
+        return isError(e) ? e : new Error(e);
+      }
+    });
+
+    /**
+     * Binds methods of an object to the object itself, overwriting the existing
+     * method.
+     *
+     * **Note:** This method doesn't set the "length" property of bound functions.
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Util
+     * @param {Object} object The object to bind and assign the bound methods to.
+     * @param {...(string|string[])} methodNames The object method names to bind.
+     * @returns {Object} Returns `object`.
+     * @example
+     *
+     * var view = {
+     *   'label': 'docs',
+     *   'click': function() {
+     *     console.log('clicked ' + this.label);
+     *   }
+     * };
+     *
+     * _.bindAll(view, ['click']);
+     * jQuery(element).on('click', view.click);
+     * // => Logs 'clicked docs' when clicked.
+     */
+    var bindAll = flatRest(function(object, methodNames) {
+      arrayEach(methodNames, function(key) {
+        key = toKey(key);
+        baseAssignValue(object, key, bind(object[key], object));
+      });
+      return object;
+    });
+
+    /**
+     * Creates a function that iterates over `pairs` and invokes the corresponding
+     * function of the first predicate to return truthy. The predicate-function
+     * pairs are invoked with the `this` binding and arguments of the created
+     * function.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Util
+     * @param {Array} pairs The predicate-function pairs.
+     * @returns {Function} Returns the new composite function.
+     * @example
+     *
+     * var func = _.cond([
+     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],
+     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
+     *   [_.stubTrue,                      _.constant('no match')]
+     * ]);
+     *
+     * func({ 'a': 1, 'b': 2 });
+     * // => 'matches A'
+     *
+     * func({ 'a': 0, 'b': 1 });
+     * // => 'matches B'
+     *
+     * func({ 'a': '1', 'b': '2' });
+     * // => 'no match'
+     */
+    function cond(pairs) {
+      var length = pairs == null ? 0 : pairs.length,
+          toIteratee = getIteratee();
+
+      pairs = !length ? [] : arrayMap(pairs, function(pair) {
+        if (typeof pair[1] != 'function') {
+          throw new TypeError(FUNC_ERROR_TEXT);
+        }
+        return [toIteratee(pair[0]), pair[1]];
+      });
+
+      return baseRest(function(args) {
+        var index = -1;
+        while (++index < length) {
+          var pair = pairs[index];
+          if (apply(pair[0], this, args)) {
+            return apply(pair[1], this, args);
+          }
+        }
+      });
+    }
+
+    /**
+     * Creates a function that invokes the predicate properties of `source` with
+     * the corresponding property values of a given object, returning `true` if
+     * all predicates return truthy, else `false`.
+     *
+     * **Note:** The created function is equivalent to `_.conformsTo` with
+     * `source` partially applied.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Util
+     * @param {Object} source The object of property predicates to conform to.
+     * @returns {Function} Returns the new spec function.
+     * @example
+     *
+     * var objects = [
+     *   { 'a': 2, 'b': 1 },
+     *   { 'a': 1, 'b': 2 }
+     * ];
+     *
+     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));
+     * // => [{ 'a': 1, 'b': 2 }]
+     */
+    function conforms(source) {
+      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
+    }
+
+    /**
+     * Creates a function that returns `value`.
+     *
+     * @static
+     * @memberOf _
+     * @since 2.4.0
+     * @category Util
+     * @param {*} value The value to return from the new function.
+     * @returns {Function} Returns the new constant function.
+     * @example
+     *
+     * var objects = _.times(2, _.constant({ 'a': 1 }));
+     *
+     * console.log(objects);
+     * // => [{ 'a': 1 }, { 'a': 1 }]
+     *
+     * console.log(objects[0] === objects[1]);
+     * // => true
+     */
+    function constant(value) {
+      return function() {
+        return value;
+      };
+    }
+
+    /**
+     * Checks `value` to determine whether a default value should be returned in
+     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
+     * or `undefined`.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.14.0
+     * @category Util
+     * @param {*} value The value to check.
+     * @param {*} defaultValue The default value.
+     * @returns {*} Returns the resolved value.
+     * @example
+     *
+     * _.defaultTo(1, 10);
+     * // => 1
+     *
+     * _.defaultTo(undefined, 10);
+     * // => 10
+     */
+    function defaultTo(value, defaultValue) {
+      return (value == null || value !== value) ? defaultValue : value;
+    }
+
+    /**
+     * Creates a function that returns the result of invoking the given functions
+     * with the `this` binding of the created function, where each successive
+     * invocation is supplied the return value of the previous.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.0.0
+     * @category Util
+     * @param {...(Function|Function[])} [funcs] The functions to invoke.
+     * @returns {Function} Returns the new composite function.
+     * @see _.flowRight
+     * @example
+     *
+     * function square(n) {
+     *   return n * n;
+     * }
+     *
+     * var addSquare = _.flow([_.add, square]);
+     * addSquare(1, 2);
+     * // => 9
+     */
+    var flow = createFlow();
+
+    /**
+     * This method is like `_.flow` except that it creates a function that
+     * invokes the given functions from right to left.
+     *
+     * @static
+     * @since 3.0.0
+     * @memberOf _
+     * @category Util
+     * @param {...(Function|Function[])} [funcs] The functions to invoke.
+     * @returns {Function} Returns the new composite function.
+     * @see _.flow
+     * @example
+     *
+     * function square(n) {
+     *   return n * n;
+     * }
+     *
+     * var addSquare = _.flowRight([square, _.add]);
+     * addSquare(1, 2);
+     * // => 9
+     */
+    var flowRight = createFlow(true);
+
+    /**
+     * This method returns the first argument it receives.
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Util
+     * @param {*} value Any value.
+     * @returns {*} Returns `value`.
+     * @example
+     *
+     * var object = { 'a': 1 };
+     *
+     * console.log(_.identity(object) === object);
+     * // => true
+     */
+    function identity(value) {
+      return value;
+    }
+
+    /**
+     * Creates a function that invokes `func` with the arguments of the created
+     * function. If `func` is a property name, the created function returns the
+     * property value for a given element. If `func` is an array or object, the
+     * created function returns `true` for elements that contain the equivalent
+     * source properties, otherwise it returns `false`.
+     *
+     * @static
+     * @since 4.0.0
+     * @memberOf _
+     * @category Util
+     * @param {*} [func=_.identity] The value to convert to a callback.
+     * @returns {Function} Returns the callback.
+     * @example
+     *
+     * var users = [
+     *   { 'user': 'barney', 'age': 36, 'active': true },
+     *   { 'user': 'fred',   'age': 40, 'active': false }
+     * ];
+     *
+     * // The `_.matches` iteratee shorthand.
+     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
+     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]
+     *
+     * // The `_.matchesProperty` iteratee shorthand.
+     * _.filter(users, _.iteratee(['user', 'fred']));
+     * // => [{ 'user': 'fred', 'age': 40 }]
+     *
+     * // The `_.property` iteratee shorthand.
+     * _.map(users, _.iteratee('user'));
+     * // => ['barney', 'fred']
+     *
+     * // Create custom iteratee shorthands.
+     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
+     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {
+     *     return func.test(string);
+     *   };
+     * });
+     *
+     * _.filter(['abc', 'def'], /ef/);
+     * // => ['def']
+     */
+    function iteratee(func) {
+      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
+    }
+
+    /**
+     * Creates a function that performs a partial deep comparison between a given
+     * object and `source`, returning `true` if the given object has equivalent
+     * property values, else `false`.
+     *
+     * **Note:** The created function is equivalent to `_.isMatch` with `source`
+     * 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 Util
+     * @param {Object} source The object of property values to match.
+     * @returns {Function} Returns the new spec function.
+     * @example
+     *
+     * var objects = [
+     *   { 'a': 1, 'b': 2, 'c': 3 },
+     *   { 'a': 4, 'b': 5, 'c': 6 }
+     * ];
+     *
+     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
+     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
+     */
+    function matches(source) {
+      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
+    }
+
+    /**
+     * Creates a function that performs a partial deep comparison between the
+     * value at `path` of a given object to `srcValue`, returning `true` if the
+     * object value is equivalent, else `false`.
+     *
+     * **Note:** Partial comparisons will match empty array and empty object
+     * `srcValue` values against any array or object value, respectively. See
+     * `_.isEqual` for a list of supported value comparisons.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.2.0
+     * @category Util
+     * @param {Array|string} path The path of the property to get.
+     * @param {*} srcValue The value to match.
+     * @returns {Function} Returns the new spec function.
+     * @example
+     *
+     * var objects = [
+     *   { 'a': 1, 'b': 2, 'c': 3 },
+     *   { 'a': 4, 'b': 5, 'c': 6 }
+     * ];
+     *
+     * _.find(objects, _.matchesProperty('a', 4));
+     * // => { 'a': 4, 'b': 5, 'c': 6 }
+     */
+    function matchesProperty(path, srcValue) {
+      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
+    }
+
+    /**
+     * Creates a function that invokes the method at `path` of a given object.
+     * Any additional arguments are provided to the invoked method.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.7.0
+     * @category Util
+     * @param {Array|string} path The path of the method to invoke.
+     * @param {...*} [args] The arguments to invoke the method with.
+     * @returns {Function} Returns the new invoker function.
+     * @example
+     *
+     * var objects = [
+     *   { 'a': { 'b': _.constant(2) } },
+     *   { 'a': { 'b': _.constant(1) } }
+     * ];
+     *
+     * _.map(objects, _.method('a.b'));
+     * // => [2, 1]
+     *
+     * _.map(objects, _.method(['a', 'b']));
+     * // => [2, 1]
+     */
+    var method = baseRest(function(path, args) {
+      return function(object) {
+        return baseInvoke(object, path, args);
+      };
+    });
+
+    /**
+     * The opposite of `_.method`; this method creates a function that invokes
+     * the method at a given path of `object`. Any additional arguments are
+     * provided to the invoked method.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.7.0
+     * @category Util
+     * @param {Object} object The object to query.
+     * @param {...*} [args] The arguments to invoke the method with.
+     * @returns {Function} Returns the new invoker function.
+     * @example
+     *
+     * var array = _.times(3, _.constant),
+     *     object = { 'a': array, 'b': array, 'c': array };
+     *
+     * _.map(['a[2]', 'c[0]'], _.methodOf(object));
+     * // => [2, 0]
+     *
+     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
+     * // => [2, 0]
+     */
+    var methodOf = baseRest(function(object, args) {
+      return function(path) {
+        return baseInvoke(object, path, args);
+      };
+    });
+
+    /**
+     * Adds all own enumerable string keyed function properties of a source
+     * object to the destination object. If `object` is a function, then methods
+     * are added to its prototype as well.
+     *
+     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
+     * avoid conflicts caused by modifying the original.
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Util
+     * @param {Function|Object} [object=lodash] The destination object.
+     * @param {Object} source The object of functions to add.
+     * @param {Object} [options={}] The options object.
+     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.
+     * @returns {Function|Object} Returns `object`.
+     * @example
+     *
+     * function vowels(string) {
+     *   return _.filter(string, function(v) {
+     *     return /[aeiou]/i.test(v);
+     *   });
+     * }
+     *
+     * _.mixin({ 'vowels': vowels });
+     * _.vowels('fred');
+     * // => ['e']
+     *
+     * _('fred').vowels().value();
+     * // => ['e']
+     *
+     * _.mixin({ 'vowels': vowels }, { 'chain': false });
+     * _('fred').vowels();
+     * // => ['e']
+     */
+    function mixin(object, source, options) {
+      var props = keys(source),
+          methodNames = baseFunctions(source, props);
+
+      if (options == null &&
+          !(isObject(source) && (methodNames.length || !props.length))) {
+        options = source;
+        source = object;
+        object = this;
+        methodNames = baseFunctions(source, keys(source));
+      }
+      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
+          isFunc = isFunction(object);
+
+      arrayEach(methodNames, function(methodName) {
+        var func = source[methodName];
+        object[methodName] = func;
+        if (isFunc) {
+          object.prototype[methodName] = function() {
+            var chainAll = this.__chain__;
+            if (chain || chainAll) {
+              var result = object(this.__wrapped__),
+                  actions = result.__actions__ = copyArray(this.__actions__);
+
+              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
+              result.__chain__ = chainAll;
+              return result;
+            }
+            return func.apply(object, arrayPush([this.value()], arguments));
+          };
+        }
+      });
+
+      return object;
+    }
+
+    /**
+     * Reverts the `_` variable to its previous value and returns a reference to
+     * the `lodash` function.
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Util
+     * @returns {Function} Returns the `lodash` function.
+     * @example
+     *
+     * var lodash = _.noConflict();
+     */
+    function noConflict() {
+      if (root._ === this) {
+        root._ = oldDash;
+      }
+      return this;
+    }
+
+    /**
+     * This method returns `undefined`.
+     *
+     * @static
+     * @memberOf _
+     * @since 2.3.0
+     * @category Util
+     * @example
+     *
+     * _.times(2, _.noop);
+     * // => [undefined, undefined]
+     */
+    function noop() {
+      // No operation performed.
+    }
+
+    /**
+     * Creates a function that gets the argument at index `n`. If `n` is negative,
+     * the nth argument from the end is returned.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Util
+     * @param {number} [n=0] The index of the argument to return.
+     * @returns {Function} Returns the new pass-thru function.
+     * @example
+     *
+     * var func = _.nthArg(1);
+     * func('a', 'b', 'c', 'd');
+     * // => 'b'
+     *
+     * var func = _.nthArg(-2);
+     * func('a', 'b', 'c', 'd');
+     * // => 'c'
+     */
+    function nthArg(n) {
+      n = toInteger(n);
+      return baseRest(function(args) {
+        return baseNth(args, n);
+      });
+    }
+
+    /**
+     * Creates a function that invokes `iteratees` with the arguments it receives
+     * and returns their results.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Util
+     * @param {...(Function|Function[])} [iteratees=[_.identity]]
+     *  The iteratees to invoke.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * var func = _.over([Math.max, Math.min]);
+     *
+     * func(1, 2, 3, 4);
+     * // => [4, 1]
+     */
+    var over = createOver(arrayMap);
+
+    /**
+     * Creates a function that checks if **all** of the `predicates` return
+     * truthy when invoked with the arguments it receives.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Util
+     * @param {...(Function|Function[])} [predicates=[_.identity]]
+     *  The predicates to check.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * var func = _.overEvery([Boolean, isFinite]);
+     *
+     * func('1');
+     * // => true
+     *
+     * func(null);
+     * // => false
+     *
+     * func(NaN);
+     * // => false
+     */
+    var overEvery = createOver(arrayEvery);
+
+    /**
+     * Creates a function that checks if **any** of the `predicates` return
+     * truthy when invoked with the arguments it receives.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Util
+     * @param {...(Function|Function[])} [predicates=[_.identity]]
+     *  The predicates to check.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * var func = _.overSome([Boolean, isFinite]);
+     *
+     * func('1');
+     * // => true
+     *
+     * func(null);
+     * // => true
+     *
+     * func(NaN);
+     * // => false
+     */
+    var overSome = createOver(arraySome);
+
+    /**
+     * Creates a function that returns the value at `path` of a given object.
+     *
+     * @static
+     * @memberOf _
+     * @since 2.4.0
+     * @category Util
+     * @param {Array|string} path The path of the property to get.
+     * @returns {Function} Returns the new accessor function.
+     * @example
+     *
+     * var objects = [
+     *   { 'a': { 'b': 2 } },
+     *   { 'a': { 'b': 1 } }
+     * ];
+     *
+     * _.map(objects, _.property('a.b'));
+     * // => [2, 1]
+     *
+     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
+     * // => [1, 2]
+     */
+    function property(path) {
+      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
+    }
+
+    /**
+     * The opposite of `_.property`; this method creates a function that returns
+     * the value at a given path of `object`.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.0.0
+     * @category Util
+     * @param {Object} object The object to query.
+     * @returns {Function} Returns the new accessor function.
+     * @example
+     *
+     * var array = [0, 1, 2],
+     *     object = { 'a': array, 'b': array, 'c': array };
+     *
+     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
+     * // => [2, 0]
+     *
+     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
+     * // => [2, 0]
+     */
+    function propertyOf(object) {
+      return function(path) {
+        return object == null ? undefined : baseGet(object, path);
+      };
+    }
+
+    /**
+     * Creates an array of numbers (positive and/or negative) progressing from
+     * `start` up to, but not including, `end`. A step of `-1` is used if a negative
+     * `start` is specified without an `end` or `step`. If `end` is not specified,
+     * it's set to `start` with `start` then set to `0`.
+     *
+     * **Note:** JavaScript follows the IEEE-754 standard for resolving
+     * floating-point values which can produce unexpected results.
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Util
+     * @param {number} [start=0] The start of the range.
+     * @param {number} end The end of the range.
+     * @param {number} [step=1] The value to increment or decrement by.
+     * @returns {Array} Returns the range of numbers.
+     * @see _.inRange, _.rangeRight
+     * @example
+     *
+     * _.range(4);
+     * // => [0, 1, 2, 3]
+     *
+     * _.range(-4);
+     * // => [0, -1, -2, -3]
+     *
+     * _.range(1, 5);
+     * // => [1, 2, 3, 4]
+     *
+     * _.range(0, 20, 5);
+     * // => [0, 5, 10, 15]
+     *
+     * _.range(0, -4, -1);
+     * // => [0, -1, -2, -3]
+     *
+     * _.range(1, 4, 0);
+     * // => [1, 1, 1]
+     *
+     * _.range(0);
+     * // => []
+     */
+    var range = createRange();
+
+    /**
+     * This method is like `_.range` except that it populates values in
+     * descending order.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Util
+     * @param {number} [start=0] The start of the range.
+     * @param {number} end The end of the range.
+     * @param {number} [step=1] The value to increment or decrement by.
+     * @returns {Array} Returns the range of numbers.
+     * @see _.inRange, _.range
+     * @example
+     *
+     * _.rangeRight(4);
+     * // => [3, 2, 1, 0]
+     *
+     * _.rangeRight(-4);
+     * // => [-3, -2, -1, 0]
+     *
+     * _.rangeRight(1, 5);
+     * // => [4, 3, 2, 1]
+     *
+     * _.rangeRight(0, 20, 5);
+     * // => [15, 10, 5, 0]
+     *
+     * _.rangeRight(0, -4, -1);
+     * // => [-3, -2, -1, 0]
+     *
+     * _.rangeRight(1, 4, 0);
+     * // => [1, 1, 1]
+     *
+     * _.rangeRight(0);
+     * // => []
+     */
+    var rangeRight = createRange(true);
+
+    /**
+     * This method returns a new empty array.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.13.0
+     * @category Util
+     * @returns {Array} Returns the new empty array.
+     * @example
+     *
+     * var arrays = _.times(2, _.stubArray);
+     *
+     * console.log(arrays);
+     * // => [[], []]
+     *
+     * console.log(arrays[0] === arrays[1]);
+     * // => false
+     */
+    function stubArray() {
+      return [];
+    }
+
+    /**
+     * This method returns `false`.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.13.0
+     * @category Util
+     * @returns {boolean} Returns `false`.
+     * @example
+     *
+     * _.times(2, _.stubFalse);
+     * // => [false, false]
+     */
+    function stubFalse() {
+      return false;
+    }
+
+    /**
+     * This method returns a new empty object.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.13.0
+     * @category Util
+     * @returns {Object} Returns the new empty object.
+     * @example
+     *
+     * var objects = _.times(2, _.stubObject);
+     *
+     * console.log(objects);
+     * // => [{}, {}]
+     *
+     * console.log(objects[0] === objects[1]);
+     * // => false
+     */
+    function stubObject() {
+      return {};
+    }
+
+    /**
+     * This method returns an empty string.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.13.0
+     * @category Util
+     * @returns {string} Returns the empty string.
+     * @example
+     *
+     * _.times(2, _.stubString);
+     * // => ['', '']
+     */
+    function stubString() {
+      return '';
+    }
+
+    /**
+     * This method returns `true`.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.13.0
+     * @category Util
+     * @returns {boolean} Returns `true`.
+     * @example
+     *
+     * _.times(2, _.stubTrue);
+     * // => [true, true]
+     */
+    function stubTrue() {
+      return true;
+    }
+
+    /**
+     * Invokes the iteratee `n` times, returning an array of the results of
+     * each invocation. The iteratee is invoked with one argument; (index).
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Util
+     * @param {number} n The number of times to invoke `iteratee`.
+     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+     * @returns {Array} Returns the array of results.
+     * @example
+     *
+     * _.times(3, String);
+     * // => ['0', '1', '2']
+     *
+     *  _.times(4, _.constant(0));
+     * // => [0, 0, 0, 0]
+     */
+    function times(n, iteratee) {
+      n = toInteger(n);
+      if (n < 1 || n > MAX_SAFE_INTEGER) {
+        return [];
+      }
+      var index = MAX_ARRAY_LENGTH,
+          length = nativeMin(n, MAX_ARRAY_LENGTH);
+
+      iteratee = getIteratee(iteratee);
+      n -= MAX_ARRAY_LENGTH;
+
+      var result = baseTimes(length, iteratee);
+      while (++index < n) {
+        iteratee(index);
+      }
+      return result;
+    }
+
+    /**
+     * Converts `value` to a property path array.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Util
+     * @param {*} value The value to convert.
+     * @returns {Array} Returns the new property path array.
+     * @example
+     *
+     * _.toPath('a.b.c');
+     * // => ['a', 'b', 'c']
+     *
+     * _.toPath('a[0].b.c');
+     * // => ['a', '0', 'b', 'c']
+     */
+    function toPath(value) {
+      if (isArray(value)) {
+        return arrayMap(value, toKey);
+      }
+      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
+    }
+
+    /**
+     * Generates a unique ID. If `prefix` is given, the ID is appended to it.
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Util
+     * @param {string} [prefix=''] The value to prefix the ID with.
+     * @returns {string} Returns the unique ID.
+     * @example
+     *
+     * _.uniqueId('contact_');
+     * // => 'contact_104'
+     *
+     * _.uniqueId();
+     * // => '105'
+     */
+    function uniqueId(prefix) {
+      var id = ++idCounter;
+      return toString(prefix) + id;
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Adds two numbers.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.4.0
+     * @category Math
+     * @param {number} augend The first number in an addition.
+     * @param {number} addend The second number in an addition.
+     * @returns {number} Returns the total.
+     * @example
+     *
+     * _.add(6, 4);
+     * // => 10
+     */
+    var add = createMathOperation(function(augend, addend) {
+      return augend + addend;
+    }, 0);
+
+    /**
+     * Computes `number` rounded up to `precision`.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.10.0
+     * @category Math
+     * @param {number} number The number to round up.
+     * @param {number} [precision=0] The precision to round up to.
+     * @returns {number} Returns the rounded up number.
+     * @example
+     *
+     * _.ceil(4.006);
+     * // => 5
+     *
+     * _.ceil(6.004, 2);
+     * // => 6.01
+     *
+     * _.ceil(6040, -2);
+     * // => 6100
+     */
+    var ceil = createRound('ceil');
+
+    /**
+     * Divide two numbers.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.7.0
+     * @category Math
+     * @param {number} dividend The first number in a division.
+     * @param {number} divisor The second number in a division.
+     * @returns {number} Returns the quotient.
+     * @example
+     *
+     * _.divide(6, 4);
+     * // => 1.5
+     */
+    var divide = createMathOperation(function(dividend, divisor) {
+      return dividend / divisor;
+    }, 1);
+
+    /**
+     * Computes `number` rounded down to `precision`.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.10.0
+     * @category Math
+     * @param {number} number The number to round down.
+     * @param {number} [precision=0] The precision to round down to.
+     * @returns {number} Returns the rounded down number.
+     * @example
+     *
+     * _.floor(4.006);
+     * // => 4
+     *
+     * _.floor(0.046, 2);
+     * // => 0.04
+     *
+     * _.floor(4060, -2);
+     * // => 4000
+     */
+    var floor = createRound('floor');
+
+    /**
+     * Computes the maximum value of `array`. If `array` is empty or falsey,
+     * `undefined` is returned.
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Math
+     * @param {Array} array The array to iterate over.
+     * @returns {*} Returns the maximum value.
+     * @example
+     *
+     * _.max([4, 2, 8, 6]);
+     * // => 8
+     *
+     * _.max([]);
+     * // => undefined
+     */
+    function max(array) {
+      return (array && array.length)
+        ? baseExtremum(array, identity, baseGt)
+        : undefined;
+    }
+
+    /**
+     * This method is like `_.max` except that it accepts `iteratee` which is
+     * invoked for each element in `array` to generate the criterion by which
+     * the value is ranked. The iteratee is invoked with one argument: (value).
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Math
+     * @param {Array} array The array to iterate over.
+     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+     * @returns {*} Returns the maximum value.
+     * @example
+     *
+     * var objects = [{ 'n': 1 }, { 'n': 2 }];
+     *
+     * _.maxBy(objects, function(o) { return o.n; });
+     * // => { 'n': 2 }
+     *
+     * // The `_.property` iteratee shorthand.
+     * _.maxBy(objects, 'n');
+     * // => { 'n': 2 }
+     */
+    function maxBy(array, iteratee) {
+      return (array && array.length)
+        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)
+        : undefined;
+    }
+
+    /**
+     * Computes the mean of the values in `array`.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Math
+     * @param {Array} array The array to iterate over.
+     * @returns {number} Returns the mean.
+     * @example
+     *
+     * _.mean([4, 2, 8, 6]);
+     * // => 5
+     */
+    function mean(array) {
+      return baseMean(array, identity);
+    }
+
+    /**
+     * This method is like `_.mean` except that it accepts `iteratee` which is
+     * invoked for each element in `array` to generate the value to be averaged.
+     * The iteratee is invoked with one argument: (value).
+     *
+     * @static
+     * @memberOf _
+     * @since 4.7.0
+     * @category Math
+     * @param {Array} array The array to iterate over.
+     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+     * @returns {number} Returns the mean.
+     * @example
+     *
+     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
+     *
+     * _.meanBy(objects, function(o) { return o.n; });
+     * // => 5
+     *
+     * // The `_.property` iteratee shorthand.
+     * _.meanBy(objects, 'n');
+     * // => 5
+     */
+    function meanBy(array, iteratee) {
+      return baseMean(array, getIteratee(iteratee, 2));
+    }
+
+    /**
+     * Computes the minimum value of `array`. If `array` is empty or falsey,
+     * `undefined` is returned.
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Math
+     * @param {Array} array The array to iterate over.
+     * @returns {*} Returns the minimum value.
+     * @example
+     *
+     * _.min([4, 2, 8, 6]);
+     * // => 2
+     *
+     * _.min([]);
+     * // => undefined
+     */
+    function min(array) {
+      return (array && array.length)
+        ? baseExtremum(array, identity, baseLt)
+        : undefined;
+    }
+
+    /**
+     * This method is like `_.min` except that it accepts `iteratee` which is
+     * invoked for each element in `array` to generate the criterion by which
+     * the value is ranked. The iteratee is invoked with one argument: (value).
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Math
+     * @param {Array} array The array to iterate over.
+     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+     * @returns {*} Returns the minimum value.
+     * @example
+     *
+     * var objects = [{ 'n': 1 }, { 'n': 2 }];
+     *
+     * _.minBy(objects, function(o) { return o.n; });
+     * // => { 'n': 1 }
+     *
+     * // The `_.property` iteratee shorthand.
+     * _.minBy(objects, 'n');
+     * // => { 'n': 1 }
+     */
+    function minBy(array, iteratee) {
+      return (array && array.length)
+        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)
+        : undefined;
+    }
+
+    /**
+     * Multiply two numbers.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.7.0
+     * @category Math
+     * @param {number} multiplier The first number in a multiplication.
+     * @param {number} multiplicand The second number in a multiplication.
+     * @returns {number} Returns the product.
+     * @example
+     *
+     * _.multiply(6, 4);
+     * // => 24
+     */
+    var multiply = createMathOperation(function(multiplier, multiplicand) {
+      return multiplier * multiplicand;
+    }, 1);
+
+    /**
+     * Computes `number` rounded to `precision`.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.10.0
+     * @category Math
+     * @param {number} number The number to round.
+     * @param {number} [precision=0] The precision to round to.
+     * @returns {number} Returns the rounded number.
+     * @example
+     *
+     * _.round(4.006);
+     * // => 4
+     *
+     * _.round(4.006, 2);
+     * // => 4.01
+     *
+     * _.round(4060, -2);
+     * // => 4100
+     */
+    var round = createRound('round');
+
+    /**
+     * Subtract two numbers.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Math
+     * @param {number} minuend The first number in a subtraction.
+     * @param {number} subtrahend The second number in a subtraction.
+     * @returns {number} Returns the difference.
+     * @example
+     *
+     * _.subtract(6, 4);
+     * // => 2
+     */
+    var subtract = createMathOperation(function(minuend, subtrahend) {
+      return minuend - subtrahend;
+    }, 0);
+
+    /**
+     * Computes the sum of the values in `array`.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.4.0
+     * @category Math
+     * @param {Array} array The array to iterate over.
+     * @returns {number} Returns the sum.
+     * @example
+     *
+     * _.sum([4, 2, 8, 6]);
+     * // => 20
+     */
+    function sum(array) {
+      return (array && array.length)
+        ? baseSum(array, identity)
+        : 0;
+    }
+
+    /**
+     * This method is like `_.sum` except that it accepts `iteratee` which is
+     * invoked for each element in `array` to generate the value to be summed.
+     * The iteratee is invoked with one argument: (value).
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Math
+     * @param {Array} array The array to iterate over.
+     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+     * @returns {number} Returns the sum.
+     * @example
+     *
+     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
+     *
+     * _.sumBy(objects, function(o) { return o.n; });
+     * // => 20
+     *
+     * // The `_.property` iteratee shorthand.
+     * _.sumBy(objects, 'n');
+     * // => 20
+     */
+    function sumBy(array, iteratee) {
+      return (array && array.length)
+        ? baseSum(array, getIteratee(iteratee, 2))
+        : 0;
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    // Add methods that return wrapped values in chain sequences.
+    lodash.after = after;
+    lodash.ary = ary;
+    lodash.assign = assign;
+    lodash.assignIn = assignIn;
+    lodash.assignInWith = assignInWith;
+    lodash.assignWith = assignWith;
+    lodash.at = at;
+    lodash.before = before;
+    lodash.bind = bind;
+    lodash.bindAll = bindAll;
+    lodash.bindKey = bindKey;
+    lodash.castArray = castArray;
+    lodash.chain = chain;
+    lodash.chunk = chunk;
+    lodash.compact = compact;
+    lodash.concat = concat;
+    lodash.cond = cond;
+    lodash.conforms = conforms;
+    lodash.constant = constant;
+    lodash.countBy = countBy;
+    lodash.create = create;
+    lodash.curry = curry;
+    lodash.curryRight = curryRight;
+    lodash.debounce = debounce;
+    lodash.defaults = defaults;
+    lodash.defaultsDeep = defaultsDeep;
+    lodash.defer = defer;
+    lodash.delay = delay;
+    lodash.difference = difference;
+    lodash.differenceBy = differenceBy;
+    lodash.differenceWith = differenceWith;
+    lodash.drop = drop;
+    lodash.dropRight = dropRight;
+    lodash.dropRightWhile = dropRightWhile;
+    lodash.dropWhile = dropWhile;
+    lodash.fill = fill;
+    lodash.filter = filter;
+    lodash.flatMap = flatMap;
+    lodash.flatMapDeep = flatMapDeep;
+    lodash.flatMapDepth = flatMapDepth;
+    lodash.flatten = flatten;
+    lodash.flattenDeep = flattenDeep;
+    lodash.flattenDepth = flattenDepth;
+    lodash.flip = flip;
+    lodash.flow = flow;
+    lodash.flowRight = flowRight;
+    lodash.fromPairs = fromPairs;
+    lodash.functions = functions;
+    lodash.functionsIn = functionsIn;
+    lodash.groupBy = groupBy;
+    lodash.initial = initial;
+    lodash.intersection = intersection;
+    lodash.intersectionBy = intersectionBy;
+    lodash.intersectionWith = intersectionWith;
+    lodash.invert = invert;
+    lodash.invertBy = invertBy;
+    lodash.invokeMap = invokeMap;
+    lodash.iteratee = iteratee;
+    lodash.keyBy = keyBy;
+    lodash.keys = keys;
+    lodash.keysIn = keysIn;
+    lodash.map = map;
+    lodash.mapKeys = mapKeys;
+    lodash.mapValues = mapValues;
+    lodash.matches = matches;
+    lodash.matchesProperty = matchesProperty;
+    lodash.memoize = memoize;
+    lodash.merge = merge;
+    lodash.mergeWith = mergeWith;
+    lodash.method = method;
+    lodash.methodOf = methodOf;
+    lodash.mixin = mixin;
+    lodash.negate = negate;
+    lodash.nthArg = nthArg;
+    lodash.omit = omit;
+    lodash.omitBy = omitBy;
+    lodash.once = once;
+    lodash.orderBy = orderBy;
+    lodash.over = over;
+    lodash.overArgs = overArgs;
+    lodash.overEvery = overEvery;
+    lodash.overSome = overSome;
+    lodash.partial = partial;
+    lodash.partialRight = partialRight;
+    lodash.partition = partition;
+    lodash.pick = pick;
+    lodash.pickBy = pickBy;
+    lodash.property = property;
+    lodash.propertyOf = propertyOf;
+    lodash.pull = pull;
+    lodash.pullAll = pullAll;
+    lodash.pullAllBy = pullAllBy;
+    lodash.pullAllWith = pullAllWith;
+    lodash.pullAt = pullAt;
+    lodash.range = range;
+    lodash.rangeRight = rangeRight;
+    lodash.rearg = rearg;
+    lodash.reject = reject;
+    lodash.remove = remove;
+    lodash.rest = rest;
+    lodash.reverse = reverse;
+    lodash.sampleSize = sampleSize;
+    lodash.set = set;
+    lodash.setWith = setWith;
+    lodash.shuffle = shuffle;
+    lodash.slice = slice;
+    lodash.sortBy = sortBy;
+    lodash.sortedUniq = sortedUniq;
+    lodash.sortedUniqBy = sortedUniqBy;
+    lodash.split = split;
+    lodash.spread = spread;
+    lodash.tail = tail;
+    lodash.take = take;
+    lodash.takeRight = takeRight;
+    lodash.takeRightWhile = takeRightWhile;
+    lodash.takeWhile = takeWhile;
+    lodash.tap = tap;
+    lodash.throttle = throttle;
+    lodash.thru = thru;
+    lodash.toArray = toArray;
+    lodash.toPairs = toPairs;
+    lodash.toPairsIn = toPairsIn;
+    lodash.toPath = toPath;
+    lodash.toPlainObject = toPlainObject;
+    lodash.transform = transform;
+    lodash.unary = unary;
+    lodash.union = union;
+    lodash.unionBy = unionBy;
+    lodash.unionWith = unionWith;
+    lodash.uniq = uniq;
+    lodash.uniqBy = uniqBy;
+    lodash.uniqWith = uniqWith;
+    lodash.unset = unset;
+    lodash.unzip = unzip;
+    lodash.unzipWith = unzipWith;
+    lodash.update = update;
+    lodash.updateWith = updateWith;
+    lodash.values = values;
+    lodash.valuesIn = valuesIn;
+    lodash.without = without;
+    lodash.words = words;
+    lodash.wrap = wrap;
+    lodash.xor = xor;
+    lodash.xorBy = xorBy;
+    lodash.xorWith = xorWith;
+    lodash.zip = zip;
+    lodash.zipObject = zipObject;
+    lodash.zipObjectDeep = zipObjectDeep;
+    lodash.zipWith = zipWith;
+
+    // Add aliases.
+    lodash.entries = toPairs;
+    lodash.entriesIn = toPairsIn;
+    lodash.extend = assignIn;
+    lodash.extendWith = assignInWith;
+
+    // Add methods to `lodash.prototype`.
+    mixin(lodash, lodash);
+
+    /*------------------------------------------------------------------------*/
+
+    // Add methods that return unwrapped values in chain sequences.
+    lodash.add = add;
+    lodash.attempt = attempt;
+    lodash.camelCase = camelCase;
+    lodash.capitalize = capitalize;
+    lodash.ceil = ceil;
+    lodash.clamp = clamp;
+    lodash.clone = clone;
+    lodash.cloneDeep = cloneDeep;
+    lodash.cloneDeepWith = cloneDeepWith;
+    lodash.cloneWith = cloneWith;
+    lodash.conformsTo = conformsTo;
+    lodash.deburr = deburr;
+    lodash.defaultTo = defaultTo;
+    lodash.divide = divide;
+    lodash.endsWith = endsWith;
+    lodash.eq = eq;
+    lodash.escape = escape;
+    lodash.escapeRegExp = escapeRegExp;
+    lodash.every = every;
+    lodash.find = find;
+    lodash.findIndex = findIndex;
+    lodash.findKey = findKey;
+    lodash.findLast = findLast;
+    lodash.findLastIndex = findLastIndex;
+    lodash.findLastKey = findLastKey;
+    lodash.floor = floor;
+    lodash.forEach = forEach;
+    lodash.forEachRight = forEachRight;
+    lodash.forIn = forIn;
+    lodash.forInRight = forInRight;
+    lodash.forOwn = forOwn;
+    lodash.forOwnRight = forOwnRight;
+    lodash.get = get;
+    lodash.gt = gt;
+    lodash.gte = gte;
+    lodash.has = has;
+    lodash.hasIn = hasIn;
+    lodash.head = head;
+    lodash.identity = identity;
+    lodash.includes = includes;
+    lodash.indexOf = indexOf;
+    lodash.inRange = inRange;
+    lodash.invoke = invoke;
+    lodash.isArguments = isArguments;
+    lodash.isArray = isArray;
+    lodash.isArrayBuffer = isArrayBuffer;
+    lodash.isArrayLike = isArrayLike;
+    lodash.isArrayLikeObject = isArrayLikeObject;
+    lodash.isBoolean = isBoolean;
+    lodash.isBuffer = isBuffer;
+    lodash.isDate = isDate;
+    lodash.isElement = isElement;
+    lodash.isEmpty = isEmpty;
+    lodash.isEqual = isEqual;
+    lodash.isEqualWith = isEqualWith;
+    lodash.isError = isError;
+    lodash.isFinite = isFinite;
+    lodash.isFunction = isFunction;
+    lodash.isInteger = isInteger;
+    lodash.isLength = isLength;
+    lodash.isMap = isMap;
+    lodash.isMatch = isMatch;
+    lodash.isMatchWith = isMatchWith;
+    lodash.isNaN = isNaN;
+    lodash.isNative = isNative;
+    lodash.isNil = isNil;
+    lodash.isNull = isNull;
+    lodash.isNumber = isNumber;
+    lodash.isObject = isObject;
+    lodash.isObjectLike = isObjectLike;
+    lodash.isPlainObject = isPlainObject;
+    lodash.isRegExp = isRegExp;
+    lodash.isSafeInteger = isSafeInteger;
+    lodash.isSet = isSet;
+    lodash.isString = isString;
+    lodash.isSymbol = isSymbol;
+    lodash.isTypedArray = isTypedArray;
+    lodash.isUndefined = isUndefined;
+    lodash.isWeakMap = isWeakMap;
+    lodash.isWeakSet = isWeakSet;
+    lodash.join = join;
+    lodash.kebabCase = kebabCase;
+    lodash.last = last;
+    lodash.lastIndexOf = lastIndexOf;
+    lodash.lowerCase = lowerCase;
+    lodash.lowerFirst = lowerFirst;
+    lodash.lt = lt;
+    lodash.lte = lte;
+    lodash.max = max;
+    lodash.maxBy = maxBy;
+    lodash.mean = mean;
+    lodash.meanBy = meanBy;
+    lodash.min = min;
+    lodash.minBy = minBy;
+    lodash.stubArray = stubArray;
+    lodash.stubFalse = stubFalse;
+    lodash.stubObject = stubObject;
+    lodash.stubString = stubString;
+    lodash.stubTrue = stubTrue;
+    lodash.multiply = multiply;
+    lodash.nth = nth;
+    lodash.noConflict = noConflict;
+    lodash.noop = noop;
+    lodash.now = now;
+    lodash.pad = pad;
+    lodash.padEnd = padEnd;
+    lodash.padStart = padStart;
+    lodash.parseInt = parseInt;
+    lodash.random = random;
+    lodash.reduce = reduce;
+    lodash.reduceRight = reduceRight;
+    lodash.repeat = repeat;
+    lodash.replace = replace;
+    lodash.result = result;
+    lodash.round = round;
+    lodash.runInContext = runInContext;
+    lodash.sample = sample;
+    lodash.size = size;
+    lodash.snakeCase = snakeCase;
+    lodash.some = some;
+    lodash.sortedIndex = sortedIndex;
+    lodash.sortedIndexBy = sortedIndexBy;
+    lodash.sortedIndexOf = sortedIndexOf;
+    lodash.sortedLastIndex = sortedLastIndex;
+    lodash.sortedLastIndexBy = sortedLastIndexBy;
+    lodash.sortedLastIndexOf = sortedLastIndexOf;
+    lodash.startCase = startCase;
+    lodash.startsWith = startsWith;
+    lodash.subtract = subtract;
+    lodash.sum = sum;
+    lodash.sumBy = sumBy;
+    lodash.template = template;
+    lodash.times = times;
+    lodash.toFinite = toFinite;
+    lodash.toInteger = toInteger;
+    lodash.toLength = toLength;
+    lodash.toLower = toLower;
+    lodash.toNumber = toNumber;
+    lodash.toSafeInteger = toSafeInteger;
+    lodash.toString = toString;
+    lodash.toUpper = toUpper;
+    lodash.trim = trim;
+    lodash.trimEnd = trimEnd;
+    lodash.trimStart = trimStart;
+    lodash.truncate = truncate;
+    lodash.unescape = unescape;
+    lodash.uniqueId = uniqueId;
+    lodash.upperCase = upperCase;
+    lodash.upperFirst = upperFirst;
+
+    // Add aliases.
+    lodash.each = forEach;
+    lodash.eachRight = forEachRight;
+    lodash.first = head;
+
+    mixin(lodash, (function() {
+      var source = {};
+      baseForOwn(lodash, function(func, methodName) {
+        if (!hasOwnProperty.call(lodash.prototype, methodName)) {
+          source[methodName] = func;
+        }
+      });
+      return source;
+    }()), { 'chain': false });
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * The semantic version number.
+     *
+     * @static
+     * @memberOf _
+     * @type {string}
+     */
+    lodash.VERSION = VERSION;
+
+    // Assign default placeholders.
+    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
+      lodash[methodName].placeholder = lodash;
+    });
+
+    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
+    arrayEach(['drop', 'take'], function(methodName, index) {
+      LazyWrapper.prototype[methodName] = function(n) {
+        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);
+
+        var result = (this.__filtered__ && !index)
+          ? new LazyWrapper(this)
+          : this.clone();
+
+        if (result.__filtered__) {
+          result.__takeCount__ = nativeMin(n, result.__takeCount__);
+        } else {
+          result.__views__.push({
+            'size': nativeMin(n, MAX_ARRAY_LENGTH),
+            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')
+          });
+        }
+        return result;
+      };
+
+      LazyWrapper.prototype[methodName + 'Right'] = function(n) {
+        return this.reverse()[methodName](n).reverse();
+      };
+    });
+
+    // Add `LazyWrapper` methods that accept an `iteratee` value.
+    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
+      var type = index + 1,
+          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;
+
+      LazyWrapper.prototype[methodName] = function(iteratee) {
+        var result = this.clone();
+        result.__iteratees__.push({
+          'iteratee': getIteratee(iteratee, 3),
+          'type': type
+        });
+        result.__filtered__ = result.__filtered__ || isFilter;
+        return result;
+      };
+    });
+
+    // Add `LazyWrapper` methods for `_.head` and `_.last`.
+    arrayEach(['head', 'last'], function(methodName, index) {
+      var takeName = 'take' + (index ? 'Right' : '');
+
+      LazyWrapper.prototype[methodName] = function() {
+        return this[takeName](1).value()[0];
+      };
+    });
+
+    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.
+    arrayEach(['initial', 'tail'], function(methodName, index) {
+      var dropName = 'drop' + (index ? '' : 'Right');
+
+      LazyWrapper.prototype[methodName] = function() {
+        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
+      };
+    });
+
+    LazyWrapper.prototype.compact = function() {
+      return this.filter(identity);
+    };
+
+    LazyWrapper.prototype.find = function(predicate) {
+      return this.filter(predicate).head();
+    };
+
+    LazyWrapper.prototype.findLast = function(predicate) {
+      return this.reverse().find(predicate);
+    };
+
+    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
+      if (typeof path == 'function') {
+        return new LazyWrapper(this);
+      }
+      return this.map(function(value) {
+        return baseInvoke(value, path, args);
+      });
+    });
+
+    LazyWrapper.prototype.reject = function(predicate) {
+      return this.filter(negate(getIteratee(predicate)));
+    };
+
+    LazyWrapper.prototype.slice = function(start, end) {
+      start = toInteger(start);
+
+      var result = this;
+      if (result.__filtered__ && (start > 0 || end < 0)) {
+        return new LazyWrapper(result);
+      }
+      if (start < 0) {
+        result = result.takeRight(-start);
+      } else if (start) {
+        result = result.drop(start);
+      }
+      if (end !== undefined) {
+        end = toInteger(end);
+        result = end < 0 ? result.dropRight(-end) : result.take(end - start);
+      }
+      return result;
+    };
+
+    LazyWrapper.prototype.takeRightWhile = function(predicate) {
+      return this.reverse().takeWhile(predicate).reverse();
+    };
+
+    LazyWrapper.prototype.toArray = function() {
+      return this.take(MAX_ARRAY_LENGTH);
+    };
+
+    // Add `LazyWrapper` methods to `lodash.prototype`.
+    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
+      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),
+          isTaker = /^(?:head|last)$/.test(methodName),
+          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
+          retUnwrapped = isTaker || /^find/.test(methodName);
+
+      if (!lodashFunc) {
+        return;
+      }
+      lodash.prototype[methodName] = function() {
+        var value = this.__wrapped__,
+            args = isTaker ? [1] : arguments,
+            isLazy = value instanceof LazyWrapper,
+            iteratee = args[0],
+            useLazy = isLazy || isArray(value);
+
+        var interceptor = function(value) {
+          var result = lodashFunc.apply(lodash, arrayPush([value], args));
+          return (isTaker && chainAll) ? result[0] : result;
+        };
+
+        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
+          // Avoid lazy use if the iteratee has a "length" value other than `1`.
+          isLazy = useLazy = false;
+        }
+        var chainAll = this.__chain__,
+            isHybrid = !!this.__actions__.length,
+            isUnwrapped = retUnwrapped && !chainAll,
+            onlyLazy = isLazy && !isHybrid;
+
+        if (!retUnwrapped && useLazy) {
+          value = onlyLazy ? value : new LazyWrapper(this);
+          var result = func.apply(value, args);
+          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
+          return new LodashWrapper(result, chainAll);
+        }
+        if (isUnwrapped && onlyLazy) {
+          return func.apply(this, args);
+        }
+        result = this.thru(interceptor);
+        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;
+      };
+    });
+
+    // Add `Array` methods to `lodash.prototype`.
+    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
+      var func = arrayProto[methodName],
+          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
+          retUnwrapped = /^(?:pop|shift)$/.test(methodName);
+
+      lodash.prototype[methodName] = function() {
+        var args = arguments;
+        if (retUnwrapped && !this.__chain__) {
+          var value = this.value();
+          return func.apply(isArray(value) ? value : [], args);
+        }
+        return this[chainName](function(value) {
+          return func.apply(isArray(value) ? value : [], args);
+        });
+      };
+    });
+
+    // Map minified method names to their real names.
+    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
+      var lodashFunc = lodash[methodName];
+      if (lodashFunc) {
+        var key = (lodashFunc.name + ''),
+            names = realNames[key] || (realNames[key] = []);
+
+        names.push({ 'name': methodName, 'func': lodashFunc });
+      }
+    });
+
+    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
+      'name': 'wrapper',
+      'func': undefined
+    }];
+
+    // Add methods to `LazyWrapper`.
+    LazyWrapper.prototype.clone = lazyClone;
+    LazyWrapper.prototype.reverse = lazyReverse;
+    LazyWrapper.prototype.value = lazyValue;
+
+    // Add chain sequence methods to the `lodash` wrapper.
+    lodash.prototype.at = wrapperAt;
+    lodash.prototype.chain = wrapperChain;
+    lodash.prototype.commit = wrapperCommit;
+    lodash.prototype.next = wrapperNext;
+    lodash.prototype.plant = wrapperPlant;
+    lodash.prototype.reverse = wrapperReverse;
+    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;
+
+    // Add lazy aliases.
+    lodash.prototype.first = lodash.prototype.head;
+
+    if (symIterator) {
+      lodash.prototype[symIterator] = wrapperToIterator;
+    }
+    return lodash;
+  });
+
+  /*--------------------------------------------------------------------------*/
+
+  // Export lodash.
+  var _ = runInContext();
+
+  // Some AMD build optimizers, like r.js, check for condition patterns like:
+  if (true) {
+    // Expose Lodash on the global object to prevent errors when Lodash is
+    // loaded by a script tag in the presence of an AMD loader.
+    // See http://requirejs.org/docs/errors.html#mismatch for more details.
+    // Use `_.noConflict` to remove Lodash from the global object.
+    root._ = _;
+
+    // Define as an anonymous module so, through path mapping, it can be
+    // referenced as the "underscore" module.
+    !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
+      return _;
+    }.call(exports, __webpack_require__, exports, module),
+				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+  }
+  // Check for `exports` after `define` in case a build optimizer adds it.
+  else if (freeModule) {
+    // Export for Node.js.
+    (freeModule.exports = _)._ = _;
+    // Export for CommonJS support.
+    freeExports._ = _;
+  }
+  else {
+    // Export to the global object.
+    root._ = _;
+  }
+}.call(this));
+
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(19)(module)))
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var util = {};
+module.exports = util;
+
+util.isPipeObject = function (obj) {
+  return (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj.hasOwnProperty('pipe') && _typeof(obj.pipe) === 'object';
+};
+
+util.isPipeJson = function (obj) {
+  return (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj.hasOwnProperty('op') && obj.hasOwnProperty('params');
+};
+
+util.isNodeJs = function () {
+  return Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';
+};
+
+util.arrayBufferToString = function (buf) {
+
+  if (this.isNodeJs()) {
+    return buf.toString('utf-8');
+  } else {
+
+    if ("TextDecoder" in window) {
+      return new TextDecoder('utf-8').decode(buf);
+    } else {
+      var uint8arr = new Uint8Array(buf);
+      var utf8str = '';
+      var i,
+          len = uint8arr.length;
+      for (i = 0; i < len; ++i) {
+        utf8str += String.fromCharCode(uint8arr[i]);
+      }
+      return decodeURIComponent(escape(utf8str));
+    }
+  }
+};
+
+util.callbackAdapter = function (err, response, resolve, reject, callback) {
+  if (typeof callback == 'function') {
+    callback(err, response);
+  } else {
+    if (err) {
+      reject(err);
+    } else {
+      resolve(response);
+    }
+  }
+};
+
+module.exports.getUtilObject = function (Flexio) {
+
+  return new function () {
+
+    for (var method in util) {
+      if (util.hasOwnProperty(method)) {
+        this[method] = util[method];
+      }
+    }
+
+    this.debug = function (msg) {
+      var cfg = Flexio.getConfig();
+      if (cfg.debug) {
+        var msg = 'flexio-sdk-js: ' + msg;
+
+        console.log(msg);
+      }
+      return this;
+    };
+  }();
+};
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+module.exports = {
+  TASK_OP_CALC: 'calc',
+  TASK_OP_COMMENT: 'comment',
+  TASK_OP_CONVERT: 'convert',
+  TASK_OP_COPY: 'copy',
+  TASK_OP_CREATE: 'create',
+  TASK_OP_CUSTOM: 'custom',
+  TASK_OP_DISTINCT: 'distinct',
+  TASK_OP_DUMP: 'dump',
+  TASK_OP_DUPLICATE: 'duplicate',
+  TASK_OP_ECHO: 'echo',
+  TASK_OP_EMAIL_SEND: 'email',
+  TASK_OP_EXECUTE: 'execute',
+  TASK_OP_FIND_REPLACE: 'replace',
+  TASK_OP_FILTER: 'filter',
+  TASK_OP_FOREACH: 'foreach',
+  TASK_OP_GROUP: 'group',
+  TASK_OP_INSERT: 'insert',
+  TASK_OP_LIMIT: 'limit',
+  TASK_OP_LIST: 'list',
+  TASK_OP_MERGE: 'merge',
+  TASK_OP_MKDIR: 'mkdir',
+  TASK_OP_NOP: 'nop',
+  TASK_OP_PROMPT: 'prompt',
+  TASK_OP_R: 'r',
+  TASK_OP_READ: 'read',
+  TASK_OP_RENAME: 'rename',
+  TASK_OP_RENDER: 'render',
+  TASK_OP_REQUEST: 'request',
+  TASK_OP_SEARCH: 'search',
+  TASK_OP_SELECT: 'select',
+  TASK_OP_SEQUENCE: 'sequence',
+  TASK_OP_SET: 'set',
+  TASK_OP_SLEEP: 'sleep',
+  TASK_OP_SORT: 'sort',
+  TASK_OP_TRANSFORM: 'transform',
+  TASK_OP_WRITE: 'write'
+};
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var bind = __webpack_require__(6);
+var isBuffer = __webpack_require__(22);
+
+/*global toString:true*/
+
+// utils is a library of generic helper functions non-specific to axios
+
+var toString = Object.prototype.toString;
+
+/**
+ * Determine if a value is an Array
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an Array, otherwise false
+ */
+function isArray(val) {
+  return toString.call(val) === '[object Array]';
+}
+
+/**
+ * Determine if a value is an ArrayBuffer
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an ArrayBuffer, otherwise false
+ */
+function isArrayBuffer(val) {
+  return toString.call(val) === '[object ArrayBuffer]';
+}
+
+/**
+ * Determine if a value is a FormData
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an FormData, otherwise false
+ */
+function isFormData(val) {
+  return (typeof FormData !== 'undefined') && (val instanceof FormData);
+}
+
+/**
+ * Determine if a value is a view on an ArrayBuffer
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
+ */
+function isArrayBufferView(val) {
+  var result;
+  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
+    result = ArrayBuffer.isView(val);
+  } else {
+    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);
+  }
+  return result;
+}
+
+/**
+ * Determine if a value is a String
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a String, otherwise false
+ */
+function isString(val) {
+  return typeof val === 'string';
+}
+
+/**
+ * Determine if a value is a Number
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Number, otherwise false
+ */
+function isNumber(val) {
+  return typeof val === 'number';
+}
+
+/**
+ * Determine if a value is undefined
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if the value is undefined, otherwise false
+ */
+function isUndefined(val) {
+  return typeof val === 'undefined';
+}
+
+/**
+ * Determine if a value is an Object
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an Object, otherwise false
+ */
+function isObject(val) {
+  return val !== null && typeof val === 'object';
+}
+
+/**
+ * Determine if a value is a Date
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Date, otherwise false
+ */
+function isDate(val) {
+  return toString.call(val) === '[object Date]';
+}
+
+/**
+ * Determine if a value is a File
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a File, otherwise false
+ */
+function isFile(val) {
+  return toString.call(val) === '[object File]';
+}
+
+/**
+ * Determine if a value is a Blob
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Blob, otherwise false
+ */
+function isBlob(val) {
+  return toString.call(val) === '[object Blob]';
+}
+
+/**
+ * Determine if a value is a Function
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Function, otherwise false
+ */
+function isFunction(val) {
+  return toString.call(val) === '[object Function]';
+}
+
+/**
+ * Determine if a value is a Stream
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Stream, otherwise false
+ */
+function isStream(val) {
+  return isObject(val) && isFunction(val.pipe);
+}
+
+/**
+ * Determine if a value is a URLSearchParams object
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a URLSearchParams object, otherwise false
+ */
+function isURLSearchParams(val) {
+  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;
+}
+
+/**
+ * Trim excess whitespace off the beginning and end of a string
+ *
+ * @param {String} str The String to trim
+ * @returns {String} The String freed of excess whitespace
+ */
+function trim(str) {
+  return str.replace(/^\s*/, '').replace(/\s*$/, '');
+}
+
+/**
+ * Determine if we're running in a standard browser environment
+ *
+ * This allows axios to run in a web worker, and react-native.
+ * Both environments support XMLHttpRequest, but not fully standard globals.
+ *
+ * web workers:
+ *  typeof window -> undefined
+ *  typeof document -> undefined
+ *
+ * react-native:
+ *  navigator.product -> 'ReactNative'
+ */
+function isStandardBrowserEnv() {
+  if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
+    return false;
+  }
+  return (
+    typeof window !== 'undefined' &&
+    typeof document !== 'undefined'
+  );
+}
+
+/**
+ * Iterate over an Array or an Object invoking a function for each item.
+ *
+ * If `obj` is an Array callback will be called passing
+ * the value, index, and complete array for each item.
+ *
+ * If 'obj' is an Object callback will be called passing
+ * the value, key, and complete object for each property.
+ *
+ * @param {Object|Array} obj The object to iterate
+ * @param {Function} fn The callback to invoke for each item
+ */
+function forEach(obj, fn) {
+  // Don't bother if no value provided
+  if (obj === null || typeof obj === 'undefined') {
+    return;
+  }
+
+  // Force an array if not already something iterable
+  if (typeof obj !== 'object' && !isArray(obj)) {
+    /*eslint no-param-reassign:0*/
+    obj = [obj];
+  }
+
+  if (isArray(obj)) {
+    // Iterate over array values
+    for (var i = 0, l = obj.length; i < l; i++) {
+      fn.call(null, obj[i], i, obj);
+    }
+  } else {
+    // Iterate over object keys
+    for (var key in obj) {
+      if (Object.prototype.hasOwnProperty.call(obj, key)) {
+        fn.call(null, obj[key], key, obj);
+      }
+    }
+  }
+}
+
+/**
+ * Accepts varargs expecting each argument to be an object, then
+ * immutably merges the properties of each object and returns result.
+ *
+ * When multiple objects contain the same key the later object in
+ * the arguments list will take precedence.
+ *
+ * Example:
+ *
+ * ```js
+ * var result = merge({foo: 123}, {foo: 456});
+ * console.log(result.foo); // outputs 456
+ * ```
+ *
+ * @param {Object} obj1 Object to merge
+ * @returns {Object} Result of all merge properties
+ */
+function merge(/* obj1, obj2, obj3, ... */) {
+  var result = {};
+  function assignValue(val, key) {
+    if (typeof result[key] === 'object' && typeof val === 'object') {
+      result[key] = merge(result[key], val);
+    } else {
+      result[key] = val;
+    }
+  }
+
+  for (var i = 0, l = arguments.length; i < l; i++) {
+    forEach(arguments[i], assignValue);
+  }
+  return result;
+}
+
+/**
+ * Extends object a by mutably adding to it the properties of object b.
+ *
+ * @param {Object} a The object to be extended
+ * @param {Object} b The object to copy properties from
+ * @param {Object} thisArg The object to bind function to
+ * @return {Object} The resulting value of object a
+ */
+function extend(a, b, thisArg) {
+  forEach(b, function assignValue(val, key) {
+    if (thisArg && typeof val === 'function') {
+      a[key] = bind(val, thisArg);
+    } else {
+      a[key] = val;
+    }
+  });
+  return a;
+}
+
+module.exports = {
+  isArray: isArray,
+  isArrayBuffer: isArrayBuffer,
+  isBuffer: isBuffer,
+  isFormData: isFormData,
+  isArrayBufferView: isArrayBufferView,
+  isString: isString,
+  isNumber: isNumber,
+  isObject: isObject,
+  isUndefined: isUndefined,
+  isDate: isDate,
+  isFile: isFile,
+  isBlob: isBlob,
+  isFunction: isFunction,
+  isStream: isStream,
+  isURLSearchParams: isURLSearchParams,
+  isStandardBrowserEnv: isStandardBrowserEnv,
+  forEach: forEach,
+  merge: merge,
+  extend: extend,
+  trim: trim
+};
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+var normalizeHeaderName = __webpack_require__(24);
+
+var DEFAULT_CONTENT_TYPE = {
+  'Content-Type': 'application/x-www-form-urlencoded'
+};
+
+function setContentTypeIfUnset(headers, value) {
+  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
+    headers['Content-Type'] = value;
+  }
+}
+
+function getDefaultAdapter() {
+  var adapter;
+  if (typeof XMLHttpRequest !== 'undefined') {
+    // For browsers use XHR adapter
+    adapter = __webpack_require__(25);
+  } else if (typeof process !== 'undefined') {
+    // For node use HTTP adapter
+    adapter = __webpack_require__(30);
+  }
+  return adapter;
+}
+
+var defaults = {
+  adapter: getDefaultAdapter(),
+
+  transformRequest: [function transformRequest(data, headers) {
+    normalizeHeaderName(headers, 'Content-Type');
+    if (utils.isFormData(data) ||
+      utils.isArrayBuffer(data) ||
+      utils.isBuffer(data) ||
+      utils.isStream(data) ||
+      utils.isFile(data) ||
+      utils.isBlob(data)
+    ) {
+      return data;
+    }
+    if (utils.isArrayBufferView(data)) {
+      return data.buffer;
+    }
+    if (utils.isURLSearchParams(data)) {
+      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
+      return data.toString();
+    }
+    if (utils.isObject(data)) {
+      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
+      return JSON.stringify(data);
+    }
+    return data;
+  }],
+
+  transformResponse: [function transformResponse(data) {
+    /*eslint no-param-reassign:0*/
+    if (typeof data === 'string') {
+      try {
+        data = JSON.parse(data);
+      } catch (e) { /* Ignore */ }
+    }
+    return data;
+  }],
+
+  timeout: 0,
+
+  xsrfCookieName: 'XSRF-TOKEN',
+  xsrfHeaderName: 'X-XSRF-TOKEN',
+
+  maxContentLength: -1,
+
+  validateStatus: function validateStatus(status) {
+    return status >= 200 && status < 300;
+  }
+};
+
+defaults.headers = {
+  common: {
+    'Accept': 'application/json, text/plain, */*'
+  }
+};
+
+utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
+  defaults.headers[method] = {};
+});
+
+utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
+  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
+});
+
+module.exports = defaults;
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var enhanceError = __webpack_require__(8);
+
+/**
+ * Create an Error with the specified message, config, error code, request and response.
+ *
+ * @param {string} message The error message.
+ * @param {Object} config The config.
+ * @param {string} [code] The error code (for example, 'ECONNABORTED').
+ * @param {Object} [request] The request.
+ * @param {Object} [response] The response.
+ * @returns {Error} The created error.
+ */
+module.exports = function createError(message, config, code, request, response) {
+  var error = new Error(message);
+  return enhanceError(error, config, code, request, response);
+};
+
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+module.exports = function bind(fn, thisArg) {
+  return function wrap() {
+    var args = new Array(arguments.length);
+    for (var i = 0; i < args.length; i++) {
+      args[i] = arguments[i];
+    }
+    return fn.apply(thisArg, args);
+  };
+};
+
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var createError = __webpack_require__(5);
+
+/**
+ * Resolve or reject a Promise based on response status.
+ *
+ * @param {Function} resolve A function that resolves the promise.
+ * @param {Function} reject A function that rejects the promise.
+ * @param {object} response The response.
+ */
+module.exports = function settle(resolve, reject, response) {
+  var validateStatus = response.config.validateStatus;
+  // Note: status is not exposed by XDomainRequest
+  if (!response.status || !validateStatus || validateStatus(response.status)) {
+    resolve(response);
+  } else {
+    reject(createError(
+      'Request failed with status code ' + response.status,
+      response.config,
+      null,
+      response.request,
+      response
+    ));
+  }
+};
+
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * Update an Error with the specified config, error code, and response.
+ *
+ * @param {Error} error The error to update.
+ * @param {Object} config The config.
+ * @param {string} [code] The error code (for example, 'ECONNABORTED').
+ * @param {Object} [request] The request.
+ * @param {Object} [response] The response.
+ * @returns {Error} The error.
+ */
+module.exports = function enhanceError(error, config, code, request, response) {
+  error.config = config;
+  if (code) {
+    error.code = code;
+  }
+  error.request = request;
+  error.response = response;
+  return error;
+};
+
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+
+function encode(val) {
+  return encodeURIComponent(val).
+    replace(/%40/gi, '@').
+    replace(/%3A/gi, ':').
+    replace(/%24/g, '$').
+    replace(/%2C/gi, ',').
+    replace(/%20/g, '+').
+    replace(/%5B/gi, '[').
+    replace(/%5D/gi, ']');
+}
+
+/**
+ * Build a URL by appending params to the end
+ *
+ * @param {string} url The base of the url (e.g., http://www.google.com)
+ * @param {object} [params] The params to be appended
+ * @returns {string} The formatted url
+ */
+module.exports = function buildURL(url, params, paramsSerializer) {
+  /*eslint no-param-reassign:0*/
+  if (!params) {
+    return url;
+  }
+
+  var serializedParams;
+  if (paramsSerializer) {
+    serializedParams = paramsSerializer(params);
+  } else if (utils.isURLSearchParams(params)) {
+    serializedParams = params.toString();
+  } else {
+    var parts = [];
+
+    utils.forEach(params, function serialize(val, key) {
+      if (val === null || typeof val === 'undefined') {
+        return;
+      }
+
+      if (utils.isArray(val)) {
+        key = key + '[]';
+      }
+
+      if (!utils.isArray(val)) {
+        val = [val];
+      }
+
+      utils.forEach(val, function parseValue(v) {
+        if (utils.isDate(v)) {
+          v = v.toISOString();
+        } else if (utils.isObject(v)) {
+          v = JSON.stringify(v);
+        }
+        parts.push(encode(key) + '=' + encode(v));
+      });
+    });
+
+    serializedParams = parts.join('&');
+  }
+
+  if (serializedParams) {
+    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
+  }
+
+  return url;
+};
+
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports) {
+
+module.exports = require("http");
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports) {
+
+module.exports = require("https");
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var url = __webpack_require__(13);
+var assert = __webpack_require__(31);
+var http = __webpack_require__(10);
+var https = __webpack_require__(11);
+var Writable = __webpack_require__(32).Writable;
+var debug = __webpack_require__(33)('follow-redirects');
+
+var nativeProtocols = {'http:': http, 'https:': https};
+var schemes = {};
+var exports = module.exports = {
+	maxRedirects: 21
+};
+// RFC7231§4.2.1: Of the request methods defined by this specification,
+// the GET, HEAD, OPTIONS, and TRACE methods are defined to be safe.
+var safeMethods = {GET: true, HEAD: true, OPTIONS: true, TRACE: true};
+
+// Create handlers that pass events from native requests
+var eventHandlers = Object.create(null);
+['abort', 'aborted', 'error', 'socket'].forEach(function (event) {
+	eventHandlers[event] = function (arg) {
+		this._redirectable.emit(event, arg);
+	};
+});
+
+// An HTTP(S) request that can be redirected
+function RedirectableRequest(options, responseCallback) {
+	// Initialize the request
+	Writable.call(this);
+	this._options = options;
+	this._redirectCount = 0;
+	this._bufferedWrites = [];
+
+	// Attach a callback if passed
+	if (responseCallback) {
+		this.on('response', responseCallback);
+	}
+
+	// React to responses of native requests
+	var self = this;
+	this._onNativeResponse = function (response) {
+		self._processResponse(response);
+	};
+
+	// Complete the URL object when necessary
+	if (!options.pathname && options.path) {
+		var searchPos = options.path.indexOf('?');
+		if (searchPos < 0) {
+			options.pathname = options.path;
+		} else {
+			options.pathname = options.path.substring(0, searchPos);
+			options.search = options.path.substring(searchPos);
+		}
+	}
+
+	// Perform the first request
+	this._performRequest();
+}
+RedirectableRequest.prototype = Object.create(Writable.prototype);
+
+// Executes the next native request (initial or redirect)
+RedirectableRequest.prototype._performRequest = function () {
+	// If specified, use the agent corresponding to the protocol
+	// (HTTP and HTTPS use different types of agents)
+	var protocol = this._options.protocol;
+	if (this._options.agents) {
+		this._options.agent = this._options.agents[schemes[protocol]];
+	}
+
+	// Create the native request
+	var nativeProtocol = nativeProtocols[protocol];
+	var request = this._currentRequest =
+				nativeProtocol.request(this._options, this._onNativeResponse);
+	this._currentUrl = url.format(this._options);
+
+	// Set up event handlers
+	request._redirectable = this;
+	for (var event in eventHandlers) {
+		/* istanbul ignore else */
+		if (event) {
+			request.on(event, eventHandlers[event]);
+		}
+	}
+
+	// End a redirected request
+	// (The first request must be ended explicitly with RedirectableRequest#end)
+	if (this._isRedirect) {
+		// If the request doesn't have en entity, end directly.
+		var bufferedWrites = this._bufferedWrites;
+		if (bufferedWrites.length === 0) {
+			request.end();
+		// Otherwise, write the request entity and end afterwards.
+		} else {
+			var i = 0;
+			(function writeNext() {
+				if (i < bufferedWrites.length) {
+					var bufferedWrite = bufferedWrites[i++];
+					request.write(bufferedWrite.data, bufferedWrite.encoding, writeNext);
+				} else {
+					request.end();
+				}
+			})();
+		}
+	}
+};
+
+// Processes a response from the current native request
+RedirectableRequest.prototype._processResponse = function (response) {
+	// RFC7231§6.4: The 3xx (Redirection) class of status code indicates
+	// that further action needs to be taken by the user agent in order to
+	// fulfill the request. If a Location header field is provided,
+	// the user agent MAY automatically redirect its request to the URI
+	// referenced by the Location field value,
+	// even if the specific status code is not understood.
+	var location = response.headers.location;
+	if (location && this._options.followRedirects !== false &&
+			response.statusCode >= 300 && response.statusCode < 400) {
+		// RFC7231§6.4: A client SHOULD detect and intervene
+		// in cyclical redirections (i.e., "infinite" redirection loops).
+		if (++this._redirectCount > this._options.maxRedirects) {
+			return this.emit('error', new Error('Max redirects exceeded.'));
+		}
+
+		// RFC7231§6.4: Automatic redirection needs to done with
+		// care for methods not known to be safe […],
+		// since the user might not wish to redirect an unsafe request.
+		// RFC7231§6.4.7: The 307 (Temporary Redirect) status code indicates
+		// that the target resource resides temporarily under a different URI
+		// and the user agent MUST NOT change the request method
+		// if it performs an automatic redirection to that URI.
+		var header;
+		var headers = this._options.headers;
+		if (response.statusCode !== 307 && !(this._options.method in safeMethods)) {
+			this._options.method = 'GET';
+			// Drop a possible entity and headers related to it
+			this._bufferedWrites = [];
+			for (header in headers) {
+				if (/^content-/i.test(header)) {
+					delete headers[header];
+				}
+			}
+		}
+
+		// Drop the Host header, as the redirect might lead to a different host
+		if (!this._isRedirect) {
+			for (header in headers) {
+				if (/^host$/i.test(header)) {
+					delete headers[header];
+				}
+			}
+		}
+
+		// Perform the redirected request
+		var redirectUrl = url.resolve(this._currentUrl, location);
+		debug('redirecting to', redirectUrl);
+		Object.assign(this._options, url.parse(redirectUrl));
+		this._isRedirect = true;
+		this._performRequest();
+	} else {
+		// The response is not a redirect; return it as-is
+		response.responseUrl = this._currentUrl;
+		this.emit('response', response);
+
+		// Clean up
+		delete this._options;
+		delete this._bufferedWrites;
+	}
+};
+
+// Aborts the current native request
+RedirectableRequest.prototype.abort = function () {
+	this._currentRequest.abort();
+};
+
+// Flushes the headers of the current native request
+RedirectableRequest.prototype.flushHeaders = function () {
+	this._currentRequest.flushHeaders();
+};
+
+// Sets the noDelay option of the current native request
+RedirectableRequest.prototype.setNoDelay = function (noDelay) {
+	this._currentRequest.setNoDelay(noDelay);
+};
+
+// Sets the socketKeepAlive option of the current native request
+RedirectableRequest.prototype.setSocketKeepAlive = function (enable, initialDelay) {
+	this._currentRequest.setSocketKeepAlive(enable, initialDelay);
+};
+
+// Sets the timeout option of the current native request
+RedirectableRequest.prototype.setTimeout = function (timeout, callback) {
+	this._currentRequest.setTimeout(timeout, callback);
+};
+
+// Writes buffered data to the current native request
+RedirectableRequest.prototype.write = function (data, encoding, callback) {
+	this._currentRequest.write(data, encoding, callback);
+	this._bufferedWrites.push({data: data, encoding: encoding});
+};
+
+// Ends the current native request
+RedirectableRequest.prototype.end = function (data, encoding, callback) {
+	this._currentRequest.end(data, encoding, callback);
+	if (data) {
+		this._bufferedWrites.push({data: data, encoding: encoding});
+	}
+};
+
+// Export a redirecting wrapper for each native protocol
+Object.keys(nativeProtocols).forEach(function (protocol) {
+	var scheme = schemes[protocol] = protocol.substr(0, protocol.length - 1);
+	var nativeProtocol = nativeProtocols[protocol];
+	var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);
+
+	// Executes an HTTP request, following redirects
+	wrappedProtocol.request = function (options, callback) {
+		if (typeof options === 'string') {
+			options = url.parse(options);
+			options.maxRedirects = exports.maxRedirects;
+		} else {
+			options = Object.assign({
+				maxRedirects: exports.maxRedirects,
+				protocol: protocol
+			}, options);
+		}
+		assert.equal(options.protocol, protocol, 'protocol mismatch');
+		debug('options', options);
+
+		return new RedirectableRequest(options, callback);
+	};
+
+	// Executes a GET request, following redirects
+	wrappedProtocol.get = function (options, callback) {
+		var request = wrappedProtocol.request(options, callback);
+		request.end();
+		return request;
+	};
+});
+
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports) {
+
+module.exports = require("url");
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+/**
+ * This is the common logic for both the Node.js and web browser
+ * implementations of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
+exports.coerce = coerce;
+exports.disable = disable;
+exports.enable = enable;
+exports.enabled = enabled;
+exports.humanize = __webpack_require__(35);
+
+/**
+ * The currently active debug mode names, and names to skip.
+ */
+
+exports.names = [];
+exports.skips = [];
+
+/**
+ * Map of special "%n" handling functions, for the debug "format" argument.
+ *
+ * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
+ */
+
+exports.formatters = {};
+
+/**
+ * Previous log timestamp.
+ */
+
+var prevTime;
+
+/**
+ * Select a color.
+ * @param {String} namespace
+ * @return {Number}
+ * @api private
+ */
+
+function selectColor(namespace) {
+  var hash = 0, i;
+
+  for (i in namespace) {
+    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);
+    hash |= 0; // Convert to 32bit integer
+  }
+
+  return exports.colors[Math.abs(hash) % exports.colors.length];
+}
+
+/**
+ * Create a debugger with the given `namespace`.
+ *
+ * @param {String} namespace
+ * @return {Function}
+ * @api public
+ */
+
+function createDebug(namespace) {
+
+  function debug() {
+    // disabled?
+    if (!debug.enabled) return;
+
+    var self = debug;
+
+    // set `diff` timestamp
+    var curr = +new Date();
+    var ms = curr - (prevTime || curr);
+    self.diff = ms;
+    self.prev = prevTime;
+    self.curr = curr;
+    prevTime = curr;
+
+    // turn the `arguments` into a proper Array
+    var args = new Array(arguments.length);
+    for (var i = 0; i < args.length; i++) {
+      args[i] = arguments[i];
+    }
+
+    args[0] = exports.coerce(args[0]);
+
+    if ('string' !== typeof args[0]) {
+      // anything else let's inspect with %O
+      args.unshift('%O');
+    }
+
+    // apply any `formatters` transformations
+    var index = 0;
+    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
+      // if we encounter an escaped % then don't increase the array index
+      if (match === '%%') return match;
+      index++;
+      var formatter = exports.formatters[format];
+      if ('function' === typeof formatter) {
+        var val = args[index];
+        match = formatter.call(self, val);
+
+        // now we need to remove `args[index]` since it's inlined in the `format`
+        args.splice(index, 1);
+        index--;
+      }
+      return match;
+    });
+
+    // apply env-specific formatting (colors, etc.)
+    exports.formatArgs.call(self, args);
+
+    var logFn = debug.log || exports.log || console.log.bind(console);
+    logFn.apply(self, args);
+  }
+
+  debug.namespace = namespace;
+  debug.enabled = exports.enabled(namespace);
+  debug.useColors = exports.useColors();
+  debug.color = selectColor(namespace);
+
+  // env-specific initialization logic for debug instances
+  if ('function' === typeof exports.init) {
+    exports.init(debug);
+  }
+
+  return debug;
+}
+
+/**
+ * Enables a debug mode by namespaces. This can include modes
+ * separated by a colon and wildcards.
+ *
+ * @param {String} namespaces
+ * @api public
+ */
+
+function enable(namespaces) {
+  exports.save(namespaces);
+
+  exports.names = [];
+  exports.skips = [];
+
+  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
+  var len = split.length;
+
+  for (var i = 0; i < len; i++) {
+    if (!split[i]) continue; // ignore empty strings
+    namespaces = split[i].replace(/\*/g, '.*?');
+    if (namespaces[0] === '-') {
+      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
+    } else {
+      exports.names.push(new RegExp('^' + namespaces + '$'));
+    }
+  }
+}
+
+/**
+ * Disable debug output.
+ *
+ * @api public
+ */
+
+function disable() {
+  exports.enable('');
+}
+
+/**
+ * Returns true if the given mode name is enabled, false otherwise.
+ *
+ * @param {String} name
+ * @return {Boolean}
+ * @api public
+ */
+
+function enabled(name) {
+  var i, len;
+  for (i = 0, len = exports.skips.length; i < len; i++) {
+    if (exports.skips[i].test(name)) {
+      return false;
+    }
+  }
+  for (i = 0, len = exports.names.length; i < len; i++) {
+    if (exports.names[i].test(name)) {
+      return true;
+    }
+  }
+  return false;
+}
+
+/**
+ * Coerce `val`.
+ *
+ * @param {Mixed} val
+ * @return {Mixed}
+ * @api private
+ */
+
+function coerce(val) {
+  if (val instanceof Error) return val.stack || val.message;
+  return val;
+}
+
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+module.exports = function isCancel(value) {
+  return !!(value && value.__CANCEL__);
+};
+
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * A `Cancel` is an object that is thrown when an operation is canceled.
+ *
+ * @class
+ * @param {string=} message The message.
+ */
+function Cancel(message) {
+  this.message = message;
+}
+
+Cancel.prototype.toString = function toString() {
+  return 'Cancel' + (this.message ? ': ' + this.message : '');
+};
+
+Cancel.prototype.__CANCEL__ = true;
+
+module.exports = Cancel;
+
+
+/***/ }),
+/* 17 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+
+var Flexio = __webpack_require__(18);
+
+exports.default = Flexio;
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var axios = __webpack_require__(20);
+var task = __webpack_require__(50);
+
+var base_url = 'https://www.flex.io/api/v1';
+
+var cfg = {
+  token: '',
+  baseUrl: 'https://www.flex.io/api/v1',
+  insecure: false,
+  debug: false
+};
+
+var pipeToCode = function pipeToCode(task_arr) {
+  var retval = _.map(task_arr, function (t) {
+    var cmd_str = Flexio.task.toCode(t);
+
+    if (_.get(t, 'params.lang', '') != 'python') cmd_str = cmd_str.replace(/\n/g, '\n  ');
+
+    return cmd_str;
+  });
+
+  var retval = ['Flexio.pipe()'].concat(retval);
+
+  return retval.join('\n  .');
+};
+
+var Flexio = {
+  version: __webpack_require__(75).version,
+
+  _init: function _init() {
+    this.connections = __webpack_require__(76).getConnectionsObject(this);
+    this.pipes = __webpack_require__(77).getPipesObject(this);
+    this.util = __webpack_require__(1).getUtilObject(this);
+    this._http = null;
+
+    var getPipeConstructor = __webpack_require__(78).getPipeConstructor;
+    this.pipe = getPipeConstructor(this);
+
+
+    var getConnectionConstructor = __webpack_require__(79).getConnectionConstructor;
+    this.connection = getConnectionConstructor(this);
+  },
+  setup: function setup(token, params) {
+    cfg = _.assign(cfg, { token: token }, params);
+    this._http = null;
+    this._createHttp();
+    return this;
+  },
+  getConfig: function getConfig() {
+    return _.assign({}, cfg);
+  },
+  http: function http() {
+    if (!this._http) this._createHttp();
+
+    return this._http;
+  },
+
+
+  task: task,
+
+  _createHttp: function _createHttp() {
+    var axios_opts = {
+      baseURL: cfg.baseUrl,
+      headers: { 'Authorization': 'Bearer ' + cfg.token }
+    };
+
+    if (cfg.insecure === true) process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
+
+    this._http = axios.create(axios_opts);
+  }
+};
+
+Flexio._init();
+
+module.exports = Flexio;
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports) {
+
+module.exports = function(module) {
+	if(!module.webpackPolyfill) {
+		module.deprecate = function() {};
+		module.paths = [];
+		// module.parent = undefined by default
+		if(!module.children) module.children = [];
+		Object.defineProperty(module, "loaded", {
+			enumerable: true,
+			get: function() {
+				return module.l;
+			}
+		});
+		Object.defineProperty(module, "id", {
+			enumerable: true,
+			get: function() {
+				return module.i;
+			}
+		});
+		module.webpackPolyfill = 1;
+	}
+	return module;
+};
+
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__(21);
+
+/***/ }),
+/* 21 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+var bind = __webpack_require__(6);
+var Axios = __webpack_require__(23);
+var defaults = __webpack_require__(4);
+
+/**
+ * Create an instance of Axios
+ *
+ * @param {Object} defaultConfig The default config for the instance
+ * @return {Axios} A new instance of Axios
+ */
+function createInstance(defaultConfig) {
+  var context = new Axios(defaultConfig);
+  var instance = bind(Axios.prototype.request, context);
+
+  // Copy axios.prototype to instance
+  utils.extend(instance, Axios.prototype, context);
+
+  // Copy context to instance
+  utils.extend(instance, context);
+
+  return instance;
+}
+
+// Create the default instance to be exported
+var axios = createInstance(defaults);
+
+// Expose Axios class to allow class inheritance
+axios.Axios = Axios;
+
+// Factory for creating new instances
+axios.create = function create(instanceConfig) {
+  return createInstance(utils.merge(defaults, instanceConfig));
+};
+
+// Expose Cancel & CancelToken
+axios.Cancel = __webpack_require__(16);
+axios.CancelToken = __webpack_require__(48);
+axios.isCancel = __webpack_require__(15);
+
+// Expose all/spread
+axios.all = function all(promises) {
+  return Promise.all(promises);
+};
+axios.spread = __webpack_require__(49);
+
+module.exports = axios;
+
+// Allow use of default import syntax in TypeScript
+module.exports.default = axios;
+
+
+/***/ }),
+/* 22 */
+/***/ (function(module, exports) {
+
+/*!
+ * Determine if an object is a Buffer
+ *
+ * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
+ * @license  MIT
+ */
+
+// The _isBuffer check is for Safari 5-7 support, because it's missing
+// Object.prototype.constructor. Remove this eventually
+module.exports = function (obj) {
+  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
+}
+
+function isBuffer (obj) {
+  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
+}
+
+// For Node v0.10 support. Remove this eventually.
+function isSlowBuffer (obj) {
+  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
+}
+
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var defaults = __webpack_require__(4);
+var utils = __webpack_require__(3);
+var InterceptorManager = __webpack_require__(43);
+var dispatchRequest = __webpack_require__(44);
+var isAbsoluteURL = __webpack_require__(46);
+var combineURLs = __webpack_require__(47);
+
+/**
+ * Create a new instance of Axios
+ *
+ * @param {Object} instanceConfig The default config for the instance
+ */
+function Axios(instanceConfig) {
+  this.defaults = instanceConfig;
+  this.interceptors = {
+    request: new InterceptorManager(),
+    response: new InterceptorManager()
+  };
+}
+
+/**
+ * Dispatch a request
+ *
+ * @param {Object} config The config specific for this request (merged with this.defaults)
+ */
+Axios.prototype.request = function request(config) {
+  /*eslint no-param-reassign:0*/
+  // Allow for axios('example/url'[, config]) a la fetch API
+  if (typeof config === 'string') {
+    config = utils.merge({
+      url: arguments[0]
+    }, arguments[1]);
+  }
+
+  config = utils.merge(defaults, this.defaults, { method: 'get' }, config);
+  config.method = config.method.toLowerCase();
+
+  // Support baseURL config
+  if (config.baseURL && !isAbsoluteURL(config.url)) {
+    config.url = combineURLs(config.baseURL, config.url);
+  }
+
+  // Hook up interceptors middleware
+  var chain = [dispatchRequest, undefined];
+  var promise = Promise.resolve(config);
+
+  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
+    chain.unshift(interceptor.fulfilled, interceptor.rejected);
+  });
+
+  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
+    chain.push(interceptor.fulfilled, interceptor.rejected);
+  });
+
+  while (chain.length) {
+    promise = promise.then(chain.shift(), chain.shift());
+  }
+
+  return promise;
+};
+
+// Provide aliases for supported request methods
+utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
+  /*eslint func-names:0*/
+  Axios.prototype[method] = function(url, config) {
+    return this.request(utils.merge(config || {}, {
+      method: method,
+      url: url
+    }));
+  };
+});
+
+utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
+  /*eslint func-names:0*/
+  Axios.prototype[method] = function(url, data, config) {
+    return this.request(utils.merge(config || {}, {
+      method: method,
+      url: url,
+      data: data
+    }));
+  };
+});
+
+module.exports = Axios;
+
+
+/***/ }),
+/* 24 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+
+module.exports = function normalizeHeaderName(headers, normalizedName) {
+  utils.forEach(headers, function processHeader(value, name) {
+    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
+      headers[normalizedName] = value;
+      delete headers[name];
+    }
+  });
+};
+
+
+/***/ }),
+/* 25 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+var settle = __webpack_require__(7);
+var buildURL = __webpack_require__(9);
+var parseHeaders = __webpack_require__(26);
+var isURLSameOrigin = __webpack_require__(27);
+var createError = __webpack_require__(5);
+var btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || __webpack_require__(28);
+
+module.exports = function xhrAdapter(config) {
+  return new Promise(function dispatchXhrRequest(resolve, reject) {
+    var requestData = config.data;
+    var requestHeaders = config.headers;
+
+    if (utils.isFormData(requestData)) {
+      delete requestHeaders['Content-Type']; // Let the browser set it
+    }
+
+    var request = new XMLHttpRequest();
+    var loadEvent = 'onreadystatechange';
+    var xDomain = false;
+
+    // For IE 8/9 CORS support
+    // Only supports POST and GET calls and doesn't returns the response headers.
+    // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.
+    if (process.env.NODE_ENV !== 'test' &&
+        typeof window !== 'undefined' &&
+        window.XDomainRequest && !('withCredentials' in request) &&
+        !isURLSameOrigin(config.url)) {
+      request = new window.XDomainRequest();
+      loadEvent = 'onload';
+      xDomain = true;
+      request.onprogress = function handleProgress() {};
+      request.ontimeout = function handleTimeout() {};
+    }
+
+    // HTTP basic authentication
+    if (config.auth) {
+      var username = config.auth.username || '';
+      var password = config.auth.password || '';
+      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
+    }
+
+    request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);
+
+    // Set the request timeout in MS
+    request.timeout = config.timeout;
+
+    // Listen for ready state
+    request[loadEvent] = function handleLoad() {
+      if (!request || (request.readyState !== 4 && !xDomain)) {
+        return;
+      }
+
+      // The request errored out and we didn't get a response, this will be
+      // handled by onerror instead
+      // With one exception: request that using file: protocol, most browsers
+      // will return status as 0 even though it's a successful request
+      if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
+        return;
+      }
+
+      // Prepare the response
+      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
+      var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;
+      var response = {
+        data: responseData,
+        // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)
+        status: request.status === 1223 ? 204 : request.status,
+        statusText: request.status === 1223 ? 'No Content' : request.statusText,
+        headers: responseHeaders,
+        config: config,
+        request: request
+      };
+
+      settle(resolve, reject, response);
+
+      // Clean up request
+      request = null;
+    };
+
+    // Handle low level network errors
+    request.onerror = function handleError() {
+      // Real errors are hidden from us by the browser
+      // onerror should only fire if it's a network error
+      reject(createError('Network Error', config, null, request));
+
+      // Clean up request
+      request = null;
+    };
+
+    // Handle timeout
+    request.ontimeout = function handleTimeout() {
+      reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',
+        request));
+
+      // Clean up request
+      request = null;
+    };
+
+    // Add xsrf header
+    // This is only done if running in a standard browser environment.
+    // Specifically not if we're in a web worker, or react-native.
+    if (utils.isStandardBrowserEnv()) {
+      var cookies = __webpack_require__(29);
+
+      // Add xsrf header
+      var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?
+          cookies.read(config.xsrfCookieName) :
+          undefined;
+
+      if (xsrfValue) {
+        requestHeaders[config.xsrfHeaderName] = xsrfValue;
+      }
+    }
+
+    // Add headers to the request
+    if ('setRequestHeader' in request) {
+      utils.forEach(requestHeaders, function setRequestHeader(val, key) {
+        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
+          // Remove Content-Type if data is undefined
+          delete requestHeaders[key];
+        } else {
+          // Otherwise add header to the request
+          request.setRequestHeader(key, val);
+        }
+      });
+    }
+
+    // Add withCredentials to request if needed
+    if (config.withCredentials) {
+      request.withCredentials = true;
+    }
+
+    // Add responseType to request if needed
+    if (config.responseType) {
+      try {
+        request.responseType = config.responseType;
+      } catch (e) {
+        // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.
+        // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.
+        if (config.responseType !== 'json') {
+          throw e;
+        }
+      }
+    }
+
+    // Handle progress if needed
+    if (typeof config.onDownloadProgress === 'function') {
+      request.addEventListener('progress', config.onDownloadProgress);
+    }
+
+    // Not all browsers support upload events
+    if (typeof config.onUploadProgress === 'function' && request.upload) {
+      request.upload.addEventListener('progress', config.onUploadProgress);
+    }
+
+    if (config.cancelToken) {
+      // Handle cancellation
+      config.cancelToken.promise.then(function onCanceled(cancel) {
+        if (!request) {
+          return;
+        }
+
+        request.abort();
+        reject(cancel);
+        // Clean up request
+        request = null;
+      });
+    }
+
+    if (requestData === undefined) {
+      requestData = null;
+    }
+
+    // Send the request
+    request.send(requestData);
+  });
+};
+
+
+/***/ }),
+/* 26 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+
+/**
+ * Parse headers into an object
+ *
+ * ```
+ * Date: Wed, 27 Aug 2014 08:58:49 GMT
+ * Content-Type: application/json
+ * Connection: keep-alive
+ * Transfer-Encoding: chunked
+ * ```
+ *
+ * @param {String} headers Headers needing to be parsed
+ * @returns {Object} Headers parsed into an object
+ */
+module.exports = function parseHeaders(headers) {
+  var parsed = {};
+  var key;
+  var val;
+  var i;
+
+  if (!headers) { return parsed; }
+
+  utils.forEach(headers.split('\n'), function parser(line) {
+    i = line.indexOf(':');
+    key = utils.trim(line.substr(0, i)).toLowerCase();
+    val = utils.trim(line.substr(i + 1));
+
+    if (key) {
+      parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
+    }
+  });
+
+  return parsed;
+};
+
+
+/***/ }),
+/* 27 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+
+module.exports = (
+  utils.isStandardBrowserEnv() ?
+
+  // Standard browser envs have full support of the APIs needed to test
+  // whether the request URL is of the same origin as current location.
+  (function standardBrowserEnv() {
+    var msie = /(msie|trident)/i.test(navigator.userAgent);
+    var urlParsingNode = document.createElement('a');
+    var originURL;
+
+    /**
+    * Parse a URL to discover it's components
+    *
+    * @param {String} url The URL to be parsed
+    * @returns {Object}
+    */
+    function resolveURL(url) {
+      var href = url;
+
+      if (msie) {
+        // IE needs attribute set twice to normalize properties
+        urlParsingNode.setAttribute('href', href);
+        href = urlParsingNode.href;
+      }
+
+      urlParsingNode.setAttribute('href', href);
+
+      // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
+      return {
+        href: urlParsingNode.href,
+        protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
+        host: urlParsingNode.host,
+        search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
+        hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
+        hostname: urlParsingNode.hostname,
+        port: urlParsingNode.port,
+        pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
+                  urlParsingNode.pathname :
+                  '/' + urlParsingNode.pathname
+      };
+    }
+
+    originURL = resolveURL(window.location.href);
+
+    /**
+    * Determine if a URL shares the same origin as the current location
+    *
+    * @param {String} requestURL The URL to test
+    * @returns {boolean} True if URL shares the same origin, otherwise false
+    */
+    return function isURLSameOrigin(requestURL) {
+      var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
+      return (parsed.protocol === originURL.protocol &&
+            parsed.host === originURL.host);
+    };
+  })() :
+
+  // Non standard browser envs (web workers, react-native) lack needed support.
+  (function nonStandardBrowserEnv() {
+    return function isURLSameOrigin() {
+      return true;
+    };
+  })()
+);
+
+
+/***/ }),
+/* 28 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js
+
+var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+function E() {
+  this.message = 'String contains an invalid character';
+}
+E.prototype = new Error;
+E.prototype.code = 5;
+E.prototype.name = 'InvalidCharacterError';
+
+function btoa(input) {
+  var str = String(input);
+  var output = '';
+  for (
+    // initialize result and counter
+    var block, charCode, idx = 0, map = chars;
+    // if the next str index does not exist:
+    //   change the mapping table to "="
+    //   check if d has no fractional digits
+    str.charAt(idx | 0) || (map = '=', idx % 1);
+    // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8
+    output += map.charAt(63 & block >> 8 - idx % 1 * 8)
+  ) {
+    charCode = str.charCodeAt(idx += 3 / 4);
+    if (charCode > 0xFF) {
+      throw new E();
+    }
+    block = block << 8 | charCode;
+  }
+  return output;
+}
+
+module.exports = btoa;
+
+
+/***/ }),
+/* 29 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+
+module.exports = (
+  utils.isStandardBrowserEnv() ?
+
+  // Standard browser envs support document.cookie
+  (function standardBrowserEnv() {
+    return {
+      write: function write(name, value, expires, path, domain, secure) {
+        var cookie = [];
+        cookie.push(name + '=' + encodeURIComponent(value));
+
+        if (utils.isNumber(expires)) {
+          cookie.push('expires=' + new Date(expires).toGMTString());
+        }
+
+        if (utils.isString(path)) {
+          cookie.push('path=' + path);
+        }
+
+        if (utils.isString(domain)) {
+          cookie.push('domain=' + domain);
+        }
+
+        if (secure === true) {
+          cookie.push('secure');
+        }
+
+        document.cookie = cookie.join('; ');
+      },
+
+      read: function read(name) {
+        var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
+        return (match ? decodeURIComponent(match[3]) : null);
+      },
+
+      remove: function remove(name) {
+        this.write(name, '', Date.now() - 86400000);
+      }
+    };
+  })() :
+
+  // Non standard browser env (web workers, react-native) lack needed support.
+  (function nonStandardBrowserEnv() {
+    return {
+      write: function write() {},
+      read: function read() { return null; },
+      remove: function remove() {}
+    };
+  })()
+);
+
+
+/***/ }),
+/* 30 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+var settle = __webpack_require__(7);
+var buildURL = __webpack_require__(9);
+var http = __webpack_require__(10);
+var https = __webpack_require__(11);
+var httpFollow = __webpack_require__(12).http;
+var httpsFollow = __webpack_require__(12).https;
+var url = __webpack_require__(13);
+var zlib = __webpack_require__(41);
+var pkg = __webpack_require__(42);
+var createError = __webpack_require__(5);
+var enhanceError = __webpack_require__(8);
+
+/*eslint consistent-return:0*/
+module.exports = function httpAdapter(config) {
+  return new Promise(function dispatchHttpRequest(resolve, reject) {
+    var data = config.data;
+    var headers = config.headers;
+    var timer;
+    var aborted = false;
+
+    // Set User-Agent (required by some servers)
+    // Only set header if it hasn't been set in config
+    // See https://github.com/mzabriskie/axios/issues/69
+    if (!headers['User-Agent'] && !headers['user-agent']) {
+      headers['User-Agent'] = 'axios/' + pkg.version;
+    }
+
+    if (data && !utils.isStream(data)) {
+      if (Buffer.isBuffer(data)) {
+        // Nothing to do...
+      } else if (utils.isArrayBuffer(data)) {
+        data = new Buffer(new Uint8Array(data));
+      } else if (utils.isString(data)) {
+        data = new Buffer(data, 'utf-8');
+      } else {
+        return reject(createError(
+          'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',
+          config
+        ));
+      }
+
+      // Add Content-Length header if data exists
+      headers['Content-Length'] = data.length;
+    }
+
+    // HTTP basic authentication
+    var auth = undefined;
+    if (config.auth) {
+      var username = config.auth.username || '';
+      var password = config.auth.password || '';
+      auth = username + ':' + password;
+    }
+
+    // Parse url
+    var parsed = url.parse(config.url);
+    var protocol = parsed.protocol || 'http:';
+
+    if (!auth && parsed.auth) {
+      var urlAuth = parsed.auth.split(':');
+      var urlUsername = urlAuth[0] || '';
+      var urlPassword = urlAuth[1] || '';
+      auth = urlUsername + ':' + urlPassword;
+    }
+
+    if (auth) {
+      delete headers.Authorization;
+    }
+
+    var isHttps = protocol === 'https:';
+    var agent = isHttps ? config.httpsAgent : config.httpAgent;
+
+    var options = {
+      hostname: parsed.hostname,
+      port: parsed.port,
+      path: buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\?/, ''),
+      method: config.method,
+      headers: headers,
+      agent: agent,
+      auth: auth
+    };
+
+    var proxy = config.proxy;
+    if (!proxy) {
+      var proxyEnv = protocol.slice(0, -1) + '_proxy';
+      var proxyUrl = process.env[proxyEnv] || process.env[proxyEnv.toUpperCase()];
+      if (proxyUrl) {
+        var parsedProxyUrl = url.parse(proxyUrl);
+        proxy = {
+          host: parsedProxyUrl.hostname,
+          port: parsedProxyUrl.port
+        };
+
+        if (parsedProxyUrl.auth) {
+          var proxyUrlAuth = parsedProxyUrl.auth.split(':');
+          proxy.auth = {
+            username: proxyUrlAuth[0],
+            password: proxyUrlAuth[1]
+          };
+        }
+      }
+    }
+
+    if (proxy) {
+      options.hostname = proxy.host;
+      options.host = proxy.host;
+      options.headers.host = parsed.hostname + (parsed.port ? ':' + parsed.port : '');
+      options.port = proxy.port;
+      options.path = protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path;
+
+      // Basic proxy authorization
+      if (proxy.auth) {
+        var base64 = new Buffer(proxy.auth.username + ':' + proxy.auth.password, 'utf8').toString('base64');
+        options.headers['Proxy-Authorization'] = 'Basic ' + base64;
+      }
+    }
+
+    var transport;
+    if (config.maxRedirects === 0) {
+      transport = isHttps ? https : http;
+    } else {
+      if (config.maxRedirects) {
+        options.maxRedirects = config.maxRedirects;
+      }
+      transport = isHttps ? httpsFollow : httpFollow;
+    }
+
+    // Create the request
+    var req = transport.request(options, function handleResponse(res) {
+      if (aborted) return;
+
+      // Response has been received so kill timer that handles request timeout
+      clearTimeout(timer);
+      timer = null;
+
+      // uncompress the response body transparently if required
+      var stream = res;
+      switch (res.headers['content-encoding']) {
+      /*eslint default-case:0*/
+      case 'gzip':
+      case 'compress':
+      case 'deflate':
+        // add the unzipper to the body stream processing pipeline
+        stream = stream.pipe(zlib.createUnzip());
+
+        // remove the content-encoding in order to not confuse downstream operations
+        delete res.headers['content-encoding'];
+        break;
+      }
+
+      // return the last request in case of redirects
+      var lastRequest = res.req || req;
+
+      var response = {
+        status: res.statusCode,
+        statusText: res.statusMessage,
+        headers: res.headers,
+        config: config,
+        request: lastRequest
+      };
+
+      if (config.responseType === 'stream') {
+        response.data = stream;
+        settle(resolve, reject, response);
+      } else {
+        var responseBuffer = [];
+        stream.on('data', function handleStreamData(chunk) {
+          responseBuffer.push(chunk);
+
+          // make sure the content length is not over the maxContentLength if specified
+          if (config.maxContentLength > -1 && Buffer.concat(responseBuffer).length > config.maxContentLength) {
+            reject(createError('maxContentLength size of ' + config.maxContentLength + ' exceeded',
+              config, null, lastRequest));
+          }
+        });
+
+        stream.on('error', function handleStreamError(err) {
+          if (aborted) return;
+          reject(enhanceError(err, config, null, lastRequest));
+        });
+
+        stream.on('end', function handleStreamEnd() {
+          var responseData = Buffer.concat(responseBuffer);
+          if (config.responseType !== 'arraybuffer') {
+            responseData = responseData.toString('utf8');
+          }
+
+          response.data = responseData;
+          settle(resolve, reject, response);
+        });
+      }
+    });
+
+    // Handle errors
+    req.on('error', function handleRequestError(err) {
+      if (aborted) return;
+      reject(enhanceError(err, config, null, req));
+    });
+
+    // Handle request timeout
+    if (config.timeout && !timer) {
+      timer = setTimeout(function handleRequestTimeout() {
+        req.abort();
+        reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', req));
+        aborted = true;
+      }, config.timeout);
+    }
+
+    if (config.cancelToken) {
+      // Handle cancellation
+      config.cancelToken.promise.then(function onCanceled(cancel) {
+        if (aborted) {
+          return;
+        }
+
+        req.abort();
+        reject(cancel);
+        aborted = true;
+      });
+    }
+
+    // Send the request
+    if (utils.isStream(data)) {
+      data.pipe(req);
+    } else {
+      req.end(data);
+    }
+  });
+};
+
+
+/***/ }),
+/* 31 */
+/***/ (function(module, exports) {
+
+module.exports = require("assert");
+
+/***/ }),
+/* 32 */
+/***/ (function(module, exports) {
+
+module.exports = require("stream");
+
+/***/ }),
+/* 33 */
+/***/ (function(module, exports, __webpack_require__) {
+
+/**
+ * Detect Electron renderer process, which is node, but we should
+ * treat as a browser.
+ */
+
+if (typeof process !== 'undefined' && process.type === 'renderer') {
+  module.exports = __webpack_require__(34);
+} else {
+  module.exports = __webpack_require__(36);
+}
+
+
+/***/ }),
+/* 34 */
+/***/ (function(module, exports, __webpack_require__) {
+
+/**
+ * This is the web browser implementation of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = __webpack_require__(14);
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+exports.storage = 'undefined' != typeof chrome
+               && 'undefined' != typeof chrome.storage
+                  ? chrome.storage.local
+                  : localstorage();
+
+/**
+ * Colors.
+ */
+
+exports.colors = [
+  'lightseagreen',
+  'forestgreen',
+  'goldenrod',
+  'dodgerblue',
+  'darkorchid',
+  'crimson'
+];
+
+/**
+ * Currently only WebKit-based Web Inspectors, Firefox >= v31,
+ * and the Firebug extension (any Firefox version) are known
+ * to support "%c" CSS customizations.
+ *
+ * TODO: add a `localStorage` variable to explicitly enable/disable colors
+ */
+
+function useColors() {
+  // NB: In an Electron preload script, document will be defined but not fully
+  // initialized. Since we know we're in Chrome, we'll just detect this case
+  // explicitly
+  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
+    return true;
+  }
+
+  // is webkit? http://stackoverflow.com/a/16459606/376773
+  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
+  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
+    // is firebug? http://stackoverflow.com/a/398120/376773
+    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
+    // is firefox >= v31?
+    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
+    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
+    // double check webkit in userAgent just in case we are in a worker
+    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
+}
+
+/**
+ * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
+ */
+
+exports.formatters.j = function(v) {
+  try {
+    return JSON.stringify(v);
+  } catch (err) {
+    return '[UnexpectedJSONParseError]: ' + err.message;
+  }
+};
+
+
+/**
+ * Colorize log arguments if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+  var useColors = this.useColors;
+
+  args[0] = (useColors ? '%c' : '')
+    + this.namespace
+    + (useColors ? ' %c' : ' ')
+    + args[0]
+    + (useColors ? '%c ' : ' ')
+    + '+' + exports.humanize(this.diff);
+
+  if (!useColors) return;
+
+  var c = 'color: ' + this.color;
+  args.splice(1, 0, c, 'color: inherit')
+
+  // the final "%c" is somewhat tricky, because there could be other
+  // arguments passed either before or after the %c, so we need to
+  // figure out the correct index to insert the CSS into
+  var index = 0;
+  var lastC = 0;
+  args[0].replace(/%[a-zA-Z%]/g, function(match) {
+    if ('%%' === match) return;
+    index++;
+    if ('%c' === match) {
+      // we only are interested in the *last* %c
+      // (the user may have provided their own)
+      lastC = index;
+    }
+  });
+
+  args.splice(lastC, 0, c);
+}
+
+/**
+ * Invokes `console.log()` when available.
+ * No-op when `console.log` is not a "function".
+ *
+ * @api public
+ */
+
+function log() {
+  // this hackery is required for IE8/9, where
+  // the `console.log` function doesn't have 'apply'
+  return 'object' === typeof console
+    && console.log
+    && Function.prototype.apply.call(console.log, console, arguments);
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+
+function save(namespaces) {
+  try {
+    if (null == namespaces) {
+      exports.storage.removeItem('debug');
+    } else {
+      exports.storage.debug = namespaces;
+    }
+  } catch(e) {}
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+function load() {
+  var r;
+  try {
+    r = exports.storage.debug;
+  } catch(e) {}
+
+  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
+  if (!r && typeof process !== 'undefined' && 'env' in process) {
+    r = process.env.DEBUG;
+  }
+
+  return r;
+}
+
+/**
+ * Enable namespaces listed in `localStorage.debug` initially.
+ */
+
+exports.enable(load());
+
+/**
+ * Localstorage attempts to return the localstorage.
+ *
+ * This is necessary because safari throws
+ * when a user disables cookies/localstorage
+ * and you attempt to access it.
+ *
+ * @return {LocalStorage}
+ * @api private
+ */
+
+function localstorage() {
+  try {
+    return window.localStorage;
+  } catch (e) {}
+}
+
+
+/***/ }),
+/* 35 */
+/***/ (function(module, exports) {
+
+/**
+ * Helpers.
+ */
+
+var s = 1000;
+var m = s * 60;
+var h = m * 60;
+var d = h * 24;
+var y = d * 365.25;
+
+/**
+ * Parse or format the given `val`.
+ *
+ * Options:
+ *
+ *  - `long` verbose formatting [false]
+ *
+ * @param {String|Number} val
+ * @param {Object} [options]
+ * @throws {Error} throw an error if val is not a non-empty string or a number
+ * @return {String|Number}
+ * @api public
+ */
+
+module.exports = function(val, options) {
+  options = options || {};
+  var type = typeof val;
+  if (type === 'string' && val.length > 0) {
+    return parse(val);
+  } else if (type === 'number' && isNaN(val) === false) {
+    return options.long ? fmtLong(val) : fmtShort(val);
+  }
+  throw new Error(
+    'val is not a non-empty string or a valid number. val=' +
+      JSON.stringify(val)
+  );
+};
+
+/**
+ * Parse the given `str` and return milliseconds.
+ *
+ * @param {String} str
+ * @return {Number}
+ * @api private
+ */
+
+function parse(str) {
+  str = String(str);
+  if (str.length > 100) {
+    return;
+  }
+  var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(
+    str
+  );
+  if (!match) {
+    return;
+  }
+  var n = parseFloat(match[1]);
+  var type = (match[2] || 'ms').toLowerCase();
+  switch (type) {
+    case 'years':
+    case 'year':
+    case 'yrs':
+    case 'yr':
+    case 'y':
+      return n * y;
+    case 'days':
+    case 'day':
+    case 'd':
+      return n * d;
+    case 'hours':
+    case 'hour':
+    case 'hrs':
+    case 'hr':
+    case 'h':
+      return n * h;
+    case 'minutes':
+    case 'minute':
+    case 'mins':
+    case 'min':
+    case 'm':
+      return n * m;
+    case 'seconds':
+    case 'second':
+    case 'secs':
+    case 'sec':
+    case 's':
+      return n * s;
+    case 'milliseconds':
+    case 'millisecond':
+    case 'msecs':
+    case 'msec':
+    case 'ms':
+      return n;
+    default:
+      return undefined;
+  }
+}
+
+/**
+ * Short format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+function fmtShort(ms) {
+  if (ms >= d) {
+    return Math.round(ms / d) + 'd';
+  }
+  if (ms >= h) {
+    return Math.round(ms / h) + 'h';
+  }
+  if (ms >= m) {
+    return Math.round(ms / m) + 'm';
+  }
+  if (ms >= s) {
+    return Math.round(ms / s) + 's';
+  }
+  return ms + 'ms';
+}
+
+/**
+ * Long format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+function fmtLong(ms) {
+  return plural(ms, d, 'day') ||
+    plural(ms, h, 'hour') ||
+    plural(ms, m, 'minute') ||
+    plural(ms, s, 'second') ||
+    ms + ' ms';
+}
+
+/**
+ * Pluralization helper.
+ */
+
+function plural(ms, n, name) {
+  if (ms < n) {
+    return;
+  }
+  if (ms < n * 1.5) {
+    return Math.floor(ms / n) + ' ' + name;
+  }
+  return Math.ceil(ms / n) + ' ' + name + 's';
+}
+
+
+/***/ }),
+/* 36 */
+/***/ (function(module, exports, __webpack_require__) {
+
+/**
+ * Module dependencies.
+ */
+
+var tty = __webpack_require__(37);
+var util = __webpack_require__(38);
+
+/**
+ * This is the Node.js implementation of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = __webpack_require__(14);
+exports.init = init;
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+
+/**
+ * Colors.
+ */
+
+exports.colors = [6, 2, 3, 4, 5, 1];
+
+/**
+ * Build up the default `inspectOpts` object from the environment variables.
+ *
+ *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
+ */
+
+exports.inspectOpts = Object.keys(process.env).filter(function (key) {
+  return /^debug_/i.test(key);
+}).reduce(function (obj, key) {
+  // camel-case
+  var prop = key
+    .substring(6)
+    .toLowerCase()
+    .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });
+
+  // coerce string value into JS value
+  var val = process.env[key];
+  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
+  else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
+  else if (val === 'null') val = null;
+  else val = Number(val);
+
+  obj[prop] = val;
+  return obj;
+}, {});
+
+/**
+ * The file descriptor to write the `debug()` calls to.
+ * Set the `DEBUG_FD` env variable to override with another value. i.e.:
+ *
+ *   $ DEBUG_FD=3 node script.js 3>debug.log
+ */
+
+var fd = parseInt(process.env.DEBUG_FD, 10) || 2;
+
+if (1 !== fd && 2 !== fd) {
+  util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()
+}
+
+var stream = 1 === fd ? process.stdout :
+             2 === fd ? process.stderr :
+             createWritableStdioStream(fd);
+
+/**
+ * Is stdout a TTY? Colored output is enabled when `true`.
+ */
+
+function useColors() {
+  return 'colors' in exports.inspectOpts
+    ? Boolean(exports.inspectOpts.colors)
+    : tty.isatty(fd);
+}
+
+/**
+ * Map %o to `util.inspect()`, all on a single line.
+ */
+
+exports.formatters.o = function(v) {
+  this.inspectOpts.colors = this.useColors;
+  return util.inspect(v, this.inspectOpts)
+    .split('\n').map(function(str) {
+      return str.trim()
+    }).join(' ');
+};
+
+/**
+ * Map %o to `util.inspect()`, allowing multiple lines if needed.
+ */
+
+exports.formatters.O = function(v) {
+  this.inspectOpts.colors = this.useColors;
+  return util.inspect(v, this.inspectOpts);
+};
+
+/**
+ * Adds ANSI color escape codes if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+  var name = this.namespace;
+  var useColors = this.useColors;
+
+  if (useColors) {
+    var c = this.color;
+    var prefix = '  \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m';
+
+    args[0] = prefix + args[0].split('\n').join('\n' + prefix);
+    args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m');
+  } else {
+    args[0] = new Date().toUTCString()
+      + ' ' + name + ' ' + args[0];
+  }
+}
+
+/**
+ * Invokes `util.format()` with the specified arguments and writes to `stream`.
+ */
+
+function log() {
+  return stream.write(util.format.apply(util, arguments) + '\n');
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+
+function save(namespaces) {
+  if (null == namespaces) {
+    // If you set a process.env field to null or undefined, it gets cast to the
+    // string 'null' or 'undefined'. Just delete instead.
+    delete process.env.DEBUG;
+  } else {
+    process.env.DEBUG = namespaces;
+  }
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+function load() {
+  return process.env.DEBUG;
+}
+
+/**
+ * Copied from `node/src/node.js`.
+ *
+ * XXX: It's lame that node doesn't expose this API out-of-the-box. It also
+ * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.
+ */
+
+function createWritableStdioStream (fd) {
+  var stream;
+  var tty_wrap = process.binding('tty_wrap');
+
+  // Note stream._type is used for test-module-load-list.js
+
+  switch (tty_wrap.guessHandleType(fd)) {
+    case 'TTY':
+      stream = new tty.WriteStream(fd);
+      stream._type = 'tty';
+
+      // Hack to have stream not keep the event loop alive.
+      // See https://github.com/joyent/node/issues/1726
+      if (stream._handle && stream._handle.unref) {
+        stream._handle.unref();
+      }
+      break;
+
+    case 'FILE':
+      var fs = __webpack_require__(39);
+      stream = new fs.SyncWriteStream(fd, { autoClose: false });
+      stream._type = 'fs';
+      break;
+
+    case 'PIPE':
+    case 'TCP':
+      var net = __webpack_require__(40);
+      stream = new net.Socket({
+        fd: fd,
+        readable: false,
+        writable: true
+      });
+
+      // FIXME Should probably have an option in net.Socket to create a
+      // stream from an existing fd which is writable only. But for now
+      // we'll just add this hack and set the `readable` member to false.
+      // Test: ./node test/fixtures/echo.js < /etc/passwd
+      stream.readable = false;
+      stream.read = null;
+      stream._type = 'pipe';
+
+      // FIXME Hack to have stream not keep the event loop alive.
+      // See https://github.com/joyent/node/issues/1726
+      if (stream._handle && stream._handle.unref) {
+        stream._handle.unref();
+      }
+      break;
+
+    default:
+      // Probably an error on in uv_guess_handle()
+      throw new Error('Implement me. Unknown stream file type!');
+  }
+
+  // For supporting legacy API we put the FD here.
+  stream.fd = fd;
+
+  stream._isStdio = true;
+
+  return stream;
+}
+
+/**
+ * Init logic for `debug` instances.
+ *
+ * Create a new `inspectOpts` object in case `useColors` is set
+ * differently for a particular `debug` instance.
+ */
+
+function init (debug) {
+  debug.inspectOpts = {};
+
+  var keys = Object.keys(exports.inspectOpts);
+  for (var i = 0; i < keys.length; i++) {
+    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
+  }
+}
+
+/**
+ * Enable namespaces listed in `process.env.DEBUG` initially.
+ */
+
+exports.enable(load());
+
+
+/***/ }),
+/* 37 */
+/***/ (function(module, exports) {
+
+module.exports = require("tty");
+
+/***/ }),
+/* 38 */
+/***/ (function(module, exports) {
+
+module.exports = require("util");
+
+/***/ }),
+/* 39 */
+/***/ (function(module, exports) {
+
+module.exports = require("fs");
+
+/***/ }),
+/* 40 */
+/***/ (function(module, exports) {
+
+module.exports = require("net");
+
+/***/ }),
+/* 41 */
+/***/ (function(module, exports) {
+
+module.exports = require("zlib");
+
+/***/ }),
+/* 42 */
+/***/ (function(module, exports) {
+
+module.exports = {"_args":[["axios@0.16.2","C:\\src\\flexio-sdk-js"]],"_from":"axios@0.16.2","_id":"axios@0.16.2","_inBundle":false,"_integrity":"sha1-uk+S8XFn37q0CYN4VFS5rBScPG0=","_location":"/axios","_phantomChildren":{},"_requested":{"type":"version","registry":true,"raw":"axios@0.16.2","name":"axios","escapedName":"axios","rawSpec":"0.16.2","saveSpec":null,"fetchSpec":"0.16.2"},"_requiredBy":["/"],"_resolved":"https://registry.npmjs.org/axios/-/axios-0.16.2.tgz","_spec":"0.16.2","_where":"C:\\src\\flexio-sdk-js","author":{"name":"Matt Zabriskie"},"browser":{"./lib/adapters/http.js":"./lib/adapters/xhr.js"},"bugs":{"url":"https://github.com/mzabriskie/axios/issues"},"dependencies":{"follow-redirects":"^1.2.3","is-buffer":"^1.1.5"},"description":"Promise based HTTP client for the browser and node.js","devDependencies":{"coveralls":"^2.11.9","es6-promise":"^4.0.5","grunt":"^1.0.1","grunt-banner":"^0.6.0","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.0.0","grunt-contrib-nodeunit":"^1.0.0","grunt-contrib-watch":"^1.0.0","grunt-eslint":"^19.0.0","grunt-karma":"^2.0.0","grunt-ts":"^6.0.0-beta.3","grunt-webpack":"^1.0.18","istanbul-instrumenter-loader":"^1.0.0","jasmine-core":"^2.4.1","karma":"^1.3.0","karma-chrome-launcher":"^2.0.0","karma-coverage":"^1.0.0","karma-firefox-launcher":"^1.0.0","karma-jasmine":"^1.0.2","karma-jasmine-ajax":"^0.1.13","karma-opera-launcher":"^1.0.0","karma-phantomjs-launcher":"^1.0.0","karma-safari-launcher":"^1.0.0","karma-sauce-launcher":"^1.1.0","karma-sinon":"^1.0.5","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^1.7.0","load-grunt-tasks":"^3.5.2","minimist":"^1.2.0","phantomjs-prebuilt":"^2.1.7","sinon":"^1.17.4","typescript":"^2.0.3","url-search-params":"^0.6.1","webpack":"^1.13.1","webpack-dev-server":"^1.14.1"},"homepage":"https://github.com/mzabriskie/axios","keywords":["xhr","http","ajax","promise","node"],"license":"MIT","main":"index.js","name":"axios","repository":{"type":"git","url":"git+https://github.com/mzabriskie/axios.git"},"scripts":{"build":"NODE_ENV=production grunt build","coveralls":"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","examples":"node ./examples/server.js","postversion":"git push && git push --tags","preversion":"npm test","start":"node ./sandbox/server.js","test":"grunt test","version":"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json"},"typings":"./index.d.ts","version":"0.16.2"}
+
+/***/ }),
+/* 43 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+
+function InterceptorManager() {
+  this.handlers = [];
+}
+
+/**
+ * Add a new interceptor to the stack
+ *
+ * @param {Function} fulfilled The function to handle `then` for a `Promise`
+ * @param {Function} rejected The function to handle `reject` for a `Promise`
+ *
+ * @return {Number} An ID used to remove interceptor later
+ */
+InterceptorManager.prototype.use = function use(fulfilled, rejected) {
+  this.handlers.push({
+    fulfilled: fulfilled,
+    rejected: rejected
+  });
+  return this.handlers.length - 1;
+};
+
+/**
+ * Remove an interceptor from the stack
+ *
+ * @param {Number} id The ID that was returned by `use`
+ */
+InterceptorManager.prototype.eject = function eject(id) {
+  if (this.handlers[id]) {
+    this.handlers[id] = null;
+  }
+};
+
+/**
+ * Iterate over all the registered interceptors
+ *
+ * This method is particularly useful for skipping over any
+ * interceptors that may have become `null` calling `eject`.
+ *
+ * @param {Function} fn The function to call for each interceptor
+ */
+InterceptorManager.prototype.forEach = function forEach(fn) {
+  utils.forEach(this.handlers, function forEachHandler(h) {
+    if (h !== null) {
+      fn(h);
+    }
+  });
+};
+
+module.exports = InterceptorManager;
+
+
+/***/ }),
+/* 44 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+var transformData = __webpack_require__(45);
+var isCancel = __webpack_require__(15);
+var defaults = __webpack_require__(4);
+
+/**
+ * Throws a `Cancel` if cancellation has been requested.
+ */
+function throwIfCancellationRequested(config) {
+  if (config.cancelToken) {
+    config.cancelToken.throwIfRequested();
+  }
+}
+
+/**
+ * Dispatch a request to the server using the configured adapter.
+ *
+ * @param {object} config The config that is to be used for the request
+ * @returns {Promise} The Promise to be fulfilled
+ */
+module.exports = function dispatchRequest(config) {
+  throwIfCancellationRequested(config);
+
+  // Ensure headers exist
+  config.headers = config.headers || {};
+
+  // Transform request data
+  config.data = transformData(
+    config.data,
+    config.headers,
+    config.transformRequest
+  );
+
+  // Flatten headers
+  config.headers = utils.merge(
+    config.headers.common || {},
+    config.headers[config.method] || {},
+    config.headers || {}
+  );
+
+  utils.forEach(
+    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
+    function cleanHeaderConfig(method) {
+      delete config.headers[method];
+    }
+  );
+
+  var adapter = config.adapter || defaults.adapter;
+
+  return adapter(config).then(function onAdapterResolution(response) {
+    throwIfCancellationRequested(config);
+
+    // Transform response data
+    response.data = transformData(
+      response.data,
+      response.headers,
+      config.transformResponse
+    );
+
+    return response;
+  }, function onAdapterRejection(reason) {
+    if (!isCancel(reason)) {
+      throwIfCancellationRequested(config);
+
+      // Transform response data
+      if (reason && reason.response) {
+        reason.response.data = transformData(
+          reason.response.data,
+          reason.response.headers,
+          config.transformResponse
+        );
+      }
+    }
+
+    return Promise.reject(reason);
+  });
+};
+
+
+/***/ }),
+/* 45 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+
+/**
+ * Transform the data for a request or a response
+ *
+ * @param {Object|String} data The data to be transformed
+ * @param {Array} headers The headers for the request or response
+ * @param {Array|Function} fns A single function or Array of functions
+ * @returns {*} The resulting transformed data
+ */
+module.exports = function transformData(data, headers, fns) {
+  /*eslint no-param-reassign:0*/
+  utils.forEach(fns, function transform(fn) {
+    data = fn(data, headers);
+  });
+
+  return data;
+};
+
+
+/***/ }),
+/* 46 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * Determines whether the specified URL is absolute
+ *
+ * @param {string} url The URL to test
+ * @returns {boolean} True if the specified URL is absolute, otherwise false
+ */
+module.exports = function isAbsoluteURL(url) {
+  // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
+  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
+  // by any combination of letters, digits, plus, period, or hyphen.
+  return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
+};
+
+
+/***/ }),
+/* 47 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * Creates a new URL by combining the specified URLs
+ *
+ * @param {string} baseURL The base URL
+ * @param {string} relativeURL The relative URL
+ * @returns {string} The combined URL
+ */
+module.exports = function combineURLs(baseURL, relativeURL) {
+  return relativeURL
+    ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
+    : baseURL;
+};
+
+
+/***/ }),
+/* 48 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var Cancel = __webpack_require__(16);
+
+/**
+ * A `CancelToken` is an object that can be used to request cancellation of an operation.
+ *
+ * @class
+ * @param {Function} executor The executor function.
+ */
+function CancelToken(executor) {
+  if (typeof executor !== 'function') {
+    throw new TypeError('executor must be a function.');
+  }
+
+  var resolvePromise;
+  this.promise = new Promise(function promiseExecutor(resolve) {
+    resolvePromise = resolve;
+  });
+
+  var token = this;
+  executor(function cancel(message) {
+    if (token.reason) {
+      // Cancellation has already been requested
+      return;
+    }
+
+    token.reason = new Cancel(message);
+    resolvePromise(token.reason);
+  });
+}
+
+/**
+ * Throws a `Cancel` if cancellation has been requested.
+ */
+CancelToken.prototype.throwIfRequested = function throwIfRequested() {
+  if (this.reason) {
+    throw this.reason;
+  }
+};
+
+/**
+ * Returns an object that contains a new `CancelToken` and a function that, when called,
+ * cancels the `CancelToken`.
+ */
+CancelToken.source = function source() {
+  var cancel;
+  var token = new CancelToken(function executor(c) {
+    cancel = c;
+  });
+  return {
+    token: token,
+    cancel: cancel
+  };
+};
+
+module.exports = CancelToken;
+
+
+/***/ }),
+/* 49 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * Syntactic sugar for invoking a function and expanding an array for arguments.
+ *
+ * Common use case would be to use `Function.prototype.apply`.
+ *
+ *  ```js
+ *  function f(x, y, z) {}
+ *  var args = [1, 2, 3];
+ *  f.apply(null, args);
+ *  ```
+ *
+ * With `spread` this example can be re-written.
+ *
+ *  ```js
+ *  spread(function(x, y, z) {})([1, 2, 3]);
+ *  ```
+ *
+ * @param {Function} callback
+ * @returns {Function}
+ */
+module.exports = function spread(callback) {
+  return function wrap(arr) {
+    return callback.apply(null, arr);
+  };
+};
+
+
+/***/ }),
+/* 50 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var taskOps = __webpack_require__(2);
+
+var createFn = __webpack_require__(51);
+var convertFn = __webpack_require__(52);
+var copyFn = __webpack_require__(53);
+var dumpFn = __webpack_require__(54);
+var echoFn = __webpack_require__(55);
+var emailFn = __webpack_require__(56);
+var executeFn = __webpack_require__(57);
+var filterFn = __webpack_require__(58);
+var foreachFn = __webpack_require__(59);
+var insertFn = __webpack_require__(60);
+var limitFn = __webpack_require__(61);
+var mergeFn = __webpack_require__(62);
+var mkdirFn = __webpack_require__(63);
+var listFn = __webpack_require__(64);
+var readFn = __webpack_require__(65);
+var renderFn = __webpack_require__(66);
+var requestFn = __webpack_require__(67);
+var selectFn = __webpack_require__(68);
+var sequenceFn = __webpack_require__(69);
+var setFn = __webpack_require__(70);
+var sleepFn = __webpack_require__(71);
+var taskFn = __webpack_require__(72);
+var transformFn = __webpack_require__(73);
+var writeFn = __webpack_require__(74);
+
+var toCode = function toCode(json, Flexio) {
+  var op = _.get(json, 'op', '');
+
+  switch (op) {
+    default:
+      return taskFn.toCode(json);
+
+    case taskOps.TASK_OP_CREATE:
+      return createFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_CONVERT:
+      return convertFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_COPY:
+      return copyFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_DUMP:
+      return dumpFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_ECHO:
+      return echoFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_EMAIL_SEND:
+      return emailFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_EXECUTE:
+      return executeFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_FILTER:
+      return filterFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_FOREACH:
+      return foreachFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_INSERT:
+      return insertFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_LIMIT:
+      return limitFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_LIST:
+      return listFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_MERGE:
+      return mergeFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_MKDIR:
+      return mkdirFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_READ:
+      return readFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_RENDER:
+      return renderFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_REQUEST:
+      return requestFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_SELECT:
+      return selectFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_SEQUENCE:
+      return sequenceFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_SET:
+      return setFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_SLEEP:
+      return sleepFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_TRANSFORM:
+      return transformFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_WRITE:
+      return writeFn.toCode(json, Flexio);
+  }
+};
+
+module.exports = {
+  create: createFn,
+  convert: convertFn,
+  copy: copyFn,
+  dump: dumpFn,
+  echo: echoFn,
+  email: emailFn,
+  execute: executeFn.execute,
+  insert: insertFn,
+  filter: filterFn,
+
+  foreach: foreachFn,
+  javascript: executeFn.javascript,
+  limit: limitFn,
+  list: listFn,
+  merge: mergeFn,
+  mkdir: mkdirFn,
+  python: executeFn.python,
+  read: readFn,
+  render: renderFn,
+  request: requestFn,
+  select: selectFn,
+  sequence: sequenceFn,
+  set: setFn,
+  sleep: sleepFn,
+  task: taskFn,
+  transform: transformFn,
+  write: writeFn,
+
+  toCode: toCode
+};
+
+/***/ }),
+/* 51 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var create = function create(p0, p1) {
+
+  if (Array.isArray(p0)) {
+    return {
+      op: taskOps.TASK_OP_CREATE,
+      params: {
+        content_type: "application/vnd.flexio.table",
+        columns: p0
+      }
+    };
+  } else {
+    var ret = {
+      op: taskOps.TASK_OP_CREATE,
+      params: {
+        path: p0
+      }
+    };
+
+    if (p1 !== undefined) {
+      if (Array.isArray(p1)) {
+        ret.params.columns = p1;
+      } else {
+        ret.params.content_type = p1;
+      }
+    }
+
+    return ret;
+  }
+};
+
+create.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var path = JSON.stringify(params.path) || undefined;
+  var content_type = JSON.stringify(params.content_type) || undefined;
+  var columns = JSON.stringify(params.columns) || undefined;
+
+  if (path !== undefined) {
+
+    if (columns !== undefined) {
+      return 'create(' + path + ', ' + columns + ')';
+    } else if (content_type !== undefined) {
+      return 'create(' + path + ', ' + content_type + ')';
+    } else {
+      return 'create(' + path + ')';
+    }
+  } else {
+
+    if (columns !== undefined) {
+      return 'create(' + columns + ')';
+    } else if (content_type !== undefined) {
+      return '';
+    }
+  }
+};
+
+module.exports = create;
+
+/***/ }),
+/* 52 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var DELIMITER_NONE = '{none}';
+var DELIMITER_COMMA = '{comma}';
+var DELIMITER_SEMICOLON = '{semicolon}';
+var DELIMITER_PIPE = '{pipe}';
+var DELIMITER_TAB = '{tab}';
+var DELIMITER_SPACE = '{space}';
+
+var TEXT_QUALIFIER_NONE = '{none}';
+var TEXT_QUALIFIER_SINGLE_QUOTE = '{single-quote}';
+var TEXT_QUALIFIER_DOUBLE_QUOTE = '{double-quote}';
+
+var FORMAT_DELIMITED_TEXT = 'delimited';
+var FORMAT_FIXED_LENGTH = 'fixed';
+var FORMAT_JSON = 'json';
+var FORMAT_RSS = 'rss';
+var FORMAT_PDF = 'pdf';
+var FORMAT_TABLE = 'table';
+
+var SHORTHAND_CSV = 'csv';
+var SHORTHAND_TSV = 'tsv';
+
+var FORMAT_CSV = {
+  format: FORMAT_DELIMITED_TEXT,
+  delimiter: DELIMITER_COMMA,
+  header: true,
+  qualifier: TEXT_QUALIFIER_DOUBLE_QUOTE
+};
+
+var FORMAT_TSV = {
+  format: FORMAT_DELIMITED_TEXT,
+  delimiter: DELIMITER_TAB,
+  header: true,
+  qualifier: TEXT_QUALIFIER_NONE
+};
+
+var convert = function convert(input, output) {
+
+  var task = {
+    op: taskOps.TASK_OP_CONVERT,
+    params: {}
+  };
+
+  if (_.isString(input)) {
+    if (input == SHORTHAND_CSV) _.set(task, 'params.input', FORMAT_CSV);else if (input == SHORTHAND_TSV) _.set(task, 'params.input', FORMAT_TSV);else _.set(task, 'params.input.format', input);
+  } else if (_.isPlainObject(input)) {
+    _.set(task, 'params.input', input);
+  }
+
+  if (_.isString(output)) {
+    if (output == SHORTHAND_CSV) _.set(task, 'params.output', FORMAT_CSV);else if (output == SHORTHAND_TSV) _.set(task, 'params.output', FORMAT_TSV);else _.set(task, 'params.output.format', output);
+  } else if (_.isPlainObject(output)) {
+    _.set(task, 'params.output', output);
+  }
+
+  return task;
+};
+
+convert.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var input = _.get(params, 'input', {});
+  var output = _.get(params, 'output', {});
+
+  var p1;
+  var p2;
+
+  if (_.isEqual(input, FORMAT_CSV)) p1 = SHORTHAND_CSV;
+  if (_.isEqual(output, FORMAT_CSV)) p2 = SHORTHAND_CSV;
+
+  if (_.isEqual(input, FORMAT_TSV)) p1 = SHORTHAND_TSV;
+  if (_.isEqual(output, FORMAT_TSV)) p2 = SHORTHAND_TSV;
+
+  if (_.isEmpty(_.omit(input, ['format']))) p1 = _.get(input, 'format', '');
+  if (_.isEmpty(_.omit(output, ['format']))) p2 = _.get(output, 'format', '');
+
+  if (!p1) p1 = input;
+  if (!p2) p2 = output;
+
+  return 'convert(' + JSON.stringify(p1) + ', ' + JSON.stringify(p2) + ')';
+};
+
+module.exports = convert;
+
+/***/ }),
+/* 53 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var copy = function copy(from, to, options) {
+  var ret = {
+    op: taskOps.TASK_OP_COPY,
+    params: {
+      from: from,
+      to: to
+    }
+  };
+
+  if (_.isPlainObject(options)) {
+    ret.params.options = options;
+  }
+  return ret;
+};
+
+copy.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var from = JSON.stringify(params.from) || '""';
+  var to = JSON.stringify(params.to) || '""';
+  var options = params.hasOwnProperty('options') && _.isPlainObject(params.options) ? JSON.stringify(params.options) : null;
+
+  var ret = 'copy(' + from + ', ' + to;
+  if (options !== null) {
+    ret += ', ' + options;
+  }
+  return ret + ')';
+};
+
+module.exports = copy;
+
+/***/ }),
+/* 54 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var dump = function dump(msg) {
+  return {
+    op: taskOps.TASK_OP_DUMP,
+    params: {
+      msg: msg
+    }
+  };
+};
+
+dump.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var msg = JSON.stringify(params.msg) || '""';
+  return 'dump(' + msg + ')';
+};
+
+module.exports = dump;
+
+/***/ }),
+/* 55 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var echo = function echo(msg) {
+  return {
+    op: taskOps.TASK_OP_ECHO,
+    params: {
+      msg: msg
+    }
+  };
+};
+
+echo.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var msg = JSON.stringify(params.msg) || '""';
+  return 'echo(' + msg + ')';
+};
+
+module.exports = echo;
+
+/***/ }),
+/* 56 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var email = function email(params) {
+  if (!_.isPlainObject(params)) throw 'The first function parameter must be an object';
+
+  if (!_.has(params, 'to')) throw 'The `to` parameter is required';
+
+  if (!_.has(params, 'body_text')) throw 'The `body_text` parameter is required';
+
+  return {
+    op: taskOps.TASK_OP_EMAIL_SEND,
+    params: params
+  };
+};
+
+email.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  return 'email(' + JSON.stringify(params, null, 2) + ')';
+};
+
+module.exports = email;
+
+/***/ }),
+/* 57 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+
+var isNodeJs = function isNodeJs() {
+  return typeof process !== 'undefined';
+};
+
+var toBase64 = function toBase64(str) {
+  try {
+    if (isNodeJs()) {
+      return Buffer(str, 'utf8').toString('base64');
+    } else {
+      return btoa(unescape(encodeURIComponent(str)));
+    }
+  } catch (e) {
+    return e;
+  }
+};
+
+var fromBase64 = function fromBase64(str) {
+  try {
+    if (isNodeJs()) {
+      return Buffer.from(str, 'base64').toString('utf8');
+    } else {
+      return decodeURIComponent(escape(atob(str)));
+    }
+  } catch (e) {
+    return e;
+  }
+};
+
+var getJsFunctionBody = function getJsFunctionBody(f) {
+  var body;
+
+  try {
+    body = f.toString();
+
+    body = body.substring(body.indexOf('{') + 1, body.lastIndexOf('}'));
+  } catch (e) {
+    body = '';
+  }
+
+  return body;
+};
+
+var getJsExport = function getJsExport(f) {
+  if (_.isString(f)) return f;
+
+  if (_.isFunction(f)) {
+    var body;
+
+    if (f.length == 0) {
+      body = getJsFunctionBody(f);
+      return 'exports.flexio_handler = function(context) ' + body;
+    } else {
+      body = f.toString();
+      if (body.substring(0, 8) == 'function') {
+        body = body.slice(8);
+      } else {
+        var arrow = body.indexOf('=>');
+        var brace = body.indexOf('{');
+
+        if (arrow >= 0 && arrow < brace) {
+          body = body.replace('=>\s*{', '{');
+        }
+      }
+      return 'exports.flexio_handler = function' + body;
+    }
+  }
+};
+
+var execute = function execute() {
+  var args = Array.from(arguments);
+  var param0 = _.get(args, '[0]', null);
+  var param1 = _.get(args, '[1]', null);
+  var param2 = _.get(args, '[2]', null);
+  var lang, code, check;
+
+  var task = {
+    op: taskOps.TASK_OP_EXECUTE,
+    params: {}
+  };
+
+  if (param0 == 'python' || param0 == 'javascript') {
+    lang = param0;
+    code = param1;
+    if (code === null || code === undefined) {
+      code = '';
+    }
+    check = param2;
+  } else {
+    lang = 'javascript';
+    code = param0;
+    check = param1;
+  }
+
+  if (lang == 'javascript') {
+    code = getJsExport(code);
+  }
+
+  _.set(task, 'params.lang', lang);
+
+  var http_regex = /^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/;
+  if (code.match(http_regex)) {
+    _.set(task, 'params.path', code);
+  } else {
+    _.set(task, 'params.code', toBase64(code));
+  }
+
+  if (check !== null) {
+    _.set(task, 'params.integrity', check);
+  }
+
+  return task;
+};
+
+var javascript = function javascript() {
+  var args = Array.from(arguments);
+  args.unshift('javascript');
+  return execute.apply(this, args);
+};
+
+var python = function python() {
+  var args = Array.from(arguments);
+  args.unshift('python');
+  return execute.apply(this, args);
+};
+
+var toCode = function toCode(json) {
+  var params = _.get(json, 'params', {});
+  var lang = params.lang || '';
+  var code = fromBase64(params.code || '');
+
+  switch (lang) {
+    case 'javascript':
+      code = code.replace('exports.flexio_handler =', '');
+      return 'javascript(' + code.trim() + ')';
+    case 'python':
+      return 'python(`\n' + code + '\n`)';
+    default:
+      return 'execute(' + JSON.stringify(lang) + ', `\n' + code + '\n`)';
+  }
+};
+
+module.exports = {
+  execute: execute,
+  javascript: javascript,
+  python: python,
+  toCode: toCode
+};
+
+/***/ }),
+/* 58 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var filter = function filter(where) {
+
+  if (_.isNil(where)) throw 'The `filter` parameter is required';
+
+  return {
+    op: taskOps.TASK_OP_FILTER,
+    params: {
+      where: where
+    }
+  };
+};
+
+filter.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var where = JSON.stringify(params.where) || '""';
+  return 'filter(' + where + ')';
+};
+
+module.exports = filter;
+
+/***/ }),
+/* 59 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var foreach = function foreach(p0, p1) {
+
+  var res = {
+    op: taskOps.TASK_OP_FOREACH,
+    params: {}
+  };
+
+  if (typeof p0 === 'string' || p0 instanceof String) {
+    res.params.spec = p0;
+  }
+
+  if (util.isPipeObject(p0)) {
+    res.params.run = p0.pipe.task;
+  } else if (util.isPipeObject(p1)) {
+    res.params.run = p1.pipe.task;
+  }
+
+  return res;
+};
+
+foreach.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {}),
+      p = [];
+  if (params.hasOwnProperty('spec')) {
+    p.push(JSON.stringify(params.spec));
+  }
+  if (params.hasOwnProperty('run')) {
+    p.push(Flexio.task.toCode(params.run, Flexio));
+  }
+
+  return 'foreach(' + p.join(', ') + ')';
+};
+
+module.exports = foreach;
+
+/***/ }),
+/* 60 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var insert = function insert(path, values) {
+
+  var data;
+  if (Array.isArray(values)) data = values;else data = [values];
+
+  return {
+    op: taskOps.TASK_OP_INSERT,
+    params: {
+      path: path,
+      values: data
+    }
+  };
+};
+
+insert.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var path = _.get(params, 'path', undefined);
+  var values = _.get(params, 'values', undefined);
+
+  if (!Array.isArray(values)) values = [values];
+
+  path = JSON.stringify(path);
+  values = JSON.stringify(values);
+
+  return 'insert(' + path + ', ' + values + ')';
+};
+
+module.exports = insert;
+
+/***/ }),
+/* 61 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var limit = function limit(value) {
+  value = _.defaultTo(value, 10);
+
+  return {
+    op: taskOps.TASK_OP_LIMIT,
+    params: {
+      value: value
+    }
+  };
+};
+
+limit.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var val = JSON.stringify(params.value) || '';
+  return 'limit(' + val + ')';
+};
+
+module.exports = limit;
+
+/***/ }),
+/* 62 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var merge = function merge(path) {
+
+  if (Array.isArray(path)) {
+    var files = path;
+  } else {
+    var files = [];
+    for (var i = 0; i < arguments.length; ++i) {
+      files.push(arguments[i]);
+    }
+  }
+
+  return {
+    op: taskOps.TASK_OP_MERGE,
+    params: {
+      files: files
+    }
+  };
+};
+
+merge.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var files = _.get(params, 'files', []);
+  for (var i = 0; i < files.length; ++i) {
+    if (typeof files[i] === 'string' || files[i] instanceof String) {
+      files[i] = JSON.stringify(files[i]);
+    } else {
+      files[i] = Flexio.merge.toCode(files[i], Flexio);
+    }
+  }
+
+  var param = files.length >= 10 ? '[' + files.join(', ') + ']' : files.join(', ');
+  return 'merge(' + param + ')';
+};
+
+module.exports = merge;
+
+/***/ }),
+/* 63 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var mkdir = function mkdir(path) {
+  return {
+    op: taskOps.TASK_OP_MKDIR,
+    params: {
+      path: path
+    }
+  };
+};
+
+mkdir.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var path = JSON.stringify(params.path) || '""';
+  return 'mkdir(' + path + ')';
+};
+
+module.exports = mkdir;
+
+/***/ }),
+/* 64 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var list = function list(path) {
+  return {
+    op: taskOps.TASK_OP_LIST,
+    params: {
+      path: path
+    }
+  };
+};
+
+list.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var path = JSON.stringify(params.path) || '""';
+  return 'list(' + path + ')';
+};
+
+module.exports = list;
+
+/***/ }),
+/* 65 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var read = function read(path) {
+  return {
+    op: taskOps.TASK_OP_READ,
+    params: {
+      path: path
+    }
+  };
+};
+
+read.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var path = JSON.stringify(params.path) || '""';
+  return 'read(' + path + ')';
+};
+
+module.exports = read;
+
+/***/ }),
+/* 66 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+
+var defaults = {
+  format: 'png',
+  width: 800,
+  height: 600,
+  scrollbars: false
+};
+
+var render = function render(url, options) {
+  var args = Array.from(arguments);
+  var url = _.get(args, '[0]', '');
+  var params = _.get(args, '[1]', {});
+
+  if (_.isNil(url)) throw 'The `url` parameter is required';
+
+  if (_.isPlainObject(_.get(args, '[0]', {}))) {
+    var params = _.get(args, '[0]', {});
+  } else {
+    var params = _.assign({}, defaults, options, { url: url });
+  }
+
+  return {
+    op: taskOps.TASK_OP_RENDER,
+    params: params
+  };
+};
+
+render.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var url = JSON.stringify(params.url) || '';
+  var opts = _.omit(params, ['url']);
+
+  if (_.isEqual(opts, defaults)) return 'render(' + url + ')';else return 'render(' + url + ', ' + JSON.stringify(opts, null, 2) + ')';
+};
+
+module.exports = render;
+
+/***/ }),
+/* 67 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var request = function request() {
+  var args = Array.from(arguments);
+  var url = _.get(args, '[0]', '');
+  var params = _.get(args, '[1]', {});
+
+  if (_.isPlainObject(_.get(args, '[0]', {}))) {
+    params = _.get(args, '[0]', {});
+  } else {
+    params = _.assign({}, { url: url }, params);
+  }
+
+  params = _.assign({ method: 'GET' }, params);
+
+  return {
+    op: taskOps.TASK_OP_REQUEST,
+    params: params
+  };
+};
+
+request.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var url = _.get(params, 'url', '');
+  var opts = _.omit(params, ['url']);
+  if (_.get(opts, 'method', '') == 'GET') opts = _.omit(opts, ['method']);
+
+  if (_.isEmpty(opts)) return 'request(' + JSON.stringify(url) + ')';else return 'request(' + JSON.stringify(url) + ', ' + JSON.stringify(opts, null, 2) + ')';
+};
+
+module.exports = request;
+
+/***/ }),
+/* 68 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var select = function select() {
+  var columns = Array.from(arguments);
+
+  if (columns.length == 1 && _.isArray(_.get(columns, '[0]'))) columns = _.get(columns, '[0]', []);
+
+  return {
+    op: taskOps.TASK_OP_SELECT,
+    params: {
+      columns: columns
+    }
+  };
+};
+
+select.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var cols = JSON.stringify(params.columns) || '';
+  if (cols.indexOf('[') != -1 && cols.indexOf(']') != -1) cols = cols.substring(1, cols.length - 1);
+  return 'select(' + cols + ')';
+};
+
+module.exports = select;
+
+/***/ }),
+/* 69 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var sequence = function sequence(steps) {
+
+  return {
+    op: taskOps.TASK_OP_SEQUENCE,
+    params: {
+      steps: steps
+    }
+  };
+};
+
+sequence.toCode = function (json, Flexio) {
+  var retval = _.map(json.params.items, function (t) {
+
+    var cmd_str = Flexio.task.toCode(t, Flexio);
+
+    if (_.get(t, 'params.lang', '') != 'python') cmd_str = cmd_str.replace(/\n/g, '\n  ');
+
+    return cmd_str;
+  });
+
+  var retval = ['Flexio.pipe()'].concat(retval);
+
+  return retval.join('\n  .');
+};
+
+module.exports = sequence;
+
+/***/ }),
+/* 70 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var set = function set(variable, value) {
+
+  if (util.isPipeObject(value)) value = value.pipe.task;
+
+  return {
+    op: taskOps.TASK_OP_SET,
+    params: {
+      "var": variable,
+      "value": value
+    }
+  };
+};
+
+set.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var variable = _.get(params, 'variable', '');
+  var value = _.get(params, 'value', '');
+
+  variable = JSON.stringify(variable);
+
+  if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value !== null && value.hasOwnProperty('op')) {
+    value = Flexio.task.toCode(value, Flexio);
+  } else {
+    value = JSON.stringify(value);
+  }
+
+  return 'set(' + variable + ', ' + value + ')';
+};
+
+module.exports = set;
+
+/***/ }),
+/* 71 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var sleep = function sleep(value) {
+  value = _.defaultTo(value, 10);
+
+  return {
+    op: taskOps.TASK_OP_SLEEP,
+    params: {
+      value: value
+    }
+  };
+};
+
+sleep.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var val = JSON.stringify(params.value) || '';
+  return 'sleep(' + val + ')';
+};
+
+module.exports = sleep;
+
+/***/ }),
+/* 72 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var task = function task(json) {
+  return json;
+};
+
+task.toCode = function (json, Flexio) {
+  return 'task(' + JSON.stringify(json, null, 2) + ')';
+};
+
+module.exports = task;
+
+/***/ }),
+/* 73 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var transform = function transform(value) {
+  var args = Array.from(arguments);
+
+  var default_params = { operations: [] };
+  var params = {};
+  var columns = undefined;
+  var operations = [];
+
+  var arg1 = _.get(args, '[0]');
+
+  if (_.isPlainObject(arg1)) {
+    if (args.length == 1 && _.has(arg1, 'operations')) {
+      params = _.pick(arg1, ['columns', 'operations']);
+      params = _.assign(default_params, params);
+    } else {
+      operations = [].concat(args);
+      params = { operations: operations };
+    }
+
+    return {
+      op: taskOps.TASK_OP_TRANSFORM,
+      params: params
+    };
+  }
+
+  return {
+    op: taskOps.TASK_OP_TRANSFORM,
+    params: {
+      columns: columns,
+      operations: operations
+    }
+  };
+};
+
+transform.toCode = function (json, Flexio) {
+  var params = json.hasOwnProperty('params') ? json.params : {};
+  if (!params.hasOwnProperty('columns') && params.hasOwnProperty('operations') && Array.isArray(params.operations) && params.operations.length == 1) return "transform(" + JSON.stringify(params.operations[0]) + ")";
+  return "transform(" + JSON.stringify(params) + ")";
+};
+
+module.exports = transform;
+
+/***/ }),
+/* 74 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var write = function write(path) {
+  return {
+    op: taskOps.TASK_OP_WRITE,
+    params: {
+      path: path
+    }
+  };
+};
+
+write.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var path = JSON.stringify(params.path) || '""';
+  return 'write(' + path + ')';
+};
+
+module.exports = write;
+
+/***/ }),
+/* 75 */
+/***/ (function(module, exports) {
+
+module.exports = {"name":"flexio-sdk-js","version":"1.20.2","description":"Javascript SDK for managing Flex.io resources and services","author":"David Z. Williams <dave@flex.io>","--main":"dist/flexio-node.js","main":"src/main.js","--browser":"src/main.js","browser":"dist/flexio.min.js","scripts":{"dev":"cross-env build=development webpack-dev-server --config ./build/webpack.dev.js --open --inline --https --hot","build:debug":"cross-env build=debug webpack --config build/webpack.dist.js","build:release":"cross-env build=production webpack --config build/webpack.dist.js","build:examples":"webpack --config build/webpack.examples.js","build":"npm run build:debug && npm run build:release && npm run build:examples","test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/flexiodata/flexio-sdk-js.git"},"keywords":[],"license":"Apache-2.0","bugs":{"url":"https://github.com/flexiodata/flexio-sdk-js/issues"},"homepage":"https://github.com/flexiodata/flexio-sdk-js/","dependencies":{"axios":"^0.16.2","lodash":"^4.17.4","vue-highlightjs":"^1.3.3"},"devDependencies":{"autoprefixer":"^7.1.4","babel-core":"^6.26.0","babel-loader":"^7.1.2","babel-plugin-lodash":"^3.2.11","babel-plugin-transform-es2015-destructuring":"^6.23.0","babel-plugin-transform-es2015-parameters":"^6.24.1","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-es2015":"^6.24.1","babel-preset-stage-2":"^6.24.1","cross-env":"^5.0.5","css-loader":"^0.28.7","deep-assign":"^2.0.0","vue":"^2.4.4","vue-loader":"^13.0.4","vue-simple-spinner":"^1.2.7","vue-style-loader":"^3.0.3","vue-template-compiler":"^2.4.4","webpack":"^3.5.5","webpack-dev-server":"^2.8.2"}}
+
+/***/ }),
+/* 76 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+
+module.exports = {};
+module.exports.getConnectionsObject = function (Flexio) {
+
+  return new function () {
+
+    this.create = function (conn, callback) {
+
+      var data;
+      if (_.isPlainObject(conn)) {
+        data = conn;
+      } else if (conn instanceof Flexio.connection) {
+        data = conn.connection;
+      } else {
+        throw "Unknown connection object type";
+      }
+
+      return new Promise(function (resolve, reject) {
+        Flexio.http().post('/connections', data).then(function (response) {
+          Flexio.util.callbackAdapter(null, response.data, resolve, reject, callback);
+        }).catch(function (error) {
+          Flexio.util.debug('Flexio.connections.create(): Failed.');
+          Flexio.util.callbackAdapter(error, null, resolve, reject, callback);
+        });
+      });
+    };
+
+    this.list = function (callback) {
+      var args = Array.from(arguments);
+      var callback = _.get(args, '[0]');
+
+      return new Promise(function (resolve, reject) {
+        Flexio.util.debug('Requesting Connections...');
+        Flexio.http().get('/connections').then(function (response) {
+          var items = _.get(response, 'data', []);
+          Flexio.util.debug('Success!');
+          Flexio.util.callbackAdapter(null, items, resolve, reject, callback);
+        }).catch(function (error) {
+          Flexio.util.debug('Failed.');
+          Flexio.util.callbackAdapter(error, null, resolve, reject, callback);
+        });
+      });
+    };
+  }();
+};
+
+/***/ }),
+/* 77 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+
+module.exports = {};
+module.exports.getPipesObject = function (Flexio) {
+
+  return new function () {
+
+    this.create = function (pipe, callback) {
+
+      var data;
+      if (_.isPlainObject(pipe)) {
+        data = pipe;
+      } else if (pipe instanceof Flexio.pipe) {
+        data = pipe.pipe;
+      } else {
+        throw "Unknown pipe object type";
+      }
+
+      return new Promise(function (resolve, reject) {
+        Flexio.http().post('/pipes', data).then(function (response) {
+          Flexio.util.callbackAdapter(null, response.data, resolve, reject, callback);
+        }).catch(function (error) {
+          Flexio.util.debug('Flexio.pipes.create(): Failed.');
+          Flexio.util.callbackAdapter(error, null, resolve, reject, callback);
+        });
+      });
+    };
+
+    this.list = function (callback) {
+      var args = Array.from(arguments);
+      var callback = _.get(args, '[0]');
+
+      return new Promise(function (resolve, reject) {
+        Flexio.util.debug('Requesting Pipes...');
+
+        Flexio.http().get('/pipes').then(function (response) {
+          var items = _.get(response, 'data', []);
+          Flexio.util.debug('Success!');
+          Flexio.util.callbackAdapter(null, items, resolve, reject, callback);
+        }).catch(function (error) {
+          Flexio.util.debug('Failed.');
+          Flexio.util.callbackAdapter(error, null, resolve, reject, callback);
+        });
+      });
+    };
+
+    this.run = function () {
+      var args = Array.from(arguments);
+      args.push(null, null, null);
+
+      var run_params = {};
+      var callback;
+      var pipe_identifier;
+      var tasks_array = null;
+
+      if (args[0] instanceof Flexio.pipe) {
+        pipe_identifier = _.get(args[0], 'pipe.eid', '');
+        tasks_array = _.get(args[0], 'pipe.task', '');
+      } else if (Array.isArray(args[0])) {
+        pipe_identifier = '';
+        tasks_array = args[0];
+      } else {
+        pipe_identifier = args[0];
+      }
+
+      if (_.isPlainObject(args[1])) {
+        run_params = args[1];
+      }
+
+      if (_.isFunction(args[1])) {
+        callback = args[1];
+      } else if (_.isFunction(args[2])) {
+        callback = args[2];
+      } else {
+        callback = null;
+      }
+
+      var getResponseObjectFromArrayBuffer = function getResponseObjectFromArrayBuffer(arraybuffer, content_type) {
+        return {
+          contentType: content_type,
+          buffer: arraybuffer,
+          get blob() {
+            return new Blob([this.buffer], { "type": content_type });
+          },
+          get text() {
+            return Flexio.util.arrayBufferToString(this.buffer);
+          },
+          get data() {
+            try {
+              return JSON.parse(Flexio.util.arrayBufferToString(this.buffer));
+            } catch (e) {
+              return null;
+            }
+          }
+        };
+      };
+
+      return new Promise(function (resolve, reject) {
+
+        Flexio.util.debug('Running Pipe `' + (pipe_identifier.length == 0 ? '[Pipe Object/Task Array]' : pipe_identifier) + '`...');
+
+        if (pipe_identifier.length == 0) {
+
+          var create_params = {
+            name: 'SDK Pipe',
+            description: 'SDK Pipe',
+            task: tasks_array,
+
+            process_mode: 'R'
+          };
+
+          Flexio.http().post('/processes', create_params).then(function (response) {
+            var obj = _.get(response, 'data', {});
+            var process_eid = _.get(obj, 'eid', '');
+            Flexio.util.debug('Created Process.');
+
+            var http_config = {
+              method: 'post',
+              url: '/processes/' + process_eid + '/run',
+              responseType: 'arraybuffer'
+            };
+
+            if (run_params.hasOwnProperty('data')) {
+              http_config.data = run_params.data;
+            }
+
+            if (run_params.hasOwnProperty('query')) {
+              http_config.params = run_params.query;
+            }
+
+            var http = Flexio.http();
+            http(http_config).then(function (response) {
+              Flexio.util.debug('Process Complete.');
+              var content_type = _.get(response, 'headers.content-type', 'text/plain');
+              var response_object = getResponseObjectFromArrayBuffer(response.data, content_type);
+              Flexio.util.callbackAdapter(null, response_object, resolve, reject, callback);
+            }).catch(function (error) {
+              Flexio.util.debug('Process Run Failed. ' + error);
+              Flexio.util.callbackAdapter(error, null, resolve, reject, callback);
+            });
+          }).catch(function (error) {
+            Flexio.util.debug('Process Create Failed. ' + error);
+            Flexio.util.callbackAdapter(error, null, resolve, reject, callback);
+          });
+        } else {
+
+          var http_config = {
+            method: 'post',
+            url: '/pipes/' + pipe_identifier + '/run',
+            responseType: 'arraybuffer'
+          };
+
+          if (run_params.hasOwnProperty('data')) {
+            http_config.data = run_params.data;
+          }
+
+          if (run_params.hasOwnProperty('query')) {
+            http_config.params = run_params.query;
+          }
+
+          if (run_params.hasOwnProperty('contentType')) {
+            http_config.headers = { 'Content-Type': run_params.contentType };
+          } else {
+            if (http_config.hasOwnProperty('data')) {
+              if (_.isPlainObject(http_config.data)) {} else if (_.isString(http_config.data)) {
+                http_config.headers = { 'Content-Type': 'text/plain' };
+              } else {
+                http_config.headers = { 'Content-Type': 'application/octet-stream' };
+              }
+            }
+          }
+
+          var http = Flexio.http();
+          http(http_config).then(function (response) {
+            Flexio.util.debug('Process Complete.');
+            var content_type = _.get(response, 'headers.content-type', 'text/plain');
+            var response_object = getResponseObjectFromArrayBuffer(response.data, content_type);
+            Flexio.util.callbackAdapter(null, response_object, resolve, reject, callback);
+          }).catch(function (error) {
+            Flexio.util.debug('Pipe Run Call Failed. ' + error);
+            Flexio.util.callbackAdapter(error, null, resolve, reject, callback);
+          });
+        }
+      });
+    };
+  }();
+};
+
+/***/ }),
+/* 78 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _ = __webpack_require__(0);
+
+module.exports = {};
+module.exports.getPipeConstructor = function (Flexio) {
+
+  return function (pipeconstruct_param) {
+
+    if (!(this instanceof Flexio.pipe)) {
+      return new Flexio.pipe(pipeconstruct_param);
+    }
+
+    var pipeobj = _.assign(this, {
+
+      pipe: {
+        name: 'Untitled',
+        description: '',
+        task: { op: 'sequence', params: { items: [] } }
+      },
+      processes: [],
+      _params: {},
+      loading: false,
+      saving: false,
+      running: false,
+
+      getJSON: function getJSON() {
+        return _.assign({}, this.pipe);
+      },
+      getProcesses: function getProcesses() {
+        return [].concat(this.processes);
+      },
+      getLastProcess: function getLastProcess() {
+        return _.last(this.processes);
+      },
+      addTask: function addTask(task) {
+        this.pipe.task.params.items.push(task);
+        return this;
+      },
+      clearTasks: function clearTasks() {
+        this.pipe.task.params.items = [];
+        return this;
+      },
+      getTasks: function getTasks() {
+        return this.pipe.task.params.items;
+      },
+      load: function load() {
+        var _this = this,
+            _arguments = arguments;
+
+        var args = Array.from(arguments);
+        var identifier = _.get(args, '[0]');
+        var callback = _.get(args, '[1]');
+
+        if (this.loading === true || this.saving === true || this.running === true) {
+          setTimeout(function () {
+            _this.load.apply(_this, _arguments);
+          }, 50);
+          return this;
+        }
+
+        if (_.isNil(identifier)) return Flexio.util.debug("The `identifier` parameter is required. Either the pipe's eid or pipe's alias may be used.");
+
+        this.loading = true;
+        Flexio.util.debug('Loading Pipe `' + identifier + '`...');
+
+        Flexio.http().get('/pipes/' + identifier).then(function (response) {
+          var obj = _.get(response, 'data', {});
+          _this.pipe = _.assign({}, obj);
+          _this.loading = false;
+          Flexio.util.debug('Pipe Loaded.');
+
+          if (typeof callback == 'function') callback.call(_this, null, obj);
+        }).catch(function (error) {
+          _this.loading = false;
+          Flexio.util.debug('Pipe Load Failed. ');
+
+          if (typeof callback == 'function') callback.call(_this, error, null);
+        });
+
+        return this;
+      },
+      save: function save() {
+        var _this2 = this,
+            _arguments2 = arguments;
+
+        var args = Array.from(arguments);
+        var params = _.get(args, '[0]');
+        var callback = _.get(args, '[0]');
+
+        if (this.loading === true || this.saving === true || this.running === true) {
+          setTimeout(function () {
+            _this2.save.apply(_this2, _arguments2);
+          }, 50);
+          return this;
+        }
+
+        if (_.isPlainObject(params)) {
+          _.assign(this.pipe, _.pick(params, ['name', 'description', 'ename']));
+          callback = _.get(args, '[1]');
+        }
+
+        this.saving = true;
+        Flexio.util.debug('Saving Pipe `' + _.get(this.pipe, 'name', 'Untitled Pipe') + '`...');
+
+        Flexio.http().post('/pipes', this.pipe).then(function (response) {
+          var pipe = _.get(response, 'data', {});
+          _this2.pipe = _.assign({}, pipe);
+          _this2.saving = false;
+          Flexio.util.debug('Pipe Saved.');
+
+          if (typeof callback == 'function') callback.call(_this2, null, _this2.pipe);
+        }).catch(function (error) {
+          _this2.saving = false;
+          Flexio.util.debug('Pipe Save Failed.');
+
+          if (typeof callback == 'function') callback.call(_this2, error, null);
+        });
+
+        return this;
+      },
+      run: function run() {
+        var args = Array.from(arguments);
+        args.unshift(this);
+        return Flexio.pipes.run.apply(null, args);
+      },
+      params: function params(_params) {
+        this._params = _.assign({}, this.getParams(), _params);
+        return this;
+      },
+      clearParams: function clearParams(keys) {
+        if (_.isArray(keys)) this._params = _.omit(this._params, keys);else if (_.isNil(keys)) this._params = {};
+
+        return this;
+      },
+      getParams: function getParams() {
+        return _.assign({}, this._params);
+      },
+      toCode: function toCode(p) {
+        return Flexio.task.toCode(this.pipe.task, Flexio);
+      }
+    });
+
+    _.each(Flexio.task, function (taskFn, task_name) {
+      if (task_name != 'toCode') {
+        pipeobj[task_name] = function () {
+          return pipeobj.addTask(taskFn.apply(pipeobj, arguments));
+        };
+      }
+    });
+
+    if (pipeconstruct_param !== undefined) {
+      if (typeof pipeconstruct_param === 'string' || pipeconstruct_param instanceof String) {
+        pipeobj.pipe.eid = pipeconstruct_param;
+      } else if ((typeof pipeconstruct_param === 'undefined' ? 'undefined' : _typeof(pipeconstruct_param)) === 'object') {
+        if (pipeconstruct_param.hasOwnProperty('pipe')) {
+          pipeobj.pipe = JSON.parse(JSON.stringify(pipeconstruct_param.pipe));
+        } else if (pipeconstruct_param.hasOwnProperty('task')) {
+          pipeobj.pipe = JSON.parse(JSON.stringify(pipeconstruct_param));
+        } else if (pipeconstruct_param.hasOwnProperty('op')) {
+          pipeobj.pipe.task = pipeconstruct_param;
+        }
+      }
+    }
+
+    return pipeobj;
+  };
+};
+
+/***/ }),
+/* 79 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+
+var method_types = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'];
+var allowed_auth = ['', 'basic', 'bearer', 'oauth2'];
+
+function toBase64(str) {
+  try {
+    return btoa(unescape(encodeURIComponent(str)));
+  } catch (e) {
+    return '';
+  }
+}
+
+function fromBase64(str) {
+  try {
+    return decodeURIComponent(escape(atob(str)));
+  } catch (e) {
+    return '';
+  }
+}
+
+module.exports = {};
+module.exports.getConnectionConstructor = function (Flexio) {
+
+  return function () {
+
+    if (!(this instanceof Flexio.connection)) {
+      return new Flexio.connection();
+    }
+
+    var retval = _.assign(this, {
+
+      connection: {
+        name: 'Untitled',
+        description: '',
+        connection_type: "http",
+        connection_info: {
+          method: '',
+          url: '',
+          auth: '',
+          username: '',
+          password: '',
+          token: '',
+          access_token: '',
+          refresh_token: '',
+          expires: '',
+          data: {},
+          headers: {} }
+      },
+      loading: false,
+      saving: false,
+      running: false,
+
+      getJSON: function getJSON() {
+        return _.assign({}, this.connection);
+      },
+      name: function name(value) {
+        this.connection.name = value;
+        return this;
+      },
+      description: function description(value) {
+        this.connection.description = value;
+        return this;
+      },
+      method: function method() {
+        var args = Array.from(arguments);
+        var method = _.get(args, '[0]');
+
+        if (!_.isString(method)) return this;
+
+        if (!_.includes(method_types, method)) return this;
+
+        return this._setInfo('method', method);
+      },
+      url: function url() {
+        var args = Array.from(arguments);
+        var url = _.get(args, '[0]');
+
+        if (!_.isString(url)) return this;
+
+        return this._setInfo('url', url);
+      },
+      auth: function auth() {
+        var args = Array.from(arguments);
+        var auth = _.get(args, '[0]');
+
+        if (!_.isString(auth)) return this;
+
+        if (!_.includes(allowed_auth, auth)) return this;
+
+        if (auth == 'none') auth = '';
+
+        return this._setInfo('auth', auth);
+      },
+      username: function username() {
+        var args = Array.from(arguments);
+        var username = _.get(args, '[0]');
+
+        if (!_.isString(username)) return this;
+
+        return this._setInfo('username', username);
+      },
+      password: function password() {
+        var args = Array.from(arguments);
+        var password = _.get(args, '[0]');
+
+        if (!_.isString(password)) return this;
+
+        return this._setInfo('password', password);
+      },
+      token: function token() {
+        var args = Array.from(arguments);
+        var token = _.get(args, '[0]');
+
+        if (!_.isString(token)) return this;
+
+        return this._setInfo('token', token);
+      },
+      accessToken: function accessToken() {
+        var args = Array.from(arguments);
+        var token = _.get(args, '[0]');
+
+        if (!_.isString(token)) return this;
+
+        return this._setInfo('access_token', token);
+      },
+      refreshToken: function refreshToken() {
+        var args = Array.from(arguments);
+        var token = _.get(args, '[0]');
+
+        if (!_.isString(token)) return this;
+
+        return this._setInfo('refresh_token', token);
+      },
+      expires: function expires() {
+        var args = Array.from(arguments);
+        var expires = _.get(args, '[0]');
+
+        if (_.isNumber(expires)) expires = '' + expires;
+
+        if (!_.isString(expires)) return this;
+
+        return this._setInfo('expires', expires);
+      },
+      data: function data() {
+        var args = Array.from(arguments);
+        var data = _.get(args, '[0]');
+
+        if (!_.isPlainObject(data)) return this;
+
+        var existing_data = this._getInfo('data', {});
+        data = _.assign({}, existing_data, data);
+
+        return this._setInfo('data', data);
+      },
+      clearData: function clearData() {
+        var keys = Array.from(arguments);
+
+        if (keys.length == 0) return this._setInfo('data', {});
+
+        if (keys.length == 1 && _.isArray(_.get(keys, '[0]'))) keys = _.get(keys, '[0]', []);
+
+        var existing_data = this._getInfo('data', {});
+        var data = _.omit(existing_data, keys);
+
+        return this._setInfo('data', data);
+      },
+      headers: function headers() {
+        var args = Array.from(arguments);
+        var headers = _.get(args, '[0]');
+
+        if (!_.isPlainObject(headers)) return this;
+
+        var existing_headers = this._getInfo('headers', {});
+        headers = _.assign({}, existing_headers, headers);
+
+        return this._setInfo('headers', headers);
+      },
+      clearHeaders: function clearHeaders() {
+        var keys = Array.from(arguments);
+
+        if (keys.length == 0) return this._setInfo('headers', {});
+
+        if (keys.length == 1 && _.isArray(_.get(keys, '[0]'))) keys = _.get(keys, '[0]', []);
+
+        var existing_headers = this._getInfo('headers', {});
+        var headers = _.omit(existing_headers, keys);
+
+        return this._setInfo('headers', headers);
+      },
+      load: function load() {
+        var _this = this,
+            _arguments = arguments;
+
+        var args = Array.from(arguments);
+        var identifier = _.get(args, '[0]');
+        var callback = _.get(args, '[1]');
+
+        if (this.loading === true || this.saving === true || this.running === true) {
+          setTimeout(function () {
+            _this.load.apply(_this, _arguments);
+          }, 50);
+          return this;
+        }
+
+        if (_.isNil(identifier)) return Flexio.util.debug("The `identifier` parameter is required. Either the connection's eid or connection's alias may be used.");
+
+        this.loading = true;
+        Flexio.util.debug('Loading Connection `' + identifier + '`...');
+
+        Flexio.http().get('/connections/' + identifier).then(function (response) {
+          var connection = _.get(response, 'data', {});
+          _this.connection = _.assign({}, connection);
+          _this.loading = false;
+          Flexio.util.debug('Connection Loaded.');
+
+          if (typeof callback == 'function') callback.call(_this, null, connection);
+        }).catch(function (error) {
+          _this.loading = false;
+          Flexio.util.debug('Connection Load Failed.');
+
+          if (typeof callback == 'function') callback.call(_this, error, null);
+        });
+
+        return this;
+      },
+      save: function save() {
+        var _this2 = this,
+            _arguments2 = arguments;
+
+        var args = Array.from(arguments);
+        var params = _.get(args, '[0]');
+        var callback = _.get(args, '[0]');
+
+        if (this.loading === true || this.saving === true || this.running === true) {
+          setTimeout(function () {
+            _this2.save.apply(_this2, _arguments2);
+          }, 50);
+          return this;
+        }
+
+        if (_.isPlainObject(params)) {
+          _.assign(this.connection, _.pick(params, ['name', 'description', 'ename']));
+          callback = _.get(args, '[1]');
+        }
+
+        this.saving = true;
+        Flexio.util.debug('Saving Connection `' + _.get(this.connection, 'name', 'Untitled Connection') + '`...');
+
+        Flexio.http().post('/connections', this.connection).then(function (response) {
+          var connection = _.get(response, 'data', {});
+          _this2.connection = _.assign({}, connection);
+          _this2.saving = false;
+          Flexio.util.debug('Connection Saved.');
+
+          if (typeof callback == 'function') callback.call(_this2, null, _this2.connection);
+        }).catch(function (error) {
+          _this2.saving = false;
+          Flexio.util.debug('Connection Save Failed.');
+
+          if (typeof callback == 'function') callback.call(_this2, error, null);
+        });
+
+        return this;
+      },
+      _getInfo: function _getInfo(key, default_val) {
+        return _.get(this.connection, 'connection_info.' + key, default_val);
+      },
+      _setInfo: function _setInfo(key, val) {
+        _.set(this.connection, 'connection_info.' + key, val);
+        return this;
+      }
+    });
+
+    return retval;
+  };
+};
+
+/***/ })
+/******/ ])["default"];
+});
\ No newline at end of file
diff --git a/dist/orig/flexio-node.min.js b/dist/orig/flexio-node.min.js
new file mode 100644
index 0000000..3c39a5f
--- /dev/null
+++ b/dist/orig/flexio-node.min.js
@@ -0,0 +1,11 @@
+/*!
+ * Flex.io Javascript SDK v1.20.2 (https://github.com/flexiodata/flexio-sdk-js)
+ * (c) 2018 Gold Prairie LLC
+ */
+!function(t,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("http"),require("https"),require("url"),require("assert"),require("stream"),require("tty"),require("util"),require("fs"),require("net"),require("zlib")):"function"==typeof define&&define.amd?define(["http","https","url","assert","stream","tty","util","fs","net","zlib"],n):"object"==typeof exports?exports.Flexio=n(require("http"),require("https"),require("url"),require("assert"),require("stream"),require("tty"),require("util"),require("fs"),require("net"),require("zlib")):t.Flexio=n(t.http,t.https,t.url,t.assert,t.stream,t.tty,t.util,t.fs,t.net,t.zlib)}(this,function(t,n,e,r,i,o,u,a,s,c){return function(t){function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}var e={};return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},n.p="",n(n.s=17)}([function(t,n,e){(function(t){var r;(function(){function i(t,n){return t.set(n[0],n[1]),t}function o(t,n){return t.add(n),t}function u(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)}function a(t,n,e,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var u=t[i];n(r,u,e(u),t)}return r}function s(t,n){for(var e=-1,r=null==t?0:t.length;++e<r&&!1!==n(t[e],e,t););return t}function c(t,n){for(var e=null==t?0:t.length;e--&&!1!==n(t[e],e,t););return t}function f(t,n){for(var e=-1,r=null==t?0:t.length;++e<r;)if(!n(t[e],e,t))return!1;return!0}function l(t,n){for(var e=-1,r=null==t?0:t.length,i=0,o=[];++e<r;){var u=t[e];n(u,e,t)&&(o[i++]=u)}return o}function p(t,n){return!!(null==t?0:t.length)&&O(t,n,0)>-1}function h(t,n,e){for(var r=-1,i=null==t?0:t.length;++r<i;)if(e(n,t[r]))return!0;return!1}function d(t,n){for(var e=-1,r=null==t?0:t.length,i=Array(r);++e<r;)i[e]=n(t[e],e,t);return i}function g(t,n){for(var e=-1,r=n.length,i=t.length;++e<r;)t[i+e]=n[e];return t}function v(t,n,e,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(e=t[++i]);++i<o;)e=n(e,t[i],i,t);return e}function _(t,n,e,r){var i=null==t?0:t.length;for(r&&i&&(e=t[--i]);i--;)e=n(e,t[i],i,t);return e}function y(t,n){for(var e=-1,r=null==t?0:t.length;++e<r;)if(n(t[e],e,t))return!0;return!1}function m(t){return t.split("")}function b(t){return t.match(Bn)||[]}function w(t,n,e){var r;return e(t,function(t,e,i){if(n(t,e,i))return r=e,!1}),r}function x(t,n,e,r){for(var i=t.length,o=e+(r?1:-1);r?o--:++o<i;)if(n(t[o],o,t))return o;return-1}function O(t,n,e){return n===n?Z(t,n,e):x(t,A,e)}function S(t,n,e,r){for(var i=e-1,o=t.length;++i<o;)if(r(t[i],n))return i;return-1}function A(t){return t!==t}function T(t,n){var e=null==t?0:t.length;return e?k(t,n)/e:It}function E(t){return function(n){return null==n?rt:n[t]}}function C(t){return function(n){return null==t?rt:t[n]}}function P(t,n,e,r,i){return i(t,function(t,i,o){e=r?(r=!1,t):n(e,t,i,o)}),e}function j(t,n){var e=t.length;for(t.sort(n);e--;)t[e]=t[e].value;return t}function k(t,n){for(var e,r=-1,i=t.length;++r<i;){var o=n(t[r]);o!==rt&&(e=e===rt?o:e+o)}return e}function R(t,n){for(var e=-1,r=Array(t);++e<t;)r[e]=n(e);return r}function N(t,n){return d(n,function(n){return[n,t[n]]})}function I(t){return function(n){return t(n)}}function q(t,n){return d(n,function(n){return t[n]})}function U(t,n){return t.has(n)}function K(t,n){for(var e=-1,r=t.length;++e<r&&O(n,t[e],0)>-1;);return e}function L(t,n){for(var e=t.length;e--&&O(n,t[e],0)>-1;);return e}function D(t,n){for(var e=t.length,r=0;e--;)t[e]===n&&++r;return r}function B(t){return"\\"+Ee[t]}function z(t,n){return null==t?rt:t[n]}function F(t){return ye.test(t)}function M(t){return me.test(t)}function J(t){for(var n,e=[];!(n=t.next()).done;)e.push(n.value);return e}function W(t){var n=-1,e=Array(t.size);return t.forEach(function(t,r){e[++n]=[r,t]}),e}function $(t,n){return function(e){return t(n(e))}}function H(t,n){for(var e=-1,r=t.length,i=0,o=[];++e<r;){var u=t[e];u!==n&&u!==ct||(t[e]=ct,o[i++]=e)}return o}function G(t){var n=-1,e=Array(t.size);return t.forEach(function(t){e[++n]=t}),e}function V(t){var n=-1,e=Array(t.size);return t.forEach(function(t){e[++n]=[t,t]}),e}function Z(t,n,e){for(var r=e-1,i=t.length;++r<i;)if(t[r]===n)return r;return-1}function X(t,n,e){for(var r=e+1;r--;)if(t[r]===n)return r;return r}function Y(t){return F(t)?tt(t):Je(t)}function Q(t){return F(t)?nt(t):m(t)}function tt(t){for(var n=ve.lastIndex=0;ve.test(t);)++n;return n}function nt(t){return t.match(ve)||[]}function et(t){return t.match(_e)||[]}var rt,it=200,ot="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",ut="Expected a function",at="__lodash_hash_undefined__",st=500,ct="__lodash_placeholder__",ft=1,lt=2,pt=4,ht=1,dt=2,gt=1,vt=2,_t=4,yt=8,mt=16,bt=32,wt=64,xt=128,Ot=256,St=512,At=30,Tt="...",Et=800,Ct=16,Pt=1,jt=2,kt=1/0,Rt=9007199254740991,Nt=1.7976931348623157e308,It=NaN,qt=4294967295,Ut=qt-1,Kt=qt>>>1,Lt=[["ary",xt],["bind",gt],["bindKey",vt],["curry",yt],["curryRight",mt],["flip",St],["partial",bt],["partialRight",wt],["rearg",Ot]],Dt="[object Arguments]",Bt="[object Array]",zt="[object AsyncFunction]",Ft="[object Boolean]",Mt="[object Date]",Jt="[object DOMException]",Wt="[object Error]",$t="[object Function]",Ht="[object GeneratorFunction]",Gt="[object Map]",Vt="[object Number]",Zt="[object Null]",Xt="[object Object]",Yt="[object Proxy]",Qt="[object RegExp]",tn="[object Set]",nn="[object String]",en="[object Symbol]",rn="[object Undefined]",on="[object WeakMap]",un="[object WeakSet]",an="[object ArrayBuffer]",sn="[object DataView]",cn="[object Float32Array]",fn="[object Float64Array]",ln="[object Int8Array]",pn="[object Int16Array]",hn="[object Int32Array]",dn="[object Uint8Array]",gn="[object Uint8ClampedArray]",vn="[object Uint16Array]",_n="[object Uint32Array]",yn=/\b__p \+= '';/g,mn=/\b(__p \+=) '' \+/g,bn=/(__e\(.*?\)|\b__t\)) \+\n'';/g,wn=/&(?:amp|lt|gt|quot|#39);/g,xn=/[&<>"']/g,On=RegExp(wn.source),Sn=RegExp(xn.source),An=/<%-([\s\S]+?)%>/g,Tn=/<%([\s\S]+?)%>/g,En=/<%=([\s\S]+?)%>/g,Cn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Pn=/^\w*$/,jn=/^\./,kn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Rn=/[\\^$.*+?()[\]{}|]/g,Nn=RegExp(Rn.source),In=/^\s+|\s+$/g,qn=/^\s+/,Un=/\s+$/,Kn=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ln=/\{\n\/\* \[wrapped with (.+)\] \*/,Dn=/,? & /,Bn=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,zn=/\\(\\)?/g,Fn=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Mn=/\w*$/,Jn=/^[-+]0x[0-9a-f]+$/i,Wn=/^0b[01]+$/i,$n=/^\[object .+?Constructor\]$/,Hn=/^0o[0-7]+$/i,Gn=/^(?:0|[1-9]\d*)$/,Vn=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Zn=/($^)/,Xn=/['\n\r\u2028\u2029\\]/g,Yn="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Qn="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\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",te="["+Qn+"]",ne="["+Yn+"]",ee="[a-z\\xdf-\\xf6\\xf8-\\xff]",re="[^\\ud800-\\udfff"+Qn+"\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",ie="\\ud83c[\\udffb-\\udfff]",oe="(?:\\ud83c[\\udde6-\\uddff]){2}",ue="[\\ud800-\\udbff][\\udc00-\\udfff]",ae="[A-Z\\xc0-\\xd6\\xd8-\\xde]",se="(?:"+ee+"|"+re+")",ce="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",fe="(?:\\u200d(?:"+["[^\\ud800-\\udfff]",oe,ue].join("|")+")[\\ufe0e\\ufe0f]?"+ce+")*",le="[\\ufe0e\\ufe0f]?"+ce+fe,pe="(?:"+["[\\u2700-\\u27bf]",oe,ue].join("|")+")"+le,he="(?:"+["[^\\ud800-\\udfff]"+ne+"?",ne,oe,ue,"[\\ud800-\\udfff]"].join("|")+")",de=RegExp("['’]","g"),ge=RegExp(ne,"g"),ve=RegExp(ie+"(?="+ie+")|"+he+le,"g"),_e=RegExp([ae+"?"+ee+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[te,ae,"$"].join("|")+")","(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\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\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[te,ae+se,"$"].join("|")+")",ae+"?"+se+"+(?:['’](?:d|ll|m|re|s|t|ve))?",ae+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)","\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)","\\d+",pe].join("|"),"g"),ye=RegExp("[\\u200d\\ud800-\\udfff"+Yn+"\\ufe0e\\ufe0f]"),me=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,be=["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"],we=-1,xe={};xe[cn]=xe[fn]=xe[ln]=xe[pn]=xe[hn]=xe[dn]=xe[gn]=xe[vn]=xe[_n]=!0,xe[Dt]=xe[Bt]=xe[an]=xe[Ft]=xe[sn]=xe[Mt]=xe[Wt]=xe[$t]=xe[Gt]=xe[Vt]=xe[Xt]=xe[Qt]=xe[tn]=xe[nn]=xe[on]=!1;var Oe={};Oe[Dt]=Oe[Bt]=Oe[an]=Oe[sn]=Oe[Ft]=Oe[Mt]=Oe[cn]=Oe[fn]=Oe[ln]=Oe[pn]=Oe[hn]=Oe[Gt]=Oe[Vt]=Oe[Xt]=Oe[Qt]=Oe[tn]=Oe[nn]=Oe[en]=Oe[dn]=Oe[gn]=Oe[vn]=Oe[_n]=!0,Oe[Wt]=Oe[$t]=Oe[on]=!1;var Se={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"},Ae={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Te={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"},Ee={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ce=parseFloat,Pe=parseInt,je="object"==typeof global&&global&&global.Object===Object&&global,ke="object"==typeof self&&self&&self.Object===Object&&self,Re=je||ke||Function("return this")(),Ne="object"==typeof n&&n&&!n.nodeType&&n,Ie=Ne&&"object"==typeof t&&t&&!t.nodeType&&t,qe=Ie&&Ie.exports===Ne,Ue=qe&&je.process,Ke=function(){try{return Ue&&Ue.binding&&Ue.binding("util")}catch(t){}}(),Le=Ke&&Ke.isArrayBuffer,De=Ke&&Ke.isDate,Be=Ke&&Ke.isMap,ze=Ke&&Ke.isRegExp,Fe=Ke&&Ke.isSet,Me=Ke&&Ke.isTypedArray,Je=E("length"),We=C(Se),$e=C(Ae),He=C(Te),Ge=function t(n){function e(t){if(os(t)&&!_p(t)&&!(t instanceof C)){if(t instanceof m)return t;if(_f.call(t,"__wrapped__"))return eu(t)}return new m(t)}function r(){}function m(t,n){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=rt}function C(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=qt,this.__views__=[]}function Z(){var t=new C(this.__wrapped__);return t.__actions__=Ki(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ki(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ki(this.__views__),t}function tt(){if(this.__filtered__){var t=new C(this);t.__dir__=-1,t.__filtered__=!0}else t=this.clone(),t.__dir__*=-1;return t}function nt(){var t=this.__wrapped__.value(),n=this.__dir__,e=_p(t),r=n<0,i=e?t.length:0,o=Eo(0,i,this.__views__),u=o.start,a=o.end,s=a-u,c=r?a:u-1,f=this.__iteratees__,l=f.length,p=0,h=Hf(s,this.__takeCount__);if(!e||!r&&i==s&&h==s)return yi(t,this.__actions__);var d=[];t:for(;s--&&p<h;){c+=n;for(var g=-1,v=t[c];++g<l;){var _=f[g],y=_.iteratee,m=_.type,b=y(v);if(m==jt)v=b;else if(!b){if(m==Pt)continue t;break t}}d[p++]=v}return d}function Bn(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function Yn(){this.__data__=rl?rl(null):{},this.size=0}function Qn(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n}function te(t){var n=this.__data__;if(rl){var e=n[t];return e===at?rt:e}return _f.call(n,t)?n[t]:rt}function ne(t){var n=this.__data__;return rl?n[t]!==rt:_f.call(n,t)}function ee(t,n){var e=this.__data__;return this.size+=this.has(t)?0:1,e[t]=rl&&n===rt?at:n,this}function re(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function ie(){this.__data__=[],this.size=0}function oe(t){var n=this.__data__,e=Ze(n,t);return!(e<0)&&(e==n.length-1?n.pop():kf.call(n,e,1),--this.size,!0)}function ue(t){var n=this.__data__,e=Ze(n,t);return e<0?rt:n[e][1]}function ae(t){return Ze(this.__data__,t)>-1}function se(t,n){var e=this.__data__,r=Ze(e,t);return r<0?(++this.size,e.push([t,n])):e[r][1]=n,this}function ce(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function fe(){this.size=0,this.__data__={hash:new Bn,map:new(Qf||re),string:new Bn}}function le(t){var n=Oo(this,t).delete(t);return this.size-=n?1:0,n}function pe(t){return Oo(this,t).get(t)}function he(t){return Oo(this,t).has(t)}function ve(t,n){var e=Oo(this,t),r=e.size;return e.set(t,n),this.size+=e.size==r?0:1,this}function _e(t){var n=-1,e=null==t?0:t.length;for(this.__data__=new ce;++n<e;)this.add(t[n])}function ye(t){return this.__data__.set(t,at),this}function me(t){return this.__data__.has(t)}function Se(t){var n=this.__data__=new re(t);this.size=n.size}function Ae(){this.__data__=new re,this.size=0}function Te(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e}function Ee(t){return this.__data__.get(t)}function je(t){return this.__data__.has(t)}function ke(t,n){var e=this.__data__;if(e instanceof re){var r=e.__data__;if(!Qf||r.length<it-1)return r.push([t,n]),this.size=++e.size,this;e=this.__data__=new ce(r)}return e.set(t,n),this.size=e.size,this}function Ne(t,n){var e=_p(t),r=!e&&vp(t),i=!e&&!r&&mp(t),o=!e&&!r&&!i&&Sp(t),u=e||r||i||o,a=u?R(t.length,ff):[],s=a.length;for(var c in t)!n&&!_f.call(t,c)||u&&("length"==c||i&&("offset"==c||"parent"==c)||o&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||qo(c,s))||a.push(c);return a}function Ie(t){var n=t.length;return n?t[Qr(0,n-1)]:rt}function Ue(t,n){return Yo(Ki(t),er(n,0,t.length))}function Ke(t){return Yo(Ki(t))}function Je(t,n,e){(e===rt||Wa(t[n],e))&&(e!==rt||n in t)||tr(t,n,e)}function Ve(t,n,e){var r=t[n];_f.call(t,n)&&Wa(r,e)&&(e!==rt||n in t)||tr(t,n,e)}function Ze(t,n){for(var e=t.length;e--;)if(Wa(t[e][0],n))return e;return-1}function Xe(t,n,e,r){return gl(t,function(t,i,o){n(r,t,e(t),o)}),r}function Ye(t,n){return t&&Li(n,Bs(n),t)}function Qe(t,n){return t&&Li(n,zs(n),t)}function tr(t,n,e){"__proto__"==n&&qf?qf(t,n,{configurable:!0,enumerable:!0,value:e,writable:!0}):t[n]=e}function nr(t,n){for(var e=-1,r=n.length,i=ef(r),o=null==t;++e<r;)i[e]=o?rt:Ks(t,n[e]);return i}function er(t,n,e){return t===t&&(e!==rt&&(t=t<=e?t:e),n!==rt&&(t=t>=n?t:n)),t}function rr(t,n,e,r,i,o){var u,a=n&ft,c=n&lt,f=n&pt;if(e&&(u=i?e(t,r,i,o):e(t)),u!==rt)return u;if(!is(t))return t;var l=_p(t);if(l){if(u=jo(t),!a)return Ki(t,u)}else{var p=El(t),h=p==$t||p==Ht;if(mp(t))return Ai(t,a);if(p==Xt||p==Dt||h&&!i){if(u=c||h?{}:ko(t),!a)return c?Bi(t,Qe(u,t)):Di(t,Ye(u,t))}else{if(!Oe[p])return i?t:{};u=Ro(t,p,rr,a)}}o||(o=new Se);var d=o.get(t);if(d)return d;o.set(t,u);var g=f?c?mo:yo:c?zs:Bs,v=l?rt:g(t);return s(v||t,function(r,i){v&&(i=r,r=t[i]),Ve(u,i,rr(r,n,e,i,t,o))}),u}function ir(t){var n=Bs(t);return function(e){return or(e,t,n)}}function or(t,n,e){var r=e.length;if(null==t)return!r;for(t=sf(t);r--;){var i=e[r],o=n[i],u=t[i];if(u===rt&&!(i in t)||!o(u))return!1}return!0}function ur(t,n,e){if("function"!=typeof t)throw new lf(ut);return jl(function(){t.apply(rt,e)},n)}function ar(t,n,e,r){var i=-1,o=p,u=!0,a=t.length,s=[],c=n.length;if(!a)return s;e&&(n=d(n,I(e))),r?(o=h,u=!1):n.length>=it&&(o=U,u=!1,n=new _e(n));t:for(;++i<a;){var f=t[i],l=null==e?f:e(f);if(f=r||0!==f?f:0,u&&l===l){for(var g=c;g--;)if(n[g]===l)continue t;s.push(f)}else o(n,l,r)||s.push(f)}return s}function sr(t,n){var e=!0;return gl(t,function(t,r,i){return e=!!n(t,r,i)}),e}function cr(t,n,e){for(var r=-1,i=t.length;++r<i;){var o=t[r],u=n(o);if(null!=u&&(a===rt?u===u&&!vs(u):e(u,a)))var a=u,s=o}return s}function fr(t,n,e,r){var i=t.length;for(e=xs(e),e<0&&(e=-e>i?0:i+e),r=r===rt||r>i?i:xs(r),r<0&&(r+=i),r=e>r?0:Os(r);e<r;)t[e++]=n;return t}function lr(t,n){var e=[];return gl(t,function(t,r,i){n(t,r,i)&&e.push(t)}),e}function pr(t,n,e,r,i){var o=-1,u=t.length;for(e||(e=Io),i||(i=[]);++o<u;){var a=t[o];n>0&&e(a)?n>1?pr(a,n-1,e,r,i):g(i,a):r||(i[i.length]=a)}return i}function hr(t,n){return t&&_l(t,n,Bs)}function dr(t,n){return t&&yl(t,n,Bs)}function gr(t,n){return l(n,function(n){return ns(t[n])})}function vr(t,n){n=Oi(n,t);for(var e=0,r=n.length;null!=t&&e<r;)t=t[Qo(n[e++])];return e&&e==r?t:rt}function _r(t,n,e){var r=n(t);return _p(t)?r:g(r,e(t))}function yr(t){return null==t?t===rt?rn:Zt:If&&If in sf(t)?To(t):$o(t)}function mr(t,n){return t>n}function br(t,n){return null!=t&&_f.call(t,n)}function wr(t,n){return null!=t&&n in sf(t)}function xr(t,n,e){return t>=Hf(n,e)&&t<$f(n,e)}function Or(t,n,e){for(var r=e?h:p,i=t[0].length,o=t.length,u=o,a=ef(o),s=1/0,c=[];u--;){var f=t[u];u&&n&&(f=d(f,I(n))),s=Hf(f.length,s),a[u]=!e&&(n||i>=120&&f.length>=120)?new _e(u&&f):rt}f=t[0];var l=-1,g=a[0];t:for(;++l<i&&c.length<s;){var v=f[l],_=n?n(v):v;if(v=e||0!==v?v:0,!(g?U(g,_):r(c,_,e))){for(u=o;--u;){var y=a[u];if(!(y?U(y,_):r(t[u],_,e)))continue t}g&&g.push(_),c.push(v)}}return c}function Sr(t,n,e,r){return hr(t,function(t,i,o){n(r,e(t),i,o)}),r}function Ar(t,n,e){n=Oi(n,t),t=Go(t,n);var r=null==t?t:t[Qo(wu(n))];return null==r?rt:u(r,t,e)}function Tr(t){return os(t)&&yr(t)==Dt}function Er(t){return os(t)&&yr(t)==an}function Cr(t){return os(t)&&yr(t)==Mt}function Pr(t,n,e,r,i){return t===n||(null==t||null==n||!os(t)&&!os(n)?t!==t&&n!==n:jr(t,n,e,r,Pr,i))}function jr(t,n,e,r,i,o){var u=_p(t),a=_p(n),s=u?Bt:El(t),c=a?Bt:El(n);s=s==Dt?Xt:s,c=c==Dt?Xt:c;var f=s==Xt,l=c==Xt,p=s==c;if(p&&mp(t)){if(!mp(n))return!1;u=!0,f=!1}if(p&&!f)return o||(o=new Se),u||Sp(t)?ho(t,n,e,r,i,o):go(t,n,s,e,r,i,o);if(!(e&ht)){var h=f&&_f.call(t,"__wrapped__"),d=l&&_f.call(n,"__wrapped__");if(h||d){var g=h?t.value():t,v=d?n.value():n;return o||(o=new Se),i(g,v,e,r,o)}}return!!p&&(o||(o=new Se),vo(t,n,e,r,i,o))}function kr(t){return os(t)&&El(t)==Gt}function Rr(t,n,e,r){var i=e.length,o=i,u=!r;if(null==t)return!o;for(t=sf(t);i--;){var a=e[i];if(u&&a[2]?a[1]!==t[a[0]]:!(a[0]in t))return!1}for(;++i<o;){a=e[i];var s=a[0],c=t[s],f=a[1];if(u&&a[2]){if(c===rt&&!(s in t))return!1}else{var l=new Se;if(r)var p=r(c,f,s,t,n,l);if(!(p===rt?Pr(f,c,ht|dt,r,l):p))return!1}}return!0}function Nr(t){return!(!is(t)||Bo(t))&&(ns(t)?Of:$n).test(tu(t))}function Ir(t){return os(t)&&yr(t)==Qt}function qr(t){return os(t)&&El(t)==tn}function Ur(t){return os(t)&&rs(t.length)&&!!xe[yr(t)]}function Kr(t){return"function"==typeof t?t:null==t?jc:"object"==typeof t?_p(t)?Mr(t[0],t[1]):Fr(t):Lc(t)}function Lr(t){if(!zo(t))return Wf(t);var n=[];for(var e in sf(t))_f.call(t,e)&&"constructor"!=e&&n.push(e);return n}function Dr(t){if(!is(t))return Wo(t);var n=zo(t),e=[];for(var r in t)("constructor"!=r||!n&&_f.call(t,r))&&e.push(r);return e}function Br(t,n){return t<n}function zr(t,n){var e=-1,r=$a(t)?ef(t.length):[];return gl(t,function(t,i,o){r[++e]=n(t,i,o)}),r}function Fr(t){var n=So(t);return 1==n.length&&n[0][2]?Mo(n[0][0],n[0][1]):function(e){return e===t||Rr(e,t,n)}}function Mr(t,n){return Ko(t)&&Fo(n)?Mo(Qo(t),n):function(e){var r=Ks(e,t);return r===rt&&r===n?Ds(e,t):Pr(n,r,ht|dt)}}function Jr(t,n,e,r,i){t!==n&&_l(n,function(o,u){if(is(o))i||(i=new Se),Wr(t,n,u,e,Jr,r,i);else{var a=r?r(t[u],o,u+"",t,n,i):rt;a===rt&&(a=o),Je(t,u,a)}},zs)}function Wr(t,n,e,r,i,o,u){var a=t[e],s=n[e],c=u.get(s);if(c)return void Je(t,e,c);var f=o?o(a,s,e+"",t,n,u):rt,l=f===rt;if(l){var p=_p(s),h=!p&&mp(s),d=!p&&!h&&Sp(s);f=s,p||h||d?_p(a)?f=a:Ha(a)?f=Ki(a):h?(l=!1,f=Ai(s,!0)):d?(l=!1,f=Ri(s,!0)):f=[]:hs(s)||vp(s)?(f=a,vp(a)?f=As(a):(!is(a)||r&&ns(a))&&(f=ko(s))):l=!1}l&&(u.set(s,f),i(f,s,r,o,u),u.delete(s)),Je(t,e,f)}function $r(t,n){var e=t.length;if(e)return n+=n<0?e:0,qo(n,e)?t[n]:rt}function Hr(t,n,e){var r=-1;return n=d(n.length?n:[jc],I(xo())),j(zr(t,function(t,e,i){return{criteria:d(n,function(n){return n(t)}),index:++r,value:t}}),function(t,n){return Ii(t,n,e)})}function Gr(t,n){return Vr(t,n,function(n,e){return Ds(t,e)})}function Vr(t,n,e){for(var r=-1,i=n.length,o={};++r<i;){var u=n[r],a=vr(t,u);e(a,u)&&oi(o,Oi(u,t),a)}return o}function Zr(t){return function(n){return vr(n,t)}}function Xr(t,n,e,r){var i=r?S:O,o=-1,u=n.length,a=t;for(t===n&&(n=Ki(n)),e&&(a=d(t,I(e)));++o<u;)for(var s=0,c=n[o],f=e?e(c):c;(s=i(a,f,s,r))>-1;)a!==t&&kf.call(a,s,1),kf.call(t,s,1);return t}function Yr(t,n){for(var e=t?n.length:0,r=e-1;e--;){var i=n[e];if(e==r||i!==o){var o=i;qo(i)?kf.call(t,i,1):gi(t,i)}}return t}function Qr(t,n){return t+Bf(Zf()*(n-t+1))}function ti(t,n,e,r){for(var i=-1,o=$f(Df((n-t)/(e||1)),0),u=ef(o);o--;)u[r?o:++i]=t,t+=e;return u}function ni(t,n){var e="";if(!t||n<1||n>Rt)return e;do{n%2&&(e+=t),(n=Bf(n/2))&&(t+=t)}while(n);return e}function ei(t,n){return kl(Ho(t,n,jc),t+"")}function ri(t){return Ie(Qs(t))}function ii(t,n){var e=Qs(t);return Yo(e,er(n,0,e.length))}function oi(t,n,e,r){if(!is(t))return t;n=Oi(n,t);for(var i=-1,o=n.length,u=o-1,a=t;null!=a&&++i<o;){var s=Qo(n[i]),c=e;if(i!=u){var f=a[s];c=r?r(f,s,a):rt,c===rt&&(c=is(f)?f:qo(n[i+1])?[]:{})}Ve(a,s,c),a=a[s]}return t}function ui(t){return Yo(Qs(t))}function ai(t,n,e){var r=-1,i=t.length;n<0&&(n=-n>i?0:i+n),e=e>i?i:e,e<0&&(e+=i),i=n>e?0:e-n>>>0,n>>>=0;for(var o=ef(i);++r<i;)o[r]=t[r+n];return o}function si(t,n){var e;return gl(t,function(t,r,i){return!(e=n(t,r,i))}),!!e}function ci(t,n,e){var r=0,i=null==t?r:t.length;if("number"==typeof n&&n===n&&i<=Kt){for(;r<i;){var o=r+i>>>1,u=t[o];null!==u&&!vs(u)&&(e?u<=n:u<n)?r=o+1:i=o}return i}return fi(t,n,jc,e)}function fi(t,n,e,r){n=e(n);for(var i=0,o=null==t?0:t.length,u=n!==n,a=null===n,s=vs(n),c=n===rt;i<o;){var f=Bf((i+o)/2),l=e(t[f]),p=l!==rt,h=null===l,d=l===l,g=vs(l);if(u)var v=r||d;else v=c?d&&(r||p):a?d&&p&&(r||!h):s?d&&p&&!h&&(r||!g):!h&&!g&&(r?l<=n:l<n);v?i=f+1:o=f}return Hf(o,Ut)}function li(t,n){for(var e=-1,r=t.length,i=0,o=[];++e<r;){var u=t[e],a=n?n(u):u;if(!e||!Wa(a,s)){var s=a;o[i++]=0===u?0:u}}return o}function pi(t){return"number"==typeof t?t:vs(t)?It:+t}function hi(t){if("string"==typeof t)return t;if(_p(t))return d(t,hi)+"";if(vs(t))return hl?hl.call(t):"";var n=t+"";return"0"==n&&1/t==-kt?"-0":n}function di(t,n,e){var r=-1,i=p,o=t.length,u=!0,a=[],s=a;if(e)u=!1,i=h;else if(o>=it){var c=n?null:Ol(t);if(c)return G(c);u=!1,i=U,s=new _e}else s=n?[]:a;t:for(;++r<o;){var f=t[r],l=n?n(f):f;if(f=e||0!==f?f:0,u&&l===l){for(var d=s.length;d--;)if(s[d]===l)continue t;n&&s.push(l),a.push(f)}else i(s,l,e)||(s!==a&&s.push(l),a.push(f))}return a}function gi(t,n){return n=Oi(n,t),null==(t=Go(t,n))||delete t[Qo(wu(n))]}function vi(t,n,e,r){return oi(t,n,e(vr(t,n)),r)}function _i(t,n,e,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&n(t[o],o,t););return e?ai(t,r?0:o,r?o+1:i):ai(t,r?o+1:0,r?i:o)}function yi(t,n){var e=t;return e instanceof C&&(e=e.value()),v(n,function(t,n){return n.func.apply(n.thisArg,g([t],n.args))},e)}function mi(t,n,e){var r=t.length;if(r<2)return r?di(t[0]):[];for(var i=-1,o=ef(r);++i<r;)for(var u=t[i],a=-1;++a<r;)a!=i&&(o[i]=ar(o[i]||u,t[a],n,e));return di(pr(o,1),n,e)}function bi(t,n,e){for(var r=-1,i=t.length,o=n.length,u={};++r<i;){var a=r<o?n[r]:rt;e(u,t[r],a)}return u}function wi(t){return Ha(t)?t:[]}function xi(t){return"function"==typeof t?t:jc}function Oi(t,n){return _p(t)?t:Ko(t,n)?[t]:Rl(Es(t))}function Si(t,n,e){var r=t.length;return e=e===rt?r:e,!n&&e>=r?t:ai(t,n,e)}function Ai(t,n){if(n)return t.slice();var e=t.length,r=Ef?Ef(e):new t.constructor(e);return t.copy(r),r}function Ti(t){var n=new t.constructor(t.byteLength);return new Tf(n).set(new Tf(t)),n}function Ei(t,n){var e=n?Ti(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.byteLength)}function Ci(t,n,e){return v(n?e(W(t),ft):W(t),i,new t.constructor)}function Pi(t){var n=new t.constructor(t.source,Mn.exec(t));return n.lastIndex=t.lastIndex,n}function ji(t,n,e){return v(n?e(G(t),ft):G(t),o,new t.constructor)}function ki(t){return pl?sf(pl.call(t)):{}}function Ri(t,n){var e=n?Ti(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.length)}function Ni(t,n){if(t!==n){var e=t!==rt,r=null===t,i=t===t,o=vs(t),u=n!==rt,a=null===n,s=n===n,c=vs(n);if(!a&&!c&&!o&&t>n||o&&u&&s&&!a&&!c||r&&u&&s||!e&&s||!i)return 1;if(!r&&!o&&!c&&t<n||c&&e&&i&&!r&&!o||a&&e&&i||!u&&i||!s)return-1}return 0}function Ii(t,n,e){for(var r=-1,i=t.criteria,o=n.criteria,u=i.length,a=e.length;++r<u;){var s=Ni(i[r],o[r]);if(s){if(r>=a)return s;return s*("desc"==e[r]?-1:1)}}return t.index-n.index}function qi(t,n,e,r){for(var i=-1,o=t.length,u=e.length,a=-1,s=n.length,c=$f(o-u,0),f=ef(s+c),l=!r;++a<s;)f[a]=n[a];for(;++i<u;)(l||i<o)&&(f[e[i]]=t[i]);for(;c--;)f[a++]=t[i++];return f}function Ui(t,n,e,r){for(var i=-1,o=t.length,u=-1,a=e.length,s=-1,c=n.length,f=$f(o-a,0),l=ef(f+c),p=!r;++i<f;)l[i]=t[i];for(var h=i;++s<c;)l[h+s]=n[s];for(;++u<a;)(p||i<o)&&(l[h+e[u]]=t[i++]);return l}function Ki(t,n){var e=-1,r=t.length;for(n||(n=ef(r));++e<r;)n[e]=t[e];return n}function Li(t,n,e,r){var i=!e;e||(e={});for(var o=-1,u=n.length;++o<u;){var a=n[o],s=r?r(e[a],t[a],a,e,t):rt;s===rt&&(s=t[a]),i?tr(e,a,s):Ve(e,a,s)}return e}function Di(t,n){return Li(t,Al(t),n)}function Bi(t,n){return Li(t,Tl(t),n)}function zi(t,n){return function(e,r){var i=_p(e)?a:Xe,o=n?n():{};return i(e,t,xo(r,2),o)}}function Fi(t){return ei(function(n,e){var r=-1,i=e.length,o=i>1?e[i-1]:rt,u=i>2?e[2]:rt;for(o=t.length>3&&"function"==typeof o?(i--,o):rt,u&&Uo(e[0],e[1],u)&&(o=i<3?rt:o,i=1),n=sf(n);++r<i;){var a=e[r];a&&t(n,a,r,o)}return n})}function Mi(t,n){return function(e,r){if(null==e)return e;if(!$a(e))return t(e,r);for(var i=e.length,o=n?i:-1,u=sf(e);(n?o--:++o<i)&&!1!==r(u[o],o,u););return e}}function Ji(t){return function(n,e,r){for(var i=-1,o=sf(n),u=r(n),a=u.length;a--;){var s=u[t?a:++i];if(!1===e(o[s],s,o))break}return n}}function Wi(t,n,e){function r(){return(this&&this!==Re&&this instanceof r?o:t).apply(i?e:this,arguments)}var i=n&gt,o=Gi(t);return r}function $i(t){return function(n){n=Es(n);var e=F(n)?Q(n):rt,r=e?e[0]:n.charAt(0),i=e?Si(e,1).join(""):n.slice(1);return r[t]()+i}}function Hi(t){return function(n){return v(Ac(oc(n).replace(de,"")),t,"")}}function Gi(t){return function(){var n=arguments;switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3]);case 5:return new t(n[0],n[1],n[2],n[3],n[4]);case 6:return new t(n[0],n[1],n[2],n[3],n[4],n[5]);case 7:return new t(n[0],n[1],n[2],n[3],n[4],n[5],n[6])}var e=dl(t.prototype),r=t.apply(e,n);return is(r)?r:e}}function Vi(t,n,e){function r(){for(var o=arguments.length,a=ef(o),s=o,c=wo(r);s--;)a[s]=arguments[s];var f=o<3&&a[0]!==c&&a[o-1]!==c?[]:H(a,c);return(o-=f.length)<e?uo(t,n,Yi,r.placeholder,rt,a,f,rt,rt,e-o):u(this&&this!==Re&&this instanceof r?i:t,this,a)}var i=Gi(t);return r}function Zi(t){return function(n,e,r){var i=sf(n);if(!$a(n)){var o=xo(e,3);n=Bs(n),e=function(t){return o(i[t],t,i)}}var u=t(n,e,r);return u>-1?i[o?n[u]:u]:rt}}function Xi(t){return _o(function(n){var e=n.length,r=e,i=m.prototype.thru;for(t&&n.reverse();r--;){var o=n[r];if("function"!=typeof o)throw new lf(ut);if(i&&!u&&"wrapper"==bo(o))var u=new m([],!0)}for(r=u?r:e;++r<e;){o=n[r];var a=bo(o),s="wrapper"==a?Sl(o):rt;u=s&&Do(s[0])&&s[1]==(xt|yt|bt|Ot)&&!s[4].length&&1==s[9]?u[bo(s[0])].apply(u,s[3]):1==o.length&&Do(o)?u[a]():u.thru(o)}return function(){var t=arguments,r=t[0];if(u&&1==t.length&&_p(r))return u.plant(r).value();for(var i=0,o=e?n[i].apply(this,t):r;++i<e;)o=n[i].call(this,o);return o}})}function Yi(t,n,e,r,i,o,u,a,s,c){function f(){for(var _=arguments.length,y=ef(_),m=_;m--;)y[m]=arguments[m];if(d)var b=wo(f),w=D(y,b);if(r&&(y=qi(y,r,i,d)),o&&(y=Ui(y,o,u,d)),_-=w,d&&_<c){var x=H(y,b);return uo(t,n,Yi,f.placeholder,e,y,x,a,s,c-_)}var O=p?e:this,S=h?O[t]:t;return _=y.length,a?y=Vo(y,a):g&&_>1&&y.reverse(),l&&s<_&&(y.length=s),this&&this!==Re&&this instanceof f&&(S=v||Gi(S)),S.apply(O,y)}var l=n&xt,p=n&gt,h=n&vt,d=n&(yt|mt),g=n&St,v=h?rt:Gi(t);return f}function Qi(t,n){return function(e,r){return Sr(e,t,n(r),{})}}function to(t,n){return function(e,r){var i;if(e===rt&&r===rt)return n;if(e!==rt&&(i=e),r!==rt){if(i===rt)return r;"string"==typeof e||"string"==typeof r?(e=hi(e),r=hi(r)):(e=pi(e),r=pi(r)),i=t(e,r)}return i}}function no(t){return _o(function(n){return n=d(n,I(xo())),ei(function(e){var r=this;return t(n,function(t){return u(t,r,e)})})})}function eo(t,n){n=n===rt?" ":hi(n);var e=n.length;if(e<2)return e?ni(n,t):n;var r=ni(n,Df(t/Y(n)));return F(n)?Si(Q(r),0,t).join(""):r.slice(0,t)}function ro(t,n,e,r){function i(){for(var n=-1,s=arguments.length,c=-1,f=r.length,l=ef(f+s),p=this&&this!==Re&&this instanceof i?a:t;++c<f;)l[c]=r[c];for(;s--;)l[c++]=arguments[++n];return u(p,o?e:this,l)}var o=n&gt,a=Gi(t);return i}function io(t){return function(n,e,r){return r&&"number"!=typeof r&&Uo(n,e,r)&&(e=r=rt),n=ws(n),e===rt?(e=n,n=0):e=ws(e),r=r===rt?n<e?1:-1:ws(r),ti(n,e,r,t)}}function oo(t){return function(n,e){return"string"==typeof n&&"string"==typeof e||(n=Ss(n),e=Ss(e)),t(n,e)}}function uo(t,n,e,r,i,o,u,a,s,c){var f=n&yt,l=f?u:rt,p=f?rt:u,h=f?o:rt,d=f?rt:o;n|=f?bt:wt,(n&=~(f?wt:bt))&_t||(n&=~(gt|vt));var g=[t,n,i,h,l,d,p,a,s,c],v=e.apply(rt,g);return Do(t)&&Pl(v,g),v.placeholder=r,Zo(v,t,n)}function ao(t){var n=af[t];return function(t,e){if(t=Ss(t),e=null==e?0:Hf(xs(e),292)){var r=(Es(t)+"e").split("e");return r=(Es(n(r[0]+"e"+(+r[1]+e)))+"e").split("e"),+(r[0]+"e"+(+r[1]-e))}return n(t)}}function so(t){return function(n){var e=El(n);return e==Gt?W(n):e==tn?V(n):N(n,t(n))}}function co(t,n,e,r,i,o,u,a){var s=n&vt;if(!s&&"function"!=typeof t)throw new lf(ut);var c=r?r.length:0;if(c||(n&=~(bt|wt),r=i=rt),u=u===rt?u:$f(xs(u),0),a=a===rt?a:xs(a),c-=i?i.length:0,n&wt){var f=r,l=i;r=i=rt}var p=s?rt:Sl(t),h=[t,n,e,r,i,f,l,o,u,a];if(p&&Jo(h,p),t=h[0],n=h[1],e=h[2],r=h[3],i=h[4],a=h[9]=h[9]===rt?s?0:t.length:$f(h[9]-c,0),!a&&n&(yt|mt)&&(n&=~(yt|mt)),n&&n!=gt)d=n==yt||n==mt?Vi(t,n,a):n!=bt&&n!=(gt|bt)||i.length?Yi.apply(rt,h):ro(t,n,e,r);else var d=Wi(t,n,e);return Zo((p?ml:Pl)(d,h),t,n)}function fo(t,n,e,r){return t===rt||Wa(t,df[e])&&!_f.call(r,e)?n:t}function lo(t,n,e,r,i,o){return is(t)&&is(n)&&(o.set(n,t),Jr(t,n,rt,lo,o),o.delete(n)),t}function po(t){return hs(t)?rt:t}function ho(t,n,e,r,i,o){var u=e&ht,a=t.length,s=n.length;if(a!=s&&!(u&&s>a))return!1;var c=o.get(t);if(c&&o.get(n))return c==n;var f=-1,l=!0,p=e&dt?new _e:rt;for(o.set(t,n),o.set(n,t);++f<a;){var h=t[f],d=n[f];if(r)var g=u?r(d,h,f,n,t,o):r(h,d,f,t,n,o);if(g!==rt){if(g)continue;l=!1;break}if(p){if(!y(n,function(t,n){if(!U(p,n)&&(h===t||i(h,t,e,r,o)))return p.push(n)})){l=!1;break}}else if(h!==d&&!i(h,d,e,r,o)){l=!1;break}}return o.delete(t),o.delete(n),l}function go(t,n,e,r,i,o,u){switch(e){case sn:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case an:return!(t.byteLength!=n.byteLength||!o(new Tf(t),new Tf(n)));case Ft:case Mt:case Vt:return Wa(+t,+n);case Wt:return t.name==n.name&&t.message==n.message;case Qt:case nn:return t==n+"";case Gt:var a=W;case tn:var s=r&ht;if(a||(a=G),t.size!=n.size&&!s)return!1;var c=u.get(t);if(c)return c==n;r|=dt,u.set(t,n);var f=ho(a(t),a(n),r,i,o,u);return u.delete(t),f;case en:if(pl)return pl.call(t)==pl.call(n)}return!1}function vo(t,n,e,r,i,o){var u=e&ht,a=yo(t),s=a.length;if(s!=yo(n).length&&!u)return!1;for(var c=s;c--;){var f=a[c];if(!(u?f in n:_f.call(n,f)))return!1}var l=o.get(t);if(l&&o.get(n))return l==n;var p=!0;o.set(t,n),o.set(n,t);for(var h=u;++c<s;){f=a[c];var d=t[f],g=n[f];if(r)var v=u?r(g,d,f,n,t,o):r(d,g,f,t,n,o);if(!(v===rt?d===g||i(d,g,e,r,o):v)){p=!1;break}h||(h="constructor"==f)}if(p&&!h){var _=t.constructor,y=n.constructor;_!=y&&"constructor"in t&&"constructor"in n&&!("function"==typeof _&&_ instanceof _&&"function"==typeof y&&y instanceof y)&&(p=!1)}return o.delete(t),o.delete(n),p}function _o(t){return kl(Ho(t,rt,hu),t+"")}function yo(t){return _r(t,Bs,Al)}function mo(t){return _r(t,zs,Tl)}function bo(t){for(var n=t.name+"",e=ol[n],r=_f.call(ol,n)?e.length:0;r--;){var i=e[r],o=i.func;if(null==o||o==t)return i.name}return n}function wo(t){return(_f.call(e,"placeholder")?e:t).placeholder}function xo(){var t=e.iteratee||kc;return t=t===kc?Kr:t,arguments.length?t(arguments[0],arguments[1]):t}function Oo(t,n){var e=t.__data__;return Lo(n)?e["string"==typeof n?"string":"hash"]:e.map}function So(t){for(var n=Bs(t),e=n.length;e--;){var r=n[e],i=t[r];n[e]=[r,i,Fo(i)]}return n}function Ao(t,n){var e=z(t,n);return Nr(e)?e:rt}function To(t){var n=_f.call(t,If),e=t[If];try{t[If]=rt;var r=!0}catch(t){}var i=bf.call(t);return r&&(n?t[If]=e:delete t[If]),i}function Eo(t,n,e){for(var r=-1,i=e.length;++r<i;){var o=e[r],u=o.size;switch(o.type){case"drop":t+=u;break;case"dropRight":n-=u;break;case"take":n=Hf(n,t+u);break;case"takeRight":t=$f(t,n-u)}}return{start:t,end:n}}function Co(t){var n=t.match(Ln);return n?n[1].split(Dn):[]}function Po(t,n,e){n=Oi(n,t);for(var r=-1,i=n.length,o=!1;++r<i;){var u=Qo(n[r]);if(!(o=null!=t&&e(t,u)))break;t=t[u]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&rs(i)&&qo(u,i)&&(_p(t)||vp(t))}function jo(t){var n=t.length,e=t.constructor(n);return n&&"string"==typeof t[0]&&_f.call(t,"index")&&(e.index=t.index,e.input=t.input),e}function ko(t){return"function"!=typeof t.constructor||zo(t)?{}:dl(Cf(t))}function Ro(t,n,e,r){var i=t.constructor;switch(n){case an:return Ti(t);case Ft:case Mt:return new i(+t);case sn:return Ei(t,r);case cn:case fn:case ln:case pn:case hn:case dn:case gn:case vn:case _n:return Ri(t,r);case Gt:return Ci(t,r,e);case Vt:case nn:return new i(t);case Qt:return Pi(t);case tn:return ji(t,r,e);case en:return ki(t)}}function No(t,n){var e=n.length;if(!e)return t;var r=e-1;return n[r]=(e>1?"& ":"")+n[r],n=n.join(e>2?", ":" "),t.replace(Kn,"{\n/* [wrapped with "+n+"] */\n")}function Io(t){return _p(t)||vp(t)||!!(Rf&&t&&t[Rf])}function qo(t,n){return!!(n=null==n?Rt:n)&&("number"==typeof t||Gn.test(t))&&t>-1&&t%1==0&&t<n}function Uo(t,n,e){if(!is(e))return!1;var r=typeof n;return!!("number"==r?$a(e)&&qo(n,e.length):"string"==r&&n in e)&&Wa(e[n],t)}function Ko(t,n){if(_p(t))return!1;var e=typeof t;return!("number"!=e&&"symbol"!=e&&"boolean"!=e&&null!=t&&!vs(t))||(Pn.test(t)||!Cn.test(t)||null!=n&&t in sf(n))}function Lo(t){var n=typeof t;return"string"==n||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==t:null===t}function Do(t){var n=bo(t),r=e[n];if("function"!=typeof r||!(n in C.prototype))return!1;if(t===r)return!0;var i=Sl(r);return!!i&&t===i[0]}function Bo(t){return!!mf&&mf in t}function zo(t){var n=t&&t.constructor;return t===("function"==typeof n&&n.prototype||df)}function Fo(t){return t===t&&!is(t)}function Mo(t,n){return function(e){return null!=e&&(e[t]===n&&(n!==rt||t in sf(e)))}}function Jo(t,n){var e=t[1],r=n[1],i=e|r,o=i<(gt|vt|xt),u=r==xt&&e==yt||r==xt&&e==Ot&&t[7].length<=n[8]||r==(xt|Ot)&&n[7].length<=n[8]&&e==yt;if(!o&&!u)return t;r&gt&&(t[2]=n[2],i|=e&gt?0:_t);var a=n[3];if(a){var s=t[3];t[3]=s?qi(s,a,n[4]):a,t[4]=s?H(t[3],ct):n[4]}return a=n[5],a&&(s=t[5],t[5]=s?Ui(s,a,n[6]):a,t[6]=s?H(t[5],ct):n[6]),a=n[7],a&&(t[7]=a),r&xt&&(t[8]=null==t[8]?n[8]:Hf(t[8],n[8])),null==t[9]&&(t[9]=n[9]),t[0]=n[0],t[1]=i,t}function Wo(t){var n=[];if(null!=t)for(var e in sf(t))n.push(e);return n}function $o(t){return bf.call(t)}function Ho(t,n,e){return n=$f(n===rt?t.length-1:n,0),function(){for(var r=arguments,i=-1,o=$f(r.length-n,0),a=ef(o);++i<o;)a[i]=r[n+i];i=-1;for(var s=ef(n+1);++i<n;)s[i]=r[i];return s[n]=e(a),u(t,this,s)}}function Go(t,n){return n.length<2?t:vr(t,ai(n,0,-1))}function Vo(t,n){for(var e=t.length,r=Hf(n.length,e),i=Ki(t);r--;){var o=n[r];t[r]=qo(o,e)?i[o]:rt}return t}function Zo(t,n,e){var r=n+"";return kl(t,No(r,nu(Co(r),e)))}function Xo(t){var n=0,e=0;return function(){var r=Gf(),i=Ct-(r-e);if(e=r,i>0){if(++n>=Et)return arguments[0]}else n=0;return t.apply(rt,arguments)}}function Yo(t,n){var e=-1,r=t.length,i=r-1;for(n=n===rt?r:n;++e<n;){var o=Qr(e,i),u=t[o];t[o]=t[e],t[e]=u}return t.length=n,t}function Qo(t){if("string"==typeof t||vs(t))return t;var n=t+"";return"0"==n&&1/t==-kt?"-0":n}function tu(t){if(null!=t){try{return vf.call(t)}catch(t){}try{return t+""}catch(t){}}return""}function nu(t,n){return s(Lt,function(e){var r="_."+e[0];n&e[1]&&!p(t,r)&&t.push(r)}),t.sort()}function eu(t){if(t instanceof C)return t.clone();var n=new m(t.__wrapped__,t.__chain__);return n.__actions__=Ki(t.__actions__),n.__index__=t.__index__,n.__values__=t.__values__,n}function ru(t,n,e){n=(e?Uo(t,n,e):n===rt)?1:$f(xs(n),0);var r=null==t?0:t.length;if(!r||n<1)return[];for(var i=0,o=0,u=ef(Df(r/n));i<r;)u[o++]=ai(t,i,i+=n);return u}function iu(t){for(var n=-1,e=null==t?0:t.length,r=0,i=[];++n<e;){var o=t[n];o&&(i[r++]=o)}return i}function ou(){var t=arguments.length;if(!t)return[];for(var n=ef(t-1),e=arguments[0],r=t;r--;)n[r-1]=arguments[r];return g(_p(e)?Ki(e):[e],pr(n,1))}function uu(t,n,e){var r=null==t?0:t.length;return r?(n=e||n===rt?1:xs(n),ai(t,n<0?0:n,r)):[]}function au(t,n,e){var r=null==t?0:t.length;return r?(n=e||n===rt?1:xs(n),n=r-n,ai(t,0,n<0?0:n)):[]}function su(t,n){return t&&t.length?_i(t,xo(n,3),!0,!0):[]}function cu(t,n){return t&&t.length?_i(t,xo(n,3),!0):[]}function fu(t,n,e,r){var i=null==t?0:t.length;return i?(e&&"number"!=typeof e&&Uo(t,n,e)&&(e=0,r=i),fr(t,n,e,r)):[]}function lu(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=null==e?0:xs(e);return i<0&&(i=$f(r+i,0)),x(t,xo(n,3),i)}function pu(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=r-1;return e!==rt&&(i=xs(e),i=e<0?$f(r+i,0):Hf(i,r-1)),x(t,xo(n,3),i,!0)}function hu(t){return(null==t?0:t.length)?pr(t,1):[]}function du(t){return(null==t?0:t.length)?pr(t,kt):[]}function gu(t,n){return(null==t?0:t.length)?(n=n===rt?1:xs(n),pr(t,n)):[]}function vu(t){for(var n=-1,e=null==t?0:t.length,r={};++n<e;){var i=t[n];r[i[0]]=i[1]}return r}function _u(t){return t&&t.length?t[0]:rt}function yu(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=null==e?0:xs(e);return i<0&&(i=$f(r+i,0)),O(t,n,i)}function mu(t){return(null==t?0:t.length)?ai(t,0,-1):[]}function bu(t,n){return null==t?"":Jf.call(t,n)}function wu(t){var n=null==t?0:t.length;return n?t[n-1]:rt}function xu(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=r;return e!==rt&&(i=xs(e),i=i<0?$f(r+i,0):Hf(i,r-1)),n===n?X(t,n,i):x(t,A,i,!0)}function Ou(t,n){return t&&t.length?$r(t,xs(n)):rt}function Su(t,n){return t&&t.length&&n&&n.length?Xr(t,n):t}function Au(t,n,e){return t&&t.length&&n&&n.length?Xr(t,n,xo(e,2)):t}function Tu(t,n,e){return t&&t.length&&n&&n.length?Xr(t,n,rt,e):t}function Eu(t,n){var e=[];if(!t||!t.length)return e;var r=-1,i=[],o=t.length;for(n=xo(n,3);++r<o;){var u=t[r];n(u,r,t)&&(e.push(u),i.push(r))}return Yr(t,i),e}function Cu(t){return null==t?t:Xf.call(t)}function Pu(t,n,e){var r=null==t?0:t.length;return r?(e&&"number"!=typeof e&&Uo(t,n,e)?(n=0,e=r):(n=null==n?0:xs(n),e=e===rt?r:xs(e)),ai(t,n,e)):[]}function ju(t,n){return ci(t,n)}function ku(t,n,e){return fi(t,n,xo(e,2))}function Ru(t,n){var e=null==t?0:t.length;if(e){var r=ci(t,n);if(r<e&&Wa(t[r],n))return r}return-1}function Nu(t,n){return ci(t,n,!0)}function Iu(t,n,e){return fi(t,n,xo(e,2),!0)}function qu(t,n){if(null==t?0:t.length){var e=ci(t,n,!0)-1;if(Wa(t[e],n))return e}return-1}function Uu(t){return t&&t.length?li(t):[]}function Ku(t,n){return t&&t.length?li(t,xo(n,2)):[]}function Lu(t){var n=null==t?0:t.length;return n?ai(t,1,n):[]}function Du(t,n,e){return t&&t.length?(n=e||n===rt?1:xs(n),ai(t,0,n<0?0:n)):[]}function Bu(t,n,e){var r=null==t?0:t.length;return r?(n=e||n===rt?1:xs(n),n=r-n,ai(t,n<0?0:n,r)):[]}function zu(t,n){return t&&t.length?_i(t,xo(n,3),!1,!0):[]}function Fu(t,n){return t&&t.length?_i(t,xo(n,3)):[]}function Mu(t){return t&&t.length?di(t):[]}function Ju(t,n){return t&&t.length?di(t,xo(n,2)):[]}function Wu(t,n){return n="function"==typeof n?n:rt,t&&t.length?di(t,rt,n):[]}function $u(t){if(!t||!t.length)return[];var n=0;return t=l(t,function(t){if(Ha(t))return n=$f(t.length,n),!0}),R(n,function(n){return d(t,E(n))})}function Hu(t,n){if(!t||!t.length)return[];var e=$u(t);return null==n?e:d(e,function(t){return u(n,rt,t)})}function Gu(t,n){return bi(t||[],n||[],Ve)}function Vu(t,n){return bi(t||[],n||[],oi)}function Zu(t){var n=e(t);return n.__chain__=!0,n}function Xu(t,n){return n(t),t}function Yu(t,n){return n(t)}function Qu(){return Zu(this)}function ta(){return new m(this.value(),this.__chain__)}function na(){this.__values__===rt&&(this.__values__=bs(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?rt:this.__values__[this.__index__++]}}function ea(){return this}function ra(t){for(var n,e=this;e instanceof r;){var i=eu(e);i.__index__=0,i.__values__=rt,n?o.__wrapped__=i:n=i;var o=i;e=e.__wrapped__}return o.__wrapped__=t,n}function ia(){var t=this.__wrapped__;if(t instanceof C){var n=t;return this.__actions__.length&&(n=new C(this)),n=n.reverse(),n.__actions__.push({func:Yu,args:[Cu],thisArg:rt}),new m(n,this.__chain__)}return this.thru(Cu)}function oa(){return yi(this.__wrapped__,this.__actions__)}function ua(t,n,e){var r=_p(t)?f:sr;return e&&Uo(t,n,e)&&(n=rt),r(t,xo(n,3))}function aa(t,n){return(_p(t)?l:lr)(t,xo(n,3))}function sa(t,n){return pr(da(t,n),1)}function ca(t,n){return pr(da(t,n),kt)}function fa(t,n,e){return e=e===rt?1:xs(e),pr(da(t,n),e)}function la(t,n){return(_p(t)?s:gl)(t,xo(n,3))}function pa(t,n){return(_p(t)?c:vl)(t,xo(n,3))}function ha(t,n,e,r){t=$a(t)?t:Qs(t),e=e&&!r?xs(e):0;var i=t.length;return e<0&&(e=$f(i+e,0)),gs(t)?e<=i&&t.indexOf(n,e)>-1:!!i&&O(t,n,e)>-1}function da(t,n){return(_p(t)?d:zr)(t,xo(n,3))}function ga(t,n,e,r){return null==t?[]:(_p(n)||(n=null==n?[]:[n]),e=r?rt:e,_p(e)||(e=null==e?[]:[e]),Hr(t,n,e))}function va(t,n,e){var r=_p(t)?v:P,i=arguments.length<3;return r(t,xo(n,4),e,i,gl)}function _a(t,n,e){var r=_p(t)?_:P,i=arguments.length<3;return r(t,xo(n,4),e,i,vl)}function ya(t,n){return(_p(t)?l:lr)(t,Ra(xo(n,3)))}function ma(t){return(_p(t)?Ie:ri)(t)}function ba(t,n,e){return n=(e?Uo(t,n,e):n===rt)?1:xs(n),(_p(t)?Ue:ii)(t,n)}function wa(t){return(_p(t)?Ke:ui)(t)}function xa(t){if(null==t)return 0;if($a(t))return gs(t)?Y(t):t.length;var n=El(t);return n==Gt||n==tn?t.size:Lr(t).length}function Oa(t,n,e){var r=_p(t)?y:si;return e&&Uo(t,n,e)&&(n=rt),r(t,xo(n,3))}function Sa(t,n){if("function"!=typeof n)throw new lf(ut);return t=xs(t),function(){if(--t<1)return n.apply(this,arguments)}}function Aa(t,n,e){return n=e?rt:n,n=t&&null==n?t.length:n,co(t,xt,rt,rt,rt,rt,n)}function Ta(t,n){var e;if("function"!=typeof n)throw new lf(ut);return t=xs(t),function(){return--t>0&&(e=n.apply(this,arguments)),t<=1&&(n=rt),e}}function Ea(t,n,e){n=e?rt:n;var r=co(t,yt,rt,rt,rt,rt,rt,n);return r.placeholder=Ea.placeholder,r}function Ca(t,n,e){n=e?rt:n;var r=co(t,mt,rt,rt,rt,rt,rt,n);return r.placeholder=Ca.placeholder,r}function Pa(t,n,e){function r(n){var e=p,r=h;return p=h=rt,y=n,g=t.apply(r,e)}function i(t){return y=t,v=jl(a,n),m?r(t):g}function o(t){var e=t-_,r=t-y,i=n-e;return b?Hf(i,d-r):i}function u(t){var e=t-_,r=t-y;return _===rt||e>=n||e<0||b&&r>=d}function a(){var t=op();if(u(t))return s(t);v=jl(a,o(t))}function s(t){return v=rt,w&&p?r(t):(p=h=rt,g)}function c(){v!==rt&&xl(v),y=0,p=_=h=v=rt}function f(){return v===rt?g:s(op())}function l(){var t=op(),e=u(t);if(p=arguments,h=this,_=t,e){if(v===rt)return i(_);if(b)return v=jl(a,n),r(_)}return v===rt&&(v=jl(a,n)),g}var p,h,d,g,v,_,y=0,m=!1,b=!1,w=!0;if("function"!=typeof t)throw new lf(ut);return n=Ss(n)||0,is(e)&&(m=!!e.leading,b="maxWait"in e,d=b?$f(Ss(e.maxWait)||0,n):d,w="trailing"in e?!!e.trailing:w),l.cancel=c,l.flush=f,l}function ja(t){return co(t,St)}function ka(t,n){if("function"!=typeof t||null!=n&&"function"!=typeof n)throw new lf(ut);var e=function(){var r=arguments,i=n?n.apply(this,r):r[0],o=e.cache;if(o.has(i))return o.get(i);var u=t.apply(this,r);return e.cache=o.set(i,u)||o,u};return e.cache=new(ka.Cache||ce),e}function Ra(t){if("function"!=typeof t)throw new lf(ut);return function(){var n=arguments;switch(n.length){case 0:return!t.call(this);case 1:return!t.call(this,n[0]);case 2:return!t.call(this,n[0],n[1]);case 3:return!t.call(this,n[0],n[1],n[2])}return!t.apply(this,n)}}function Na(t){return Ta(2,t)}function Ia(t,n){if("function"!=typeof t)throw new lf(ut);return n=n===rt?n:xs(n),ei(t,n)}function qa(t,n){if("function"!=typeof t)throw new lf(ut);return n=null==n?0:$f(xs(n),0),ei(function(e){var r=e[n],i=Si(e,0,n);return r&&g(i,r),u(t,this,i)})}function Ua(t,n,e){var r=!0,i=!0;if("function"!=typeof t)throw new lf(ut);return is(e)&&(r="leading"in e?!!e.leading:r,i="trailing"in e?!!e.trailing:i),Pa(t,n,{leading:r,maxWait:n,trailing:i})}function Ka(t){return Aa(t,1)}function La(t,n){return lp(xi(n),t)}function Da(){if(!arguments.length)return[];var t=arguments[0];return _p(t)?t:[t]}function Ba(t){return rr(t,pt)}function za(t,n){return n="function"==typeof n?n:rt,rr(t,pt,n)}function Fa(t){return rr(t,ft|pt)}function Ma(t,n){return n="function"==typeof n?n:rt,rr(t,ft|pt,n)}function Ja(t,n){return null==n||or(t,n,Bs(n))}function Wa(t,n){return t===n||t!==t&&n!==n}function $a(t){return null!=t&&rs(t.length)&&!ns(t)}function Ha(t){return os(t)&&$a(t)}function Ga(t){return!0===t||!1===t||os(t)&&yr(t)==Ft}function Va(t){return os(t)&&1===t.nodeType&&!hs(t)}function Za(t){if(null==t)return!0;if($a(t)&&(_p(t)||"string"==typeof t||"function"==typeof t.splice||mp(t)||Sp(t)||vp(t)))return!t.length;var n=El(t);if(n==Gt||n==tn)return!t.size;if(zo(t))return!Lr(t).length;for(var e in t)if(_f.call(t,e))return!1;return!0}function Xa(t,n){return Pr(t,n)}function Ya(t,n,e){e="function"==typeof e?e:rt;var r=e?e(t,n):rt;return r===rt?Pr(t,n,rt,e):!!r}function Qa(t){if(!os(t))return!1;var n=yr(t);return n==Wt||n==Jt||"string"==typeof t.message&&"string"==typeof t.name&&!hs(t)}function ts(t){return"number"==typeof t&&Mf(t)}function ns(t){if(!is(t))return!1;var n=yr(t);return n==$t||n==Ht||n==zt||n==Yt}function es(t){return"number"==typeof t&&t==xs(t)}function rs(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=Rt}function is(t){var n=typeof t;return null!=t&&("object"==n||"function"==n)}function os(t){return null!=t&&"object"==typeof t}function us(t,n){return t===n||Rr(t,n,So(n))}function as(t,n,e){return e="function"==typeof e?e:rt,Rr(t,n,So(n),e)}function ss(t){return ps(t)&&t!=+t}function cs(t){if(Cl(t))throw new of(ot);return Nr(t)}function fs(t){return null===t}function ls(t){return null==t}function ps(t){return"number"==typeof t||os(t)&&yr(t)==Vt}function hs(t){if(!os(t)||yr(t)!=Xt)return!1;var n=Cf(t);if(null===n)return!0;var e=_f.call(n,"constructor")&&n.constructor;return"function"==typeof e&&e instanceof e&&vf.call(e)==wf}function ds(t){return es(t)&&t>=-Rt&&t<=Rt}function gs(t){return"string"==typeof t||!_p(t)&&os(t)&&yr(t)==nn}function vs(t){return"symbol"==typeof t||os(t)&&yr(t)==en}function _s(t){return t===rt}function ys(t){return os(t)&&El(t)==on}function ms(t){return os(t)&&yr(t)==un}function bs(t){if(!t)return[];if($a(t))return gs(t)?Q(t):Ki(t);if(Nf&&t[Nf])return J(t[Nf]());var n=El(t);return(n==Gt?W:n==tn?G:Qs)(t)}function ws(t){if(!t)return 0===t?t:0;if((t=Ss(t))===kt||t===-kt){return(t<0?-1:1)*Nt}return t===t?t:0}function xs(t){var n=ws(t),e=n%1;return n===n?e?n-e:n:0}function Os(t){return t?er(xs(t),0,qt):0}function Ss(t){if("number"==typeof t)return t;if(vs(t))return It;if(is(t)){var n="function"==typeof t.valueOf?t.valueOf():t;t=is(n)?n+"":n}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(In,"");var e=Wn.test(t);return e||Hn.test(t)?Pe(t.slice(2),e?2:8):Jn.test(t)?It:+t}function As(t){return Li(t,zs(t))}function Ts(t){return t?er(xs(t),-Rt,Rt):0===t?t:0}function Es(t){return null==t?"":hi(t)}function Cs(t,n){var e=dl(t);return null==n?e:Ye(e,n)}function Ps(t,n){return w(t,xo(n,3),hr)}function js(t,n){return w(t,xo(n,3),dr)}function ks(t,n){return null==t?t:_l(t,xo(n,3),zs)}function Rs(t,n){return null==t?t:yl(t,xo(n,3),zs)}function Ns(t,n){return t&&hr(t,xo(n,3))}function Is(t,n){return t&&dr(t,xo(n,3))}function qs(t){return null==t?[]:gr(t,Bs(t))}function Us(t){return null==t?[]:gr(t,zs(t))}function Ks(t,n,e){var r=null==t?rt:vr(t,n);return r===rt?e:r}function Ls(t,n){return null!=t&&Po(t,n,br)}function Ds(t,n){return null!=t&&Po(t,n,wr)}function Bs(t){return $a(t)?Ne(t):Lr(t)}function zs(t){return $a(t)?Ne(t,!0):Dr(t)}function Fs(t,n){var e={};return n=xo(n,3),hr(t,function(t,r,i){tr(e,n(t,r,i),t)}),e}function Ms(t,n){var e={};return n=xo(n,3),hr(t,function(t,r,i){tr(e,r,n(t,r,i))}),e}function Js(t,n){return Ws(t,Ra(xo(n)))}function Ws(t,n){if(null==t)return{};var e=d(mo(t),function(t){return[t]});return n=xo(n),Vr(t,e,function(t,e){return n(t,e[0])})}function $s(t,n,e){n=Oi(n,t);var r=-1,i=n.length;for(i||(i=1,t=rt);++r<i;){var o=null==t?rt:t[Qo(n[r])];o===rt&&(r=i,o=e),t=ns(o)?o.call(t):o}return t}function Hs(t,n,e){return null==t?t:oi(t,n,e)}function Gs(t,n,e,r){return r="function"==typeof r?r:rt,null==t?t:oi(t,n,e,r)}function Vs(t,n,e){var r=_p(t),i=r||mp(t)||Sp(t);if(n=xo(n,4),null==e){var o=t&&t.constructor;e=i?r?new o:[]:is(t)&&ns(o)?dl(Cf(t)):{}}return(i?s:hr)(t,function(t,r,i){return n(e,t,r,i)}),e}function Zs(t,n){return null==t||gi(t,n)}function Xs(t,n,e){return null==t?t:vi(t,n,xi(e))}function Ys(t,n,e,r){return r="function"==typeof r?r:rt,null==t?t:vi(t,n,xi(e),r)}function Qs(t){return null==t?[]:q(t,Bs(t))}function tc(t){return null==t?[]:q(t,zs(t))}function nc(t,n,e){return e===rt&&(e=n,n=rt),e!==rt&&(e=Ss(e),e=e===e?e:0),n!==rt&&(n=Ss(n),n=n===n?n:0),er(Ss(t),n,e)}function ec(t,n,e){return n=ws(n),e===rt?(e=n,n=0):e=ws(e),t=Ss(t),xr(t,n,e)}function rc(t,n,e){if(e&&"boolean"!=typeof e&&Uo(t,n,e)&&(n=e=rt),e===rt&&("boolean"==typeof n?(e=n,n=rt):"boolean"==typeof t&&(e=t,t=rt)),t===rt&&n===rt?(t=0,n=1):(t=ws(t),n===rt?(n=t,t=0):n=ws(n)),t>n){var r=t;t=n,n=r}if(e||t%1||n%1){var i=Zf();return Hf(t+i*(n-t+Ce("1e-"+((i+"").length-1))),n)}return Qr(t,n)}function ic(t){return Zp(Es(t).toLowerCase())}function oc(t){return(t=Es(t))&&t.replace(Vn,We).replace(ge,"")}function uc(t,n,e){t=Es(t),n=hi(n);var r=t.length;e=e===rt?r:er(xs(e),0,r);var i=e;return(e-=n.length)>=0&&t.slice(e,i)==n}function ac(t){return t=Es(t),t&&Sn.test(t)?t.replace(xn,$e):t}function sc(t){return t=Es(t),t&&Nn.test(t)?t.replace(Rn,"\\$&"):t}function cc(t,n,e){t=Es(t),n=xs(n);var r=n?Y(t):0;if(!n||r>=n)return t;var i=(n-r)/2;return eo(Bf(i),e)+t+eo(Df(i),e)}function fc(t,n,e){t=Es(t),n=xs(n);var r=n?Y(t):0;return n&&r<n?t+eo(n-r,e):t}function lc(t,n,e){t=Es(t),n=xs(n);var r=n?Y(t):0;return n&&r<n?eo(n-r,e)+t:t}function pc(t,n,e){return e||null==n?n=0:n&&(n=+n),Vf(Es(t).replace(qn,""),n||0)}function hc(t,n,e){return n=(e?Uo(t,n,e):n===rt)?1:xs(n),ni(Es(t),n)}function dc(){var t=arguments,n=Es(t[0]);return t.length<3?n:n.replace(t[1],t[2])}function gc(t,n,e){return e&&"number"!=typeof e&&Uo(t,n,e)&&(n=e=rt),(e=e===rt?qt:e>>>0)?(t=Es(t),t&&("string"==typeof n||null!=n&&!xp(n))&&!(n=hi(n))&&F(t)?Si(Q(t),0,e):t.split(n,e)):[]}function vc(t,n,e){return t=Es(t),e=null==e?0:er(xs(e),0,t.length),n=hi(n),t.slice(e,e+n.length)==n}function _c(t,n,r){var i=e.templateSettings;r&&Uo(t,n,r)&&(n=rt),t=Es(t),n=Pp({},n,i,fo);var o,u,a=Pp({},n.imports,i.imports,fo),s=Bs(a),c=q(a,s),f=0,l=n.interpolate||Zn,p="__p += '",h=cf((n.escape||Zn).source+"|"+l.source+"|"+(l===En?Fn:Zn).source+"|"+(n.evaluate||Zn).source+"|$","g"),d="//# sourceURL="+("sourceURL"in n?n.sourceURL:"lodash.templateSources["+ ++we+"]")+"\n";t.replace(h,function(n,e,r,i,a,s){return r||(r=i),p+=t.slice(f,s).replace(Xn,B),e&&(o=!0,p+="' +\n__e("+e+") +\n'"),a&&(u=!0,p+="';\n"+a+";\n__p += '"),r&&(p+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),f=s+n.length,n}),p+="';\n";var g=n.variable;g||(p="with (obj) {\n"+p+"\n}\n"),p=(u?p.replace(yn,""):p).replace(mn,"$1").replace(bn,"$1;"),p="function("+(g||"obj")+") {\n"+(g?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(o?", __e = _.escape":"")+(u?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+p+"return __p\n}";var v=Xp(function(){return uf(s,d+"return "+p).apply(rt,c)});if(v.source=p,Qa(v))throw v;return v}function yc(t){return Es(t).toLowerCase()}function mc(t){return Es(t).toUpperCase()}function bc(t,n,e){if((t=Es(t))&&(e||n===rt))return t.replace(In,"");if(!t||!(n=hi(n)))return t;var r=Q(t),i=Q(n);return Si(r,K(r,i),L(r,i)+1).join("")}function wc(t,n,e){if((t=Es(t))&&(e||n===rt))return t.replace(Un,"");if(!t||!(n=hi(n)))return t;var r=Q(t);return Si(r,0,L(r,Q(n))+1).join("")}function xc(t,n,e){if((t=Es(t))&&(e||n===rt))return t.replace(qn,"");if(!t||!(n=hi(n)))return t;var r=Q(t);return Si(r,K(r,Q(n))).join("")}function Oc(t,n){var e=At,r=Tt;if(is(n)){var i="separator"in n?n.separator:i;e="length"in n?xs(n.length):e,r="omission"in n?hi(n.omission):r}t=Es(t);var o=t.length;if(F(t)){var u=Q(t);o=u.length}if(e>=o)return t;var a=e-Y(r);if(a<1)return r;var s=u?Si(u,0,a).join(""):t.slice(0,a);if(i===rt)return s+r;if(u&&(a+=s.length-a),xp(i)){if(t.slice(a).search(i)){var c,f=s;for(i.global||(i=cf(i.source,Es(Mn.exec(i))+"g")),i.lastIndex=0;c=i.exec(f);)var l=c.index;s=s.slice(0,l===rt?a:l)}}else if(t.indexOf(hi(i),a)!=a){var p=s.lastIndexOf(i);p>-1&&(s=s.slice(0,p))}return s+r}function Sc(t){return t=Es(t),t&&On.test(t)?t.replace(wn,He):t}function Ac(t,n,e){return t=Es(t),n=e?rt:n,n===rt?M(t)?et(t):b(t):t.match(n)||[]}function Tc(t){var n=null==t?0:t.length,e=xo();return t=n?d(t,function(t){if("function"!=typeof t[1])throw new lf(ut);return[e(t[0]),t[1]]}):[],ei(function(e){for(var r=-1;++r<n;){var i=t[r];if(u(i[0],this,e))return u(i[1],this,e)}})}function Ec(t){return ir(rr(t,ft))}function Cc(t){return function(){return t}}function Pc(t,n){return null==t||t!==t?n:t}function jc(t){return t}function kc(t){return Kr("function"==typeof t?t:rr(t,ft))}function Rc(t){return Fr(rr(t,ft))}function Nc(t,n){return Mr(t,rr(n,ft))}function Ic(t,n,e){var r=Bs(n),i=gr(n,r);null!=e||is(n)&&(i.length||!r.length)||(e=n,n=t,t=this,i=gr(n,Bs(n)));var o=!(is(e)&&"chain"in e&&!e.chain),u=ns(t);return s(i,function(e){var r=n[e];t[e]=r,u&&(t.prototype[e]=function(){var n=this.__chain__;if(o||n){var e=t(this.__wrapped__);return(e.__actions__=Ki(this.__actions__)).push({func:r,args:arguments,thisArg:t}),e.__chain__=n,e}return r.apply(t,g([this.value()],arguments))})}),t}function qc(){return Re._===this&&(Re._=xf),this}function Uc(){}function Kc(t){return t=xs(t),ei(function(n){return $r(n,t)})}function Lc(t){return Ko(t)?E(Qo(t)):Zr(t)}function Dc(t){return function(n){return null==t?rt:vr(t,n)}}function Bc(){return[]}function zc(){return!1}function Fc(){return{}}function Mc(){return""}function Jc(){return!0}function Wc(t,n){if((t=xs(t))<1||t>Rt)return[];var e=qt,r=Hf(t,qt);n=xo(n),t-=qt;for(var i=R(r,n);++e<t;)n(e);return i}function $c(t){return _p(t)?d(t,Qo):vs(t)?[t]:Ki(Rl(Es(t)))}function Hc(t){var n=++yf;return Es(t)+n}function Gc(t){return t&&t.length?cr(t,jc,mr):rt}function Vc(t,n){return t&&t.length?cr(t,xo(n,2),mr):rt}function Zc(t){return T(t,jc)}function Xc(t,n){return T(t,xo(n,2))}function Yc(t){return t&&t.length?cr(t,jc,Br):rt}function Qc(t,n){return t&&t.length?cr(t,xo(n,2),Br):rt}function tf(t){return t&&t.length?k(t,jc):0}function nf(t,n){return t&&t.length?k(t,xo(n,2)):0}n=null==n?Re:Ge.defaults(Re.Object(),n,Ge.pick(Re,be));var ef=n.Array,rf=n.Date,of=n.Error,uf=n.Function,af=n.Math,sf=n.Object,cf=n.RegExp,ff=n.String,lf=n.TypeError,pf=ef.prototype,hf=uf.prototype,df=sf.prototype,gf=n["__core-js_shared__"],vf=hf.toString,_f=df.hasOwnProperty,yf=0,mf=function(){var t=/[^.]+$/.exec(gf&&gf.keys&&gf.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),bf=df.toString,wf=vf.call(sf),xf=Re._,Of=cf("^"+vf.call(_f).replace(Rn,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Sf=qe?n.Buffer:rt,Af=n.Symbol,Tf=n.Uint8Array,Ef=Sf?Sf.allocUnsafe:rt,Cf=$(sf.getPrototypeOf,sf),Pf=sf.create,jf=df.propertyIsEnumerable,kf=pf.splice,Rf=Af?Af.isConcatSpreadable:rt,Nf=Af?Af.iterator:rt,If=Af?Af.toStringTag:rt,qf=function(){try{var t=Ao(sf,"defineProperty");return t({},"",{}),t}catch(t){}}(),Uf=n.clearTimeout!==Re.clearTimeout&&n.clearTimeout,Kf=rf&&rf.now!==Re.Date.now&&rf.now,Lf=n.setTimeout!==Re.setTimeout&&n.setTimeout,Df=af.ceil,Bf=af.floor,zf=sf.getOwnPropertySymbols,Ff=Sf?Sf.isBuffer:rt,Mf=n.isFinite,Jf=pf.join,Wf=$(sf.keys,sf),$f=af.max,Hf=af.min,Gf=rf.now,Vf=n.parseInt,Zf=af.random,Xf=pf.reverse,Yf=Ao(n,"DataView"),Qf=Ao(n,"Map"),tl=Ao(n,"Promise"),nl=Ao(n,"Set"),el=Ao(n,"WeakMap"),rl=Ao(sf,"create"),il=el&&new el,ol={},ul=tu(Yf),al=tu(Qf),sl=tu(tl),cl=tu(nl),fl=tu(el),ll=Af?Af.prototype:rt,pl=ll?ll.valueOf:rt,hl=ll?ll.toString:rt,dl=function(){function t(){}return function(n){if(!is(n))return{};if(Pf)return Pf(n);t.prototype=n;var e=new t;return t.prototype=rt,e}}();e.templateSettings={escape:An,evaluate:Tn,interpolate:En,variable:"",imports:{_:e}},e.prototype=r.prototype,e.prototype.constructor=e,m.prototype=dl(r.prototype),m.prototype.constructor=m,C.prototype=dl(r.prototype),C.prototype.constructor=C,Bn.prototype.clear=Yn,Bn.prototype.delete=Qn,Bn.prototype.get=te,Bn.prototype.has=ne,Bn.prototype.set=ee,re.prototype.clear=ie,re.prototype.delete=oe,re.prototype.get=ue,re.prototype.has=ae,re.prototype.set=se,ce.prototype.clear=fe,ce.prototype.delete=le,ce.prototype.get=pe,ce.prototype.has=he,ce.prototype.set=ve,_e.prototype.add=_e.prototype.push=ye,_e.prototype.has=me,Se.prototype.clear=Ae,Se.prototype.delete=Te,Se.prototype.get=Ee,Se.prototype.has=je,Se.prototype.set=ke;var gl=Mi(hr),vl=Mi(dr,!0),_l=Ji(),yl=Ji(!0),ml=il?function(t,n){return il.set(t,n),t}:jc,bl=qf?function(t,n){return qf(t,"toString",{configurable:!0,enumerable:!1,value:Cc(n),writable:!0})}:jc,wl=ei,xl=Uf||function(t){return Re.clearTimeout(t)},Ol=nl&&1/G(new nl([,-0]))[1]==kt?function(t){return new nl(t)}:Uc,Sl=il?function(t){return il.get(t)}:Uc,Al=zf?function(t){return null==t?[]:(t=sf(t),l(zf(t),function(n){return jf.call(t,n)}))}:Bc,Tl=zf?function(t){for(var n=[];t;)g(n,Al(t)),t=Cf(t);return n}:Bc,El=yr;(Yf&&El(new Yf(new ArrayBuffer(1)))!=sn||Qf&&El(new Qf)!=Gt||tl&&"[object Promise]"!=El(tl.resolve())||nl&&El(new nl)!=tn||el&&El(new el)!=on)&&(El=function(t){var n=yr(t),e=n==Xt?t.constructor:rt,r=e?tu(e):"";if(r)switch(r){case ul:return sn;case al:return Gt;case sl:return"[object Promise]";case cl:return tn;case fl:return on}return n});var Cl=gf?ns:zc,Pl=Xo(ml),jl=Lf||function(t,n){return Re.setTimeout(t,n)},kl=Xo(bl),Rl=function(t){var n=ka(t,function(t){return e.size===st&&e.clear(),t}),e=n.cache;return n}(function(t){var n=[];return jn.test(t)&&n.push(""),t.replace(kn,function(t,e,r,i){n.push(r?i.replace(zn,"$1"):e||t)}),n}),Nl=ei(function(t,n){return Ha(t)?ar(t,pr(n,1,Ha,!0)):[]}),Il=ei(function(t,n){var e=wu(n);return Ha(e)&&(e=rt),Ha(t)?ar(t,pr(n,1,Ha,!0),xo(e,2)):[]}),ql=ei(function(t,n){var e=wu(n);return Ha(e)&&(e=rt),Ha(t)?ar(t,pr(n,1,Ha,!0),rt,e):[]}),Ul=ei(function(t){var n=d(t,wi);return n.length&&n[0]===t[0]?Or(n):[]}),Kl=ei(function(t){var n=wu(t),e=d(t,wi);return n===wu(e)?n=rt:e.pop(),e.length&&e[0]===t[0]?Or(e,xo(n,2)):[]}),Ll=ei(function(t){var n=wu(t),e=d(t,wi);return n="function"==typeof n?n:rt,n&&e.pop(),e.length&&e[0]===t[0]?Or(e,rt,n):[]}),Dl=ei(Su),Bl=_o(function(t,n){var e=null==t?0:t.length,r=nr(t,n);return Yr(t,d(n,function(t){return qo(t,e)?+t:t}).sort(Ni)),r}),zl=ei(function(t){return di(pr(t,1,Ha,!0))}),Fl=ei(function(t){var n=wu(t);return Ha(n)&&(n=rt),di(pr(t,1,Ha,!0),xo(n,2))}),Ml=ei(function(t){var n=wu(t);return n="function"==typeof n?n:rt,di(pr(t,1,Ha,!0),rt,n)}),Jl=ei(function(t,n){return Ha(t)?ar(t,n):[]}),Wl=ei(function(t){return mi(l(t,Ha))}),$l=ei(function(t){var n=wu(t);return Ha(n)&&(n=rt),mi(l(t,Ha),xo(n,2))}),Hl=ei(function(t){var n=wu(t);return n="function"==typeof n?n:rt,mi(l(t,Ha),rt,n)}),Gl=ei($u),Vl=ei(function(t){var n=t.length,e=n>1?t[n-1]:rt;return e="function"==typeof e?(t.pop(),e):rt,Hu(t,e)}),Zl=_o(function(t){var n=t.length,e=n?t[0]:0,r=this.__wrapped__,i=function(n){return nr(n,t)};return!(n>1||this.__actions__.length)&&r instanceof C&&qo(e)?(r=r.slice(e,+e+(n?1:0)),r.__actions__.push({func:Yu,args:[i],thisArg:rt}),new m(r,this.__chain__).thru(function(t){return n&&!t.length&&t.push(rt),t})):this.thru(i)}),Xl=zi(function(t,n,e){_f.call(t,e)?++t[e]:tr(t,e,1)}),Yl=Zi(lu),Ql=Zi(pu),tp=zi(function(t,n,e){_f.call(t,e)?t[e].push(n):tr(t,e,[n])}),np=ei(function(t,n,e){var r=-1,i="function"==typeof n,o=$a(t)?ef(t.length):[];return gl(t,function(t){o[++r]=i?u(n,t,e):Ar(t,n,e)}),o}),ep=zi(function(t,n,e){tr(t,e,n)}),rp=zi(function(t,n,e){t[e?0:1].push(n)},function(){return[[],[]]}),ip=ei(function(t,n){if(null==t)return[];var e=n.length;return e>1&&Uo(t,n[0],n[1])?n=[]:e>2&&Uo(n[0],n[1],n[2])&&(n=[n[0]]),Hr(t,pr(n,1),[])}),op=Kf||function(){return Re.Date.now()},up=ei(function(t,n,e){var r=gt;if(e.length){var i=H(e,wo(up));r|=bt}return co(t,r,n,e,i)}),ap=ei(function(t,n,e){var r=gt|vt;if(e.length){var i=H(e,wo(ap));r|=bt}return co(n,r,t,e,i)}),sp=ei(function(t,n){return ur(t,1,n)}),cp=ei(function(t,n,e){return ur(t,Ss(n)||0,e)});ka.Cache=ce;var fp=wl(function(t,n){n=1==n.length&&_p(n[0])?d(n[0],I(xo())):d(pr(n,1),I(xo()));var e=n.length;return ei(function(r){for(var i=-1,o=Hf(r.length,e);++i<o;)r[i]=n[i].call(this,r[i]);return u(t,this,r)})}),lp=ei(function(t,n){var e=H(n,wo(lp));return co(t,bt,rt,n,e)}),pp=ei(function(t,n){var e=H(n,wo(pp));return co(t,wt,rt,n,e)}),hp=_o(function(t,n){return co(t,Ot,rt,rt,rt,n)}),dp=oo(mr),gp=oo(function(t,n){return t>=n}),vp=Tr(function(){return arguments}())?Tr:function(t){return os(t)&&_f.call(t,"callee")&&!jf.call(t,"callee")},_p=ef.isArray,yp=Le?I(Le):Er,mp=Ff||zc,bp=De?I(De):Cr,wp=Be?I(Be):kr,xp=ze?I(ze):Ir,Op=Fe?I(Fe):qr,Sp=Me?I(Me):Ur,Ap=oo(Br),Tp=oo(function(t,n){return t<=n}),Ep=Fi(function(t,n){if(zo(n)||$a(n))return void Li(n,Bs(n),t);for(var e in n)_f.call(n,e)&&Ve(t,e,n[e])}),Cp=Fi(function(t,n){Li(n,zs(n),t)}),Pp=Fi(function(t,n,e,r){Li(n,zs(n),t,r)}),jp=Fi(function(t,n,e,r){Li(n,Bs(n),t,r)}),kp=_o(nr),Rp=ei(function(t){return t.push(rt,fo),u(Pp,rt,t)}),Np=ei(function(t){return t.push(rt,lo),u(Lp,rt,t)}),Ip=Qi(function(t,n,e){t[n]=e},Cc(jc)),qp=Qi(function(t,n,e){_f.call(t,n)?t[n].push(e):t[n]=[e]},xo),Up=ei(Ar),Kp=Fi(function(t,n,e){Jr(t,n,e)}),Lp=Fi(function(t,n,e,r){Jr(t,n,e,r)}),Dp=_o(function(t,n){var e={};if(null==t)return e;var r=!1;n=d(n,function(n){return n=Oi(n,t),r||(r=n.length>1),n}),Li(t,mo(t),e),r&&(e=rr(e,ft|lt|pt,po));for(var i=n.length;i--;)gi(e,n[i]);return e}),Bp=_o(function(t,n){return null==t?{}:Gr(t,n)}),zp=so(Bs),Fp=so(zs),Mp=Hi(function(t,n,e){return n=n.toLowerCase(),t+(e?ic(n):n)}),Jp=Hi(function(t,n,e){return t+(e?"-":"")+n.toLowerCase()}),Wp=Hi(function(t,n,e){return t+(e?" ":"")+n.toLowerCase()}),$p=$i("toLowerCase"),Hp=Hi(function(t,n,e){return t+(e?"_":"")+n.toLowerCase()}),Gp=Hi(function(t,n,e){return t+(e?" ":"")+Zp(n)}),Vp=Hi(function(t,n,e){return t+(e?" ":"")+n.toUpperCase()}),Zp=$i("toUpperCase"),Xp=ei(function(t,n){try{return u(t,rt,n)}catch(t){return Qa(t)?t:new of(t)}}),Yp=_o(function(t,n){return s(n,function(n){n=Qo(n),tr(t,n,up(t[n],t))}),t}),Qp=Xi(),th=Xi(!0),nh=ei(function(t,n){return function(e){return Ar(e,t,n)}}),eh=ei(function(t,n){return function(e){return Ar(t,e,n)}}),rh=no(d),ih=no(f),oh=no(y),uh=io(),ah=io(!0),sh=to(function(t,n){return t+n},0),ch=ao("ceil"),fh=to(function(t,n){return t/n},1),lh=ao("floor"),ph=to(function(t,n){return t*n},1),hh=ao("round"),dh=to(function(t,n){return t-n},0);return e.after=Sa,e.ary=Aa,e.assign=Ep,e.assignIn=Cp,e.assignInWith=Pp,e.assignWith=jp,e.at=kp,e.before=Ta,e.bind=up,e.bindAll=Yp,e.bindKey=ap,e.castArray=Da,e.chain=Zu,e.chunk=ru,e.compact=iu,e.concat=ou,e.cond=Tc,e.conforms=Ec,e.constant=Cc,e.countBy=Xl,e.create=Cs,e.curry=Ea,e.curryRight=Ca,e.debounce=Pa,e.defaults=Rp,e.defaultsDeep=Np,e.defer=sp,e.delay=cp,e.difference=Nl,e.differenceBy=Il,e.differenceWith=ql,e.drop=uu,e.dropRight=au,e.dropRightWhile=su,e.dropWhile=cu,e.fill=fu,e.filter=aa,e.flatMap=sa,e.flatMapDeep=ca,e.flatMapDepth=fa,e.flatten=hu,e.flattenDeep=du,e.flattenDepth=gu,e.flip=ja,e.flow=Qp,e.flowRight=th,e.fromPairs=vu,e.functions=qs,e.functionsIn=Us,e.groupBy=tp,e.initial=mu,e.intersection=Ul,e.intersectionBy=Kl,e.intersectionWith=Ll,e.invert=Ip,e.invertBy=qp,e.invokeMap=np,e.iteratee=kc,e.keyBy=ep,e.keys=Bs,e.keysIn=zs,e.map=da,e.mapKeys=Fs,e.mapValues=Ms,e.matches=Rc,e.matchesProperty=Nc,e.memoize=ka,e.merge=Kp,e.mergeWith=Lp,e.method=nh,e.methodOf=eh,e.mixin=Ic,e.negate=Ra,e.nthArg=Kc,e.omit=Dp,e.omitBy=Js,e.once=Na,e.orderBy=ga,e.over=rh,e.overArgs=fp,e.overEvery=ih,e.overSome=oh,e.partial=lp,e.partialRight=pp,e.partition=rp,e.pick=Bp,e.pickBy=Ws,e.property=Lc,e.propertyOf=Dc,e.pull=Dl,e.pullAll=Su,e.pullAllBy=Au,e.pullAllWith=Tu,e.pullAt=Bl,e.range=uh,e.rangeRight=ah,e.rearg=hp,e.reject=ya,e.remove=Eu,e.rest=Ia,e.reverse=Cu,e.sampleSize=ba,e.set=Hs,e.setWith=Gs,e.shuffle=wa,e.slice=Pu,e.sortBy=ip,e.sortedUniq=Uu,e.sortedUniqBy=Ku,e.split=gc,e.spread=qa,e.tail=Lu,e.take=Du,e.takeRight=Bu,e.takeRightWhile=zu,e.takeWhile=Fu,e.tap=Xu,e.throttle=Ua,e.thru=Yu,e.toArray=bs,e.toPairs=zp,e.toPairsIn=Fp,e.toPath=$c,e.toPlainObject=As,e.transform=Vs,e.unary=Ka,e.union=zl,e.unionBy=Fl,e.unionWith=Ml,e.uniq=Mu,e.uniqBy=Ju,e.uniqWith=Wu,e.unset=Zs,e.unzip=$u,e.unzipWith=Hu,e.update=Xs,e.updateWith=Ys,e.values=Qs,e.valuesIn=tc,e.without=Jl,e.words=Ac,e.wrap=La,e.xor=Wl,e.xorBy=$l,e.xorWith=Hl,e.zip=Gl,e.zipObject=Gu,e.zipObjectDeep=Vu,e.zipWith=Vl,e.entries=zp,e.entriesIn=Fp,e.extend=Cp,e.extendWith=Pp,Ic(e,e),e.add=sh,e.attempt=Xp,e.camelCase=Mp,e.capitalize=ic,e.ceil=ch,e.clamp=nc,e.clone=Ba,e.cloneDeep=Fa,e.cloneDeepWith=Ma,e.cloneWith=za,e.conformsTo=Ja,e.deburr=oc,e.defaultTo=Pc,e.divide=fh,e.endsWith=uc,e.eq=Wa,e.escape=ac,e.escapeRegExp=sc,e.every=ua,e.find=Yl,e.findIndex=lu,e.findKey=Ps,e.findLast=Ql,e.findLastIndex=pu,e.findLastKey=js,e.floor=lh,e.forEach=la,e.forEachRight=pa,e.forIn=ks,e.forInRight=Rs,e.forOwn=Ns,e.forOwnRight=Is,e.get=Ks,e.gt=dp,e.gte=gp,e.has=Ls,e.hasIn=Ds,e.head=_u,e.identity=jc,e.includes=ha,e.indexOf=yu,e.inRange=ec,e.invoke=Up,e.isArguments=vp,e.isArray=_p,e.isArrayBuffer=yp,e.isArrayLike=$a,e.isArrayLikeObject=Ha,e.isBoolean=Ga,e.isBuffer=mp,e.isDate=bp,e.isElement=Va,e.isEmpty=Za,e.isEqual=Xa,e.isEqualWith=Ya,e.isError=Qa,e.isFinite=ts,e.isFunction=ns,e.isInteger=es,e.isLength=rs,e.isMap=wp,e.isMatch=us,e.isMatchWith=as,e.isNaN=ss,e.isNative=cs,e.isNil=ls,e.isNull=fs,e.isNumber=ps,e.isObject=is,e.isObjectLike=os,e.isPlainObject=hs,e.isRegExp=xp,e.isSafeInteger=ds,e.isSet=Op,e.isString=gs,e.isSymbol=vs,e.isTypedArray=Sp,e.isUndefined=_s,e.isWeakMap=ys,e.isWeakSet=ms,e.join=bu,e.kebabCase=Jp,e.last=wu,e.lastIndexOf=xu,e.lowerCase=Wp,e.lowerFirst=$p,e.lt=Ap,e.lte=Tp,e.max=Gc,e.maxBy=Vc,e.mean=Zc,e.meanBy=Xc,e.min=Yc,e.minBy=Qc,e.stubArray=Bc,e.stubFalse=zc,e.stubObject=Fc,e.stubString=Mc,e.stubTrue=Jc,e.multiply=ph,e.nth=Ou,e.noConflict=qc,e.noop=Uc,e.now=op,e.pad=cc,e.padEnd=fc,e.padStart=lc,e.parseInt=pc,e.random=rc,e.reduce=va,e.reduceRight=_a,e.repeat=hc,e.replace=dc,e.result=$s,e.round=hh,e.runInContext=t,e.sample=ma,e.size=xa,e.snakeCase=Hp,e.some=Oa,e.sortedIndex=ju,e.sortedIndexBy=ku,e.sortedIndexOf=Ru,e.sortedLastIndex=Nu,e.sortedLastIndexBy=Iu,e.sortedLastIndexOf=qu,e.startCase=Gp,e.startsWith=vc,e.subtract=dh,e.sum=tf,e.sumBy=nf,e.template=_c,e.times=Wc,e.toFinite=ws,e.toInteger=xs,e.toLength=Os,e.toLower=yc,e.toNumber=Ss,e.toSafeInteger=Ts,e.toString=Es,e.toUpper=mc,e.trim=bc,e.trimEnd=wc,e.trimStart=xc,e.truncate=Oc,e.unescape=Sc,e.uniqueId=Hc,e.upperCase=Vp,e.upperFirst=Zp,e.each=la,e.eachRight=pa,e.first=_u,Ic(e,function(){var t={};return hr(e,function(n,r){_f.call(e.prototype,r)||(t[r]=n)}),t}(),{chain:!1}),e.VERSION="4.17.4",s(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){e[t].placeholder=e}),s(["drop","take"],function(t,n){C.prototype[t]=function(e){e=e===rt?1:$f(xs(e),0);var r=this.__filtered__&&!n?new C(this):this.clone();return r.__filtered__?r.__takeCount__=Hf(e,r.__takeCount__):r.__views__.push({size:Hf(e,qt),type:t+(r.__dir__<0?"Right":"")}),r},C.prototype[t+"Right"]=function(n){return this.reverse()[t](n).reverse()}}),s(["filter","map","takeWhile"],function(t,n){var e=n+1,r=e==Pt||3==e;C.prototype[t]=function(t){var n=this.clone();return n.__iteratees__.push({iteratee:xo(t,3),type:e}),n.__filtered__=n.__filtered__||r,n}}),s(["head","last"],function(t,n){var e="take"+(n?"Right":"");C.prototype[t]=function(){return this[e](1).value()[0]}}),s(["initial","tail"],function(t,n){var e="drop"+(n?"":"Right");C.prototype[t]=function(){return this.__filtered__?new C(this):this[e](1)}}),C.prototype.compact=function(){return this.filter(jc)},C.prototype.find=function(t){return this.filter(t).head()},C.prototype.findLast=function(t){return this.reverse().find(t)},C.prototype.invokeMap=ei(function(t,n){return"function"==typeof t?new C(this):this.map(function(e){return Ar(e,t,n)})}),C.prototype.reject=function(t){return this.filter(Ra(xo(t)))},C.prototype.slice=function(t,n){t=xs(t);var e=this;return e.__filtered__&&(t>0||n<0)?new C(e):(t<0?e=e.takeRight(-t):t&&(e=e.drop(t)),n!==rt&&(n=xs(n),e=n<0?e.dropRight(-n):e.take(n-t)),e)},C.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},C.prototype.toArray=function(){return this.take(qt)},hr(C.prototype,function(t,n){var r=/^(?:filter|find|map|reject)|While$/.test(n),i=/^(?:head|last)$/.test(n),o=e[i?"take"+("last"==n?"Right":""):n],u=i||/^find/.test(n);o&&(e.prototype[n]=function(){var n=this.__wrapped__,a=i?[1]:arguments,s=n instanceof C,c=a[0],f=s||_p(n),l=function(t){var n=o.apply(e,g([t],a));return i&&p?n[0]:n};f&&r&&"function"==typeof c&&1!=c.length&&(s=f=!1);var p=this.__chain__,h=!!this.__actions__.length,d=u&&!p,v=s&&!h;if(!u&&f){n=v?n:new C(this);var _=t.apply(n,a);return _.__actions__.push({func:Yu,args:[l],thisArg:rt}),new m(_,p)}return d&&v?t.apply(this,a):(_=this.thru(l),d?i?_.value()[0]:_.value():_)})}),s(["pop","push","shift","sort","splice","unshift"],function(t){var n=pf[t],r=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",i=/^(?:pop|shift)$/.test(t);e.prototype[t]=function(){var t=arguments;if(i&&!this.__chain__){var e=this.value();return n.apply(_p(e)?e:[],t)}return this[r](function(e){return n.apply(_p(e)?e:[],t)})}}),hr(C.prototype,function(t,n){var r=e[n];if(r){var i=r.name+"";(ol[i]||(ol[i]=[])).push({name:n,func:r})}}),ol[Yi(rt,vt).name]=[{name:"wrapper",func:rt}],C.prototype.clone=Z,C.prototype.reverse=tt,C.prototype.value=nt,e.prototype.at=Zl,e.prototype.chain=Qu,e.prototype.commit=ta,e.prototype.next=na,e.prototype.plant=ra,e.prototype.reverse=ia,e.prototype.toJSON=e.prototype.valueOf=e.prototype.value=oa,e.prototype.first=e.prototype.head,Nf&&(e.prototype[Nf]=ea),e}();Re._=Ge,(r=function(){return Ge}.call(n,e,n,t))!==rt&&(t.exports=r)}).call(this)}).call(n,e(19)(t))},function(t,n,e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i={};t.exports=i,i.isPipeObject=function(t){return"object"===(void 0===t?"undefined":r(t))&&t.hasOwnProperty("pipe")&&"object"===r(t.pipe)},i.isPipeJson=function(t){return"object"===(void 0===t?"undefined":r(t))&&t.hasOwnProperty("op")&&t.hasOwnProperty("params")},i.isNodeJs=function(){return"[object process]"===Object.prototype.toString.call("undefined"!=typeof process?process:0)},i.arrayBufferToString=function(t){if(this.isNodeJs())return t.toString("utf-8");if("TextDecoder"in window)return new TextDecoder("utf-8").decode(t);var n,e=new Uint8Array(t),r="",i=e.length;for(n=0;n<i;++n)r+=String.fromCharCode(e[n]);return decodeURIComponent(escape(r))},i.callbackAdapter=function(t,n,e,r,i){"function"==typeof i?i(t,n):t?r(t):e(n)},t.exports.getUtilObject=function(t){return new function(){for(var n in i)i.hasOwnProperty(n)&&(this[n]=i[n]);this.debug=function(n){if(t.getConfig().debug){var n="flexio-sdk-js: "+n;console.log(n)}return this}}}},function(t,n,e){"use strict";t.exports={TASK_OP_CALC:"calc",TASK_OP_COMMENT:"comment",TASK_OP_CONVERT:"convert",TASK_OP_COPY:"copy",TASK_OP_CREATE:"create",TASK_OP_CUSTOM:"custom",TASK_OP_DISTINCT:"distinct",TASK_OP_DUMP:"dump",TASK_OP_DUPLICATE:"duplicate",TASK_OP_ECHO:"echo",TASK_OP_EMAIL_SEND:"email",TASK_OP_EXECUTE:"execute",TASK_OP_FIND_REPLACE:"replace",TASK_OP_FILTER:"filter",TASK_OP_FOREACH:"foreach",TASK_OP_GROUP:"group",TASK_OP_INSERT:"insert",TASK_OP_LIMIT:"limit",TASK_OP_LIST:"list",TASK_OP_MERGE:"merge",TASK_OP_MKDIR:"mkdir",TASK_OP_NOP:"nop",TASK_OP_PROMPT:"prompt",TASK_OP_R:"r",TASK_OP_READ:"read",TASK_OP_RENAME:"rename",TASK_OP_RENDER:"render",TASK_OP_REQUEST:"request",TASK_OP_SEARCH:"search",TASK_OP_SELECT:"select",TASK_OP_SEQUENCE:"sequence",TASK_OP_SET:"set",TASK_OP_SLEEP:"sleep",TASK_OP_SORT:"sort",TASK_OP_TRANSFORM:"transform",TASK_OP_WRITE:"write"}},function(t,n,e){"use strict";function r(t){return"[object Array]"===S.call(t)}function i(t){return"[object ArrayBuffer]"===S.call(t)}function o(t){return"undefined"!=typeof FormData&&t instanceof FormData}function u(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function a(t){return"string"==typeof t}function s(t){return"number"==typeof t}function c(t){return void 0===t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===S.call(t)}function p(t){return"[object File]"===S.call(t)}function h(t){return"[object Blob]"===S.call(t)}function d(t){return"[object Function]"===S.call(t)}function g(t){return f(t)&&d(t.pipe)}function v(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams}function _(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function y(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function m(t,n){if(null!==t&&void 0!==t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var e=0,i=t.length;e<i;e++)n.call(null,t[e],e,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&n.call(null,t[o],o,t)}function b(){function t(t,e){"object"==typeof n[e]&&"object"==typeof t?n[e]=b(n[e],t):n[e]=t}for(var n={},e=0,r=arguments.length;e<r;e++)m(arguments[e],t);return n}function w(t,n,e){return m(n,function(n,r){t[r]=e&&"function"==typeof n?x(n,e):n}),t}var x=e(6),O=e(22),S=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:i,isBuffer:O,isFormData:o,isArrayBufferView:u,isString:a,isNumber:s,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isFunction:d,isStream:g,isURLSearchParams:v,isStandardBrowserEnv:y,forEach:m,merge:b,extend:w,trim:_}},function(t,n,e){"use strict";function r(t,n){!i.isUndefined(t)&&i.isUndefined(t["Content-Type"])&&(t["Content-Type"]=n)}var i=e(3),o=e(24),u={"Content-Type":"application/x-www-form-urlencoded"},a={adapter:function(){var t;return"undefined"!=typeof XMLHttpRequest?t=e(25):"undefined"!=typeof process&&(t=e(30)),t}(),transformRequest:[function(t,n){return o(n,"Content-Type"),i.isFormData(t)||i.isArrayBuffer(t)||i.isBuffer(t)||i.isStream(t)||i.isFile(t)||i.isBlob(t)?t:i.isArrayBufferView(t)?t.buffer:i.isURLSearchParams(t)?(r(n,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):i.isObject(t)?(r(n,"application/json;charset=utf-8"),JSON.stringify(t)):t}],transformResponse:[function(t){if("string"==typeof t)try{t=JSON.parse(t)}catch(t){}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(t){return t>=200&&t<300}};a.headers={common:{Accept:"application/json, text/plain, */*"}},i.forEach(["delete","get","head"],function(t){a.headers[t]={}}),i.forEach(["post","put","patch"],function(t){a.headers[t]=i.merge(u)}),t.exports=a},function(t,n,e){"use strict";var r=e(8);t.exports=function(t,n,e,i,o){var u=new Error(t);return r(u,n,e,i,o)}},function(t,n,e){"use strict";t.exports=function(t,n){return function(){for(var e=new Array(arguments.length),r=0;r<e.length;r++)e[r]=arguments[r];return t.apply(n,e)}}},function(t,n,e){"use strict";var r=e(5);t.exports=function(t,n,e){var i=e.config.validateStatus;e.status&&i&&!i(e.status)?n(r("Request failed with status code "+e.status,e.config,null,e.request,e)):t(e)}},function(t,n,e){"use strict";t.exports=function(t,n,e,r,i){return t.config=n,e&&(t.code=e),t.request=r,t.response=i,t}},function(t,n,e){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var i=e(3);t.exports=function(t,n,e){if(!n)return t;var o;if(e)o=e(n);else if(i.isURLSearchParams(n))o=n.toString();else{var u=[];i.forEach(n,function(t,n){null!==t&&void 0!==t&&(i.isArray(t)&&(n+="[]"),i.isArray(t)||(t=[t]),i.forEach(t,function(t){i.isDate(t)?t=t.toISOString():i.isObject(t)&&(t=JSON.stringify(t)),u.push(r(n)+"="+r(t))}))}),o=u.join("&")}return o&&(t+=(-1===t.indexOf("?")?"?":"&")+o),t}},function(t,n){t.exports=require("http")},function(t,n){t.exports=require("https")},function(t,n,e){"use strict";function r(t,n){s.call(this),this._options=t,this._redirectCount=0,this._bufferedWrites=[],n&&this.on("response",n);var e=this;if(this._onNativeResponse=function(t){e._processResponse(t)},!t.pathname&&t.path){var r=t.path.indexOf("?");r<0?t.pathname=t.path:(t.pathname=t.path.substring(0,r),t.search=t.path.substring(r))}this._performRequest()}var i=e(13),o=e(31),u=e(10),a=e(11),s=e(32).Writable,c=e(33)("follow-redirects"),f={"http:":u,"https:":a},l={},n=t.exports={maxRedirects:21},p={GET:!0,HEAD:!0,OPTIONS:!0,TRACE:!0},h=Object.create(null);["abort","aborted","error","socket"].forEach(function(t){h[t]=function(n){this._redirectable.emit(t,n)}}),r.prototype=Object.create(s.prototype),r.prototype._performRequest=function(){var t=this._options.protocol;this._options.agents&&(this._options.agent=this._options.agents[l[t]]);var n=f[t],e=this._currentRequest=n.request(this._options,this._onNativeResponse);this._currentUrl=i.format(this._options),e._redirectable=this;for(var r in h)r&&e.on(r,h[r]);if(this._isRedirect){var o=this._bufferedWrites;if(0===o.length)e.end();else{var u=0;!function t(){if(u<o.length){var n=o[u++];e.write(n.data,n.encoding,t)}else e.end()}()}}},r.prototype._processResponse=function(t){var n=t.headers.location;if(n&&!1!==this._options.followRedirects&&t.statusCode>=300&&t.statusCode<400){if(++this._redirectCount>this._options.maxRedirects)return this.emit("error",new Error("Max redirects exceeded."));var e,r=this._options.headers;if(307!==t.statusCode&&!(this._options.method in p)){this._options.method="GET",this._bufferedWrites=[];for(e in r)/^content-/i.test(e)&&delete r[e]}if(!this._isRedirect)for(e in r)/^host$/i.test(e)&&delete r[e];var o=i.resolve(this._currentUrl,n);c("redirecting to",o),Object.assign(this._options,i.parse(o)),this._isRedirect=!0,this._performRequest()}else t.responseUrl=this._currentUrl,this.emit("response",t),delete this._options,delete this._bufferedWrites},r.prototype.abort=function(){this._currentRequest.abort()},r.prototype.flushHeaders=function(){this._currentRequest.flushHeaders()},r.prototype.setNoDelay=function(t){this._currentRequest.setNoDelay(t)},r.prototype.setSocketKeepAlive=function(t,n){this._currentRequest.setSocketKeepAlive(t,n)},r.prototype.setTimeout=function(t,n){this._currentRequest.setTimeout(t,n)},r.prototype.write=function(t,n,e){this._currentRequest.write(t,n,e),this._bufferedWrites.push({data:t,encoding:n})},r.prototype.end=function(t,n,e){this._currentRequest.end(t,n,e),t&&this._bufferedWrites.push({data:t,encoding:n})},Object.keys(f).forEach(function(t){var e=l[t]=t.substr(0,t.length-1),u=f[t],a=n[e]=Object.create(u);a.request=function(e,u){return"string"==typeof e?(e=i.parse(e),e.maxRedirects=n.maxRedirects):e=Object.assign({maxRedirects:n.maxRedirects,protocol:t},e),o.equal(e.protocol,t,"protocol mismatch"),c("options",e),new r(e,u)},a.get=function(t,n){var e=a.request(t,n);return e.end(),e}})},function(t,n){t.exports=require("url")},function(t,n,e){function r(t){var e,r=0;for(e in t)r=(r<<5)-r+t.charCodeAt(e),r|=0;return n.colors[Math.abs(r)%n.colors.length]}function i(t){function e(){if(e.enabled){var t=e,r=+new Date,i=r-(c||r);t.diff=i,t.prev=c,t.curr=r,c=r;for(var o=new Array(arguments.length),u=0;u<o.length;u++)o[u]=arguments[u];o[0]=n.coerce(o[0]),"string"!=typeof o[0]&&o.unshift("%O");var a=0;o[0]=o[0].replace(/%([a-zA-Z%])/g,function(e,r){if("%%"===e)return e;a++;var i=n.formatters[r];if("function"==typeof i){var u=o[a];e=i.call(t,u),o.splice(a,1),a--}return e}),n.formatArgs.call(t,o);(e.log||n.log||console.log.bind(console)).apply(t,o)}}return e.namespace=t,e.enabled=n.enabled(t),e.useColors=n.useColors(),e.color=r(t),"function"==typeof n.init&&n.init(e),e}function o(t){n.save(t),n.names=[],n.skips=[];for(var e=("string"==typeof t?t:"").split(/[\s,]+/),r=e.length,i=0;i<r;i++)e[i]&&(t=e[i].replace(/\*/g,".*?"),"-"===t[0]?n.skips.push(new RegExp("^"+t.substr(1)+"$")):n.names.push(new RegExp("^"+t+"$")))}function u(){n.enable("")}function a(t){var e,r;for(e=0,r=n.skips.length;e<r;e++)if(n.skips[e].test(t))return!1;for(e=0,r=n.names.length;e<r;e++)if(n.names[e].test(t))return!0;return!1}function s(t){return t instanceof Error?t.stack||t.message:t}n=t.exports=i.debug=i.default=i,n.coerce=s,n.disable=u,n.enable=o,n.enabled=a,n.humanize=e(35),n.names=[],n.skips=[],n.formatters={};var c},function(t,n,e){"use strict";t.exports=function(t){return!(!t||!t.__CANCEL__)}},function(t,n,e){"use strict";function r(t){this.message=t}r.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},r.prototype.__CANCEL__=!0,t.exports=r},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=e(18);n.default=r},function(t,n,e){"use strict";var r=e(0),i=e(20),o=e(50),u={token:"",baseUrl:"https://www.flex.io/api/v1",insecure:!1,debug:!1},a={version:e(75).version,_init:function(){this.connections=e(76).getConnectionsObject(this),this.pipes=e(77).getPipesObject(this),this.util=e(1).getUtilObject(this),this._http=null;var t=e(78).getPipeConstructor;this.pipe=t(this);var n=e(79).getConnectionConstructor;this.connection=n(this)},setup:function(t,n){return u=r.assign(u,{token:t},n),this._http=null,this._createHttp(),this},getConfig:function(){return r.assign({},u)},http:function(){return this._http||this._createHttp(),this._http},task:o,_createHttp:function(){var t={baseURL:u.baseUrl,headers:{Authorization:"Bearer "+u.token}};!0===u.insecure&&(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0"),this._http=i.create(t)}};a._init(),t.exports=a},function(t,n){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,n,e){t.exports=e(21)},function(t,n,e){"use strict";function r(t){var n=new u(t),e=o(u.prototype.request,n);return i.extend(e,u.prototype,n),i.extend(e,n),e}var i=e(3),o=e(6),u=e(23),a=e(4),s=r(a);s.Axios=u,s.create=function(t){return r(i.merge(a,t))},s.Cancel=e(16),s.CancelToken=e(48),s.isCancel=e(15),s.all=function(t){return Promise.all(t)},s.spread=e(49),t.exports=s,t.exports.default=s},function(t,n){function e(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}function r(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&e(t.slice(0,0))}/*!
+ * Determine if an object is a Buffer
+ *
+ * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
+ * @license  MIT
+ */
+t.exports=function(t){return null!=t&&(e(t)||r(t)||!!t._isBuffer)}},function(t,n,e){"use strict";function r(t){this.defaults=t,this.interceptors={request:new u,response:new u}}var i=e(4),o=e(3),u=e(43),a=e(44),s=e(46),c=e(47);r.prototype.request=function(t){"string"==typeof t&&(t=o.merge({url:arguments[0]},arguments[1])),t=o.merge(i,this.defaults,{method:"get"},t),t.method=t.method.toLowerCase(),t.baseURL&&!s(t.url)&&(t.url=c(t.baseURL,t.url));var n=[a,void 0],e=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){n.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){n.push(t.fulfilled,t.rejected)});n.length;)e=e.then(n.shift(),n.shift());return e},o.forEach(["delete","get","head","options"],function(t){r.prototype[t]=function(n,e){return this.request(o.merge(e||{},{method:t,url:n}))}}),o.forEach(["post","put","patch"],function(t){r.prototype[t]=function(n,e,r){return this.request(o.merge(r||{},{method:t,url:n,data:e}))}}),t.exports=r},function(t,n,e){"use strict";var r=e(3);t.exports=function(t,n){r.forEach(t,function(e,r){r!==n&&r.toUpperCase()===n.toUpperCase()&&(t[n]=e,delete t[r])})}},function(t,n,e){"use strict";var r=e(3),i=e(7),o=e(9),u=e(26),a=e(27),s=e(5),c="undefined"!=typeof window&&window.btoa&&window.btoa.bind(window)||e(28);t.exports=function(t){return new Promise(function(n,f){var l=t.data,p=t.headers;r.isFormData(l)&&delete p["Content-Type"];var h=new XMLHttpRequest,d="onreadystatechange",g=!1;if("test"===process.env.NODE_ENV||"undefined"==typeof window||!window.XDomainRequest||"withCredentials"in h||a(t.url)||(h=new window.XDomainRequest,d="onload",g=!0,h.onprogress=function(){},h.ontimeout=function(){}),t.auth){var v=t.auth.username||"",_=t.auth.password||"";p.Authorization="Basic "+c(v+":"+_)}if(h.open(t.method.toUpperCase(),o(t.url,t.params,t.paramsSerializer),!0),h.timeout=t.timeout,h[d]=function(){if(h&&(4===h.readyState||g)&&(0!==h.status||h.responseURL&&0===h.responseURL.indexOf("file:"))){var e="getAllResponseHeaders"in h?u(h.getAllResponseHeaders()):null,r=t.responseType&&"text"!==t.responseType?h.response:h.responseText,o={data:r,status:1223===h.status?204:h.status,statusText:1223===h.status?"No Content":h.statusText,headers:e,config:t,request:h};i(n,f,o),h=null}},h.onerror=function(){f(s("Network Error",t,null,h)),h=null},h.ontimeout=function(){f(s("timeout of "+t.timeout+"ms exceeded",t,"ECONNABORTED",h)),h=null},r.isStandardBrowserEnv()){var y=e(29),m=(t.withCredentials||a(t.url))&&t.xsrfCookieName?y.read(t.xsrfCookieName):void 0;m&&(p[t.xsrfHeaderName]=m)}if("setRequestHeader"in h&&r.forEach(p,function(t,n){void 0===l&&"content-type"===n.toLowerCase()?delete p[n]:h.setRequestHeader(n,t)}),t.withCredentials&&(h.withCredentials=!0),t.responseType)try{h.responseType=t.responseType}catch(n){if("json"!==t.responseType)throw n}"function"==typeof t.onDownloadProgress&&h.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&h.upload&&h.upload.addEventListener("progress",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then(function(t){h&&(h.abort(),f(t),h=null)}),void 0===l&&(l=null),h.send(l)})}},function(t,n,e){"use strict";var r=e(3);t.exports=function(t){var n,e,i,o={};return t?(r.forEach(t.split("\n"),function(t){i=t.indexOf(":"),n=r.trim(t.substr(0,i)).toLowerCase(),e=r.trim(t.substr(i+1)),n&&(o[n]=o[n]?o[n]+", "+e:e)}),o):o}},function(t,n,e){"use strict";var r=e(3);t.exports=r.isStandardBrowserEnv()?function(){function t(t){var n=t;return e&&(i.setAttribute("href",n),n=i.href),i.setAttribute("href",n),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}var n,e=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");return n=t(window.location.href),function(e){var i=r.isString(e)?t(e):e;return i.protocol===n.protocol&&i.host===n.host}}():function(){return function(){return!0}}()},function(t,n,e){"use strict";function r(){this.message="String contains an invalid character"}function i(t){for(var n,e,i=String(t),u="",a=0,s=o;i.charAt(0|a)||(s="=",a%1);u+=s.charAt(63&n>>8-a%1*8)){if((e=i.charCodeAt(a+=.75))>255)throw new r;n=n<<8|e}return u}var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=i},function(t,n,e){"use strict";var r=e(3);t.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,n,e,i,o,u){var a=[];a.push(t+"="+encodeURIComponent(n)),r.isNumber(e)&&a.push("expires="+new Date(e).toGMTString()),r.isString(i)&&a.push("path="+i),r.isString(o)&&a.push("domain="+o),!0===u&&a.push("secure"),document.cookie=a.join("; ")},read:function(t){var n=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return n?decodeURIComponent(n[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(t,n,e){"use strict";var r=e(3),i=e(7),o=e(9),u=e(10),a=e(11),s=e(12).http,c=e(12).https,f=e(13),l=e(41),p=e(42),h=e(5),d=e(8);t.exports=function(t){return new Promise(function(n,e){var g,v=t.data,_=t.headers,y=!1;if(_["User-Agent"]||_["user-agent"]||(_["User-Agent"]="axios/"+p.version),v&&!r.isStream(v)){if(Buffer.isBuffer(v));else if(r.isArrayBuffer(v))v=new Buffer(new Uint8Array(v));else{if(!r.isString(v))return e(h("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",t));v=new Buffer(v,"utf-8")}_["Content-Length"]=v.length}var m=void 0;if(t.auth){m=(t.auth.username||"")+":"+(t.auth.password||"")}var b=f.parse(t.url),w=b.protocol||"http:";if(!m&&b.auth){var x=b.auth.split(":");m=(x[0]||"")+":"+(x[1]||"")}m&&delete _.Authorization;var O="https:"===w,S=O?t.httpsAgent:t.httpAgent,A={hostname:b.hostname,port:b.port,path:o(b.path,t.params,t.paramsSerializer).replace(/^\?/,""),method:t.method,headers:_,agent:S,auth:m},T=t.proxy;if(!T){var E=w.slice(0,-1)+"_proxy",C=process.env[E]||process.env[E.toUpperCase()];if(C){var P=f.parse(C);if(T={host:P.hostname,port:P.port},P.auth){var j=P.auth.split(":");T.auth={username:j[0],password:j[1]}}}}if(T&&(A.hostname=T.host,A.host=T.host,A.headers.host=b.hostname+(b.port?":"+b.port:""),A.port=T.port,A.path=w+"//"+b.hostname+(b.port?":"+b.port:"")+A.path,T.auth)){var k=new Buffer(T.auth.username+":"+T.auth.password,"utf8").toString("base64");A.headers["Proxy-Authorization"]="Basic "+k}var R;0===t.maxRedirects?R=O?a:u:(t.maxRedirects&&(A.maxRedirects=t.maxRedirects),R=O?c:s);var N=R.request(A,function(r){if(!y){clearTimeout(g),g=null;var o=r;switch(r.headers["content-encoding"]){case"gzip":case"compress":case"deflate":o=o.pipe(l.createUnzip()),delete r.headers["content-encoding"]}var u=r.req||N,a={status:r.statusCode,statusText:r.statusMessage,headers:r.headers,config:t,request:u};if("stream"===t.responseType)a.data=o,i(n,e,a);else{var s=[];o.on("data",function(n){s.push(n),t.maxContentLength>-1&&Buffer.concat(s).length>t.maxContentLength&&e(h("maxContentLength size of "+t.maxContentLength+" exceeded",t,null,u))}),o.on("error",function(n){y||e(d(n,t,null,u))}),o.on("end",function(){var r=Buffer.concat(s);"arraybuffer"!==t.responseType&&(r=r.toString("utf8")),a.data=r,i(n,e,a)})}}});N.on("error",function(n){y||e(d(n,t,null,N))}),t.timeout&&!g&&(g=setTimeout(function(){N.abort(),e(h("timeout of "+t.timeout+"ms exceeded",t,"ECONNABORTED",N)),y=!0},t.timeout)),t.cancelToken&&t.cancelToken.promise.then(function(t){y||(N.abort(),e(t),y=!0)}),r.isStream(v)?v.pipe(N):N.end(v)})}},function(t,n){t.exports=require("assert")},function(t,n){t.exports=require("stream")},function(t,n,e){"undefined"!=typeof process&&"renderer"===process.type?t.exports=e(34):t.exports=e(36)},function(t,n,e){function r(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type)||("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function i(t){var e=this.useColors;if(t[0]=(e?"%c":"")+this.namespace+(e?" %c":" ")+t[0]+(e?"%c ":" ")+"+"+n.humanize(this.diff),e){var r="color: "+this.color;t.splice(1,0,r,"color: inherit");var i=0,o=0;t[0].replace(/%[a-zA-Z%]/g,function(t){"%%"!==t&&(i++,"%c"===t&&(o=i))}),t.splice(o,0,r)}}function o(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function u(t){try{null==t?n.storage.removeItem("debug"):n.storage.debug=t}catch(t){}}function a(){var t;try{t=n.storage.debug}catch(t){}return!t&&"undefined"!=typeof process&&"env"in process&&(t=process.env.DEBUG),t}n=t.exports=e(14),n.log=o,n.formatArgs=i,n.save=u,n.load=a,n.useColors=r,n.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(t){}}(),n.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],n.formatters.j=function(t){try{return JSON.stringify(t)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},n.enable(a())},function(t,n){function e(t){if(t=String(t),!(t.length>100)){var n=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(n){var e=parseFloat(n[1]);switch((n[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return e*f;case"days":case"day":case"d":return e*c;case"hours":case"hour":case"hrs":case"hr":case"h":return e*s;case"minutes":case"minute":case"mins":case"min":case"m":return e*a;case"seconds":case"second":case"secs":case"sec":case"s":return e*u;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return e;default:return}}}}function r(t){return t>=c?Math.round(t/c)+"d":t>=s?Math.round(t/s)+"h":t>=a?Math.round(t/a)+"m":t>=u?Math.round(t/u)+"s":t+"ms"}function i(t){return o(t,c,"day")||o(t,s,"hour")||o(t,a,"minute")||o(t,u,"second")||t+" ms"}function o(t,n,e){if(!(t<n))return t<1.5*n?Math.floor(t/n)+" "+e:Math.ceil(t/n)+" "+e+"s"}var u=1e3,a=60*u,s=60*a,c=24*s,f=365.25*c;t.exports=function(t,n){n=n||{};var o=typeof t;if("string"===o&&t.length>0)return e(t);if("number"===o&&!1===isNaN(t))return n.long?i(t):r(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}},function(t,n,e){function r(){return"colors"in n.inspectOpts?Boolean(n.inspectOpts.colors):c.isatty(l)}function i(t){var e=this.namespace;if(this.useColors){var r=this.color,i="  [3"+r+";1m"+e+" ";t[0]=i+t[0].split("\n").join("\n"+i),t.push("[3"+r+"m+"+n.humanize(this.diff)+"")}else t[0]=(new Date).toUTCString()+" "+e+" "+t[0]}function o(){return p.write(f.format.apply(f,arguments)+"\n")}function u(t){null==t?delete process.env.DEBUG:process.env.DEBUG=t}function a(){return process.env.DEBUG}function s(t){t.inspectOpts={};for(var e=Object.keys(n.inspectOpts),r=0;r<e.length;r++)t.inspectOpts[e[r]]=n.inspectOpts[e[r]]}var c=e(37),f=e(38);n=t.exports=e(14),n.init=s,n.log=o,n.formatArgs=i,n.save=u,n.load=a,n.useColors=r,n.colors=[6,2,3,4,5,1],n.inspectOpts=Object.keys(process.env).filter(function(t){return/^debug_/i.test(t)}).reduce(function(t,n){var e=n.substring(6).toLowerCase().replace(/_([a-z])/g,function(t,n){return n.toUpperCase()}),r=process.env[n];return r=!!/^(yes|on|true|enabled)$/i.test(r)||!/^(no|off|false|disabled)$/i.test(r)&&("null"===r?null:Number(r)),t[e]=r,t},{});var l=parseInt(process.env.DEBUG_FD,10)||2;1!==l&&2!==l&&f.deprecate(function(){},"except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)")();var p=1===l?process.stdout:2===l?process.stderr:function(t){var n;switch(process.binding("tty_wrap").guessHandleType(t)){case"TTY":n=new c.WriteStream(t),n._type="tty",n._handle&&n._handle.unref&&n._handle.unref();break;case"FILE":n=new(e(39).SyncWriteStream)(t,{autoClose:!1}),n._type="fs";break;case"PIPE":case"TCP":n=new(e(40).Socket)({fd:t,readable:!1,writable:!0}),n.readable=!1,n.read=null,n._type="pipe",n._handle&&n._handle.unref&&n._handle.unref();break;default:throw new Error("Implement me. Unknown stream file type!")}return n.fd=t,n._isStdio=!0,n}(l);n.formatters.o=function(t){return this.inspectOpts.colors=this.useColors,f.inspect(t,this.inspectOpts).split("\n").map(function(t){return t.trim()}).join(" ")},n.formatters.O=function(t){return this.inspectOpts.colors=this.useColors,f.inspect(t,this.inspectOpts)},n.enable(a())},function(t,n){t.exports=require("tty")},function(t,n){t.exports=require("util")},function(t,n){t.exports=require("fs")},function(t,n){t.exports=require("net")},function(t,n){t.exports=require("zlib")},function(t,n){t.exports={_args:[["axios@0.16.2","C:\\src\\flexio-sdk-js"]],_from:"axios@0.16.2",_id:"axios@0.16.2",_inBundle:!1,_integrity:"sha1-uk+S8XFn37q0CYN4VFS5rBScPG0=",_location:"/axios",_phantomChildren:{},_requested:{type:"version",registry:!0,raw:"axios@0.16.2",name:"axios",escapedName:"axios",rawSpec:"0.16.2",saveSpec:null,fetchSpec:"0.16.2"},_requiredBy:["/"],_resolved:"https://registry.npmjs.org/axios/-/axios-0.16.2.tgz",_spec:"0.16.2",_where:"C:\\src\\flexio-sdk-js",author:{name:"Matt Zabriskie"},browser:{"./lib/adapters/http.js":"./lib/adapters/xhr.js"},bugs:{url:"https://github.com/mzabriskie/axios/issues"},dependencies:{"follow-redirects":"^1.2.3","is-buffer":"^1.1.5"},description:"Promise based HTTP client for the browser and node.js",devDependencies:{coveralls:"^2.11.9","es6-promise":"^4.0.5",grunt:"^1.0.1","grunt-banner":"^0.6.0","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.0.0","grunt-contrib-nodeunit":"^1.0.0","grunt-contrib-watch":"^1.0.0","grunt-eslint":"^19.0.0","grunt-karma":"^2.0.0","grunt-ts":"^6.0.0-beta.3","grunt-webpack":"^1.0.18","istanbul-instrumenter-loader":"^1.0.0","jasmine-core":"^2.4.1",karma:"^1.3.0","karma-chrome-launcher":"^2.0.0","karma-coverage":"^1.0.0","karma-firefox-launcher":"^1.0.0","karma-jasmine":"^1.0.2","karma-jasmine-ajax":"^0.1.13","karma-opera-launcher":"^1.0.0","karma-phantomjs-launcher":"^1.0.0","karma-safari-launcher":"^1.0.0","karma-sauce-launcher":"^1.1.0","karma-sinon":"^1.0.5","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^1.7.0","load-grunt-tasks":"^3.5.2",minimist:"^1.2.0","phantomjs-prebuilt":"^2.1.7",sinon:"^1.17.4",typescript:"^2.0.3","url-search-params":"^0.6.1",webpack:"^1.13.1","webpack-dev-server":"^1.14.1"},homepage:"https://github.com/mzabriskie/axios",keywords:["xhr","http","ajax","promise","node"],license:"MIT",main:"index.js",name:"axios",repository:{type:"git",url:"git+https://github.com/mzabriskie/axios.git"},scripts:{build:"NODE_ENV=production grunt build",coveralls:"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js",examples:"node ./examples/server.js",postversion:"git push && git push --tags",preversion:"npm test",start:"node ./sandbox/server.js",test:"grunt test",version:"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json"},typings:"./index.d.ts",version:"0.16.2"}},function(t,n,e){"use strict";function r(){this.handlers=[]}var i=e(3);r.prototype.use=function(t,n){return this.handlers.push({fulfilled:t,rejected:n}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){i.forEach(this.handlers,function(n){null!==n&&t(n)})},t.exports=r},function(t,n,e){"use strict";function r(t){t.cancelToken&&t.cancelToken.throwIfRequested()}var i=e(3),o=e(45),u=e(15),a=e(4);t.exports=function(t){return r(t),t.headers=t.headers||{},t.data=o(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(n){delete t.headers[n]}),(t.adapter||a.adapter)(t).then(function(n){return r(t),n.data=o(n.data,n.headers,t.transformResponse),n},function(n){return u(n)||(r(t),n&&n.response&&(n.response.data=o(n.response.data,n.response.headers,t.transformResponse))),Promise.reject(n)})}},function(t,n,e){"use strict";var r=e(3);t.exports=function(t,n,e){return r.forEach(e,function(e){t=e(t,n)}),t}},function(t,n,e){"use strict";t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,n,e){"use strict";t.exports=function(t,n){return n?t.replace(/\/+$/,"")+"/"+n.replace(/^\/+/,""):t}},function(t,n,e){"use strict";function r(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var n;this.promise=new Promise(function(t){n=t});var e=this;t(function(t){e.reason||(e.reason=new i(t),n(e.reason))})}var i=e(16);r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var t;return{token:new r(function(n){t=n}),cancel:t}},t.exports=r},function(t,n,e){"use strict";t.exports=function(t){return function(n){return t.apply(null,n)}}},function(t,n,e){"use strict";var r=e(0),i=e(2),o=e(51),u=e(52),a=e(53),s=e(54),c=e(55),f=e(56),l=e(57),p=e(58),h=e(59),d=e(60),g=e(61),v=e(62),_=e(63),y=e(64),m=e(65),b=e(66),w=e(67),x=e(68),O=e(69),S=e(70),A=e(71),T=e(72),E=e(73),C=e(74),P=function(t,n){switch(r.get(t,"op","")){default:return T.toCode(t);case i.TASK_OP_CREATE:return o.toCode(t,n);case i.TASK_OP_CONVERT:return u.toCode(t,n);case i.TASK_OP_COPY:return a.toCode(t,n);case i.TASK_OP_DUMP:return s.toCode(t,n);case i.TASK_OP_ECHO:return c.toCode(t,n);case i.TASK_OP_EMAIL_SEND:return f.toCode(t,n);case i.TASK_OP_EXECUTE:return l.toCode(t,n);case i.TASK_OP_FILTER:return p.toCode(t,n);case i.TASK_OP_FOREACH:return h.toCode(t,n);case i.TASK_OP_INSERT:return d.toCode(t,n);case i.TASK_OP_LIMIT:return g.toCode(t,n);case i.TASK_OP_LIST:return y.toCode(t,n);case i.TASK_OP_MERGE:return v.toCode(t,n);case i.TASK_OP_MKDIR:return _.toCode(t,n);case i.TASK_OP_READ:return m.toCode(t,n);case i.TASK_OP_RENDER:return b.toCode(t,n);case i.TASK_OP_REQUEST:return w.toCode(t,n);case i.TASK_OP_SELECT:return x.toCode(t,n);case i.TASK_OP_SEQUENCE:return O.toCode(t,n);case i.TASK_OP_SET:return S.toCode(t,n);case i.TASK_OP_SLEEP:return A.toCode(t,n);case i.TASK_OP_TRANSFORM:return E.toCode(t,n);case i.TASK_OP_WRITE:return C.toCode(t,n)}};t.exports={create:o,convert:u,copy:a,dump:s,echo:c,email:f,execute:l.execute,insert:d,filter:p,foreach:h,javascript:l.javascript,limit:g,list:y,merge:v,mkdir:_,python:l.python,read:m,render:b,request:w,select:x,sequence:O,set:S,sleep:A,task:T,transform:E,write:C,toCode:P}},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(t,n){if(Array.isArray(t))return{op:i.TASK_OP_CREATE,params:{content_type:"application/vnd.flexio.table",columns:t}};var e={op:i.TASK_OP_CREATE,params:{path:t}};return void 0!==n&&(Array.isArray(n)?e.params.columns=n:e.params.content_type=n),e};o.toCode=function(t,n){var e=r.get(t,"params",{}),i=JSON.stringify(e.path)||void 0,o=JSON.stringify(e.content_type)||void 0,u=JSON.stringify(e.columns)||void 0;return void 0!==i?void 0!==u?"create("+i+", "+u+")":void 0!==o?"create("+i+", "+o+")":"create("+i+")":void 0!==u?"create("+u+")":void 0!==o?"":void 0},t.exports=o},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o={format:"delimited",delimiter:"{comma}",header:!0,qualifier:"{double-quote}"},u={format:"delimited",delimiter:"{tab}",header:!0,qualifier:"{none}"},a=function(t,n){var e={op:i.TASK_OP_CONVERT,params:{}};return r.isString(t)?"csv"==t?r.set(e,"params.input",o):"tsv"==t?r.set(e,"params.input",u):r.set(e,"params.input.format",t):r.isPlainObject(t)&&r.set(e,"params.input",t),r.isString(n)?"csv"==n?r.set(e,"params.output",o):"tsv"==n?r.set(e,"params.output",u):r.set(e,"params.output.format",n):r.isPlainObject(n)&&r.set(e,"params.output",n),e};a.toCode=function(t,n){var e,i,a=r.get(t,"params",{}),s=r.get(a,"input",{}),c=r.get(a,"output",{});return r.isEqual(s,o)&&(e="csv"),r.isEqual(c,o)&&(i="csv"),r.isEqual(s,u)&&(e="tsv"),r.isEqual(c,u)&&(i="tsv"),r.isEmpty(r.omit(s,["format"]))&&(e=r.get(s,"format","")),r.isEmpty(r.omit(c,["format"]))&&(i=r.get(c,"format","")),e||(e=s),i||(i=c),"convert("+JSON.stringify(e)+", "+JSON.stringify(i)+")"},t.exports=a},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(t,n,e){var o={op:i.TASK_OP_COPY,params:{from:t,to:n}};return r.isPlainObject(e)&&(o.params.options=e),o};o.toCode=function(t,n){var e=r.get(t,"params",{}),i=JSON.stringify(e.from)||'""',o=JSON.stringify(e.to)||'""',u=e.hasOwnProperty("options")&&r.isPlainObject(e.options)?JSON.stringify(e.options):null,a="copy("+i+", "+o;return null!==u&&(a+=", "+u),a+")"},t.exports=o},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(t){return{op:i.TASK_OP_DUMP,params:{msg:t}}};o.toCode=function(t,n){var e=r.get(t,"params",{});return"dump("+(JSON.stringify(e.msg)||'""')+")"},t.exports=o},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(t){return{op:i.TASK_OP_ECHO,params:{msg:t}}};o.toCode=function(t,n){var e=r.get(t,"params",{});return"echo("+(JSON.stringify(e.msg)||'""')+")"},t.exports=o},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(t){if(!r.isPlainObject(t))throw"The first function parameter must be an object";if(!r.has(t,"to"))throw"The `to` parameter is required";if(!r.has(t,"body_text"))throw"The `body_text` parameter is required";return{op:i.TASK_OP_EMAIL_SEND,params:t}};o.toCode=function(t,n){var e=r.get(t,"params",{});return"email("+JSON.stringify(e,null,2)+")"},t.exports=o},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(){return"undefined"!=typeof process},u=function(t){try{return o()?Buffer(t,"utf8").toString("base64"):btoa(unescape(encodeURIComponent(t)))}catch(t){return t}},a=function(t){try{return o()?Buffer.from(t,"base64").toString("utf8"):decodeURIComponent(escape(atob(t)))}catch(t){return t}},s=function(t){var n;try{n=t.toString(),n=n.substring(n.indexOf("{")+1,n.lastIndexOf("}"))}catch(t){n=""}return n},c=function(t){if(r.isString(t))return t;if(r.isFunction(t)){var n;if(0==t.length)return"exports.flexio_handler = function(context) "+(n=s(t));if(n=t.toString(),"function"==n.substring(0,8))n=n.slice(8);else{var e=n.indexOf("=>"),i=n.indexOf("{");e>=0&&e<i&&(n=n.replace("=>s*{","{"))}return"exports.flexio_handler = function"+n}},f=function(){var t,n,e,o=Array.from(arguments),a=r.get(o,"[0]",null),s=r.get(o,"[1]",null),f=r.get(o,"[2]",null),l={op:i.TASK_OP_EXECUTE,params:{}};"python"==a||"javascript"==a?(t=a,n=s,null!==n&&void 0!==n||(n=""),e=f):(t="javascript",n=a,e=s),"javascript"==t&&(n=c(n)),r.set(l,"params.lang",t);var p=/^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/;return n.match(p)?r.set(l,"params.path",n):r.set(l,"params.code",u(n)),null!==e&&r.set(l,"params.integrity",e),l},l=function(){var t=Array.from(arguments);return t.unshift("javascript"),f.apply(this,t)},p=function(){var t=Array.from(arguments);return t.unshift("python"),f.apply(this,t)},h=function(t){var n=r.get(t,"params",{}),e=n.lang||"",i=a(n.code||"");switch(e){case"javascript":return i=i.replace("exports.flexio_handler =",""),"javascript("+i.trim()+")";case"python":return"python(`\n"+i+"\n`)";default:return"execute("+JSON.stringify(e)+", `\n"+i+"\n`)"}};t.exports={execute:f,javascript:l,python:p,toCode:h}},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(t){if(r.isNil(t))throw"The `filter` parameter is required";return{op:i.TASK_OP_FILTER,params:{where:t}}};o.toCode=function(t,n){var e=r.get(t,"params",{});return"filter("+(JSON.stringify(e.where)||'""')+")"},t.exports=o},function(t,n,e){"use strict";var r=e(0),i=e(1),o=e(2),u=function(t,n){var e={op:o.TASK_OP_FOREACH,params:{}};return("string"==typeof t||t instanceof String)&&(e.params.spec=t),i.isPipeObject(t)?e.params.run=t.pipe.task:i.isPipeObject(n)&&(e.params.run=n.pipe.task),e};u.toCode=function(t,n){var e=r.get(t,"params",{}),i=[];return e.hasOwnProperty("spec")&&i.push(JSON.stringify(e.spec)),e.hasOwnProperty("run")&&i.push(n.task.toCode(e.run,n)),"foreach("+i.join(", ")+")"},t.exports=u},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(t,n){var e;return e=Array.isArray(n)?n:[n],{op:i.TASK_OP_INSERT,params:{path:t,values:e}}};o.toCode=function(t,n){var e=r.get(t,"params",{}),i=r.get(e,"path",void 0),o=r.get(e,"values",void 0);return Array.isArray(o)||(o=[o]),i=JSON.stringify(i),o=JSON.stringify(o),"insert("+i+", "+o+")"},t.exports=o},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(t){return t=r.defaultTo(t,10),{op:i.TASK_OP_LIMIT,params:{value:t}}};o.toCode=function(t,n){var e=r.get(t,"params",{});return"limit("+(JSON.stringify(e.value)||"")+")"},t.exports=o},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(t){if(Array.isArray(t))var n=t;else for(var n=[],e=0;e<arguments.length;++e)n.push(arguments[e]);return{op:i.TASK_OP_MERGE,params:{files:n}}};o.toCode=function(t,n){for(var e=r.get(t,"params",{}),i=r.get(e,"files",[]),o=0;o<i.length;++o)"string"==typeof i[o]||i[o]instanceof String?i[o]=JSON.stringify(i[o]):i[o]=n.merge.toCode(i[o],n);return"merge("+(i.length>=10?"["+i.join(", ")+"]":i.join(", "))+")"},t.exports=o},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(t){return{op:i.TASK_OP_MKDIR,params:{path:t}}};o.toCode=function(t,n){var e=r.get(t,"params",{});return"mkdir("+(JSON.stringify(e.path)||'""')+")"},t.exports=o},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(t){return{op:i.TASK_OP_LIST,params:{path:t}}};o.toCode=function(t,n){var e=r.get(t,"params",{});return"list("+(JSON.stringify(e.path)||'""')+")"},t.exports=o},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(t){return{op:i.TASK_OP_READ,params:{path:t}}};o.toCode=function(t,n){var e=r.get(t,"params",{});return"read("+(JSON.stringify(e.path)||'""')+")"},t.exports=o},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o={format:"png",width:800,height:600,scrollbars:!1},u=function(t,n){var e=Array.from(arguments),t=r.get(e,"[0]",""),u=r.get(e,"[1]",{});if(r.isNil(t))throw"The `url` parameter is required";if(r.isPlainObject(r.get(e,"[0]",{})))var u=r.get(e,"[0]",{});else var u=r.assign({},o,n,{url:t});return{op:i.TASK_OP_RENDER,params:u}};u.toCode=function(t,n){var e=r.get(t,"params",{}),i=JSON.stringify(e.url)||"",u=r.omit(e,["url"]);return r.isEqual(u,o)?"render("+i+")":"render("+i+", "+JSON.stringify(u,null,2)+")"},t.exports=u},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(){var t=Array.from(arguments),n=r.get(t,"[0]",""),e=r.get(t,"[1]",{});return e=r.isPlainObject(r.get(t,"[0]",{}))?r.get(t,"[0]",{}):r.assign({},{url:n},e),e=r.assign({method:"GET"},e),{op:i.TASK_OP_REQUEST,params:e}};o.toCode=function(t,n){var e=r.get(t,"params",{}),i=r.get(e,"url",""),o=r.omit(e,["url"]);return"GET"==r.get(o,"method","")&&(o=r.omit(o,["method"])),r.isEmpty(o)?"request("+JSON.stringify(i)+")":"request("+JSON.stringify(i)+", "+JSON.stringify(o,null,2)+")"},t.exports=o},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(){var t=Array.from(arguments);return 1==t.length&&r.isArray(r.get(t,"[0]"))&&(t=r.get(t,"[0]",[])),{op:i.TASK_OP_SELECT,params:{columns:t}}};o.toCode=function(t,n){var e=r.get(t,"params",{}),i=JSON.stringify(e.columns)||"";return-1!=i.indexOf("[")&&-1!=i.indexOf("]")&&(i=i.substring(1,i.length-1)),"select("+i+")"},t.exports=o},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(t){return{op:i.TASK_OP_SEQUENCE,params:{steps:t}}};o.toCode=function(t,n){var e=r.map(t.params.items,function(t){var e=n.task.toCode(t,n);return"python"!=r.get(t,"params.lang","")&&(e=e.replace(/\n/g,"\n  ")),e}),e=["Flexio.pipe()"].concat(e);return e.join("\n  .")},t.exports=o},function(t,n,e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=e(0),o=e(1),u=e(2),a=function(t,n){return o.isPipeObject(n)&&(n=n.pipe.task),{op:u.TASK_OP_SET,params:{var:t,value:n}}};a.toCode=function(t,n){var e=i.get(t,"params",{}),o=i.get(e,"variable",""),u=i.get(e,"value","");return o=JSON.stringify(o),u="object"===(void 0===u?"undefined":r(u))&&null!==u&&u.hasOwnProperty("op")?n.task.toCode(u,n):JSON.stringify(u),"set("+o+", "+u+")"},t.exports=a},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(t){return t=r.defaultTo(t,10),{op:i.TASK_OP_SLEEP,params:{value:t}}};o.toCode=function(t,n){var e=r.get(t,"params",{});return"sleep("+(JSON.stringify(e.value)||"")+")"},t.exports=o},function(t,n,e){"use strict";var r=(e(0),e(1),function(t){return t});r.toCode=function(t,n){return"task("+JSON.stringify(t,null,2)+")"},t.exports=r},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(t){var n=Array.from(arguments),e={operations:[]},o={},u=[],a=r.get(n,"[0]");return r.isPlainObject(a)?(1==n.length&&r.has(a,"operations")?(o=r.pick(a,["columns","operations"]),o=r.assign(e,o)):(u=[].concat(n),o={operations:u}),{op:i.TASK_OP_TRANSFORM,params:o}):{op:i.TASK_OP_TRANSFORM,params:{columns:void 0,operations:u}}};o.toCode=function(t,n){var e=t.hasOwnProperty("params")?t.params:{};return!e.hasOwnProperty("columns")&&e.hasOwnProperty("operations")&&Array.isArray(e.operations)&&1==e.operations.length?"transform("+JSON.stringify(e.operations[0])+")":"transform("+JSON.stringify(e)+")"},t.exports=o},function(t,n,e){"use strict";var r=e(0),i=(e(1),e(2)),o=function(t){return{op:i.TASK_OP_WRITE,params:{path:t}}};o.toCode=function(t,n){var e=r.get(t,"params",{});return"write("+(JSON.stringify(e.path)||'""')+")"},t.exports=o},function(t,n){t.exports={name:"flexio-sdk-js",version:"1.20.2",description:"Javascript SDK for managing Flex.io resources and services",author:"David Z. Williams <dave@flex.io>","--main":"dist/flexio-node.js",main:"src/main.js","--browser":"src/main.js",browser:"dist/flexio.min.js",scripts:{dev:"cross-env build=development webpack-dev-server --config ./build/webpack.dev.js --open --inline --https --hot","build:debug":"cross-env build=debug webpack --config build/webpack.dist.js","build:release":"cross-env build=production webpack --config build/webpack.dist.js","build:examples":"webpack --config build/webpack.examples.js",build:"npm run build:debug && npm run build:release && npm run build:examples",test:'echo "Error: no test specified" && exit 1'},repository:{type:"git",url:"git+https://github.com/flexiodata/flexio-sdk-js.git"},keywords:[],license:"Apache-2.0",bugs:{url:"https://github.com/flexiodata/flexio-sdk-js/issues"},homepage:"https://github.com/flexiodata/flexio-sdk-js/",dependencies:{axios:"^0.16.2",lodash:"^4.17.4","vue-highlightjs":"^1.3.3"},devDependencies:{autoprefixer:"^7.1.4","babel-core":"^6.26.0","babel-loader":"^7.1.2","babel-plugin-lodash":"^3.2.11","babel-plugin-transform-es2015-destructuring":"^6.23.0","babel-plugin-transform-es2015-parameters":"^6.24.1","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-es2015":"^6.24.1","babel-preset-stage-2":"^6.24.1","cross-env":"^5.0.5","css-loader":"^0.28.7","deep-assign":"^2.0.0",vue:"^2.4.4","vue-loader":"^13.0.4","vue-simple-spinner":"^1.2.7","vue-style-loader":"^3.0.3","vue-template-compiler":"^2.4.4",webpack:"^3.5.5","webpack-dev-server":"^2.8.2"}}},function(t,n,e){"use strict";var r=e(0);e(1);t.exports={},t.exports.getConnectionsObject=function(t){return new function(){this.create=function(n,e){var i;if(r.isPlainObject(n))i=n;else{if(!(n instanceof t.connection))throw"Unknown connection object type";i=n.connection}return new Promise(function(n,r){t.http().post("/connections",i).then(function(i){t.util.callbackAdapter(null,i.data,n,r,e)}).catch(function(i){t.util.debug("Flexio.connections.create(): Failed."),t.util.callbackAdapter(i,null,n,r,e)})})},this.list=function(n){var e=Array.from(arguments),n=r.get(e,"[0]");return new Promise(function(e,i){t.util.debug("Requesting Connections..."),t.http().get("/connections").then(function(o){var u=r.get(o,"data",[]);t.util.debug("Success!"),t.util.callbackAdapter(null,u,e,i,n)}).catch(function(r){t.util.debug("Failed."),t.util.callbackAdapter(r,null,e,i,n)})})}}}},function(t,n,e){"use strict";var r=e(0);t.exports={},t.exports.getPipesObject=function(t){return new function(){this.create=function(n,e){var i;if(r.isPlainObject(n))i=n;else{if(!(n instanceof t.pipe))throw"Unknown pipe object type";i=n.pipe}return new Promise(function(n,r){t.http().post("/pipes",i).then(function(i){t.util.callbackAdapter(null,i.data,n,r,e)}).catch(function(i){t.util.debug("Flexio.pipes.create(): Failed."),t.util.callbackAdapter(i,null,n,r,e)})})},this.list=function(n){var e=Array.from(arguments),n=r.get(e,"[0]");return new Promise(function(e,i){t.util.debug("Requesting Pipes..."),t.http().get("/pipes").then(function(o){var u=r.get(o,"data",[]);t.util.debug("Success!"),t.util.callbackAdapter(null,u,e,i,n)}).catch(function(r){t.util.debug("Failed."),t.util.callbackAdapter(r,null,e,i,n)})})},this.run=function(){var n=Array.from(arguments);n.push(null,null,null);var e,i,o={},u=null;n[0]instanceof t.pipe?(i=r.get(n[0],"pipe.eid",""),u=r.get(n[0],"pipe.task","")):Array.isArray(n[0])?(i="",u=n[0]):i=n[0],r.isPlainObject(n[1])&&(o=n[1]),e=r.isFunction(n[1])?n[1]:r.isFunction(n[2])?n[2]:null;var a=function(n,e){return{contentType:e,buffer:n,get blob(){return new Blob([this.buffer],{type:e})},get text(){return t.util.arrayBufferToString(this.buffer)},get data(){try{return JSON.parse(t.util.arrayBufferToString(this.buffer))}catch(t){return null}}}};return new Promise(function(n,s){if(t.util.debug("Running Pipe `"+(0==i.length?"[Pipe Object/Task Array]":i)+"`..."),0==i.length){var c={name:"SDK Pipe",description:"SDK Pipe",task:u,process_mode:"R"};t.http().post("/processes",c).then(function(i){var u=r.get(i,"data",{}),c=r.get(u,"eid","");t.util.debug("Created Process.");var f={method:"post",url:"/processes/"+c+"/run",responseType:"arraybuffer"};o.hasOwnProperty("data")&&(f.data=o.data),o.hasOwnProperty("query")&&(f.params=o.query),t.http()(f).then(function(i){t.util.debug("Process Complete.");var o=r.get(i,"headers.content-type","text/plain"),u=a(i.data,o);t.util.callbackAdapter(null,u,n,s,e)}).catch(function(r){t.util.debug("Process Run Failed. "+r),t.util.callbackAdapter(r,null,n,s,e)})}).catch(function(r){t.util.debug("Process Create Failed. "+r),t.util.callbackAdapter(r,null,n,s,e)})}else{var f={method:"post",url:"/pipes/"+i+"/run",responseType:"arraybuffer"};o.hasOwnProperty("data")&&(f.data=o.data),o.hasOwnProperty("query")&&(f.params=o.query),o.hasOwnProperty("contentType")?f.headers={"Content-Type":o.contentType}:f.hasOwnProperty("data")&&(r.isPlainObject(f.data)||(r.isString(f.data)?f.headers={"Content-Type":"text/plain"}:f.headers={"Content-Type":"application/octet-stream"}));t.http()(f).then(function(i){t.util.debug("Process Complete.");var o=r.get(i,"headers.content-type","text/plain"),u=a(i.data,o);t.util.callbackAdapter(null,u,n,s,e)}).catch(function(r){t.util.debug("Pipe Run Call Failed. "+r),t.util.callbackAdapter(r,null,n,s,e)})}})}}}},function(t,n,e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=e(0);t.exports={},t.exports.getPipeConstructor=function(t){return function(n){if(!(this instanceof t.pipe))return new t.pipe(n);var e=i.assign(this,{pipe:{name:"Untitled",description:"",task:{op:"sequence",params:{items:[]}}},processes:[],_params:{},loading:!1,saving:!1,running:!1,getJSON:function(){return i.assign({},this.pipe)},getProcesses:function(){return[].concat(this.processes)},getLastProcess:function(){return i.last(this.processes)},addTask:function(t){return this.pipe.task.params.items.push(t),this},clearTasks:function(){return this.pipe.task.params.items=[],this},getTasks:function(){return this.pipe.task.params.items},load:function(){var n=this,e=arguments,r=Array.from(arguments),o=i.get(r,"[0]"),u=i.get(r,"[1]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){n.load.apply(n,e)},50),this):i.isNil(o)?t.util.debug("The `identifier` parameter is required. Either the pipe's eid or pipe's alias may be used."):(this.loading=!0,t.util.debug("Loading Pipe `"+o+"`..."),t.http().get("/pipes/"+o).then(function(e){var r=i.get(e,"data",{});n.pipe=i.assign({},r),n.loading=!1,t.util.debug("Pipe Loaded."),"function"==typeof u&&u.call(n,null,r)}).catch(function(e){n.loading=!1,t.util.debug("Pipe Load Failed. "),"function"==typeof u&&u.call(n,e,null)}),this)},save:function(){var n=this,e=arguments,r=Array.from(arguments),o=i.get(r,"[0]"),u=i.get(r,"[0]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){n.save.apply(n,e)},50),this):(i.isPlainObject(o)&&(i.assign(this.pipe,i.pick(o,["name","description","ename"])),u=i.get(r,"[1]")),this.saving=!0,t.util.debug("Saving Pipe `"+i.get(this.pipe,"name","Untitled Pipe")+"`..."),t.http().post("/pipes",this.pipe).then(function(e){var r=i.get(e,"data",{});n.pipe=i.assign({},r),n.saving=!1,t.util.debug("Pipe Saved."),"function"==typeof u&&u.call(n,null,n.pipe)}).catch(function(e){n.saving=!1,t.util.debug("Pipe Save Failed."),"function"==typeof u&&u.call(n,e,null)}),this)},run:function(){var n=Array.from(arguments);return n.unshift(this),t.pipes.run.apply(null,n)},params:function(t){return this._params=i.assign({},this.getParams(),t),this},clearParams:function(t){return i.isArray(t)?this._params=i.omit(this._params,t):i.isNil(t)&&(this._params={}),this},getParams:function(){return i.assign({},this._params)},toCode:function(n){return t.task.toCode(this.pipe.task,t)}});return i.each(t.task,function(t,n){"toCode"!=n&&(e[n]=function(){return e.addTask(t.apply(e,arguments))})}),void 0!==n&&("string"==typeof n||n instanceof String?e.pipe.eid=n:"object"===(void 0===n?"undefined":r(n))&&(n.hasOwnProperty("pipe")?e.pipe=JSON.parse(JSON.stringify(n.pipe)):n.hasOwnProperty("task")?e.pipe=JSON.parse(JSON.stringify(n)):n.hasOwnProperty("op")&&(e.pipe.task=n))),e}}},function(t,n,e){"use strict";var r=e(0),i=["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"],o=["","basic","bearer","oauth2"];t.exports={},t.exports.getConnectionConstructor=function(t){return function(){return this instanceof t.connection?r.assign(this,{connection:{name:"Untitled",description:"",connection_type:"http",connection_info:{method:"",url:"",auth:"",username:"",password:"",token:"",access_token:"",refresh_token:"",expires:"",data:{},headers:{}}},loading:!1,saving:!1,running:!1,getJSON:function(){return r.assign({},this.connection)},name:function(t){return this.connection.name=t,this},description:function(t){return this.connection.description=t,this},method:function(){var t=Array.from(arguments),n=r.get(t,"[0]");return r.isString(n)&&r.includes(i,n)?this._setInfo("method",n):this},url:function(){var t=Array.from(arguments),n=r.get(t,"[0]");return r.isString(n)?this._setInfo("url",n):this},auth:function(){var t=Array.from(arguments),n=r.get(t,"[0]");return r.isString(n)&&r.includes(o,n)?("none"==n&&(n=""),this._setInfo("auth",n)):this},username:function(){var t=Array.from(arguments),n=r.get(t,"[0]");return r.isString(n)?this._setInfo("username",n):this},password:function(){var t=Array.from(arguments),n=r.get(t,"[0]");return r.isString(n)?this._setInfo("password",n):this},token:function(){var t=Array.from(arguments),n=r.get(t,"[0]");return r.isString(n)?this._setInfo("token",n):this},accessToken:function(){var t=Array.from(arguments),n=r.get(t,"[0]");return r.isString(n)?this._setInfo("access_token",n):this},refreshToken:function(){var t=Array.from(arguments),n=r.get(t,"[0]");return r.isString(n)?this._setInfo("refresh_token",n):this},expires:function(){var t=Array.from(arguments),n=r.get(t,"[0]");return r.isNumber(n)&&(n=""+n),r.isString(n)?this._setInfo("expires",n):this},data:function(){var t=Array.from(arguments),n=r.get(t,"[0]");if(!r.isPlainObject(n))return this;var e=this._getInfo("data",{});return n=r.assign({},e,n),this._setInfo("data",n)},clearData:function(){var t=Array.from(arguments);if(0==t.length)return this._setInfo("data",{});1==t.length&&r.isArray(r.get(t,"[0]"))&&(t=r.get(t,"[0]",[]));var n=this._getInfo("data",{}),e=r.omit(n,t);return this._setInfo("data",e)},headers:function(){var t=Array.from(arguments),n=r.get(t,"[0]");if(!r.isPlainObject(n))return this;var e=this._getInfo("headers",{});return n=r.assign({},e,n),this._setInfo("headers",n)},clearHeaders:function(){var t=Array.from(arguments);if(0==t.length)return this._setInfo("headers",{});1==t.length&&r.isArray(r.get(t,"[0]"))&&(t=r.get(t,"[0]",[]));var n=this._getInfo("headers",{}),e=r.omit(n,t);return this._setInfo("headers",e)},load:function(){var n=this,e=arguments,i=Array.from(arguments),o=r.get(i,"[0]"),u=r.get(i,"[1]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){n.load.apply(n,e)},50),this):r.isNil(o)?t.util.debug("The `identifier` parameter is required. Either the connection's eid or connection's alias may be used."):(this.loading=!0,t.util.debug("Loading Connection `"+o+"`..."),t.http().get("/connections/"+o).then(function(e){var i=r.get(e,"data",{});n.connection=r.assign({},i),n.loading=!1,t.util.debug("Connection Loaded."),"function"==typeof u&&u.call(n,null,i)}).catch(function(e){n.loading=!1,t.util.debug("Connection Load Failed."),"function"==typeof u&&u.call(n,e,null)}),this)},save:function(){var n=this,e=arguments,i=Array.from(arguments),o=r.get(i,"[0]"),u=r.get(i,"[0]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){n.save.apply(n,e)},50),this):(r.isPlainObject(o)&&(r.assign(this.connection,r.pick(o,["name","description","ename"])),u=r.get(i,"[1]")),this.saving=!0,t.util.debug("Saving Connection `"+r.get(this.connection,"name","Untitled Connection")+"`..."),t.http().post("/connections",this.connection).then(function(e){var i=r.get(e,"data",{});n.connection=r.assign({},i),n.saving=!1,t.util.debug("Connection Saved."),"function"==typeof u&&u.call(n,null,n.connection)}).catch(function(e){n.saving=!1,t.util.debug("Connection Save Failed."),"function"==typeof u&&u.call(n,e,null)}),this)},_getInfo:function(t,n){return r.get(this.connection,"connection_info."+t,n)},_setInfo:function(t,n){return r.set(this.connection,"connection_info."+t,n),this}}):new t.connection}}}]).default});
\ No newline at end of file
diff --git a/dist/orig/flexio.js b/dist/orig/flexio.js
new file mode 100644
index 0000000..9ef0af1
--- /dev/null
+++ b/dist/orig/flexio.js
@@ -0,0 +1,23097 @@
+/*!
+ * Flex.io Javascript SDK v1.20.2 (https://github.com/flexiodata/flexio-sdk-js)
+ * (c) 2018 Gold Prairie LLC
+ */
+(function webpackUniversalModuleDefinition(root, factory) {
+	if(typeof exports === 'object' && typeof module === 'object')
+		module.exports = factory();
+	else if(typeof define === 'function' && define.amd)
+		define([], factory);
+	else if(typeof exports === 'object')
+		exports["Flexio"] = factory();
+	else
+		root["Flexio"] = factory();
+})(this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, {
+/******/ 				configurable: false,
+/******/ 				enumerable: true,
+/******/ 				get: getter
+/******/ 			});
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 12);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_RESULT__;/**
+ * @license
+ * Lodash <https://lodash.com/>
+ * Copyright JS Foundation and other contributors <https://js.foundation/>
+ * Released under MIT license <https://lodash.com/license>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+;(function() {
+
+  /** Used as a safe reference for `undefined` in pre-ES5 environments. */
+  var undefined;
+
+  /** Used as the semantic version number. */
+  var VERSION = '4.17.4';
+
+  /** 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';
+
+  /** 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*$/,
+      reLeadingDot = /^\./,
+      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 and trailing whitespace. */
+  var reTrim = /^\s+|\s+$/g,
+      reTrimStart = /^\s+/,
+      reTrimEnd = /\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 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)',
+      rsOrdUpper = '\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)',
+      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 = {
+    '&': '&amp;',
+    '<': '&lt;',
+    '>': '&gt;',
+    '"': '&quot;',
+    "'": '&#39;'
+  };
+
+  /** Used to map HTML entities to characters. */
+  var htmlUnescapes = {
+    '&amp;': '&',
+    '&lt;': '<',
+    '&gt;': '>',
+    '&quot;': '"',
+    '&#39;': "'"
+  };
+
+  /** 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 global == 'object' && global && global.Object === Object && global;
+
+  /** 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 = typeof exports == 'object' && exports && !exports.nodeType && exports;
+
+  /** Detect free variable `module`. */
+  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
+
+  /** Detect the popular CommonJS extension `module.exports`. */
+  var moduleExports = freeModule && freeModule.exports === freeExports;
+
+  /** Detect free variable `process` from Node.js. */
+  var freeProcess = moduleExports && freeGlobal.process;
+
+  /** Used to access faster Node.js helpers. */
+  var nodeUtil = (function() {
+    try {
+      return freeProcess && freeProcess.binding && freeProcess.binding('util');
+    } catch (e) {}
+  }());
+
+  /* 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;
+
+  /*--------------------------------------------------------------------------*/
+
+  /**
+   * Adds the key-value `pair` to `map`.
+   *
+   * @private
+   * @param {Object} map The map to modify.
+   * @param {Array} pair The key-value pair to add.
+   * @returns {Object} Returns `map`.
+   */
+  function addMapEntry(map, pair) {
+    // Don't return `map.set` because it's not chainable in IE 11.
+    map.set(pair[0], pair[1]);
+    return map;
+  }
+
+  /**
+   * Adds `value` to `set`.
+   *
+   * @private
+   * @param {Object} set The set to modify.
+   * @param {*} value The value to add.
+   * @returns {Object} Returns `set`.
+   */
+  function addSetEntry(set, value) {
+    // Don't return `set.add` because it's not chainable in IE 11.
+    set.add(value);
+    return set;
+  }
+
+  /**
+   * 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 < length) {
+      var value = array[index];
+      setter(accumulator, value, iteratee(value), array);
+    }
+    return accumulator;
+  }
+
+  /**
+   * A specialized version of `_.forEach` for arrays without support for
+   * iteratee shorthands.
+   *
+   * @private
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @returns {Array} Returns `array`.
+   */
+  function arrayEach(array, iteratee) {
+    var index = -1,
+        length = array == null ? 0 : array.length;
+
+    while (++index < length) {
+      if (iteratee(array[index], index, array) === false) {
+        break;
+      }
+    }
+    return array;
+  }
+
+  /**
+   * A specialized version of `_.forEachRight` for arrays without support for
+   * iteratee shorthands.
+   *
+   * @private
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @returns {Array} Returns `array`.
+   */
+  function arrayEachRight(array, iteratee) {
+    var length = array == null ? 0 : array.length;
+
+    while (length--) {
+      if (iteratee(array[length], length, array) === false) {
+        break;
+      }
+    }
+    return array;
+  }
+
+  /**
+   * A specialized version of `_.every` for arrays without support for
+   * iteratee shorthands.
+   *
+   * @private
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} predicate The function invoked per iteration.
+   * @returns {boolean} Returns `true` if all elements pass the predicate check,
+   *  else `false`.
+   */
+  function arrayEvery(array, predicate) {
+    var index = -1,
+        length = array == null ? 0 : array.length;
+
+    while (++index < length) {
+      if (!predicate(array[index], index, array)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  /**
+   * A specialized version of `_.filter` for arrays without support for
+   * iteratee shorthands.
+   *
+   * @private
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} predicate The function invoked per iteration.
+   * @returns {Array} Returns the new filtered array.
+   */
+  function arrayFilter(array, predicate) {
+    var index = -1,
+        length = array == null ? 0 : array.length,
+        resIndex = 0,
+        result = [];
+
+    while (++index < length) {
+      var value = array[index];
+      if (predicate(value, index, array)) {
+        result[resIndex++] = value;
+      }
+    }
+    return result;
+  }
+
+  /**
+   * A specialized version of `_.includes` for arrays without support for
+   * specifying an index to search from.
+   *
+   * @private
+   * @param {Array} [array] The array to inspect.
+   * @param {*} target The value to search for.
+   * @returns {boolean} Returns `true` if `target` is found, else `false`.
+   */
+  function arrayIncludes(array, value) {
+    var length = array == null ? 0 : array.length;
+    return !!length && baseIndexOf(array, value, 0) > -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 < length) {
+      if (comparator(value, array[index])) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * A specialized version of `_.map` for arrays without support for iteratee
+   * shorthands.
+   *
+   * @private
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @returns {Array} Returns the new mapped array.
+   */
+  function arrayMap(array, iteratee) {
+    var index = -1,
+        length = array == null ? 0 : array.length,
+        result = Array(length);
+
+    while (++index < length) {
+      result[index] = iteratee(array[index], index, array);
+    }
+    return result;
+  }
+
+  /**
+   * Appends the elements of `values` to `array`.
+   *
+   * @private
+   * @param {Array} array The array to modify.
+   * @param {Array} values The values to append.
+   * @returns {Array} Returns `array`.
+   */
+  function arrayPush(array, values) {
+    var index = -1,
+        length = values.length,
+        offset = array.length;
+
+    while (++index < length) {
+      array[offset + index] = values[index];
+    }
+    return array;
+  }
+
+  /**
+   * A specialized version of `_.reduce` for arrays without support for
+   * iteratee shorthands.
+   *
+   * @private
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @param {*} [accumulator] The initial value.
+   * @param {boolean} [initAccum] Specify using the first element of `array` as
+   *  the initial value.
+   * @returns {*} Returns the accumulated value.
+   */
+  function arrayReduce(array, iteratee, accumulator, initAccum) {
+    var index = -1,
+        length = array == null ? 0 : array.length;
+
+    if (initAccum && length) {
+      accumulator = array[++index];
+    }
+    while (++index < length) {
+      accumulator = iteratee(accumulator, array[index], index, array);
+    }
+    return accumulator;
+  }
+
+  /**
+   * A specialized version of `_.reduceRight` for arrays without support for
+   * iteratee shorthands.
+   *
+   * @private
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @param {*} [accumulator] The initial value.
+   * @param {boolean} [initAccum] Specify using the last element of `array` as
+   *  the initial value.
+   * @returns {*} Returns the accumulated value.
+   */
+  function arrayReduceRight(array, iteratee, accumulator, initAccum) {
+    var length = array == null ? 0 : array.length;
+    if (initAccum && length) {
+      accumulator = array[--length];
+    }
+    while (length--) {
+      accumulator = iteratee(accumulator, array[length], length, array);
+    }
+    return accumulator;
+  }
+
+  /**
+   * A specialized version of `_.some` for arrays without support for iteratee
+   * shorthands.
+   *
+   * @private
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} predicate The function invoked per iteration.
+   * @returns {boolean} Returns `true` if any element passes the predicate check,
+   *  else `false`.
+   */
+  function arraySome(array, predicate) {
+    var index = -1,
+        length = array == null ? 0 : array.length;
+
+    while (++index < length) {
+      if (predicate(array[index], index, array)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Gets the size of an ASCII `string`.
+   *
+   * @private
+   * @param {string} string The string inspect.
+   * @returns {number} Returns the string size.
+   */
+  var asciiSize = baseProperty('length');
+
+  /**
+   * Converts an ASCII `string` to an array.
+   *
+   * @private
+   * @param {string} string The string to convert.
+   * @returns {Array} Returns the converted array.
+   */
+  function asciiToArray(string) {
+    return string.split('');
+  }
+
+  /**
+   * Splits an ASCII `string` into an array of its words.
+   *
+   * @private
+   * @param {string} The string to inspect.
+   * @returns {Array} Returns the words of `string`.
+   */
+  function asciiWords(string) {
+    return string.match(reAsciiWord) || [];
+  }
+
+  /**
+   * The base implementation of methods like `_.findKey` and `_.findLastKey`,
+   * without support for iteratee shorthands, which iterates over `collection`
+   * using `eachFunc`.
+   *
+   * @private
+   * @param {Array|Object} collection The collection to inspect.
+   * @param {Function} predicate The function invoked per iteration.
+   * @param {Function} eachFunc The function to iterate over `collection`.
+   * @returns {*} Returns the found element or its key, else `undefined`.
+   */
+  function baseFindKey(collection, predicate, eachFunc) {
+    var result;
+    eachFunc(collection, function(value, key, collection) {
+      if (predicate(value, key, collection)) {
+        result = key;
+        return false;
+      }
+    });
+    return result;
+  }
+
+  /**
+   * The base implementation of `_.findIndex` and `_.findLastIndex` without
+   * support for iteratee shorthands.
+   *
+   * @private
+   * @param {Array} array The array to inspect.
+   * @param {Function} predicate The function invoked per iteration.
+   * @param {number} fromIndex The index to search from.
+   * @param {boolean} [fromRight] Specify iterating from right to left.
+   * @returns {number} Returns the index of the matched value, else `-1`.
+   */
+  function baseFindIndex(array, predicate, fromIndex, fromRight) {
+    var length = array.length,
+        index = fromIndex + (fromRight ? 1 : -1);
+
+    while ((fromRight ? index-- : ++index < length)) {
+      if (predicate(array[index], index, array)) {
+        return index;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
+   *
+   * @private
+   * @param {Array} array The array to inspect.
+   * @param {*} value The value to search for.
+   * @param {number} fromIndex The index to search from.
+   * @returns {number} Returns the index of the matched value, else `-1`.
+   */
+  function baseIndexOf(array, value, fromIndex) {
+    return value === value
+      ? strictIndexOf(array, value, fromIndex)
+      : baseFindIndex(array, baseIsNaN, fromIndex);
+  }
+
+  /**
+   * This function is like `baseIndexOf` except that it accepts a comparator.
+   *
+   * @private
+   * @param {Array} array The array to inspect.
+   * @param {*} value The value to search for.
+   * @param {number} fromIndex The index to search from.
+   * @param {Function} comparator The comparator invoked per element.
+   * @returns {number} Returns the index of the matched value, else `-1`.
+   */
+  function baseIndexOfWith(array, value, fromIndex, comparator) {
+    var index = fromIndex - 1,
+        length = array.length;
+
+    while (++index < length) {
+      if (comparator(array[index], value)) {
+        return index;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * The base implementation of `_.isNaN` without support for number objects.
+   *
+   * @private
+   * @param {*} value The value to check.
+   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
+   */
+  function baseIsNaN(value) {
+    return value !== value;
+  }
+
+  /**
+   * The base implementation of `_.mean` and `_.meanBy` without support for
+   * iteratee shorthands.
+   *
+   * @private
+   * @param {Array} array The array to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @returns {number} Returns the mean.
+   */
+  function baseMean(array, iteratee) {
+    var length = array == null ? 0 : array.length;
+    return length ? (baseSum(array, iteratee) / length) : NAN;
+  }
+
+  /**
+   * The base implementation of `_.property` without support for deep paths.
+   *
+   * @private
+   * @param {string} key The key of the property to get.
+   * @returns {Function} Returns the new accessor function.
+   */
+  function baseProperty(key) {
+    return function(object) {
+      return object == null ? undefined : object[key];
+    };
+  }
+
+  /**
+   * The base implementation of `_.propertyOf` without support for deep paths.
+   *
+   * @private
+   * @param {Object} object The object to query.
+   * @returns {Function} Returns the new accessor function.
+   */
+  function basePropertyOf(object) {
+    return function(key) {
+      return object == null ? undefined : object[key];
+    };
+  }
+
+  /**
+   * The base implementation of `_.reduce` and `_.reduceRight`, without support
+   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
+   *
+   * @private
+   * @param {Array|Object} collection The collection to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @param {*} accumulator The initial value.
+   * @param {boolean} initAccum Specify using the first or last element of
+   *  `collection` as the initial value.
+   * @param {Function} eachFunc The function to iterate over `collection`.
+   * @returns {*} Returns the accumulated value.
+   */
+  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
+    eachFunc(collection, function(value, index, collection) {
+      accumulator = initAccum
+        ? (initAccum = false, value)
+        : iteratee(accumulator, value, index, collection);
+    });
+    return accumulator;
+  }
+
+  /**
+   * The base implementation of `_.sortBy` which uses `comparer` to define the
+   * sort order of `array` and replaces criteria objects with their corresponding
+   * values.
+   *
+   * @private
+   * @param {Array} array The array to sort.
+   * @param {Function} comparer The function to define sort order.
+   * @returns {Array} Returns `array`.
+   */
+  function baseSortBy(array, comparer) {
+    var length = array.length;
+
+    array.sort(comparer);
+    while (length--) {
+      array[length] = array[length].value;
+    }
+    return array;
+  }
+
+  /**
+   * The base implementation of `_.sum` and `_.sumBy` without support for
+   * iteratee shorthands.
+   *
+   * @private
+   * @param {Array} array The array to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @returns {number} Returns the sum.
+   */
+  function baseSum(array, iteratee) {
+    var result,
+        index = -1,
+        length = array.length;
+
+    while (++index < length) {
+      var current = iteratee(array[index]);
+      if (current !== undefined) {
+        result = result === undefined ? current : (result + current);
+      }
+    }
+    return result;
+  }
+
+  /**
+   * The base implementation of `_.times` without support for iteratee shorthands
+   * or max array length checks.
+   *
+   * @private
+   * @param {number} n The number of times to invoke `iteratee`.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @returns {Array} Returns the array of results.
+   */
+  function baseTimes(n, iteratee) {
+    var index = -1,
+        result = Array(n);
+
+    while (++index < n) {
+      result[index] = iteratee(index);
+    }
+    return result;
+  }
+
+  /**
+   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
+   * of key-value pairs for `object` corresponding to the property names of `props`.
+   *
+   * @private
+   * @param {Object} object The object to query.
+   * @param {Array} props The property names to get values for.
+   * @returns {Object} Returns the key-value pairs.
+   */
+  function baseToPairs(object, props) {
+    return arrayMap(props, function(key) {
+      return [key, object[key]];
+    });
+  }
+
+  /**
+   * The base implementation of `_.unary` without support for storing metadata.
+   *
+   * @private
+   * @param {Function} func The function to cap arguments for.
+   * @returns {Function} Returns the new capped function.
+   */
+  function baseUnary(func) {
+    return function(value) {
+      return func(value);
+    };
+  }
+
+  /**
+   * The base implementation of `_.values` and `_.valuesIn` which creates an
+   * array of `object` property values corresponding to the property names
+   * of `props`.
+   *
+   * @private
+   * @param {Object} object The object to query.
+   * @param {Array} props The property names to get values for.
+   * @returns {Object} Returns the array of property values.
+   */
+  function baseValues(object, props) {
+    return arrayMap(props, function(key) {
+      return object[key];
+    });
+  }
+
+  /**
+   * Checks if a `cache` value for `key` exists.
+   *
+   * @private
+   * @param {Object} cache The cache to query.
+   * @param {string} key The key of the entry to check.
+   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+   */
+  function cacheHas(cache, key) {
+    return cache.has(key);
+  }
+
+  /**
+   * Used by `_.trim` and `_.trimStart` to get the index of the first 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 first unmatched string symbol.
+   */
+  function charsStartIndex(strSymbols, chrSymbols) {
+    var index = -1,
+        length = strSymbols.length;
+
+    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -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 : 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 < length) {
+      var value = array[index];
+      if (value === placeholder || value === PLACEHOLDER) {
+        array[index] = PLACEHOLDER;
+        result[resIndex++] = index;
+      }
+    }
+    return result;
+  }
+
+  /**
+   * Converts `set` to an array of its values.
+   *
+   * @private
+   * @param {Object} set The set to convert.
+   * @returns {Array} Returns the values.
+   */
+  function setToArray(set) {
+    var index = -1,
+        result = Array(set.size);
+
+    set.forEach(function(value) {
+      result[++index] = value;
+    });
+    return result;
+  }
+
+  /**
+   * Converts `set` to its value-value pairs.
+   *
+   * @private
+   * @param {Object} set The set to convert.
+   * @returns {Array} Returns the value-value pairs.
+   */
+  function setToPairs(set) {
+    var index = -1,
+        result = Array(set.size);
+
+    set.forEach(function(value) {
+      result[++index] = [value, value];
+    });
+    return result;
+  }
+
+  /**
+   * A specialized version of `_.indexOf` which performs strict equality
+   * comparisons of values, i.e. `===`.
+   *
+   * @private
+   * @param {Array} array The array to inspect.
+   * @param {*} value The value to search for.
+   * @param {number} fromIndex The index to search from.
+   * @returns {number} Returns the index of the matched value, else `-1`.
+   */
+  function strictIndexOf(array, value, fromIndex) {
+    var index = fromIndex - 1,
+        length = array.length;
+
+    while (++index < length) {
+      if (array[index] === value) {
+        return index;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * A specialized version of `_.lastIndexOf` which performs strict equality
+   * comparisons of values, i.e. `===`.
+   *
+   * @private
+   * @param {Array} array The array to inspect.
+   * @param {*} value The value to search for.
+   * @param {number} fromIndex The index to search from.
+   * @returns {number} Returns the index of the matched value, else `-1`.
+   */
+  function strictLastIndexOf(array, value, fromIndex) {
+    var index = fromIndex + 1;
+    while (index--) {
+      if (array[index] === value) {
+        return index;
+      }
+    }
+    return index;
+  }
+
+  /**
+   * Gets the number of symbols in `string`.
+   *
+   * @private
+   * @param {string} string The string to inspect.
+   * @returns {number} Returns the string size.
+   */
+  function stringSize(string) {
+    return hasUnicode(string)
+      ? unicodeSize(string)
+      : asciiSize(string);
+  }
+
+  /**
+   * Converts `string` to an array.
+   *
+   * @private
+   * @param {string} string The string to convert.
+   * @returns {Array} Returns the converted array.
+   */
+  function stringToArray(string) {
+    return hasUnicode(string)
+      ? unicodeToArray(string)
+      : asciiToArray(string);
+  }
+
+  /**
+   * Used by `_.unescape` to convert HTML entities to characters.
+   *
+   * @private
+   * @param {string} chr The matched character to unescape.
+   * @returns {string} Returns the unescaped character.
+   */
+  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);
+
+  /**
+   * Gets the size of a Unicode `string`.
+   *
+   * @private
+   * @param {string} string The string inspect.
+   * @returns {number} Returns the string size.
+   */
+  function unicodeSize(string) {
+    var result = reUnicode.lastIndex = 0;
+    while (reUnicode.test(string)) {
+      ++result;
+    }
+    return result;
+  }
+
+  /**
+   * Converts a Unicode `string` to an array.
+   *
+   * @private
+   * @param {string} string The string to convert.
+   * @returns {Array} Returns the converted array.
+   */
+  function unicodeToArray(string) {
+    return string.match(reUnicode) || [];
+  }
+
+  /**
+   * Splits a Unicode `string` into an array of its words.
+   *
+   * @private
+   * @param {string} The string to inspect.
+   * @returns {Array} Returns the words of `string`.
+   */
+  function unicodeWords(string) {
+    return string.match(reUnicodeWord) || [];
+  }
+
+  /*--------------------------------------------------------------------------*/
+
+  /**
+   * Create a new pristine `lodash` function using the `context` object.
+   *
+   * @static
+   * @memberOf _
+   * @since 1.1.0
+   * @category Util
+   * @param {Object} [context=root] The context object.
+   * @returns {Function} Returns a new `lodash` function.
+   * @example
+   *
+   * _.mixin({ 'foo': _.constant('foo') });
+   *
+   * var lodash = _.runInContext();
+   * lodash.mixin({ 'bar': lodash.constant('bar') });
+   *
+   * _.isFunction(_.foo);
+   * // => 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,
+        Symbol = context.Symbol,
+        Uint8Array = context.Uint8Array,
+        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
+        getPrototype = overArg(Object.getPrototypeOf, Object),
+        objectCreate = Object.create,
+        propertyIsEnumerable = objectProto.propertyIsEnumerable,
+        splice = arrayProto.splice,
+        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
+        symIterator = Symbol ? Symbol.iterator : undefined,
+        symToStringTag = Symbol ? Symbol.toStringTag : undefined;
+
+    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,
+        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,
+        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
+        symbolToString = symbolProto ? symbolProto.toString : undefined;
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * 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;
+        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;
+    }
+
+    /**
+     * 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 < takeCount) {
+        index += dir;
+
+        var iterIndex = -1,
+            value = array[index];
+
+        while (++iterIndex < iterLength) {
+          var data = iteratees[iterIndex],
+              iteratee = data.iteratee,
+              type = data.type,
+              computed = iteratee(value);
+
+          if (type == LAZY_MAP_FLAG) {
+            value = computed;
+          } else if (!computed) {
+            if (type == LAZY_FILTER_FLAG) {
+              continue outer;
+            } else {
+              break outer;
+            }
+          }
+        }
+        result[resIndex++] = value;
+      }
+      return result;
+    }
+
+    // Ensure `LazyWrapper` is an instance of `baseLodash`.
+    LazyWrapper.prototype = baseCreate(baseLodash.prototype);
+    LazyWrapper.prototype.constructor = LazyWrapper;
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates a hash object.
+     *
+     * @private
+     * @constructor
+     * @param {Array} [entries] The key-value pairs to cache.
+     */
+    function Hash(entries) {
+      var index = -1,
+          length = entries == null ? 0 : entries.length;
+
+      this.clear();
+      while (++index < length) {
+        var entry = entries[index];
+        this.set(entry[0], entry[1]);
+      }
+    }
+
+    /**
+     * Removes all key-value entries from the hash.
+     *
+     * @private
+     * @name clear
+     * @memberOf Hash
+     */
+    function hashClear() {
+      this.__data__ = nativeCreate ? nativeCreate(null) : {};
+      this.size = 0;
+    }
+
+    /**
+     * Removes `key` and its value from the hash.
+     *
+     * @private
+     * @name delete
+     * @memberOf Hash
+     * @param {Object} hash The hash to modify.
+     * @param {string} key The key of the value to remove.
+     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+     */
+    function hashDelete(key) {
+      var result = this.has(key) && delete this.__data__[key];
+      this.size -= result ? 1 : 0;
+      return result;
+    }
+
+    /**
+     * Gets the hash value for `key`.
+     *
+     * @private
+     * @name get
+     * @memberOf Hash
+     * @param {string} key The key of the value to get.
+     * @returns {*} Returns the entry value.
+     */
+    function hashGet(key) {
+      var data = this.__data__;
+      if (nativeCreate) {
+        var result = data[key];
+        return result === HASH_UNDEFINED ? undefined : result;
+      }
+      return hasOwnProperty.call(data, key) ? data[key] : undefined;
+    }
+
+    /**
+     * Checks if a hash value for `key` exists.
+     *
+     * @private
+     * @name has
+     * @memberOf Hash
+     * @param {string} key The key of the entry to check.
+     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+     */
+    function hashHas(key) {
+      var data = this.__data__;
+      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
+    }
+
+    /**
+     * Sets the hash `key` to `value`.
+     *
+     * @private
+     * @name set
+     * @memberOf Hash
+     * @param {string} key The key of the value to set.
+     * @param {*} value The value to set.
+     * @returns {Object} Returns the hash instance.
+     */
+    function hashSet(key, value) {
+      var data = this.__data__;
+      this.size += this.has(key) ? 0 : 1;
+      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+      return this;
+    }
+
+    // Add methods to `Hash`.
+    Hash.prototype.clear = hashClear;
+    Hash.prototype['delete'] = hashDelete;
+    Hash.prototype.get = hashGet;
+    Hash.prototype.has = hashHas;
+    Hash.prototype.set = hashSet;
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates an list cache object.
+     *
+     * @private
+     * @constructor
+     * @param {Array} [entries] The key-value pairs to cache.
+     */
+    function ListCache(entries) {
+      var index = -1,
+          length = entries == null ? 0 : entries.length;
+
+      this.clear();
+      while (++index < length) {
+        var entry = entries[index];
+        this.set(entry[0], entry[1]);
+      }
+    }
+
+    /**
+     * Removes all key-value entries from the list cache.
+     *
+     * @private
+     * @name clear
+     * @memberOf ListCache
+     */
+    function listCacheClear() {
+      this.__data__ = [];
+      this.size = 0;
+    }
+
+    /**
+     * Removes `key` and its value from the list cache.
+     *
+     * @private
+     * @name delete
+     * @memberOf ListCache
+     * @param {string} key The key of the value to remove.
+     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+     */
+    function listCacheDelete(key) {
+      var data = this.__data__,
+          index = assocIndexOf(data, key);
+
+      if (index < 0) {
+        return false;
+      }
+      var lastIndex = data.length - 1;
+      if (index == lastIndex) {
+        data.pop();
+      } else {
+        splice.call(data, index, 1);
+      }
+      --this.size;
+      return true;
+    }
+
+    /**
+     * Gets the list cache value for `key`.
+     *
+     * @private
+     * @name get
+     * @memberOf ListCache
+     * @param {string} key The key of the value to get.
+     * @returns {*} Returns the entry value.
+     */
+    function listCacheGet(key) {
+      var data = this.__data__,
+          index = assocIndexOf(data, key);
+
+      return index < 0 ? undefined : data[index][1];
+    }
+
+    /**
+     * Checks if a list cache value for `key` exists.
+     *
+     * @private
+     * @name has
+     * @memberOf ListCache
+     * @param {string} key The key of the entry to check.
+     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+     */
+    function listCacheHas(key) {
+      return assocIndexOf(this.__data__, key) > -1;
+    }
+
+    /**
+     * 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 < length) {
+        var entry = entries[index];
+        this.set(entry[0], entry[1]);
+      }
+    }
+
+    /**
+     * Removes all key-value entries from the map.
+     *
+     * @private
+     * @name clear
+     * @memberOf MapCache
+     */
+    function mapCacheClear() {
+      this.size = 0;
+      this.__data__ = {
+        'hash': new Hash,
+        'map': new (Map || ListCache),
+        'string': new Hash
+      };
+    }
+
+    /**
+     * Removes `key` and its value from the map.
+     *
+     * @private
+     * @name delete
+     * @memberOf MapCache
+     * @param {string} key The key of the value to remove.
+     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+     */
+    function mapCacheDelete(key) {
+      var result = getMapData(this, key)['delete'](key);
+      this.size -= result ? 1 : 0;
+      return result;
+    }
+
+    /**
+     * Gets the map value for `key`.
+     *
+     * @private
+     * @name get
+     * @memberOf MapCache
+     * @param {string} key The key of the value to get.
+     * @returns {*} Returns the entry value.
+     */
+    function mapCacheGet(key) {
+      return getMapData(this, key).get(key);
+    }
+
+    /**
+     * Checks if a map value for `key` exists.
+     *
+     * @private
+     * @name has
+     * @memberOf MapCache
+     * @param {string} key The key of the entry to check.
+     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+     */
+    function mapCacheHas(key) {
+      return getMapData(this, key).has(key);
+    }
+
+    /**
+     * Sets the map `key` to `value`.
+     *
+     * @private
+     * @name set
+     * @memberOf MapCache
+     * @param {string} key The key of the value to set.
+     * @param {*} value The value to set.
+     * @returns {Object} Returns the map cache instance.
+     */
+    function mapCacheSet(key, value) {
+      var data = getMapData(this, key),
+          size = data.size;
+
+      data.set(key, value);
+      this.size += data.size == size ? 0 : 1;
+      return this;
+    }
+
+    // Add methods to `MapCache`.
+    MapCache.prototype.clear = mapCacheClear;
+    MapCache.prototype['delete'] = mapCacheDelete;
+    MapCache.prototype.get = mapCacheGet;
+    MapCache.prototype.has = mapCacheHas;
+    MapCache.prototype.set = mapCacheSet;
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     *
+     * Creates an array cache object to store unique values.
+     *
+     * @private
+     * @constructor
+     * @param {Array} [values] The values to cache.
+     */
+    function SetCache(values) {
+      var index = -1,
+          length = values == null ? 0 : values.length;
+
+      this.__data__ = new MapCache;
+      while (++index < length) {
+        this.add(values[index]);
+      }
+    }
+
+    /**
+     * Adds `value` to the array cache.
+     *
+     * @private
+     * @name add
+     * @memberOf SetCache
+     * @alias push
+     * @param {*} value The value to cache.
+     * @returns {Object} Returns the cache instance.
+     */
+    function setCacheAdd(value) {
+      this.__data__.set(value, HASH_UNDEFINED);
+      return this;
+    }
+
+    /**
+     * Checks if `value` is in the array cache.
+     *
+     * @private
+     * @name has
+     * @memberOf SetCache
+     * @param {*} value The value to search for.
+     * @returns {number} Returns `true` if `value` is found, else `false`.
+     */
+    function setCacheHas(value) {
+      return this.__data__.has(value);
+    }
+
+    // Add methods to `SetCache`.
+    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
+    SetCache.prototype.has = setCacheHas;
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates a stack cache object to store key-value pairs.
+     *
+     * @private
+     * @constructor
+     * @param {Array} [entries] The key-value pairs to cache.
+     */
+    function Stack(entries) {
+      var data = this.__data__ = new ListCache(entries);
+      this.size = data.size;
+    }
+
+    /**
+     * Removes all key-value entries from the stack.
+     *
+     * @private
+     * @name clear
+     * @memberOf Stack
+     */
+    function stackClear() {
+      this.__data__ = new ListCache;
+      this.size = 0;
+    }
+
+    /**
+     * Removes `key` and its value from the stack.
+     *
+     * @private
+     * @name delete
+     * @memberOf Stack
+     * @param {string} key The key of the value to remove.
+     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+     */
+    function stackDelete(key) {
+      var data = this.__data__,
+          result = data['delete'](key);
+
+      this.size = data.size;
+      return result;
+    }
+
+    /**
+     * Gets the stack value for `key`.
+     *
+     * @private
+     * @name get
+     * @memberOf Stack
+     * @param {string} key The key of the value to get.
+     * @returns {*} Returns the entry value.
+     */
+    function stackGet(key) {
+      return this.__data__.get(key);
+    }
+
+    /**
+     * Checks if a stack value for `key` exists.
+     *
+     * @private
+     * @name has
+     * @memberOf Stack
+     * @param {string} key The key of the entry to check.
+     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+     */
+    function stackHas(key) {
+      return this.__data__.has(key);
+    }
+
+    /**
+     * Sets the stack `key` to `value`.
+     *
+     * @private
+     * @name set
+     * @memberOf Stack
+     * @param {string} key The key of the value to set.
+     * @param {*} value The value to set.
+     * @returns {Object} Returns the stack cache instance.
+     */
+    function stackSet(key, value) {
+      var data = this.__data__;
+      if (data instanceof ListCache) {
+        var pairs = data.__data__;
+        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
+          pairs.push([key, value]);
+          this.size = ++data.size;
+          return this;
+        }
+        data = this.__data__ = new MapCache(pairs);
+      }
+      data.set(key, value);
+      this.size = data.size;
+      return this;
+    }
+
+    // Add methods to `Stack`.
+    Stack.prototype.clear = stackClear;
+    Stack.prototype['delete'] = stackDelete;
+    Stack.prototype.get = stackGet;
+    Stack.prototype.has = stackHas;
+    Stack.prototype.set = stackSet;
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates an array of the enumerable property names of the array-like `value`.
+     *
+     * @private
+     * @param {*} value The value to query.
+     * @param {boolean} inherited Specify returning inherited property names.
+     * @returns {Array} Returns the array of property names.
+     */
+    function arrayLikeKeys(value, inherited) {
+      var isArr = isArray(value),
+          isArg = !isArr && isArguments(value),
+          isBuff = !isArr && !isArg && isBuffer(value),
+          isType = !isArr && !isArg && !isBuff && isTypedArray(value),
+          skipIndexes = isArr || isArg || isBuff || isType,
+          result = skipIndexes ? baseTimes(value.length, String) : [],
+          length = result.length;
+
+      for (var key in value) {
+        if ((inherited || hasOwnProperty.call(value, key)) &&
+            !(skipIndexes && (
+               // Safari 9 has enumerable `arguments.length` in strict mode.
+               key == 'length' ||
+               // Node.js 0.10 has enumerable non-index properties on buffers.
+               (isBuff && (key == 'offset' || key == 'parent')) ||
+               // PhantomJS 2 has enumerable non-index properties on typed arrays.
+               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
+               // Skip index properties.
+               isIndex(key, length)
+            ))) {
+          result.push(key);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * A specialized version of `_.sample` for arrays.
+     *
+     * @private
+     * @param {Array} array The array to sample.
+     * @returns {*} Returns the random element.
+     */
+    function arraySample(array) {
+      var length = array.length;
+      return length ? array[baseRandom(0, length - 1)] : undefined;
+    }
+
+    /**
+     * A specialized version of `_.sampleSize` for arrays.
+     *
+     * @private
+     * @param {Array} array The array to sample.
+     * @param {number} n The number of elements to sample.
+     * @returns {Array} Returns the random elements.
+     */
+    function arraySampleSize(array, n) {
+      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
+    }
+
+    /**
+     * A specialized version of `_.shuffle` for arrays.
+     *
+     * @private
+     * @param {Array} array The array to shuffle.
+     * @returns {Array} Returns the new shuffled array.
+     */
+    function arrayShuffle(array) {
+      return shuffleSelf(copyArray(array));
+    }
+
+    /**
+     * This function is like `assignValue` except that it doesn't assign
+     * `undefined` values.
+     *
+     * @private
+     * @param {Object} object The object to modify.
+     * @param {string} key The key of the property to assign.
+     * @param {*} value The value to assign.
+     */
+    function assignMergeValue(object, key, value) {
+      if ((value !== undefined && !eq(object[key], value)) ||
+          (value === undefined && !(key in object))) {
+        baseAssignValue(object, key, value);
+      }
+    }
+
+    /**
+     * Assigns `value` to `key` of `object` if the existing value is not equivalent
+     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+     * for equality comparisons.
+     *
+     * @private
+     * @param {Object} object The object to modify.
+     * @param {string} key The key of the property to assign.
+     * @param {*} value The value to assign.
+     */
+    function assignValue(object, key, value) {
+      var objValue = object[key];
+      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
+          (value === undefined && !(key in object))) {
+        baseAssignValue(object, key, value);
+      }
+    }
+
+    /**
+     * Gets the index at which the `key` is found in `array` of key-value pairs.
+     *
+     * @private
+     * @param {Array} array The array to inspect.
+     * @param {*} key The key to search for.
+     * @returns {number} Returns the index of the matched value, else `-1`.
+     */
+    function assocIndexOf(array, key) {
+      var length = array.length;
+      while (length--) {
+        if (eq(array[length][0], key)) {
+          return length;
+        }
+      }
+      return -1;
+    }
+
+    /**
+     * Aggregates elements of `collection` on `accumulator` with keys transformed
+     * by `iteratee` and values set by `setter`.
+     *
+     * @private
+     * @param {Array|Object} collection The collection 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 baseAggregator(collection, setter, iteratee, accumulator) {
+      baseEach(collection, function(value, key, collection) {
+        setter(accumulator, value, iteratee(value), collection);
+      });
+      return accumulator;
+    }
+
+    /**
+     * The base implementation of `_.assign` without support for multiple sources
+     * or `customizer` functions.
+     *
+     * @private
+     * @param {Object} object The destination object.
+     * @param {Object} source The source object.
+     * @returns {Object} Returns `object`.
+     */
+    function baseAssign(object, source) {
+      return object && copyObject(source, keys(source), object);
+    }
+
+    /**
+     * The base implementation of `_.assignIn` without support for multiple sources
+     * or `customizer` functions.
+     *
+     * @private
+     * @param {Object} object The destination object.
+     * @param {Object} source The source object.
+     * @returns {Object} Returns `object`.
+     */
+    function baseAssignIn(object, source) {
+      return object && copyObject(source, keysIn(source), object);
+    }
+
+    /**
+     * The base implementation of `assignValue` and `assignMergeValue` without
+     * value checks.
+     *
+     * @private
+     * @param {Object} object The object to modify.
+     * @param {string} key The key of the property to assign.
+     * @param {*} value The value to assign.
+     */
+    function baseAssignValue(object, key, value) {
+      if (key == '__proto__' && defineProperty) {
+        defineProperty(object, key, {
+          'configurable': true,
+          'enumerable': true,
+          'value': value,
+          'writable': true
+        });
+      } else {
+        object[key] = value;
+      }
+    }
+
+    /**
+     * The base implementation of `_.at` without support for individual paths.
+     *
+     * @private
+     * @param {Object} object The object to iterate over.
+     * @param {string[]} paths The property paths to pick.
+     * @returns {Array} Returns the picked elements.
+     */
+    function baseAt(object, paths) {
+      var index = -1,
+          length = paths.length,
+          result = Array(length),
+          skip = object == null;
+
+      while (++index < length) {
+        result[index] = skip ? undefined : get(object, paths[index]);
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.clamp` which doesn't coerce arguments.
+     *
+     * @private
+     * @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.
+     */
+    function baseClamp(number, lower, upper) {
+      if (number === number) {
+        if (upper !== undefined) {
+          number = number <= upper ? number : upper;
+        }
+        if (lower !== undefined) {
+          number = number >= 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) {
+        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, baseClone, 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);
+
+      var keysFunc = isFull
+        ? (isFlat ? getAllKeysIn : getAllKeys)
+        : (isFlat ? keysIn : keys);
+
+      var props = isArr ? undefined : 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 && !(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, 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 (++index < length) {
+        var value = array[index],
+            computed = iteratee == null ? value : iteratee(value);
+
+        value = (comparator || value !== 0) ? value : 0;
+        if (isCommon && computed === computed) {
+          var valuesIndex = valuesLength;
+          while (valuesIndex--) {
+            if (values[valuesIndex] === computed) {
+              continue outer;
+            }
+          }
+          result.push(value);
+        }
+        else if (!includes(values, computed, comparator)) {
+          result.push(value);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.forEach` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array|Object} collection The collection to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @returns {Array|Object} Returns `collection`.
+     */
+    var baseEach = createBaseEach(baseForOwn);
+
+    /**
+     * The base implementation of `_.forEachRight` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array|Object} collection The collection to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @returns {Array|Object} Returns `collection`.
+     */
+    var baseEachRight = createBaseEach(baseForOwnRight, true);
+
+    /**
+     * The base implementation of `_.every` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array|Object} collection The collection to iterate over.
+     * @param {Function} predicate The function invoked per iteration.
+     * @returns {boolean} Returns `true` if all elements pass the predicate check,
+     *  else `false`
+     */
+    function baseEvery(collection, predicate) {
+      var result = true;
+      baseEach(collection, function(value, index, collection) {
+        result = !!predicate(value, index, collection);
+        return result;
+      });
+      return result;
+    }
+
+    /**
+     * The base implementation of methods like `_.max` and `_.min` which accepts a
+     * `comparator` to determine the extremum value.
+     *
+     * @private
+     * @param {Array} array The array to iterate over.
+     * @param {Function} iteratee The iteratee invoked per iteration.
+     * @param {Function} comparator The comparator used to compare values.
+     * @returns {*} Returns the extremum value.
+     */
+    function baseExtremum(array, iteratee, comparator) {
+      var index = -1,
+          length = array.length;
+
+      while (++index < length) {
+        var value = array[index],
+            current = iteratee(value);
+
+        if (current != null && (computed === undefined
+              ? (current === current && !isSymbol(current))
+              : comparator(current, computed)
+            )) {
+          var computed = current,
+              result = value;
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.fill` without an iteratee call guard.
+     *
+     * @private
+     * @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`.
+     */
+    function baseFill(array, value, start, end) {
+      var length = array.length;
+
+      start = toInteger(start);
+      if (start < 0) {
+        start = -start > length ? 0 : (length + start);
+      }
+      end = (end === undefined || end > length) ? length : toInteger(end);
+      if (end < 0) {
+        end += length;
+      }
+      end = start > end ? 0 : toLength(end);
+      while (start < end) {
+        array[start++] = value;
+      }
+      return array;
+    }
+
+    /**
+     * The base implementation of `_.filter` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array|Object} collection The collection to iterate over.
+     * @param {Function} predicate The function invoked per iteration.
+     * @returns {Array} Returns the new filtered array.
+     */
+    function baseFilter(collection, predicate) {
+      var result = [];
+      baseEach(collection, function(value, index, collection) {
+        if (predicate(value, index, collection)) {
+          result.push(value);
+        }
+      });
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.flatten` with support for restricting flattening.
+     *
+     * @private
+     * @param {Array} array The array to flatten.
+     * @param {number} depth The maximum recursion depth.
+     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
+     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
+     * @param {Array} [result=[]] The initial result value.
+     * @returns {Array} Returns the new flattened array.
+     */
+    function baseFlatten(array, depth, predicate, isStrict, result) {
+      var index = -1,
+          length = array.length;
+
+      predicate || (predicate = isFlattenable);
+      result || (result = []);
+
+      while (++index < length) {
+        var value = array[index];
+        if (depth > 0 && 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 && index < length) {
+        object = object[toKey(path[index++])];
+      }
+      return (index && index == length) ? object : undefined;
+    }
+
+    /**
+     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
+     * `keysFunc` and `symbolsFunc` to get the enumerable property names and
+     * symbols of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @param {Function} keysFunc The function to get the keys of `object`.
+     * @param {Function} symbolsFunc The function to get the symbols of `object`.
+     * @returns {Array} Returns the array of property names and symbols.
+     */
+    function baseGetAllKeys(object, keysFunc, symbolsFunc) {
+      var result = keysFunc(object);
+      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
+    }
+
+    /**
+     * The base implementation of `getTag` without fallbacks for buggy environments.
+     *
+     * @private
+     * @param {*} value The value to query.
+     * @returns {string} Returns the `toStringTag`.
+     */
+    function baseGetTag(value) {
+      if (value == null) {
+        return value === undefined ? undefinedTag : nullTag;
+      }
+      return (symToStringTag && symToStringTag in Object(value))
+        ? getRawTag(value)
+        : objectToString(value);
+    }
+
+    /**
+     * The base implementation of `_.gt` which doesn't coerce arguments.
+     *
+     * @private
+     * @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`.
+     */
+    function baseGt(value, other) {
+      return value > other;
+    }
+
+    /**
+     * 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 < nativeMax(start, end);
+    }
+
+    /**
+     * The base implementation of methods like `_.intersection`, without support
+     * for iteratee shorthands, that accepts an array of arrays to inspect.
+     *
+     * @private
+     * @param {Array} arrays The arrays to inspect.
+     * @param {Function} [iteratee] The iteratee invoked per element.
+     * @param {Function} [comparator] The comparator invoked per element.
+     * @returns {Array} Returns the new array of shared values.
+     */
+    function baseIntersection(arrays, iteratee, comparator) {
+      var includes = comparator ? arrayIncludesWith : arrayIncludes,
+          length = arrays[0].length,
+          othLength = arrays.length,
+          othIndex = othLength,
+          caches = Array(othLength),
+          maxLength = Infinity,
+          result = [];
+
+      while (othIndex--) {
+        var array = arrays[othIndex];
+        if (othIndex && iteratee) {
+          array = arrayMap(array, baseUnary(iteratee));
+        }
+        maxLength = nativeMin(array.length, maxLength);
+        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
+          ? new SetCache(othIndex && array)
+          : undefined;
+      }
+      array = arrays[0];
+
+      var index = -1,
+          seen = caches[0];
+
+      outer:
+      while (++index < length && result.length < maxLength) {
+        var value = array[index],
+            computed = iteratee ? iteratee(value) : value;
+
+        value = (comparator || value !== 0) ? value : 0;
+        if (!(seen
+              ? cacheHas(seen, computed)
+              : includes(result, computed, comparator)
+            )) {
+          othIndex = othLength;
+          while (--othIndex) {
+            var cache = caches[othIndex];
+            if (!(cache
+                  ? cacheHas(cache, computed)
+                  : includes(arrays[othIndex], computed, comparator))
+                ) {
+              continue outer;
+            }
+          }
+          if (seen) {
+            seen.push(computed);
+          }
+          result.push(value);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.invert` and `_.invertBy` which inverts
+     * `object` with values transformed by `iteratee` and set by `setter`.
+     *
+     * @private
+     * @param {Object} object The object to iterate over.
+     * @param {Function} setter The function to set `accumulator` values.
+     * @param {Function} iteratee The iteratee to transform values.
+     * @param {Object} accumulator The initial inverted object.
+     * @returns {Function} Returns `accumulator`.
+     */
+    function baseInverter(object, setter, iteratee, accumulator) {
+      baseForOwn(object, function(value, key, object) {
+        setter(accumulator, iteratee(value), key, object);
+      });
+      return accumulator;
+    }
+
+    /**
+     * The base implementation of `_.invoke` without support for individual
+     * method arguments.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @param {Array|string} path The path of the method to invoke.
+     * @param {Array} args The arguments to invoke the method with.
+     * @returns {*} Returns the result of the invoked method.
+     */
+    function baseInvoke(object, path, args) {
+      path = castPath(path, object);
+      object = parent(object, path);
+      var func = object == null ? object : object[toKey(last(path))];
+      return func == null ? undefined : apply(func, object, args);
+    }
+
+    /**
+     * The base implementation of `_.isArguments`.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
+     */
+    function baseIsArguments(value) {
+      return isObjectLike(value) && baseGetTag(value) == argsTag;
+    }
+
+    /**
+     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
+     */
+    function baseIsArrayBuffer(value) {
+      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
+    }
+
+    /**
+     * The base implementation of `_.isDate` without Node.js optimizations.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
+     */
+    function baseIsDate(value) {
+      return isObjectLike(value) && baseGetTag(value) == dateTag;
+    }
+
+    /**
+     * The base implementation of `_.isEqual` which supports partial comparisons
+     * and tracks traversed objects.
+     *
+     * @private
+     * @param {*} value The value to compare.
+     * @param {*} other The other value to compare.
+     * @param {boolean} bitmask The bitmask flags.
+     *  1 - Unordered comparison
+     *  2 - Partial comparison
+     * @param {Function} [customizer] The function to customize comparisons.
+     * @param {Object} [stack] Tracks traversed `value` and `other` objects.
+     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+     */
+    function baseIsEqual(value, other, bitmask, customizer, stack) {
+      if (value === other) {
+        return true;
+      }
+      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
+        return value !== value && other !== other;
+      }
+      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
+    }
+
+    /**
+     * A specialized version of `baseIsEqual` for arrays and objects which performs
+     * deep comparisons and tracks traversed objects enabling objects with circular
+     * references to be compared.
+     *
+     * @private
+     * @param {Object} object The object to compare.
+     * @param {Object} other The other object to compare.
+     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+     * @param {Function} customizer The function to customize comparisons.
+     * @param {Function} equalFunc The function to determine equivalents of values.
+     * @param {Object} [stack] Tracks traversed `object` and `other` objects.
+     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+     */
+    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
+      var objIsArr = isArray(object),
+          othIsArr = isArray(other),
+          objTag = objIsArr ? arrayTag : getTag(object),
+          othTag = othIsArr ? arrayTag : getTag(other);
+
+      objTag = objTag == argsTag ? objectTag : objTag;
+      othTag = othTag == argsTag ? objectTag : othTag;
+
+      var objIsObj = objTag == objectTag,
+          othIsObj = othTag == objectTag,
+          isSameTag = objTag == othTag;
+
+      if (isSameTag && isBuffer(object)) {
+        if (!isBuffer(other)) {
+          return false;
+        }
+        objIsArr = true;
+        objIsObj = false;
+      }
+      if (isSameTag && !objIsObj) {
+        stack || (stack = new Stack);
+        return (objIsArr || isTypedArray(object))
+          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
+          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
+      }
+      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
+        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
+            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
+
+        if (objIsWrapped || othIsWrapped) {
+          var objUnwrapped = objIsWrapped ? object.value() : object,
+              othUnwrapped = othIsWrapped ? other.value() : other;
+
+          stack || (stack = new Stack);
+          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
+        }
+      }
+      if (!isSameTag) {
+        return false;
+      }
+      stack || (stack = new Stack);
+      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
+    }
+
+    /**
+     * The base implementation of `_.isMap` without Node.js optimizations.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
+     */
+    function baseIsMap(value) {
+      return isObjectLike(value) && getTag(value) == mapTag;
+    }
+
+    /**
+     * The base implementation of `_.isMatch` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Object} object The object to inspect.
+     * @param {Object} source The object of property values to match.
+     * @param {Array} matchData The property names, values, and compare flags to match.
+     * @param {Function} [customizer] The function to customize comparisons.
+     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+     */
+    function baseIsMatch(object, source, matchData, customizer) {
+      var index = matchData.length,
+          length = index,
+          noCustomizer = !customizer;
+
+      if (object == null) {
+        return !length;
+      }
+      object = Object(object);
+      while (index--) {
+        var data = matchData[index];
+        if ((noCustomizer && data[2])
+              ? data[1] !== object[data[0]]
+              : !(data[0] in object)
+            ) {
+          return false;
+        }
+      }
+      while (++index < length) {
+        data = matchData[index];
+        var key = data[0],
+            objValue = object[key],
+            srcValue = data[1];
+
+        if (noCustomizer && data[2]) {
+          if (objValue === undefined && !(key in object)) {
+            return false;
+          }
+        } else {
+          var stack = new Stack;
+          if (customizer) {
+            var result = customizer(objValue, srcValue, key, object, source, stack);
+          }
+          if (!(result === undefined
+                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
+                : result
+              )) {
+            return false;
+          }
+        }
+      }
+      return true;
+    }
+
+    /**
+     * The base implementation of `_.isNative` without bad shim checks.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a native function,
+     *  else `false`.
+     */
+    function baseIsNative(value) {
+      if (!isObject(value) || isMasked(value)) {
+        return false;
+      }
+      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
+      return pattern.test(toSource(value));
+    }
+
+    /**
+     * The base implementation of `_.isRegExp` without Node.js optimizations.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
+     */
+    function baseIsRegExp(value) {
+      return isObjectLike(value) && baseGetTag(value) == regexpTag;
+    }
+
+    /**
+     * The base implementation of `_.isSet` without Node.js optimizations.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
+     */
+    function baseIsSet(value) {
+      return isObjectLike(value) && getTag(value) == setTag;
+    }
+
+    /**
+     * The base implementation of `_.isTypedArray` without Node.js optimizations.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
+     */
+    function baseIsTypedArray(value) {
+      return isObjectLike(value) &&
+        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
+    }
+
+    /**
+     * The base implementation of `_.iteratee`.
+     *
+     * @private
+     * @param {*} [value=_.identity] The value to convert to an iteratee.
+     * @returns {Function} Returns the iteratee.
+     */
+    function baseIteratee(value) {
+      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
+      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
+      if (typeof value == 'function') {
+        return value;
+      }
+      if (value == null) {
+        return identity;
+      }
+      if (typeof value == 'object') {
+        return isArray(value)
+          ? baseMatchesProperty(value[0], value[1])
+          : baseMatches(value);
+      }
+      return property(value);
+    }
+
+    /**
+     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of property names.
+     */
+    function baseKeys(object) {
+      if (!isPrototype(object)) {
+        return nativeKeys(object);
+      }
+      var result = [];
+      for (var key in Object(object)) {
+        if (hasOwnProperty.call(object, key) && key != 'constructor') {
+          result.push(key);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of property names.
+     */
+    function baseKeysIn(object) {
+      if (!isObject(object)) {
+        return nativeKeysIn(object);
+      }
+      var isProto = isPrototype(object),
+          result = [];
+
+      for (var key in object) {
+        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
+          result.push(key);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.lt` which doesn't coerce arguments.
+     *
+     * @private
+     * @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`.
+     */
+    function baseLt(value, other) {
+      return value < other;
+    }
+
+    /**
+     * The base implementation of `_.map` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array|Object} collection The collection to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @returns {Array} Returns the new mapped array.
+     */
+    function baseMap(collection, iteratee) {
+      var index = -1,
+          result = isArrayLike(collection) ? Array(collection.length) : [];
+
+      baseEach(collection, function(value, key, collection) {
+        result[++index] = iteratee(value, key, collection);
+      });
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.matches` which doesn't clone `source`.
+     *
+     * @private
+     * @param {Object} source The object of property values to match.
+     * @returns {Function} Returns the new spec function.
+     */
+    function baseMatches(source) {
+      var matchData = getMatchData(source);
+      if (matchData.length == 1 && matchData[0][2]) {
+        return matchesStrictComparable(matchData[0][0], matchData[0][1]);
+      }
+      return function(object) {
+        return object === source || baseIsMatch(object, source, matchData);
+      };
+    }
+
+    /**
+     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
+     *
+     * @private
+     * @param {string} path The path of the property to get.
+     * @param {*} srcValue The value to match.
+     * @returns {Function} Returns the new spec function.
+     */
+    function baseMatchesProperty(path, srcValue) {
+      if (isKey(path) && isStrictComparable(srcValue)) {
+        return matchesStrictComparable(toKey(path), srcValue);
+      }
+      return function(object) {
+        var objValue = get(object, path);
+        return (objValue === undefined && objValue === srcValue)
+          ? hasIn(object, path)
+          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
+      };
+    }
+
+    /**
+     * The base implementation of `_.merge` without support for multiple sources.
+     *
+     * @private
+     * @param {Object} object The destination object.
+     * @param {Object} source The source object.
+     * @param {number} srcIndex The index of `source`.
+     * @param {Function} [customizer] The function to customize merged values.
+     * @param {Object} [stack] Tracks traversed source values and their merged
+     *  counterparts.
+     */
+    function baseMerge(object, source, srcIndex, customizer, stack) {
+      if (object === source) {
+        return;
+      }
+      baseFor(source, function(srcValue, key) {
+        if (isObject(srcValue)) {
+          stack || (stack = new Stack);
+          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
+        }
+        else {
+          var newValue = customizer
+            ? customizer(object[key], srcValue, (key + ''), object, source, stack)
+            : undefined;
+
+          if (newValue === undefined) {
+            newValue = srcValue;
+          }
+          assignMergeValue(object, key, newValue);
+        }
+      }, keysIn);
+    }
+
+    /**
+     * A specialized version of `baseMerge` for arrays and objects which performs
+     * deep merges and tracks traversed objects enabling objects with circular
+     * references to be merged.
+     *
+     * @private
+     * @param {Object} object The destination object.
+     * @param {Object} source The source object.
+     * @param {string} key The key of the value to merge.
+     * @param {number} srcIndex The index of `source`.
+     * @param {Function} mergeFunc The function to merge values.
+     * @param {Function} [customizer] The function to customize assigned values.
+     * @param {Object} [stack] Tracks traversed source values and their merged
+     *  counterparts.
+     */
+    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
+      var objValue = object[key],
+          srcValue = source[key],
+          stacked = stack.get(srcValue);
+
+      if (stacked) {
+        assignMergeValue(object, key, stacked);
+        return;
+      }
+      var newValue = customizer
+        ? customizer(objValue, srcValue, (key + ''), object, source, stack)
+        : undefined;
+
+      var isCommon = newValue === undefined;
+
+      if (isCommon) {
+        var isArr = isArray(srcValue),
+            isBuff = !isArr && isBuffer(srcValue),
+            isTyped = !isArr && !isBuff && isTypedArray(srcValue);
+
+        newValue = srcValue;
+        if (isArr || isBuff || isTyped) {
+          if (isArray(objValue)) {
+            newValue = objValue;
+          }
+          else if (isArrayLikeObject(objValue)) {
+            newValue = copyArray(objValue);
+          }
+          else if (isBuff) {
+            isCommon = false;
+            newValue = cloneBuffer(srcValue, true);
+          }
+          else if (isTyped) {
+            isCommon = false;
+            newValue = cloneTypedArray(srcValue, true);
+          }
+          else {
+            newValue = [];
+          }
+        }
+        else if (isPlainObject(srcValue) || isArguments(srcValue)) {
+          newValue = objValue;
+          if (isArguments(objValue)) {
+            newValue = toPlainObject(objValue);
+          }
+          else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {
+            newValue = initCloneObject(srcValue);
+          }
+        }
+        else {
+          isCommon = false;
+        }
+      }
+      if (isCommon) {
+        // Recursively merge objects and arrays (susceptible to call stack limits).
+        stack.set(srcValue, newValue);
+        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
+        stack['delete'](srcValue);
+      }
+      assignMergeValue(object, key, newValue);
+    }
+
+    /**
+     * The base implementation of `_.nth` which doesn't coerce arguments.
+     *
+     * @private
+     * @param {Array} array The array to query.
+     * @param {number} n The index of the element to return.
+     * @returns {*} Returns the nth element of `array`.
+     */
+    function baseNth(array, n) {
+      var length = array.length;
+      if (!length) {
+        return;
+      }
+      n += n < 0 ? length : 0;
+      return isIndex(n, length) ? array[n] : undefined;
+    }
+
+    /**
+     * The base implementation of `_.orderBy` without param guards.
+     *
+     * @private
+     * @param {Array|Object} collection The collection to iterate over.
+     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
+     * @param {string[]} orders The sort orders of `iteratees`.
+     * @returns {Array} Returns the new sorted array.
+     */
+    function baseOrderBy(collection, iteratees, orders) {
+      var index = -1;
+      iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));
+
+      var result = baseMap(collection, function(value, key, collection) {
+        var criteria = arrayMap(iteratees, function(iteratee) {
+          return iteratee(value);
+        });
+        return { 'criteria': criteria, 'index': ++index, 'value': value };
+      });
+
+      return baseSortBy(result, function(object, other) {
+        return compareMultiple(object, other, orders);
+      });
+    }
+
+    /**
+     * The base implementation of `_.pick` without support for individual
+     * property identifiers.
+     *
+     * @private
+     * @param {Object} object The source object.
+     * @param {string[]} paths The property paths to pick.
+     * @returns {Object} Returns the new object.
+     */
+    function basePick(object, paths) {
+      return basePickBy(object, paths, function(value, path) {
+        return hasIn(object, path);
+      });
+    }
+
+    /**
+     * The base implementation of  `_.pickBy` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Object} object The source object.
+     * @param {string[]} paths The property paths to pick.
+     * @param {Function} predicate The function invoked per property.
+     * @returns {Object} Returns the new object.
+     */
+    function basePickBy(object, paths, predicate) {
+      var index = -1,
+          length = paths.length,
+          result = {};
+
+      while (++index < length) {
+        var path = paths[index],
+            value = baseGet(object, path);
+
+        if (predicate(value, path)) {
+          baseSet(result, castPath(path, object), value);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * A specialized version of `baseProperty` which supports deep paths.
+     *
+     * @private
+     * @param {Array|string} path The path of the property to get.
+     * @returns {Function} Returns the new accessor function.
+     */
+    function basePropertyDeep(path) {
+      return function(object) {
+        return baseGet(object, path);
+      };
+    }
+
+    /**
+     * The base implementation of `_.pullAllBy` without support for iteratee
+     * shorthands.
+     *
+     * @private
+     * @param {Array} array The array to modify.
+     * @param {Array} values The values to remove.
+     * @param {Function} [iteratee] The iteratee invoked per element.
+     * @param {Function} [comparator] The comparator invoked per element.
+     * @returns {Array} Returns `array`.
+     */
+    function basePullAll(array, values, iteratee, comparator) {
+      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
+          index = -1,
+          length = values.length,
+          seen = array;
+
+      if (array === values) {
+        values = copyArray(values);
+      }
+      if (iteratee) {
+        seen = arrayMap(array, baseUnary(iteratee));
+      }
+      while (++index < length) {
+        var fromIndex = 0,
+            value = values[index],
+            computed = iteratee ? iteratee(value) : value;
+
+        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -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 && ++index < length) {
+        var key = toKey(path[index]),
+            newValue = value;
+
+        if (index != lastIndex) {
+          var objValue = nested[key];
+          newValue = customizer ? customizer(objValue, key, nested) : undefined;
+          if (newValue === undefined) {
+            newValue = isObject(objValue)
+              ? objValue
+              : (isIndex(path[index + 1]) ? [] : {});
+          }
+        }
+        assignValue(nested, key, newValue);
+        nested = nested[key];
+      }
+      return object;
+    }
+
+    /**
+     * The base implementation of `setData` without support for hot loop shorting.
+     *
+     * @private
+     * @param {Function} func The function to associate metadata with.
+     * @param {*} data The metadata.
+     * @returns {Function} Returns `func`.
+     */
+    var baseSetData = !metaMap ? identity : function(func, data) {
+      metaMap.set(func, data);
+      return func;
+    };
+
+    /**
+     * The base implementation of `setToString` without support for hot loop shorting.
+     *
+     * @private
+     * @param {Function} func The function to modify.
+     * @param {Function} string The `toString` result.
+     * @returns {Function} Returns `func`.
+     */
+    var baseSetToString = !defineProperty ? identity : function(func, string) {
+      return defineProperty(func, 'toString', {
+        'configurable': true,
+        'enumerable': false,
+        'value': constant(string),
+        'writable': true
+      });
+    };
+
+    /**
+     * The base implementation of `_.shuffle`.
+     *
+     * @private
+     * @param {Array|Object} collection The collection to shuffle.
+     * @returns {Array} Returns the new shuffled array.
+     */
+    function baseShuffle(collection) {
+      return shuffleSelf(values(collection));
+    }
+
+    /**
+     * The base implementation of `_.slice` without an iteratee call guard.
+     *
+     * @private
+     * @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 baseSlice(array, start, end) {
+      var index = -1,
+          length = array.length;
+
+      if (start < 0) {
+        start = -start > length ? 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 < length) {
+        result[index] = array[index + start];
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.some` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array|Object} collection The collection to iterate over.
+     * @param {Function} predicate The function invoked per iteration.
+     * @returns {boolean} Returns `true` if any element passes the predicate check,
+     *  else `false`.
+     */
+    function baseSome(collection, predicate) {
+      var result;
+
+      baseEach(collection, function(value, index, collection) {
+        result = predicate(value, index, collection);
+        return !result;
+      });
+      return !!result;
+    }
+
+    /**
+     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
+     * performs a binary search of `array` to determine the index at which `value`
+     * should be inserted into `array` in order to maintain its sort order.
+     *
+     * @private
+     * @param {Array} array The sorted array to inspect.
+     * @param {*} value The value to evaluate.
+     * @param {boolean} [retHighest] Specify returning the highest qualified index.
+     * @returns {number} Returns the index at which `value` should be inserted
+     *  into `array`.
+     */
+    function baseSortedIndex(array, value, retHighest) {
+      var low = 0,
+          high = array == null ? low : array.length;
+
+      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
+        while (low < high) {
+          var mid = (low + high) >>> 1,
+              computed = array[mid];
+
+          if (computed !== null && !isSymbol(computed) &&
+              (retHighest ? (computed <= value) : (computed < value))) {
+            low = mid + 1;
+          } else {
+            high = mid;
+          }
+        }
+        return high;
+      }
+      return baseSortedIndexBy(array, value, identity, retHighest);
+    }
+
+    /**
+     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
+     * which invokes `iteratee` for `value` and each element of `array` to compute
+     * their sort ranking. The iteratee is invoked with one argument; (value).
+     *
+     * @private
+     * @param {Array} array The sorted array to inspect.
+     * @param {*} value The value to evaluate.
+     * @param {Function} iteratee The iteratee invoked per element.
+     * @param {boolean} [retHighest] Specify returning the highest qualified index.
+     * @returns {number} Returns the index at which `value` should be inserted
+     *  into `array`.
+     */
+    function baseSortedIndexBy(array, value, iteratee, retHighest) {
+      value = iteratee(value);
+
+      var low = 0,
+          high = array == null ? 0 : array.length,
+          valIsNaN = value !== value,
+          valIsNull = value === null,
+          valIsSymbol = isSymbol(value),
+          valIsUndefined = value === undefined;
+
+      while (low < high) {
+        var mid = nativeFloor((low + high) / 2),
+            computed = iteratee(array[mid]),
+            othIsDefined = computed !== undefined,
+            othIsNull = computed === null,
+            othIsReflexive = computed === computed,
+            othIsSymbol = isSymbol(computed);
+
+        if (valIsNaN) {
+          var setLow = retHighest || othIsReflexive;
+        } else if (valIsUndefined) {
+          setLow = othIsReflexive && (retHighest || othIsDefined);
+        } else if (valIsNull) {
+          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
+        } else if (valIsSymbol) {
+          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
+        } else if (othIsNull || othIsSymbol) {
+          setLow = false;
+        } else {
+          setLow = retHighest ? (computed <= value) : (computed < value);
+        }
+        if (setLow) {
+          low = mid + 1;
+        } else {
+          high = mid;
+        }
+      }
+      return nativeMin(high, MAX_ARRAY_INDEX);
+    }
+
+    /**
+     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
+     * support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array} array The array to inspect.
+     * @param {Function} [iteratee] The iteratee invoked per element.
+     * @returns {Array} Returns the new duplicate free array.
+     */
+    function baseSortedUniq(array, iteratee) {
+      var index = -1,
+          length = array.length,
+          resIndex = 0,
+          result = [];
+
+      while (++index < length) {
+        var value = array[index],
+            computed = iteratee ? iteratee(value) : value;
+
+        if (!index || !eq(computed, seen)) {
+          var seen = computed;
+          result[resIndex++] = value === 0 ? 0 : value;
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.toNumber` which doesn't ensure correct
+     * conversions of binary, hexadecimal, or octal string values.
+     *
+     * @private
+     * @param {*} value The value to process.
+     * @returns {number} Returns the number.
+     */
+    function baseToNumber(value) {
+      if (typeof value == 'number') {
+        return value;
+      }
+      if (isSymbol(value)) {
+        return NAN;
+      }
+      return +value;
+    }
+
+    /**
+     * The base implementation of `_.toString` which doesn't convert nullish
+     * values to empty strings.
+     *
+     * @private
+     * @param {*} value The value to process.
+     * @returns {string} Returns the string.
+     */
+    function baseToString(value) {
+      // Exit early for strings to avoid a performance hit in some environments.
+      if (typeof value == 'string') {
+        return value;
+      }
+      if (isArray(value)) {
+        // Recursively convert values (susceptible to call stack limits).
+        return arrayMap(value, baseToString) + '';
+      }
+      if (isSymbol(value)) {
+        return symbolToString ? symbolToString.call(value) : '';
+      }
+      var result = (value + '');
+      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+    }
+
+    /**
+     * The base implementation of `_.uniqBy` without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array} array The array to inspect.
+     * @param {Function} [iteratee] The iteratee invoked per element.
+     * @param {Function} [comparator] The comparator invoked per element.
+     * @returns {Array} Returns the new duplicate free array.
+     */
+    function baseUniq(array, iteratee, comparator) {
+      var index = -1,
+          includes = arrayIncludes,
+          length = array.length,
+          isCommon = true,
+          result = [],
+          seen = result;
+
+      if (comparator) {
+        isCommon = false;
+        includes = arrayIncludesWith;
+      }
+      else if (length >= 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) {
+        var value = array[index],
+            computed = iteratee ? iteratee(value) : value;
+
+        value = (comparator || value !== 0) ? value : 0;
+        if (isCommon && computed === computed) {
+          var seenIndex = seen.length;
+          while (seenIndex--) {
+            if (seen[seenIndex] === computed) {
+              continue outer;
+            }
+          }
+          if (iteratee) {
+            seen.push(computed);
+          }
+          result.push(value);
+        }
+        else if (!includes(seen, computed, comparator)) {
+          if (seen !== result) {
+            seen.push(computed);
+          }
+          result.push(value);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.unset`.
+     *
+     * @private
+     * @param {Object} object The object to modify.
+     * @param {Array|string} path The property path to unset.
+     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
+     */
+    function baseUnset(object, path) {
+      path = castPath(path, object);
+      object = parent(object, path);
+      return object == null || delete object[toKey(last(path))];
+    }
+
+    /**
+     * The base implementation of `_.update`.
+     *
+     * @private
+     * @param {Object} object The object to modify.
+     * @param {Array|string} path The path of the property to update.
+     * @param {Function} updater The function to produce the updated value.
+     * @param {Function} [customizer] The function to customize path creation.
+     * @returns {Object} Returns `object`.
+     */
+    function baseUpdate(object, path, updater, customizer) {
+      return baseSet(object, path, updater(baseGet(object, path)), customizer);
+    }
+
+    /**
+     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`
+     * without support for iteratee shorthands.
+     *
+     * @private
+     * @param {Array} array The array to query.
+     * @param {Function} predicate The function invoked per iteration.
+     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
+     * @param {boolean} [fromRight] Specify iterating from right to left.
+     * @returns {Array} Returns the slice of `array`.
+     */
+    function baseWhile(array, predicate, isDrop, fromRight) {
+      var length = array.length,
+          index = fromRight ? length : -1;
+
+      while ((fromRight ? index-- : ++index < length) &&
+        predicate(array[index], index, array)) {}
+
+      return isDrop
+        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
+        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
+    }
+
+    /**
+     * The base implementation of `wrapperValue` which returns the result of
+     * performing a sequence of actions on the unwrapped `value`, where each
+     * successive action is supplied the return value of the previous.
+     *
+     * @private
+     * @param {*} value The unwrapped value.
+     * @param {Array} actions Actions to perform to resolve the unwrapped value.
+     * @returns {*} Returns the resolved value.
+     */
+    function baseWrapperValue(value, actions) {
+      var result = value;
+      if (result instanceof LazyWrapper) {
+        result = result.value();
+      }
+      return arrayReduce(actions, function(result, action) {
+        return action.func.apply(action.thisArg, arrayPush([result], action.args));
+      }, result);
+    }
+
+    /**
+     * The base implementation of methods like `_.xor`, without support for
+     * iteratee shorthands, that accepts an array of arrays to inspect.
+     *
+     * @private
+     * @param {Array} arrays The arrays to inspect.
+     * @param {Function} [iteratee] The iteratee invoked per element.
+     * @param {Function} [comparator] The comparator invoked per element.
+     * @returns {Array} Returns the new array of values.
+     */
+    function baseXor(arrays, iteratee, comparator) {
+      var length = arrays.length;
+      if (length < 2) {
+        return length ? baseUniq(arrays[0]) : [];
+      }
+      var index = -1,
+          result = Array(length);
+
+      while (++index < length) {
+        var array = arrays[index],
+            othIndex = -1;
+
+        while (++othIndex < length) {
+          if (othIndex != index) {
+            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
+          }
+        }
+      }
+      return baseUniq(baseFlatten(result, 1), iteratee, comparator);
+    }
+
+    /**
+     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
+     *
+     * @private
+     * @param {Array} props The property identifiers.
+     * @param {Array} values The property values.
+     * @param {Function} assignFunc The function to assign values.
+     * @returns {Object} Returns the new object.
+     */
+    function baseZipObject(props, values, assignFunc) {
+      var index = -1,
+          length = props.length,
+          valsLength = values.length,
+          result = {};
+
+      while (++index < length) {
+        var value = index < valsLength ? values[index] : undefined;
+        assignFunc(result, props[index], value);
+      }
+      return result;
+    }
+
+    /**
+     * Casts `value` to an empty array if it's not an array like object.
+     *
+     * @private
+     * @param {*} value The value to inspect.
+     * @returns {Array|Object} Returns the cast array-like object.
+     */
+    function castArrayLikeObject(value) {
+      return isArrayLikeObject(value) ? value : [];
+    }
+
+    /**
+     * Casts `value` to `identity` if it's not a function.
+     *
+     * @private
+     * @param {*} value The value to inspect.
+     * @returns {Function} Returns cast function.
+     */
+    function castFunction(value) {
+      return typeof value == 'function' ? value : identity;
+    }
+
+    /**
+     * Casts `value` to a path array if it's not one.
+     *
+     * @private
+     * @param {*} value The value to inspect.
+     * @param {Object} [object] The object to query keys on.
+     * @returns {Array} Returns the cast property path array.
+     */
+    function castPath(value, object) {
+      if (isArray(value)) {
+        return value;
+      }
+      return isKey(value, object) ? [value] : stringToPath(toString(value));
+    }
+
+    /**
+     * A `baseRest` alias which can be replaced with `identity` by module
+     * replacement plugins.
+     *
+     * @private
+     * @type {Function}
+     * @param {Function} func The function to apply a rest parameter to.
+     * @returns {Function} Returns the new function.
+     */
+    var castRest = baseRest;
+
+    /**
+     * Casts `array` to a slice if it's needed.
+     *
+     * @private
+     * @param {Array} array The array to inspect.
+     * @param {number} start The start position.
+     * @param {number} [end=array.length] The end position.
+     * @returns {Array} Returns the cast slice.
+     */
+    function castSlice(array, start, end) {
+      var length = array.length;
+      end = end === undefined ? length : end;
+      return (!start && end >= 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 `map`.
+     *
+     * @private
+     * @param {Object} map The map to clone.
+     * @param {Function} cloneFunc The function to clone values.
+     * @param {boolean} [isDeep] Specify a deep clone.
+     * @returns {Object} Returns the cloned map.
+     */
+    function cloneMap(map, isDeep, cloneFunc) {
+      var array = isDeep ? cloneFunc(mapToArray(map), CLONE_DEEP_FLAG) : mapToArray(map);
+      return arrayReduce(array, addMapEntry, new map.constructor);
+    }
+
+    /**
+     * 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 `set`.
+     *
+     * @private
+     * @param {Object} set The set to clone.
+     * @param {Function} cloneFunc The function to clone values.
+     * @param {boolean} [isDeep] Specify a deep clone.
+     * @returns {Object} Returns the cloned set.
+     */
+    function cloneSet(set, isDeep, cloneFunc) {
+      var array = isDeep ? cloneFunc(setToArray(set), CLONE_DEEP_FLAG) : setToArray(set);
+      return arrayReduce(array, addSetEntry, new set.constructor);
+    }
+
+    /**
+     * 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,
+            valIsNull = value === null,
+            valIsReflexive = value === value,
+            valIsSymbol = isSymbol(value);
+
+        var othIsDefined = other !== undefined,
+            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 < other) ||
+            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
+            (othIsNull && valIsDefined && valIsReflexive) ||
+            (!othIsDefined && valIsReflexive) ||
+            !othIsReflexive) {
+          return -1;
+        }
+      }
+      return 0;
+    }
+
+    /**
+     * Used by `_.orderBy` to compare multiple properties of a value to another
+     * and stable sort them.
+     *
+     * 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.
+     *
+     * @private
+     * @param {Object} object The object to compare.
+     * @param {Object} other The other object to compare.
+     * @param {boolean[]|string[]} orders The order to sort by for each property.
+     * @returns {number} Returns the sort order indicator for `object`.
+     */
+    function compareMultiple(object, other, orders) {
+      var index = -1,
+          objCriteria = object.criteria,
+          othCriteria = other.criteria,
+          length = objCriteria.length,
+          ordersLength = orders.length;
+
+      while (++index < length) {
+        var result = compareAscending(objCriteria[index], othCriteria[index]);
+        if (result) {
+          if (index >= 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 (++leftIndex < leftLength) {
+        result[leftIndex] = partials[leftIndex];
+      }
+      while (++argsIndex < holdersLength) {
+        if (isUncurried || argsIndex < argsLength) {
+          result[holders[argsIndex]] = args[argsIndex];
+        }
+      }
+      while (rangeLength--) {
+        result[leftIndex++] = args[argsIndex++];
+      }
+      return result;
+    }
+
+    /**
+     * This function is like `composeArgs` except that the arguments composition
+     * is tailored for `_.partialRight`.
+     *
+     * @private
+     * @param {Array} args The provided arguments.
+     * @param {Array} partials The arguments to append 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 composeArgsRight(args, partials, holders, isCurried) {
+      var argsIndex = -1,
+          argsLength = args.length,
+          holdersIndex = -1,
+          holdersLength = holders.length,
+          rightIndex = -1,
+          rightLength = partials.length,
+          rangeLength = nativeMax(argsLength - holdersLength, 0),
+          result = Array(rangeLength + rightLength),
+          isUncurried = !isCurried;
+
+      while (++argsIndex < rangeLength) {
+        result[argsIndex] = args[argsIndex];
+      }
+      var offset = argsIndex;
+      while (++rightIndex < rightLength) {
+        result[offset + rightIndex] = partials[rightIndex];
+      }
+      while (++holdersIndex < holdersLength) {
+        if (isUncurried || argsIndex < argsLength) {
+          result[offset + holders[holdersIndex]] = args[argsIndex++];
+        }
+      }
+      return result;
+    }
+
+    /**
+     * Copies the values of `source` to `array`.
+     *
+     * @private
+     * @param {Array} source The array to copy values from.
+     * @param {Array} [array=[]] The array to copy values to.
+     * @returns {Array} Returns `array`.
+     */
+    function copyArray(source, array) {
+      var index = -1,
+          length = source.length;
+
+      array || (array = Array(length));
+      while (++index < length) {
+        array[index] = source[index];
+      }
+      return array;
+    }
+
+    /**
+     * Copies properties of `source` to `object`.
+     *
+     * @private
+     * @param {Object} source The object to copy properties from.
+     * @param {Array} props The property identifiers to copy.
+     * @param {Object} [object={}] The object to copy properties to.
+     * @param {Function} [customizer] The function to customize copied values.
+     * @returns {Object} Returns `object`.
+     */
+    function copyObject(source, props, object, customizer) {
+      var isNew = !object;
+      object || (object = {});
+
+      var index = -1,
+          length = props.length;
+
+      while (++index < length) {
+        var key = props[index];
+
+        var newValue = customizer
+          ? customizer(object[key], source[key], key, object, source)
+          : undefined;
+
+        if (newValue === undefined) {
+          newValue = source[key];
+        }
+        if (isNew) {
+          baseAssignValue(object, key, newValue);
+        } else {
+          assignValue(object, key, newValue);
+        }
+      }
+      return object;
+    }
+
+    /**
+     * Copies own symbols of `source` to `object`.
+     *
+     * @private
+     * @param {Object} source The object to copy symbols from.
+     * @param {Object} [object={}] The object to copy symbols to.
+     * @returns {Object} Returns `object`.
+     */
+    function copySymbols(source, object) {
+      return copyObject(source, getSymbols(source), object);
+    }
+
+    /**
+     * Copies own and inherited symbols of `source` to `object`.
+     *
+     * @private
+     * @param {Object} source The object to copy symbols from.
+     * @param {Object} [object={}] The object to copy symbols to.
+     * @returns {Object} Returns `object`.
+     */
+    function copySymbolsIn(source, object) {
+      return copyObject(source, getSymbolsIn(source), object);
+    }
+
+    /**
+     * Creates a function like `_.groupBy`.
+     *
+     * @private
+     * @param {Function} setter The function to set accumulator values.
+     * @param {Function} [initializer] The accumulator object initializer.
+     * @returns {Function} Returns the new aggregator function.
+     */
+    function createAggregator(setter, initializer) {
+      return function(collection, iteratee) {
+        var func = isArray(collection) ? arrayAggregator : baseAggregator,
+            accumulator = initializer ? initializer() : {};
+
+        return func(collection, setter, getIteratee(iteratee, 2), accumulator);
+      };
+    }
+
+    /**
+     * Creates a function like `_.assign`.
+     *
+     * @private
+     * @param {Function} assigner The function to assign values.
+     * @returns {Function} Returns the new assigner function.
+     */
+    function createAssigner(assigner) {
+      return baseRest(function(object, sources) {
+        var index = -1,
+            length = sources.length,
+            customizer = length > 1 ? sources[length - 1] : undefined,
+            guard = length > 2 ? sources[2] : undefined;
+
+        customizer = (assigner.length > 3 && typeof customizer == 'function')
+          ? (length--, customizer)
+          : undefined;
+
+        if (guard && isIterateeCall(sources[0], sources[1], guard)) {
+          customizer = length < 3 ? undefined : customizer;
+          length = 1;
+        }
+        object = Object(object);
+        while (++index < length) {
+          var source = sources[index];
+          if (source) {
+            assigner(object, source, index, customizer);
+          }
+        }
+        return object;
+      });
+    }
+
+    /**
+     * Creates a `baseEach` or `baseEachRight` function.
+     *
+     * @private
+     * @param {Function} eachFunc The function to iterate over a collection.
+     * @param {boolean} [fromRight] Specify iterating from right to left.
+     * @returns {Function} Returns the new base function.
+     */
+    function createBaseEach(eachFunc, fromRight) {
+      return function(collection, iteratee) {
+        if (collection == null) {
+          return collection;
+        }
+        if (!isArrayLike(collection)) {
+          return eachFunc(collection, iteratee);
+        }
+        var length = collection.length,
+            index = fromRight ? length : -1,
+            iterable = Object(collection);
+
+        while ((fromRight ? index-- : ++index < length)) {
+          if (iteratee(iterable[index], index, iterable) === false) {
+            break;
+          }
+        }
+        return collection;
+      };
+    }
+
+    /**
+     * Creates a base function for methods like `_.forIn` and `_.forOwn`.
+     *
+     * @private
+     * @param {boolean} [fromRight] Specify iterating from right to left.
+     * @returns {Function} Returns the new base function.
+     */
+    function createBaseFor(fromRight) {
+      return function(object, iteratee, keysFunc) {
+        var index = -1,
+            iterable = Object(object),
+            props = keysFunc(object),
+            length = props.length;
+
+        while (length--) {
+          var key = props[fromRight ? length : ++index];
+          if (iteratee(iterable[key], key, iterable) === false) {
+            break;
+          }
+        }
+        return object;
+      };
+    }
+
+    /**
+     * Creates a function that wraps `func` to invoke it with the optional `this`
+     * binding of `thisArg`.
+     *
+     * @private
+     * @param {Function} func The function to wrap.
+     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+     * @param {*} [thisArg] The `this` binding of `func`.
+     * @returns {Function} Returns the new wrapped function.
+     */
+    function createBind(func, bitmask, thisArg) {
+      var isBind = bitmask & WRAP_BIND_FLAG,
+          Ctor = createCtor(func);
+
+      function wrapper() {
+        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
+        return fn.apply(isBind ? thisArg : this, arguments);
+      }
+      return wrapper;
+    }
+
+    /**
+     * Creates a function like `_.lowerFirst`.
+     *
+     * @private
+     * @param {string} methodName The name of the `String` case method to use.
+     * @returns {Function} Returns the new case function.
+     */
+    function createCaseFirst(methodName) {
+      return function(string) {
+        string = toString(string);
+
+        var strSymbols = hasUnicode(string)
+          ? stringToArray(string)
+          : undefined;
+
+        var chr = strSymbols
+          ? strSymbols[0]
+          : string.charAt(0);
+
+        var trailing = strSymbols
+          ? castSlice(strSymbols, 1).join('')
+          : string.slice(1);
+
+        return chr[methodName]() + trailing;
+      };
+    }
+
+    /**
+     * Creates a function like `_.camelCase`.
+     *
+     * @private
+     * @param {Function} callback The function to combine each word.
+     * @returns {Function} Returns the new compounder function.
+     */
+    function createCompounder(callback) {
+      return function(string) {
+        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
+      };
+    }
+
+    /**
+     * Creates a function that produces an instance of `Ctor` regardless of
+     * whether it was invoked as part of a `new` expression or by `call` or `apply`.
+     *
+     * @private
+     * @param {Function} Ctor The constructor to wrap.
+     * @returns {Function} Returns the new wrapped function.
+     */
+    function createCtor(Ctor) {
+      return function() {
+        // Use a `switch` statement to work with class constructors. See
+        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
+        // for more details.
+        var args = arguments;
+        switch (args.length) {
+          case 0: return new Ctor;
+          case 1: return new Ctor(args[0]);
+          case 2: return new Ctor(args[0], args[1]);
+          case 3: return new Ctor(args[0], args[1], args[2]);
+          case 4: return new Ctor(args[0], args[1], args[2], args[3]);
+          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
+          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
+          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
+        }
+        var thisBinding = baseCreate(Ctor.prototype),
+            result = Ctor.apply(thisBinding, args);
+
+        // Mimic the constructor's `return` behavior.
+        // See https://es5.github.io/#x13.2.2 for more details.
+        return isObject(result) ? result : thisBinding;
+      };
+    }
+
+    /**
+     * Creates a function that wraps `func` to enable currying.
+     *
+     * @private
+     * @param {Function} func The function to wrap.
+     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+     * @param {number} arity The arity of `func`.
+     * @returns {Function} Returns the new wrapped function.
+     */
+    function createCurry(func, bitmask, arity) {
+      var Ctor = createCtor(func);
+
+      function wrapper() {
+        var length = arguments.length,
+            args = Array(length),
+            index = length,
+            placeholder = getHolder(wrapper);
+
+        while (index--) {
+          args[index] = arguments[index];
+        }
+        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
+          ? []
+          : replaceHolders(args, placeholder);
+
+        length -= holders.length;
+        if (length < arity) {
+          return createRecurry(
+            func, bitmask, createHybrid, wrapper.placeholder, undefined,
+            args, holders, undefined, undefined, arity - length);
+        }
+        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
+        return apply(fn, this, args);
+      }
+      return wrapper;
+    }
+
+    /**
+     * Creates a `_.find` or `_.findLast` function.
+     *
+     * @private
+     * @param {Function} findIndexFunc The function to find the collection index.
+     * @returns {Function} Returns the new find function.
+     */
+    function createFind(findIndexFunc) {
+      return function(collection, predicate, fromIndex) {
+        var iterable = Object(collection);
+        if (!isArrayLike(collection)) {
+          var iteratee = getIteratee(predicate, 3);
+          collection = keys(collection);
+          predicate = function(key) { return iteratee(iterable[key], key, iterable); };
+        }
+        var index = findIndexFunc(collection, predicate, fromIndex);
+        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
+      };
+    }
+
+    /**
+     * 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 (++index < length) {
+          func = funcs[index];
+
+          var funcName = getFuncName(func),
+              data = funcName == 'wrapper' ? getData(func) : undefined;
+
+          if (data && isLaziable(data[0]) &&
+                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
+                !data[4].length && data[9] == 1
+              ) {
+            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
+          } else {
+            wrapper = (func.length == 1 && isLaziable(func))
+              ? wrapper[funcName]()
+              : wrapper.thru(func);
+          }
+        }
+        return function() {
+          var args = arguments,
+              value = args[0];
+
+          if (wrapper && args.length == 1 && isArray(value)) {
+            return wrapper.plant(value).value();
+          }
+          var index = 0,
+              result = length ? funcs[index].apply(this, args) : value;
+
+          while (++index < length) {
+            result = funcs[index].call(this, result);
+          }
+          return result;
+        };
+      });
+    }
+
+    /**
+     * Creates a function that wraps `func` to invoke it with optional `this`
+     * binding of `thisArg`, partial application, and currying.
+     *
+     * @private
+     * @param {Function|string} func The function or method name to wrap.
+     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+     * @param {*} [thisArg] The `this` binding of `func`.
+     * @param {Array} [partials] The arguments to prepend to those provided to
+     *  the new function.
+     * @param {Array} [holders] The `partials` placeholder indexes.
+     * @param {Array} [partialsRight] The arguments to append to those provided
+     *  to the new function.
+     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
+     * @param {Array} [argPos] The argument positions of the new function.
+     * @param {number} [ary] The arity cap of `func`.
+     * @param {number} [arity] The arity of `func`.
+     * @returns {Function} Returns the new wrapped function.
+     */
+    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
+      var isAry = bitmask & WRAP_ARY_FLAG,
+          isBind = bitmask & WRAP_BIND_FLAG,
+          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
+          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
+          isFlip = bitmask & WRAP_FLIP_FLAG,
+          Ctor = isBindKey ? undefined : createCtor(func);
+
+      function wrapper() {
+        var length = arguments.length,
+            args = Array(length),
+            index = length;
+
+        while (index--) {
+          args[index] = arguments[index];
+        }
+        if (isCurried) {
+          var placeholder = getHolder(wrapper),
+              holdersCount = countHolders(args, placeholder);
+        }
+        if (partials) {
+          args = composeArgs(args, partials, holders, isCurried);
+        }
+        if (partialsRight) {
+          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
+        }
+        length -= holdersCount;
+        if (isCurried && length < arity) {
+          var newHolders = replaceHolders(args, placeholder);
+          return createRecurry(
+            func, bitmask, createHybrid, wrapper.placeholder, thisArg,
+            args, newHolders, argPos, ary, arity - length
+          );
+        }
+        var thisBinding = isBind ? thisArg : this,
+            fn = isBindKey ? thisBinding[func] : func;
+
+        length = args.length;
+        if (argPos) {
+          args = reorder(args, argPos);
+        } else if (isFlip && length > 1) {
+          args.reverse();
+        }
+        if (isAry && ary < length) {
+          args.length = ary;
+        }
+        if (this && this !== root && this instanceof wrapper) {
+          fn = Ctor || createCtor(fn);
+        }
+        return fn.apply(thisBinding, args);
+      }
+      return wrapper;
+    }
+
+    /**
+     * Creates a function like `_.invertBy`.
+     *
+     * @private
+     * @param {Function} setter The function to set accumulator values.
+     * @param {Function} toIteratee The function to resolve iteratees.
+     * @returns {Function} Returns the new inverter function.
+     */
+    function createInverter(setter, toIteratee) {
+      return function(object, iteratee) {
+        return baseInverter(object, setter, toIteratee(iteratee), {});
+      };
+    }
+
+    /**
+     * Creates a function that performs a mathematical operation on two values.
+     *
+     * @private
+     * @param {Function} operator The function to perform the operation.
+     * @param {number} [defaultValue] The value used for `undefined` arguments.
+     * @returns {Function} Returns the new mathematical operation function.
+     */
+    function createMathOperation(operator, defaultValue) {
+      return function(value, other) {
+        var result;
+        if (value === undefined && other === undefined) {
+          return defaultValue;
+        }
+        if (value !== undefined) {
+          result = value;
+        }
+        if (other !== undefined) {
+          if (result === undefined) {
+            return other;
+          }
+          if (typeof value == 'string' || typeof other == 'string') {
+            value = baseToString(value);
+            other = baseToString(other);
+          } else {
+            value = baseToNumber(value);
+            other = baseToNumber(other);
+          }
+          result = operator(value, other);
+        }
+        return result;
+      };
+    }
+
+    /**
+     * Creates a function like `_.over`.
+     *
+     * @private
+     * @param {Function} arrayFunc The function to iterate over iteratees.
+     * @returns {Function} Returns the new over function.
+     */
+    function createOver(arrayFunc) {
+      return flatRest(function(iteratees) {
+        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
+        return baseRest(function(args) {
+          var thisArg = this;
+          return arrayFunc(iteratees, function(iteratee) {
+            return apply(iteratee, thisArg, args);
+          });
+        });
+      });
+    }
+
+    /**
+     * Creates the padding for `string` based on `length`. The `chars` string
+     * is truncated if the number of characters exceeds `length`.
+     *
+     * @private
+     * @param {number} length The padding length.
+     * @param {string} [chars=' '] The string used as padding.
+     * @returns {string} Returns the padding for `string`.
+     */
+    function createPadding(length, chars) {
+      chars = chars === undefined ? ' ' : baseToString(chars);
+
+      var charsLength = chars.length;
+      if (charsLength < 2) {
+        return charsLength ? baseRepeat(chars, length) : chars;
+      }
+      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
+      return hasUnicode(chars)
+        ? castSlice(stringToArray(result), 0, length).join('')
+        : result.slice(0, length);
+    }
+
+    /**
+     * Creates a function that wraps `func` to invoke it with the `this` binding
+     * of `thisArg` and `partials` prepended to the arguments it receives.
+     *
+     * @private
+     * @param {Function} func The function to wrap.
+     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+     * @param {*} thisArg The `this` binding of `func`.
+     * @param {Array} partials The arguments to prepend to those provided to
+     *  the new function.
+     * @returns {Function} Returns the new wrapped function.
+     */
+    function createPartial(func, bitmask, thisArg, partials) {
+      var isBind = bitmask & WRAP_BIND_FLAG,
+          Ctor = createCtor(func);
+
+      function wrapper() {
+        var argsIndex = -1,
+            argsLength = arguments.length,
+            leftIndex = -1,
+            leftLength = partials.length,
+            args = Array(leftLength + argsLength),
+            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
+
+        while (++leftIndex < leftLength) {
+          args[leftIndex] = partials[leftIndex];
+        }
+        while (argsLength--) {
+          args[leftIndex++] = arguments[++argsIndex];
+        }
+        return apply(fn, isBind ? thisArg : this, args);
+      }
+      return wrapper;
+    }
+
+    /**
+     * Creates a `_.range` or `_.rangeRight` function.
+     *
+     * @private
+     * @param {boolean} [fromRight] Specify iterating from right to left.
+     * @returns {Function} Returns the new range function.
+     */
+    function createRange(fromRight) {
+      return function(start, end, step) {
+        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
+          end = step = undefined;
+        }
+        // Ensure the sign of `-0` is preserved.
+        start = toFinite(start);
+        if (end === undefined) {
+          end = start;
+          start = 0;
+        } else {
+          end = toFinite(end);
+        }
+        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
+        return baseRange(start, end, step, fromRight);
+      };
+    }
+
+    /**
+     * Creates a function that performs a relational operation on two values.
+     *
+     * @private
+     * @param {Function} operator The function to perform the operation.
+     * @returns {Function} Returns the new relational operation function.
+     */
+    function createRelationalOperation(operator) {
+      return function(value, other) {
+        if (!(typeof value == 'string' && typeof other == 'string')) {
+          value = toNumber(value);
+          other = toNumber(other);
+        }
+        return operator(value, other);
+      };
+    }
+
+    /**
+     * Creates a function that wraps `func` to continue currying.
+     *
+     * @private
+     * @param {Function} func The function to wrap.
+     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+     * @param {Function} wrapFunc The function to create the `func` wrapper.
+     * @param {*} placeholder The placeholder value.
+     * @param {*} [thisArg] The `this` binding of `func`.
+     * @param {Array} [partials] The arguments to prepend to those provided to
+     *  the new function.
+     * @param {Array} [holders] The `partials` placeholder indexes.
+     * @param {Array} [argPos] The argument positions of the new function.
+     * @param {number} [ary] The arity cap of `func`.
+     * @param {number} [arity] The arity of `func`.
+     * @returns {Function} Returns the new wrapped function.
+     */
+    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
+      var isCurry = bitmask & WRAP_CURRY_FLAG,
+          newHolders = isCurry ? holders : undefined,
+          newHoldersRight = isCurry ? undefined : holders,
+          newPartials = isCurry ? partials : undefined,
+          newPartialsRight = isCurry ? undefined : partials;
+
+      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
+      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
+
+      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
+        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
+      }
+      var newData = [
+        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
+        newHoldersRight, argPos, ary, arity
+      ];
+
+      var result = wrapFunc.apply(undefined, newData);
+      if (isLaziable(func)) {
+        setData(result, newData);
+      }
+      result.placeholder = placeholder;
+      return setWrapToString(result, func, bitmask);
+    }
+
+    /**
+     * Creates a function like `_.round`.
+     *
+     * @private
+     * @param {string} methodName The name of the `Math` method to use when rounding.
+     * @returns {Function} Returns the new round function.
+     */
+    function createRound(methodName) {
+      var func = Math[methodName];
+      return function(number, precision) {
+        number = toNumber(number);
+        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
+        if (precision) {
+          // Shift with exponential notation to avoid floating-point issues.
+          // See [MDN](https://mdn.io/round#Examples) for more details.
+          var pair = (toString(number) + 'e').split('e'),
+              value = func(pair[0] + 'e' + (+pair[1] + precision));
+
+          pair = (toString(value) + 'e').split('e');
+          return +(pair[0] + 'e' + (+pair[1] - precision));
+        }
+        return func(number);
+      };
+    }
+
+    /**
+     * Creates a set object of `values`.
+     *
+     * @private
+     * @param {Array} values The values to add to the set.
+     * @returns {Object} Returns the new set.
+     */
+    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
+      return new Set(values);
+    };
+
+    /**
+     * Creates a `_.toPairs` or `_.toPairsIn` function.
+     *
+     * @private
+     * @param {Function} keysFunc The function to get the keys of a given object.
+     * @returns {Function} Returns the new pairs function.
+     */
+    function createToPairs(keysFunc) {
+      return function(object) {
+        var tag = getTag(object);
+        if (tag == mapTag) {
+          return mapToArray(object);
+        }
+        if (tag == setTag) {
+          return setToPairs(object);
+        }
+        return baseToPairs(object, keysFunc(object));
+      };
+    }
+
+    /**
+     * Creates a function that either curries or invokes `func` with optional
+     * `this` binding and partially applied arguments.
+     *
+     * @private
+     * @param {Function|string} func The function or method name to wrap.
+     * @param {number} bitmask The bitmask flags.
+     *    1 - `_.bind`
+     *    2 - `_.bindKey`
+     *    4 - `_.curry` or `_.curryRight` of a bound function
+     *    8 - `_.curry`
+     *   16 - `_.curryRight`
+     *   32 - `_.partial`
+     *   64 - `_.partialRight`
+     *  128 - `_.rearg`
+     *  256 - `_.ary`
+     *  512 - `_.flip`
+     * @param {*} [thisArg] The `this` binding of `func`.
+     * @param {Array} [partials] The arguments to be partially applied.
+     * @param {Array} [holders] The `partials` placeholder indexes.
+     * @param {Array} [argPos] The argument positions of the new function.
+     * @param {number} [ary] The arity cap of `func`.
+     * @param {number} [arity] The arity of `func`.
+     * @returns {Function} Returns the new wrapped function.
+     */
+    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
+      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
+      if (!isBindKey && typeof func != 'function') {
+        throw new TypeError(FUNC_ERROR_TEXT);
+      }
+      var length = partials ? partials.length : 0;
+      if (!length) {
+        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
+        partials = holders = undefined;
+      }
+      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
+      arity = arity === undefined ? arity : toInteger(arity);
+      length -= holders ? holders.length : 0;
+
+      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
+        var partialsRight = partials,
+            holdersRight = holders;
+
+        partials = holders = undefined;
+      }
+      var data = isBindKey ? undefined : getData(func);
+
+      var newData = [
+        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
+        argPos, ary, arity
+      ];
+
+      if (data) {
+        mergeData(newData, data);
+      }
+      func = newData[0];
+      bitmask = newData[1];
+      thisArg = newData[2];
+      partials = newData[3];
+      holders = newData[4];
+      arity = newData[9] = newData[9] === undefined
+        ? (isBindKey ? 0 : func.length)
+        : nativeMax(newData[9] - length, 0);
+
+      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
+        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
+      }
+      if (!bitmask || bitmask == WRAP_BIND_FLAG) {
+        var result = createBind(func, bitmask, thisArg);
+      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
+        result = createCurry(func, bitmask, arity);
+      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
+        result = createPartial(func, bitmask, thisArg, partials);
+      } else {
+        result = createHybrid.apply(undefined, newData);
+      }
+      var setter = data ? baseSetData : setData;
+      return setWrapToString(setter(result, newData), func, bitmask);
+    }
+
+    /**
+     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties
+     * of source objects to the destination object for all destination properties
+     * that resolve to `undefined`.
+     *
+     * @private
+     * @param {*} objValue The destination value.
+     * @param {*} srcValue The source value.
+     * @param {string} key The key of the property to assign.
+     * @param {Object} object The parent object of `objValue`.
+     * @returns {*} Returns the value to assign.
+     */
+    function customDefaultsAssignIn(objValue, srcValue, key, object) {
+      if (objValue === undefined ||
+          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
+        return srcValue;
+      }
+      return objValue;
+    }
+
+    /**
+     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
+     * objects into destination objects that are passed thru.
+     *
+     * @private
+     * @param {*} objValue The destination value.
+     * @param {*} srcValue The source value.
+     * @param {string} key The key of the property to merge.
+     * @param {Object} object The parent object of `objValue`.
+     * @param {Object} source The parent object of `srcValue`.
+     * @param {Object} [stack] Tracks traversed source values and their merged
+     *  counterparts.
+     * @returns {*} Returns the value to assign.
+     */
+    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
+      if (isObject(objValue) && isObject(srcValue)) {
+        // Recursively merge objects and arrays (susceptible to call stack limits).
+        stack.set(srcValue, objValue);
+        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
+        stack['delete'](srcValue);
+      }
+      return objValue;
+    }
+
+    /**
+     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
+     * objects.
+     *
+     * @private
+     * @param {*} value The value to inspect.
+     * @param {string} key The key of the property to inspect.
+     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
+     */
+    function customOmitClone(value) {
+      return isPlainObject(value) ? undefined : value;
+    }
+
+    /**
+     * A specialized version of `baseIsEqualDeep` for arrays with support for
+     * partial deep comparisons.
+     *
+     * @private
+     * @param {Array} array The array to compare.
+     * @param {Array} other The other array to compare.
+     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+     * @param {Function} customizer The function to customize comparisons.
+     * @param {Function} equalFunc The function to determine equivalents of values.
+     * @param {Object} stack Tracks traversed `array` and `other` objects.
+     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
+     */
+    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
+      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
+          arrLength = array.length,
+          othLength = other.length;
+
+      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
+        return false;
+      }
+      // Assume cyclic values are equal.
+      var stacked = stack.get(array);
+      if (stacked && stack.get(other)) {
+        return stacked == other;
+      }
+      var index = -1,
+          result = true,
+          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
+
+      stack.set(array, other);
+      stack.set(other, array);
+
+      // Ignore non-index properties.
+      while (++index < arrLength) {
+        var arrValue = array[index],
+            othValue = other[index];
+
+        if (customizer) {
+          var compared = isPartial
+            ? customizer(othValue, arrValue, index, other, array, stack)
+            : customizer(arrValue, othValue, index, array, other, stack);
+        }
+        if (compared !== undefined) {
+          if (compared) {
+            continue;
+          }
+          result = false;
+          break;
+        }
+        // Recursively compare arrays (susceptible to call stack limits).
+        if (seen) {
+          if (!arraySome(other, function(othValue, othIndex) {
+                if (!cacheHas(seen, othIndex) &&
+                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
+                  return seen.push(othIndex);
+                }
+              })) {
+            result = false;
+            break;
+          }
+        } else if (!(
+              arrValue === othValue ||
+                equalFunc(arrValue, othValue, bitmask, customizer, stack)
+            )) {
+          result = false;
+          break;
+        }
+      }
+      stack['delete'](array);
+      stack['delete'](other);
+      return result;
+    }
+
+    /**
+     * A specialized version of `baseIsEqualDeep` for comparing objects of
+     * the same `toStringTag`.
+     *
+     * **Note:** This function only supports comparing values with tags of
+     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+     *
+     * @private
+     * @param {Object} object The object to compare.
+     * @param {Object} other The other object to compare.
+     * @param {string} tag The `toStringTag` of the objects to compare.
+     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+     * @param {Function} customizer The function to customize comparisons.
+     * @param {Function} equalFunc The function to determine equivalents of values.
+     * @param {Object} stack Tracks traversed `object` and `other` objects.
+     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+     */
+    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
+      switch (tag) {
+        case dataViewTag:
+          if ((object.byteLength != other.byteLength) ||
+              (object.byteOffset != other.byteOffset)) {
+            return false;
+          }
+          object = object.buffer;
+          other = other.buffer;
+
+        case arrayBufferTag:
+          if ((object.byteLength != other.byteLength) ||
+              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
+            return false;
+          }
+          return true;
+
+        case boolTag:
+        case dateTag:
+        case numberTag:
+          // Coerce booleans to `1` or `0` and dates to milliseconds.
+          // Invalid dates are coerced to `NaN`.
+          return eq(+object, +other);
+
+        case errorTag:
+          return object.name == other.name && object.message == other.message;
+
+        case regexpTag:
+        case stringTag:
+          // Coerce regexes to strings and treat strings, primitives and objects,
+          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
+          // for more details.
+          return object == (other + '');
+
+        case mapTag:
+          var convert = mapToArray;
+
+        case setTag:
+          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
+          convert || (convert = setToArray);
+
+          if (object.size != other.size && !isPartial) {
+            return false;
+          }
+          // Assume cyclic values are equal.
+          var stacked = stack.get(object);
+          if (stacked) {
+            return stacked == other;
+          }
+          bitmask |= COMPARE_UNORDERED_FLAG;
+
+          // Recursively compare objects (susceptible to call stack limits).
+          stack.set(object, other);
+          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
+          stack['delete'](object);
+          return result;
+
+        case symbolTag:
+          if (symbolValueOf) {
+            return symbolValueOf.call(object) == symbolValueOf.call(other);
+          }
+      }
+      return false;
+    }
+
+    /**
+     * A specialized version of `baseIsEqualDeep` for objects with support for
+     * partial deep comparisons.
+     *
+     * @private
+     * @param {Object} object The object to compare.
+     * @param {Object} other The other object to compare.
+     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+     * @param {Function} customizer The function to customize comparisons.
+     * @param {Function} equalFunc The function to determine equivalents of values.
+     * @param {Object} stack Tracks traversed `object` and `other` objects.
+     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+     */
+    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
+      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
+          objProps = getAllKeys(object),
+          objLength = objProps.length,
+          othProps = getAllKeys(other),
+          othLength = othProps.length;
+
+      if (objLength != othLength && !isPartial) {
+        return false;
+      }
+      var index = objLength;
+      while (index--) {
+        var key = objProps[index];
+        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
+          return false;
+        }
+      }
+      // Assume cyclic values are equal.
+      var stacked = stack.get(object);
+      if (stacked && stack.get(other)) {
+        return stacked == other;
+      }
+      var result = true;
+      stack.set(object, other);
+      stack.set(other, object);
+
+      var skipCtor = isPartial;
+      while (++index < objLength) {
+        key = objProps[index];
+        var objValue = object[key],
+            othValue = other[key];
+
+        if (customizer) {
+          var compared = isPartial
+            ? customizer(othValue, objValue, key, other, object, stack)
+            : customizer(objValue, othValue, key, object, other, stack);
+        }
+        // Recursively compare objects (susceptible to call stack limits).
+        if (!(compared === undefined
+              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
+              : compared
+            )) {
+          result = false;
+          break;
+        }
+        skipCtor || (skipCtor = key == 'constructor');
+      }
+      if (result && !skipCtor) {
+        var objCtor = object.constructor,
+            othCtor = other.constructor;
+
+        // Non `Object` object instances with different constructors are not equal.
+        if (objCtor != othCtor &&
+            ('constructor' in object && 'constructor' in other) &&
+            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
+              typeof othCtor == 'function' && othCtor instanceof othCtor)) {
+          result = false;
+        }
+      }
+      stack['delete'](object);
+      stack['delete'](other);
+      return result;
+    }
+
+    /**
+     * A specialized version of `baseRest` which flattens the rest array.
+     *
+     * @private
+     * @param {Function} func The function to apply a rest parameter to.
+     * @returns {Function} Returns the new function.
+     */
+    function flatRest(func) {
+      return setToString(overRest(func, undefined, flatten), func + '');
+    }
+
+    /**
+     * Creates an array of own enumerable property names and symbols of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of property names and symbols.
+     */
+    function getAllKeys(object) {
+      return baseGetAllKeys(object, keys, getSymbols);
+    }
+
+    /**
+     * Creates an array of own and inherited enumerable property names and
+     * symbols of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of property names and symbols.
+     */
+    function getAllKeysIn(object) {
+      return baseGetAllKeys(object, keysIn, getSymbolsIn);
+    }
+
+    /**
+     * Gets metadata for `func`.
+     *
+     * @private
+     * @param {Function} func The function to query.
+     * @returns {*} Returns the metadata for `func`.
+     */
+    var getData = !metaMap ? noop : function(func) {
+      return metaMap.get(func);
+    };
+
+    /**
+     * Gets the name of `func`.
+     *
+     * @private
+     * @param {Function} func The function to query.
+     * @returns {string} Returns the function name.
+     */
+    function getFuncName(func) {
+      var result = (func.name + ''),
+          array = realNames[result],
+          length = hasOwnProperty.call(realNames, result) ? array.length : 0;
+
+      while (length--) {
+        var data = array[length],
+            otherFunc = data.func;
+        if (otherFunc == null || otherFunc == func) {
+          return data.name;
+        }
+      }
+      return result;
+    }
+
+    /**
+     * Gets the argument placeholder value for `func`.
+     *
+     * @private
+     * @param {Function} func The function to inspect.
+     * @returns {*} Returns the placeholder value.
+     */
+    function getHolder(func) {
+      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;
+      return object.placeholder;
+    }
+
+    /**
+     * Gets the appropriate "iteratee" function. If `_.iteratee` is customized,
+     * this function returns the custom method, otherwise it returns `baseIteratee`.
+     * If arguments are provided, the chosen function is invoked with them and
+     * its result is returned.
+     *
+     * @private
+     * @param {*} [value] The value to convert to an iteratee.
+     * @param {number} [arity] The arity of the created iteratee.
+     * @returns {Function} Returns the chosen function or its result.
+     */
+    function getIteratee() {
+      var result = lodash.iteratee || iteratee;
+      result = result === iteratee ? baseIteratee : result;
+      return arguments.length ? result(arguments[0], arguments[1]) : result;
+    }
+
+    /**
+     * Gets the data for `map`.
+     *
+     * @private
+     * @param {Object} map The map to query.
+     * @param {string} key The reference key.
+     * @returns {*} Returns the map data.
+     */
+    function getMapData(map, key) {
+      var data = map.__data__;
+      return isKeyable(key)
+        ? data[typeof key == 'string' ? 'string' : 'hash']
+        : data.map;
+    }
+
+    /**
+     * Gets the property names, values, and compare flags of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the match data of `object`.
+     */
+    function getMatchData(object) {
+      var result = keys(object),
+          length = result.length;
+
+      while (length--) {
+        var key = result[length],
+            value = object[key];
+
+        result[length] = [key, value, isStrictComparable(value)];
+      }
+      return result;
+    }
+
+    /**
+     * Gets the native function at `key` of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @param {string} key The key of the method to get.
+     * @returns {*} Returns the function if it's native, else `undefined`.
+     */
+    function getNative(object, key) {
+      var value = getValue(object, key);
+      return baseIsNative(value) ? value : undefined;
+    }
+
+    /**
+     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
+     *
+     * @private
+     * @param {*} value The value to query.
+     * @returns {string} Returns the raw `toStringTag`.
+     */
+    function getRawTag(value) {
+      var isOwn = hasOwnProperty.call(value, symToStringTag),
+          tag = value[symToStringTag];
+
+      try {
+        value[symToStringTag] = undefined;
+        var unmasked = true;
+      } catch (e) {}
+
+      var result = nativeObjectToString.call(value);
+      if (unmasked) {
+        if (isOwn) {
+          value[symToStringTag] = tag;
+        } else {
+          delete value[symToStringTag];
+        }
+      }
+      return result;
+    }
+
+    /**
+     * Creates an array of the own enumerable symbols of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of symbols.
+     */
+    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
+      if (object == null) {
+        return [];
+      }
+      object = Object(object);
+      return arrayFilter(nativeGetSymbols(object), function(symbol) {
+        return propertyIsEnumerable.call(object, symbol);
+      });
+    };
+
+    /**
+     * Creates an array of the own and inherited enumerable symbols of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of symbols.
+     */
+    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
+      var result = [];
+      while (object) {
+        arrayPush(result, getSymbols(object));
+        object = getPrototype(object);
+      }
+      return result;
+    };
+
+    /**
+     * Gets the `toStringTag` of `value`.
+     *
+     * @private
+     * @param {*} value The value to query.
+     * @returns {string} Returns the `toStringTag`.
+     */
+    var getTag = baseGetTag;
+
+    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
+    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
+        (Map && getTag(new Map) != mapTag) ||
+        (Promise && getTag(Promise.resolve()) != promiseTag) ||
+        (Set && getTag(new Set) != setTag) ||
+        (WeakMap && getTag(new WeakMap) != weakMapTag)) {
+      getTag = function(value) {
+        var result = baseGetTag(value),
+            Ctor = result == objectTag ? value.constructor : undefined,
+            ctorString = Ctor ? toSource(Ctor) : '';
+
+        if (ctorString) {
+          switch (ctorString) {
+            case dataViewCtorString: return dataViewTag;
+            case mapCtorString: return mapTag;
+            case promiseCtorString: return promiseTag;
+            case setCtorString: return setTag;
+            case weakMapCtorString: return weakMapTag;
+          }
+        }
+        return result;
+      };
+    }
+
+    /**
+     * Gets the view, applying any `transforms` to the `start` and `end` positions.
+     *
+     * @private
+     * @param {number} start The start of the view.
+     * @param {number} end The end of the view.
+     * @param {Array} transforms The transformations to apply to the view.
+     * @returns {Object} Returns an object containing the `start` and `end`
+     *  positions of the view.
+     */
+    function getView(start, end, transforms) {
+      var index = -1,
+          length = transforms.length;
+
+      while (++index < length) {
+        var data = transforms[index],
+            size = data.size;
+
+        switch (data.type) {
+          case 'drop':      start += size; break;
+          case 'dropRight': end -= size; break;
+          case 'take':      end = nativeMin(end, start + size); break;
+          case 'takeRight': start = nativeMax(start, end - size); break;
+        }
+      }
+      return { 'start': start, 'end': end };
+    }
+
+    /**
+     * Extracts wrapper details from the `source` body comment.
+     *
+     * @private
+     * @param {string} source The source to inspect.
+     * @returns {Array} Returns the wrapper details.
+     */
+    function getWrapDetails(source) {
+      var match = source.match(reWrapDetails);
+      return match ? match[1].split(reSplitDetails) : [];
+    }
+
+    /**
+     * Checks if `path` exists on `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @param {Array|string} path The path to check.
+     * @param {Function} hasFunc The function to check properties.
+     * @returns {boolean} Returns `true` if `path` exists, else `false`.
+     */
+    function hasPath(object, path, hasFunc) {
+      path = castPath(path, object);
+
+      var index = -1,
+          length = path.length,
+          result = false;
+
+      while (++index < length) {
+        var key = toKey(path[index]);
+        if (!(result = object != null && hasFunc(object, key))) {
+          break;
+        }
+        object = object[key];
+      }
+      if (result || ++index != length) {
+        return result;
+      }
+      length = object == null ? 0 : object.length;
+      return !!length && isLength(length) && isIndex(key, length) &&
+        (isArray(object) || isArguments(object));
+    }
+
+    /**
+     * Initializes an array clone.
+     *
+     * @private
+     * @param {Array} array The array to clone.
+     * @returns {Array} Returns the initialized clone.
+     */
+    function initCloneArray(array) {
+      var length = array.length,
+          result = array.constructor(length);
+
+      // Add properties assigned by `RegExp#exec`.
+      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
+        result.index = array.index;
+        result.input = array.input;
+      }
+      return result;
+    }
+
+    /**
+     * Initializes an object clone.
+     *
+     * @private
+     * @param {Object} object The object to clone.
+     * @returns {Object} Returns the initialized clone.
+     */
+    function initCloneObject(object) {
+      return (typeof object.constructor == 'function' && !isPrototype(object))
+        ? baseCreate(getPrototype(object))
+        : {};
+    }
+
+    /**
+     * Initializes an object clone based on its `toStringTag`.
+     *
+     * **Note:** This function only supports cloning values with tags of
+     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+     *
+     * @private
+     * @param {Object} object The object to clone.
+     * @param {string} tag The `toStringTag` of the object to clone.
+     * @param {Function} cloneFunc The function to clone values.
+     * @param {boolean} [isDeep] Specify a deep clone.
+     * @returns {Object} Returns the initialized clone.
+     */
+    function initCloneByTag(object, tag, cloneFunc, isDeep) {
+      var Ctor = object.constructor;
+      switch (tag) {
+        case arrayBufferTag:
+          return cloneArrayBuffer(object);
+
+        case boolTag:
+        case dateTag:
+          return new Ctor(+object);
+
+        case dataViewTag:
+          return cloneDataView(object, isDeep);
+
+        case float32Tag: case float64Tag:
+        case int8Tag: case int16Tag: case int32Tag:
+        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
+          return cloneTypedArray(object, isDeep);
+
+        case mapTag:
+          return cloneMap(object, isDeep, cloneFunc);
+
+        case numberTag:
+        case stringTag:
+          return new Ctor(object);
+
+        case regexpTag:
+          return cloneRegExp(object);
+
+        case setTag:
+          return cloneSet(object, isDeep, cloneFunc);
+
+        case symbolTag:
+          return cloneSymbol(object);
+      }
+    }
+
+    /**
+     * Inserts wrapper `details` in a comment at the top of the `source` body.
+     *
+     * @private
+     * @param {string} source The source to modify.
+     * @returns {Array} details The details to insert.
+     * @returns {string} Returns the modified source.
+     */
+    function insertWrapDetails(source, details) {
+      var length = details.length;
+      if (!length) {
+        return source;
+      }
+      var lastIndex = length - 1;
+      details[lastIndex] = (length > 1 ? '& ' : '') + 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) {
+      length = length == null ? MAX_SAFE_INTEGER : length;
+      return !!length &&
+        (typeof value == 'number' || reIsUint.test(value)) &&
+        (value > -1 && value % 1 == 0 && value < length);
+    }
+
+    /**
+     * Checks if the given arguments are from an iteratee call.
+     *
+     * @private
+     * @param {*} value The potential iteratee value argument.
+     * @param {*} index The potential iteratee index or key argument.
+     * @param {*} object The potential iteratee object argument.
+     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
+     *  else `false`.
+     */
+    function isIterateeCall(value, index, object) {
+      if (!isObject(object)) {
+        return false;
+      }
+      var type = typeof index;
+      if (type == 'number'
+            ? (isArrayLike(object) && isIndex(index, object.length))
+            : (type == 'string' && index in object)
+          ) {
+        return eq(object[index], value);
+      }
+      return false;
+    }
+
+    /**
+     * Checks if `value` is a property name and not a property path.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @param {Object} [object] The object to query keys on.
+     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
+     */
+    function isKey(value, object) {
+      if (isArray(value)) {
+        return false;
+      }
+      var type = typeof value;
+      if (type == 'number' || type == 'symbol' || type == 'boolean' ||
+          value == null || isSymbol(value)) {
+        return true;
+      }
+      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
+        (object != null && value in Object(object));
+    }
+
+    /**
+     * Checks if `value` is suitable for use as unique object key.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+     */
+    function isKeyable(value) {
+      var type = typeof value;
+      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
+        ? (value !== '__proto__')
+        : (value === null);
+    }
+
+    /**
+     * Checks if `func` has a lazy counterpart.
+     *
+     * @private
+     * @param {Function} func The function to check.
+     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
+     *  else `false`.
+     */
+    function isLaziable(func) {
+      var funcName = getFuncName(func),
+          other = lodash[funcName];
+
+      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
+        return false;
+      }
+      if (func === other) {
+        return true;
+      }
+      var data = getData(other);
+      return !!data && func === data[0];
+    }
+
+    /**
+     * Checks if `func` has its source masked.
+     *
+     * @private
+     * @param {Function} func The function to check.
+     * @returns {boolean} Returns `true` if `func` is masked, else `false`.
+     */
+    function isMasked(func) {
+      return !!maskSrcKey && (maskSrcKey in func);
+    }
+
+    /**
+     * Checks if `func` is capable of being masked.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.
+     */
+    var isMaskable = coreJsData ? isFunction : stubFalse;
+
+    /**
+     * Checks if `value` is likely a prototype object.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
+     */
+    function isPrototype(value) {
+      var Ctor = value && value.constructor,
+          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
+
+      return value === proto;
+    }
+
+    /**
+     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` if suitable for strict
+     *  equality comparisons, else `false`.
+     */
+    function isStrictComparable(value) {
+      return value === value && !isObject(value);
+    }
+
+    /**
+     * A specialized version of `matchesProperty` for source values suitable
+     * for strict equality comparisons, i.e. `===`.
+     *
+     * @private
+     * @param {string} key The key of the property to get.
+     * @param {*} srcValue The value to match.
+     * @returns {Function} Returns the new spec function.
+     */
+    function matchesStrictComparable(key, srcValue) {
+      return function(object) {
+        if (object == null) {
+          return false;
+        }
+        return object[key] === srcValue &&
+          (srcValue !== undefined || (key in Object(object)));
+      };
+    }
+
+    /**
+     * A specialized version of `_.memoize` which clears the memoized function's
+     * cache when it exceeds `MAX_MEMOIZE_SIZE`.
+     *
+     * @private
+     * @param {Function} func The function to have its output memoized.
+     * @returns {Function} Returns the new memoized function.
+     */
+    function memoizeCapped(func) {
+      var result = memoize(func, function(key) {
+        if (cache.size === MAX_MEMOIZE_SIZE) {
+          cache.clear();
+        }
+        return key;
+      });
+
+      var cache = result.cache;
+      return result;
+    }
+
+    /**
+     * Merges the function metadata of `source` into `data`.
+     *
+     * Merging metadata reduces the number of wrappers used to invoke a function.
+     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
+     * may be applied regardless of execution order. Methods like `_.ary` and
+     * `_.rearg` modify function arguments, making the order in which they are
+     * executed important, preventing the merging of metadata. However, we make
+     * an exception for a safe combined case where curried functions have `_.ary`
+     * and or `_.rearg` applied.
+     *
+     * @private
+     * @param {Array} data The destination metadata.
+     * @param {Array} source The source metadata.
+     * @returns {Array} Returns `data`.
+     */
+    function mergeData(data, source) {
+      var bitmask = data[1],
+          srcBitmask = source[1],
+          newBitmask = bitmask | srcBitmask,
+          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
+
+      var isCombo =
+        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
+        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
+        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));
+
+      // Exit early if metadata can't be merged.
+      if (!(isCommon || isCombo)) {
+        return data;
+      }
+      // Use source `thisArg` if available.
+      if (srcBitmask & WRAP_BIND_FLAG) {
+        data[2] = source[2];
+        // Set when currying a bound function.
+        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
+      }
+      // Compose partial arguments.
+      var value = source[3];
+      if (value) {
+        var partials = data[3];
+        data[3] = partials ? composeArgs(partials, value, source[4]) : value;
+        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
+      }
+      // Compose partial right arguments.
+      value = source[5];
+      if (value) {
+        partials = data[5];
+        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
+        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
+      }
+      // Use source `argPos` if available.
+      value = source[7];
+      if (value) {
+        data[7] = value;
+      }
+      // Use source `ary` if it's smaller.
+      if (srcBitmask & WRAP_ARY_FLAG) {
+        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
+      }
+      // Use source `arity` if one is not provided.
+      if (data[9] == null) {
+        data[9] = source[9];
+      }
+      // Use source `func` and merge bitmasks.
+      data[0] = source[0];
+      data[1] = newBitmask;
+
+      return data;
+    }
+
+    /**
+     * This function is like
+     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
+     * except that it includes inherited enumerable properties.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of property names.
+     */
+    function nativeKeysIn(object) {
+      var result = [];
+      if (object != null) {
+        for (var key in Object(object)) {
+          result.push(key);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * Converts `value` to a string using `Object.prototype.toString`.
+     *
+     * @private
+     * @param {*} value The value to convert.
+     * @returns {string} Returns the converted string.
+     */
+    function objectToString(value) {
+      return nativeObjectToString.call(value);
+    }
+
+    /**
+     * A specialized version of `baseRest` which transforms the rest array.
+     *
+     * @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.
+     * @param {Function} transform The rest array transform.
+     * @returns {Function} Returns the new function.
+     */
+    function overRest(func, start, transform) {
+      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
+      return function() {
+        var args = arguments,
+            index = -1,
+            length = nativeMax(args.length - start, 0),
+            array = Array(length);
+
+        while (++index < length) {
+          array[index] = args[start + index];
+        }
+        index = -1;
+        var otherArgs = Array(start + 1);
+        while (++index < start) {
+          otherArgs[index] = args[index];
+        }
+        otherArgs[start] = transform(array);
+        return apply(func, this, otherArgs);
+      };
+    }
+
+    /**
+     * Gets the parent value at `path` of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @param {Array} path The path to get the parent value of.
+     * @returns {*} Returns the parent value.
+     */
+    function parent(object, path) {
+      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
+    }
+
+    /**
+     * Reorder `array` according to the specified indexes where the element at
+     * the first index is assigned as the first element, the element at
+     * the second index is assigned as the second element, and so on.
+     *
+     * @private
+     * @param {Array} array The array to reorder.
+     * @param {Array} indexes The arranged array indexes.
+     * @returns {Array} Returns `array`.
+     */
+    function reorder(array, indexes) {
+      var arrLength = array.length,
+          length = nativeMin(indexes.length, arrLength),
+          oldArray = copyArray(array);
+
+      while (length--) {
+        var index = indexes[length];
+        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
+      }
+      return array;
+    }
+
+    /**
+     * Sets metadata for `func`.
+     *
+     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
+     * period of time, it will trip its breaker and transition to an identity
+     * function to avoid garbage collection pauses in V8. See
+     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
+     * for more details.
+     *
+     * @private
+     * @param {Function} func The function to associate metadata with.
+     * @param {*} data The metadata.
+     * @returns {Function} Returns `func`.
+     */
+    var setData = shortOut(baseSetData);
+
+    /**
+     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
+     *
+     * @private
+     * @param {Function} func The function to delay.
+     * @param {number} wait The number of milliseconds to delay invocation.
+     * @returns {number|Object} Returns the timer id or timeout object.
+     */
+    var setTimeout = ctxSetTimeout || function(func, wait) {
+      return root.setTimeout(func, wait);
+    };
+
+    /**
+     * Sets the `toString` method of `func` to return `string`.
+     *
+     * @private
+     * @param {Function} func The function to modify.
+     * @param {Function} string The `toString` result.
+     * @returns {Function} Returns `func`.
+     */
+    var setToString = shortOut(baseSetToString);
+
+    /**
+     * Sets the `toString` method of `wrapper` to mimic the source of `reference`
+     * with wrapper details in a comment at the top of the source body.
+     *
+     * @private
+     * @param {Function} wrapper The function to modify.
+     * @param {Function} reference The reference function.
+     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+     * @returns {Function} Returns `wrapper`.
+     */
+    function setWrapToString(wrapper, reference, bitmask) {
+      var source = (reference + '');
+      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
+    }
+
+    /**
+     * Creates a function that'll short out and invoke `identity` instead
+     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
+     * milliseconds.
+     *
+     * @private
+     * @param {Function} func The function to restrict.
+     * @returns {Function} Returns the new shortable function.
+     */
+    function shortOut(func) {
+      var count = 0,
+          lastCalled = 0;
+
+      return function() {
+        var stamp = nativeNow(),
+            remaining = HOT_SPAN - (stamp - lastCalled);
+
+        lastCalled = stamp;
+        if (remaining > 0) {
+          if (++count >= HOT_COUNT) {
+            return arguments[0];
+          }
+        } else {
+          count = 0;
+        }
+        return func.apply(undefined, 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 ? length : size;
+      while (++index < size) {
+        var rand = baseRandom(index, lastIndex),
+            value = array[rand];
+
+        array[rand] = array[index];
+        array[index] = value;
+      }
+      array.length = size;
+      return array;
+    }
+
+    /**
+     * Converts `string` to a property path array.
+     *
+     * @private
+     * @param {string} string The string to convert.
+     * @returns {Array} Returns the property path array.
+     */
+    var stringToPath = memoizeCapped(function(string) {
+      var result = [];
+      if (reLeadingDot.test(string)) {
+        result.push('');
+      }
+      string.replace(rePropName, function(match, number, quote, string) {
+        result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
+      });
+      return result;
+    });
+
+    /**
+     * Converts `value` to a string key if it's not a string or symbol.
+     *
+     * @private
+     * @param {*} value The value to inspect.
+     * @returns {string|symbol} Returns the key.
+     */
+    function toKey(value) {
+      if (typeof value == 'string' || isSymbol(value)) {
+        return value;
+      }
+      var result = (value + '');
+      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+    }
+
+    /**
+     * Converts `func` to its source code.
+     *
+     * @private
+     * @param {Function} func The function to convert.
+     * @returns {string} Returns the source code.
+     */
+    function toSource(func) {
+      if (func != null) {
+        try {
+          return funcToString.call(func);
+        } catch (e) {}
+        try {
+          return (func + '');
+        } catch (e) {}
+      }
+      return '';
+    }
+
+    /**
+     * Updates wrapper `details` based on `bitmask` flags.
+     *
+     * @private
+     * @returns {Array} details The details to modify.
+     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+     * @returns {Array} Returns `details`.
+     */
+    function updateWrapDetails(details, bitmask) {
+      arrayEach(wrapFlags, function(pair) {
+        var value = '_.' + pair[0];
+        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
+          details.push(value);
+        }
+      });
+      return details.sort();
+    }
+
+    /**
+     * Creates a clone of `wrapper`.
+     *
+     * @private
+     * @param {Object} wrapper The wrapper to clone.
+     * @returns {Object} Returns the cloned wrapper.
+     */
+    function wrapperClone(wrapper) {
+      if (wrapper instanceof LazyWrapper) {
+        return wrapper.clone();
+      }
+      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
+      result.__actions__ = copyArray(wrapper.__actions__);
+      result.__index__  = wrapper.__index__;
+      result.__values__ = wrapper.__values__;
+      return result;
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates an array of elements split into groups the length of `size`.
+     * If `array` can't be split evenly, the final chunk will be the remaining
+     * elements.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.0.0
+     * @category Array
+     * @param {Array} array The array to process.
+     * @param {number} [size=1] The length of each chunk
+     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+     * @returns {Array} Returns the new array of chunks.
+     * @example
+     *
+     * _.chunk(['a', 'b', 'c', 'd'], 2);
+     * // => [['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)) {
+        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 < length) {
+        result[resIndex++] = baseSlice(array, index, (index += size));
+      }
+      return result;
+    }
+
+    /**
+     * Creates an array with all falsey values removed. The values `false`, `null`,
+     * `0`, `""`, `undefined`, and `NaN` are falsey.
+     *
+     * @static
+     * @memberOf _
+     * @since 0.1.0
+     * @category Array
+     * @param {Array} array The array to compact.
+     * @returns {Array} Returns the new array of filtered values.
+     * @example
+     *
+     * _.compact([0, 1, false, 2, '', 3]);
+     * // => [1, 2, 3]
+     */
+    function compact(array) {
+      var index = -1,
+          length = array == null ? 0 : array.length,
+          resIndex = 0,
+          result = [];
+
+      while (++index < length) {
+        var value = array[index];
+        if (value) {
+          result[resIndex++] = value;
+        }
+      }
+      return result;
+    }
+
+    /**
+     * Creates a new array concatenating `array` with any additional arrays
+     * and/or values.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Array
+     * @param {Array} array The array to concatenate.
+     * @param {...*} [values] The values to concatenate.
+     * @returns {Array} Returns the new concatenated array.
+     * @example
+     *
+     * var array = [1];
+     * var other = _.concat(array, 2, [3], [[4]]);
+     *
+     * console.log(other);
+     * // => [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;
+      }
+      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;
+      }
+      return isArrayLikeObject(array)
+        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, 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 : 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 : 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) {
+        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 : 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 < length) {
+        var pair = pairs[index];
+        result[pair[0]] = pair[1];
+      }
+      return result;
+    }
+
+    /**
+     * Gets the first element of `array`.
+     *
+     * @static
+     * @memberOf _
+     * @since 0.1.0
+     * @alias first
+     * @category Array
+     * @param {Array} array The array to query.
+     * @returns {*} Returns the first element of `array`.
+     * @example
+     *
+     * _.head([1, 2, 3]);
+     * // => 1
+     *
+     * _.head([]);
+     * // => undefined
+     */
+    function head(array) {
+      return (array && array.length) ? array[0] : undefined;
+    }
+
+    /**
+     * 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;
+      } 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;
+      if (comparator) {
+        mapped.pop();
+      }
+      return (mapped.length && mapped[0] === arrays[0])
+        ? baseIntersection(mapped, undefined, 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;
+    }
+
+    /**
+     * 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) {
+        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;
+    }
+
+    /**
+     * 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, 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 < length) {
+        var value = array[index];
+        if (predicate(value, index, array)) {
+          result.push(value);
+          indexes.push(index);
+        }
+      }
+      basePullAt(array, indexes);
+      return result;
+    }
+
+    /**
+     * Reverses `array` so that the first element becomes the last, the second
+     * element becomes the second to last, and so on.
+     *
+     * **Note:** This method mutates `array` and is based on
+     * [`Array#reverse`](https://mdn.io/Array/reverse).
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Array
+     * @param {Array} array The array to modify.
+     * @returns {Array} Returns `array`.
+     * @example
+     *
+     * var array = [1, 2, 3];
+     *
+     * _.reverse(array);
+     * // => [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 ? 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 < length && eq(array[index], value)) {
+          return index;
+        }
+      }
+      return -1;
+    }
+
+    /**
+     * This method is like `_.sortedIndex` except that it returns the highest
+     * index at which `value` should be inserted into `array` in order to
+     * maintain its sort order.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.0.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
+     *
+     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);
+     * // => 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 : 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 : 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;
+      }
+      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;
+      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, 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;
+      return (array && array.length) ? baseUniq(array, undefined, 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, 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;
+      }
+      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;
+      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, 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;
+
+      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
+      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
+      });
+      return new LodashWrapper(value, this.__chain__).thru(function(array) {
+        if (length && !array.length) {
+          array.push(undefined);
+        }
+        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) {
+        this.__values__ = toArray(this.value());
+      }
+      var done = this.__index__ >= this.__values__.length,
+          value = done ? undefined : 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;
+        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
+        });
+        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;
+      }
+      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']
+     */
+    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 : 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 : 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)) {
+        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;
+      }
+      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': 40 },
+     *   { 'user': 'barney', 'age': 34 }
+     * ];
+     *
+     * _.sortBy(users, [function(o) { return o.user; }]);
+     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
+     *
+     * _.sortBy(users, ['user', 'age']);
+     * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['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 : n;
+      n = (func && n == null) ? func.length : n;
+      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, 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;
+        }
+        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 : arity;
+      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, 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 : arity;
+      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, 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;
+        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,
+            result = wait - timeSinceLastCall;
+
+        return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;
+      }
+
+      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 || (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;
+
+        // Only invoke if we have `lastArgs` which means `func` has been
+        // debounced at least once.
+        if (trailing && lastArgs) {
+          return invokeFunc(time);
+        }
+        lastArgs = lastThis = undefined;
+        return result;
+      }
+
+      function cancel() {
+        if (timerId !== undefined) {
+          clearTimeout(timerId);
+        }
+        lastInvokeTime = 0;
+        lastArgs = lastCallTime = lastThis = timerId = undefined;
+      }
+
+      function flush() {
+        return timerId === undefined ? result : trailingEdge(now());
+      }
+
+      function debounced() {
+        var time = now(),
+            isInvoking = shouldInvoke(time);
+
+        lastArgs = arguments;
+        lastThis = this;
+        lastCallTime = time;
+
+        if (isInvoking) {
+          if (timerId === undefined) {
+            return leadingEdge(lastCallTime);
+          }
+          if (maxing) {
+            // Handle invocations in a tight loop.
+            timerId = setTimeout(timerExpired, wait);
+            return invokeFunc(lastCallTime);
+          }
+        }
+        if (timerId === undefined) {
+          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 < length) {
+          args[index] = transforms[index].call(this, args[index]);
+        }
+        return apply(func, this, args);
+      });
+    });
+
+    /**
+     * Creates a function that invokes `func` with `partials` prepended to the
+     * arguments it receives. This method is like `_.bind` except it does **not**
+     * alter the `this` binding.
+     *
+     * The `_.partial.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 0.2.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 sayHelloTo = _.partial(greet, 'hello');
+     * sayHelloTo('fred');
+     * // => '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, 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, 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, undefined, undefined, 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 ? 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 '<p>' + func(text) + '</p>';
+     * });
+     *
+     * p('fred, barney, & pebbles');
+     * // => '<p>fred, barney, &amp; pebbles</p>'
+     */
+    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;
+      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;
+      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('<body>');
+     * // => 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;
+      var result = customizer ? customizer(value, other) : undefined;
+      return result === undefined ? baseIsEqual(value, other, undefined, 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;
+      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;
+    }
+
+    /**
+     * 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 = value.replace(reTrim, '');
+      var isBinary = reIsBinary.test(value);
+      return (isBinary || reIsOctal.test(value))
+        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
+        : (reIsBadHex.test(value) ? NAN : +value);
+    }
+
+    /**
+     * 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(args) {
+      args.push(undefined, customDefaultsAssignIn);
+      return apply(assignInWith, undefined, args);
+    });
+
+    /**
+     * This method is like `_.defaults` except that it recursively assigns
+     * default properties.
+     *
+     * **Note:** This method mutates `object`.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.10.0
+     * @category Object
+     * @param {Object} object The destination object.
+     * @param {...Object} [sources] The source objects.
+     * @returns {Object} Returns `object`.
+     * @see _.defaults
+     * @example
+     *
+     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
+     * // => { 'a': { 'b': 2, 'c': 3 } }
+     */
+    var defaultsDeep = baseRest(function(args) {
+      args.push(undefined, customDefaultsMerge);
+      return apply(mergeWith, undefined, 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 : baseGet(object, path);
+      return result === undefined ? 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) {
+      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 (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;
+      }
+      while (++index < length) {
+        var value = object == null ? undefined : object[toKey(path[index])];
+        if (value === undefined) {
+          index = length;
+          value = defaultValue;
+        }
+        object = isFunction(value) ? value.call(object) : value;
+      }
+      return object;
+    }
+
+    /**
+     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
+     * it's created. Arrays are created for missing index properties while objects
+     * are created for all other missing properties. Use `_.setWith` to customize
+     * `path` creation.
+     *
+     * **Note:** This method mutates `object`.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.7.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.
+     * @returns {Object} Returns `object`.
+     * @example
+     *
+     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+     *
+     * _.set(object, 'a[0].b.c', 4);
+     * console.log(object.a[0].b.c);
+     * // => 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;
+      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;
+      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) {
+        upper = lower;
+        lower = undefined;
+      }
+      if (upper !== undefined) {
+        upper = toNumber(upper);
+        upper = upper === upper ? upper : 0;
+      }
+      if (lower !== undefined) {
+        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) {
+        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;
+      }
+      if (floating === undefined) {
+        if (typeof upper == 'boolean') {
+          floating = upper;
+          upper = undefined;
+        }
+        else if (typeof lower == 'boolean') {
+          floating = lower;
+          lower = undefined;
+        }
+      }
+      if (lower === undefined && upper === undefined) {
+        lower = 0;
+        upper = 1;
+      }
+      else {
+        lower = toFinite(lower);
+        if (upper === undefined) {
+          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
+        ? 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, &amp; 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 < length)
+        ? (string + createPadding(length - strLength, chars))
+        : string;
+    }
+
+    /**
+     * Pads `string` on the left 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
+     *
+     * _.padStart('abc', 6);
+     * // => '   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 < length)
+        ? (createPadding(length - strLength, chars) + string)
+        : string;
+    }
+
+    /**
+     * Converts `string` to an integer of the specified radix. If `radix` is
+     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a
+     * hexadecimal, in which case a `radix` of `16` is used.
+     *
+     * **Note:** This method aligns with the
+     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
+     *
+     * @static
+     * @memberOf _
+     * @since 1.1.0
+     * @category String
+     * @param {string} string The string to convert.
+     * @param {number} [radix=10] The radix to interpret `value` by.
+     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+     * @returns {number} Returns the converted integer.
+     * @example
+     *
+     * _.parseInt('08');
+     * // => 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)) {
+        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;
+      }
+      limit = limit === undefined ? 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('<b><%- value %></b>');
+     * compiled({ 'value': '<script>' });
+     * // => '<b>&lt;script&gt;</b>'
+     *
+     * // Use the "evaluate" delimiter to execute JavaScript and generate HTML.
+     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
+     * compiled({ 'users': ['fred', 'barney'] });
+     * // => '<li>fred</li><li>barney</li>'
+     *
+     * // Use the internal `print` function in "evaluate" delimiters.
+     * var compiled = _.template('<% print("hello " + user); %>!');
+     * compiled({ 'user': 'barney' });
+     * // => 'hello barney!'
+     *
+     * // Use the ES template literal delimiter as an "interpolate" delimiter.
+     * // Disable support by replacing the "interpolate" delimiter.
+     * var compiled = _.template('hello ${ user }!');
+     * compiled({ 'user': 'pebbles' });
+     * // => 'hello pebbles!'
+     *
+     * // Use backslashes to treat delimiters as plain text.
+     * var compiled = _.template('<%= "\\<%- value %\\>" %>');
+     * compiled({ 'value': 'ignored' });
+     * // => '<%- value %>'
+     *
+     * // Use the `imports` option to import `jQuery` as `jq`.
+     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
+     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
+     * compiled({ 'users': ['fred', 'barney'] });
+     * // => '<li>fred</li><li>barney</li>'
+     *
+     * // Use the `sourceURL` option to specify a custom sourceURL for the template.
+     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
+     * compiled(data);
+     * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector.
+     *
+     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.
+     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
+     * compiled.source;
+     * // => function(data) {
+     * //   var __t, __p = '';
+     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
+     * //   return __p;
+     * // }
+     *
+     * // Use custom template delimiters.
+     * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
+     * var compiled = _.template('hello {{ user }}!');
+     * compiled({ 'user': 'mustache' });
+     * // => 'hello mustache!'
+     *
+     * // Use the `source` property to inline compiled templates for meaningful
+     * // line numbers in error messages and stack traces.
+     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\
+     *   var JST = {\
+     *     "main": ' + _.template(mainText).source + '\
+     *   };\
+     * ');
+     */
+    function template(string, options, guard) {
+      // Based on John Resig's `tmpl` implementation
+      // (http://ejohn.org/blog/javascript-micro-templating/)
+      // and Laura Doktorova's doT.js (https://github.com/olado/doT).
+      var settings = lodash.templateSettings;
+
+      if (guard && isIterateeCall(string, options, guard)) {
+        options = undefined;
+      }
+      string = toString(string);
+      options = assignInWith({}, options, settings, customDefaultsAssignIn);
+
+      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
+          importsKeys = keys(imports),
+          importsValues = baseValues(imports, importsKeys);
+
+      var isEscaping,
+          isEvaluating,
+          index = 0,
+          interpolate = options.interpolate || reNoMatch,
+          source = "__p += '";
+
+      // Compile the regexp to match each delimiter.
+      var reDelimiters = RegExp(
+        (options.escape || reNoMatch).source + '|' +
+        interpolate.source + '|' +
+        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
+        (options.evaluate || reNoMatch).source + '|$'
+      , 'g');
+
+      // Use a sourceURL for easier debugging.
+      var sourceURL = '//# sourceURL=' +
+        ('sourceURL' in options
+          ? options.sourceURL
+          : ('lodash.templateSources[' + (++templateCounter) + ']')
+        ) + '\n';
+
+      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
+        interpolateValue || (interpolateValue = esTemplateValue);
+
+        // Escape characters that can't be included in string literals.
+        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);
+
+        // Replace delimiters with snippets.
+        if (escapeValue) {
+          isEscaping = true;
+          source += "' +\n__e(" + escapeValue + ") +\n'";
+        }
+        if (evaluateValue) {
+          isEvaluating = true;
+          source += "';\n" + evaluateValue + ";\n__p += '";
+        }
+        if (interpolateValue) {
+          source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
+        }
+        index = offset + match.length;
+
+        // The JS engine embedded in Adobe products needs `match` returned in
+        // order to produce the correct `offset` value.
+        return match;
+      });
+
+      source += "';\n";
+
+      // If `variable` is not specified wrap a with-statement around the generated
+      // code to add the data object to the top of the scope chain.
+      var variable = options.variable;
+      if (!variable) {
+        source = 'with (obj) {\n' + source + '\n}\n';
+      }
+      // Cleanup code by stripping empty strings.
+      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
+        .replace(reEmptyStringMiddle, '$1')
+        .replace(reEmptyStringTrailing, '$1;');
+
+      // Frame code as the function body.
+      source = 'function(' + (variable || 'obj') + ') {\n' +
+        (variable
+          ? ''
+          : 'obj || (obj = {});\n'
+        ) +
+        "var __t, __p = ''" +
+        (isEscaping
+           ? ', __e = _.escape'
+           : ''
+        ) +
+        (isEvaluating
+          ? ', __j = Array.prototype.join;\n' +
+            "function print() { __p += __j.call(arguments, '') }\n"
+          : ';\n'
+        ) +
+        source +
+        'return __p\n}';
+
+      var result = attempt(function() {
+        return Function(importsKeys, sourceURL + 'return ' + source)
+          .apply(undefined, importsValues);
+      });
+
+      // Provide the compiled function's source by its `toString` method or
+      // the `source` property as a convenience for inlining compiled templates.
+      result.source = source;
+      if (isError(result)) {
+        throw result;
+      }
+      return result;
+    }
+
+    /**
+     * Converts `string`, as a whole, to lower case just like
+     * [String#toLowerCase](https://mdn.io/toLowerCase).
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category String
+     * @param {string} [string=''] The string to convert.
+     * @returns {string} Returns the lower cased string.
+     * @example
+     *
+     * _.toLower('--Foo-Bar--');
+     * // => '--foo-bar--'
+     *
+     * _.toLower('fooBar');
+     * // => 'foobar'
+     *
+     * _.toLower('__FOO_BAR__');
+     * // => '__foo_bar__'
+     */
+    function toLower(value) {
+      return toString(value).toLowerCase();
+    }
+
+    /**
+     * Converts `string`, as a whole, to upper case just like
+     * [String#toUpperCase](https://mdn.io/toUpperCase).
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category String
+     * @param {string} [string=''] The string to convert.
+     * @returns {string} Returns the upper cased string.
+     * @example
+     *
+     * _.toUpper('--foo-bar--');
+     * // => '--FOO-BAR--'
+     *
+     * _.toUpper('fooBar');
+     * // => 'FOOBAR'
+     *
+     * _.toUpper('__foo_bar__');
+     * // => '__FOO_BAR__'
+     */
+    function toUpper(value) {
+      return toString(value).toUpperCase();
+    }
+
+    /**
+     * Removes leading and trailing whitespace or specified characters from `string`.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.0.0
+     * @category String
+     * @param {string} [string=''] The string to trim.
+     * @param {string} [chars=whitespace] The characters to trim.
+     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+     * @returns {string} Returns the trimmed string.
+     * @example
+     *
+     * _.trim('  abc  ');
+     * // => 'abc'
+     *
+     * _.trim('-_-abc-_-', '_-');
+     * // => 'abc'
+     *
+     * _.map(['  foo  ', '  bar  '], _.trim);
+     * // => ['foo', 'bar']
+     */
+    function trim(string, chars, guard) {
+      string = toString(string);
+      if (string && (guard || chars === undefined)) {
+        return string.replace(reTrim, '');
+      }
+      if (!string || !(chars = baseToString(chars))) {
+        return string;
+      }
+      var strSymbols = stringToArray(string),
+          chrSymbols = stringToArray(chars),
+          start = charsStartIndex(strSymbols, chrSymbols),
+          end = charsEndIndex(strSymbols, chrSymbols) + 1;
+
+      return castSlice(strSymbols, start, end).join('');
+    }
+
+    /**
+     * Removes trailing whitespace or specified characters from `string`.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category String
+     * @param {string} [string=''] The string to trim.
+     * @param {string} [chars=whitespace] The characters to trim.
+     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+     * @returns {string} Returns the trimmed string.
+     * @example
+     *
+     * _.trimEnd('  abc  ');
+     * // => '  abc'
+     *
+     * _.trimEnd('-_-abc-_-', '_-');
+     * // => '-_-abc'
+     */
+    function trimEnd(string, chars, guard) {
+      string = toString(string);
+      if (string && (guard || chars === undefined)) {
+        return string.replace(reTrimEnd, '');
+      }
+      if (!string || !(chars = baseToString(chars))) {
+        return string;
+      }
+      var strSymbols = stringToArray(string),
+          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;
+
+      return castSlice(strSymbols, 0, end).join('');
+    }
+
+    /**
+     * Removes leading whitespace or specified characters from `string`.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category String
+     * @param {string} [string=''] The string to trim.
+     * @param {string} [chars=whitespace] The characters to trim.
+     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+     * @returns {string} Returns the trimmed string.
+     * @example
+     *
+     * _.trimStart('  abc  ');
+     * // => 'abc  '
+     *
+     * _.trimStart('-_-abc-_-', '_-');
+     * // => 'abc-_-'
+     */
+    function trimStart(string, chars, guard) {
+      string = toString(string);
+      if (string && (guard || chars === undefined)) {
+        return string.replace(reTrimStart, '');
+      }
+      if (!string || !(chars = baseToString(chars))) {
+        return string;
+      }
+      var strSymbols = stringToArray(string),
+          start = charsStartIndex(strSymbols, stringToArray(chars));
+
+      return castSlice(strSymbols, start).join('');
+    }
+
+    /**
+     * Truncates `string` if it's longer than the given maximum string length.
+     * The last characters of the truncated string are replaced with the omission
+     * string which defaults to "...".
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category String
+     * @param {string} [string=''] The string to truncate.
+     * @param {Object} [options={}] The options object.
+     * @param {number} [options.length=30] The maximum string length.
+     * @param {string} [options.omission='...'] The string to indicate text is omitted.
+     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
+     * @returns {string} Returns the truncated string.
+     * @example
+     *
+     * _.truncate('hi-diddly-ho there, neighborino');
+     * // => 'hi-diddly-ho there, neighbo...'
+     *
+     * _.truncate('hi-diddly-ho there, neighborino', {
+     *   'length': 24,
+     *   'separator': ' '
+     * });
+     * // => 'hi-diddly-ho there,...'
+     *
+     * _.truncate('hi-diddly-ho there, neighborino', {
+     *   'length': 24,
+     *   'separator': /,? +/
+     * });
+     * // => 'hi-diddly-ho there...'
+     *
+     * _.truncate('hi-diddly-ho there, neighborino', {
+     *   'omission': ' [...]'
+     * });
+     * // => 'hi-diddly-ho there, neig [...]'
+     */
+    function truncate(string, options) {
+      var length = DEFAULT_TRUNC_LENGTH,
+          omission = DEFAULT_TRUNC_OMISSION;
+
+      if (isObject(options)) {
+        var separator = 'separator' in options ? options.separator : separator;
+        length = 'length' in options ? toInteger(options.length) : length;
+        omission = 'omission' in options ? baseToString(options.omission) : omission;
+      }
+      string = toString(string);
+
+      var strLength = string.length;
+      if (hasUnicode(string)) {
+        var strSymbols = stringToArray(string);
+        strLength = strSymbols.length;
+      }
+      if (length >= strLength) {
+        return string;
+      }
+      var end = length - stringSize(omission);
+      if (end < 1) {
+        return omission;
+      }
+      var result = strSymbols
+        ? castSlice(strSymbols, 0, end).join('')
+        : string.slice(0, end);
+
+      if (separator === undefined) {
+        return result + omission;
+      }
+      if (strSymbols) {
+        end += (result.length - end);
+      }
+      if (isRegExp(separator)) {
+        if (string.slice(end).search(separator)) {
+          var match,
+              substring = result;
+
+          if (!separator.global) {
+            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
+          }
+          separator.lastIndex = 0;
+          while ((match = separator.exec(substring))) {
+            var newEnd = match.index;
+          }
+          result = result.slice(0, newEnd === undefined ? end : newEnd);
+        }
+      } else if (string.indexOf(baseToString(separator), end) != end) {
+        var index = result.lastIndexOf(separator);
+        if (index > -1) {
+          result = result.slice(0, index);
+        }
+      }
+      return result + omission;
+    }
+
+    /**
+     * The inverse of `_.escape`; this method converts the HTML entities
+     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to
+     * their corresponding characters.
+     *
+     * **Note:** No other HTML entities are unescaped. To unescape additional
+     * HTML entities use a third-party library like [_he_](https://mths.be/he).
+     *
+     * @static
+     * @memberOf _
+     * @since 0.6.0
+     * @category String
+     * @param {string} [string=''] The string to unescape.
+     * @returns {string} Returns the unescaped string.
+     * @example
+     *
+     * _.unescape('fred, barney, &amp; pebbles');
+     * // => 'fred, barney, & pebbles'
+     */
+    function unescape(string) {
+      string = toString(string);
+      return (string && reHasEscapedHtml.test(string))
+        ? string.replace(reEscapedHtml, unescapeHtmlChar)
+        : string;
+    }
+
+    /**
+     * Converts `string`, as space separated words, to upper case.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category String
+     * @param {string} [string=''] The string to convert.
+     * @returns {string} Returns the upper cased string.
+     * @example
+     *
+     * _.upperCase('--foo-bar');
+     * // => 'FOO BAR'
+     *
+     * _.upperCase('fooBar');
+     * // => 'FOO BAR'
+     *
+     * _.upperCase('__foo_bar__');
+     * // => 'FOO BAR'
+     */
+    var upperCase = createCompounder(function(result, word, index) {
+      return result + (index ? ' ' : '') + word.toUpperCase();
+    });
+
+    /**
+     * Converts the first character of `string` to upper case.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category String
+     * @param {string} [string=''] The string to convert.
+     * @returns {string} Returns the converted string.
+     * @example
+     *
+     * _.upperFirst('fred');
+     * // => 'Fred'
+     *
+     * _.upperFirst('FRED');
+     * // => 'FRED'
+     */
+    var upperFirst = createCaseFirst('toUpperCase');
+
+    /**
+     * Splits `string` into an array of its words.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.0.0
+     * @category String
+     * @param {string} [string=''] The string to inspect.
+     * @param {RegExp|string} [pattern] The pattern to match words.
+     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+     * @returns {Array} Returns the words of `string`.
+     * @example
+     *
+     * _.words('fred, barney, & pebbles');
+     * // => ['fred', 'barney', 'pebbles']
+     *
+     * _.words('fred, barney, & pebbles', /[^, ]+/g);
+     * // => ['fred', 'barney', '&', 'pebbles']
+     */
+    function words(string, pattern, guard) {
+      string = toString(string);
+      pattern = guard ? undefined : pattern;
+
+      if (pattern === undefined) {
+        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
+      }
+      return string.match(pattern) || [];
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Attempts to invoke `func`, returning either the result or the caught error
+     * object. Any additional arguments are provided to `func` when it's invoked.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.0.0
+     * @category Util
+     * @param {Function} func The function to attempt.
+     * @param {...*} [args] The arguments to invoke `func` with.
+     * @returns {*} Returns the `func` result or error object.
+     * @example
+     *
+     * // Avoid throwing errors for invalid selectors.
+     * var elements = _.attempt(function(selector) {
+     *   return document.querySelectorAll(selector);
+     * }, '>_>');
+     *
+     * if (_.isError(elements)) {
+     *   elements = [];
+     * }
+     */
+    var attempt = baseRest(function(func, args) {
+      try {
+        return apply(func, undefined, args);
+      } catch (e) {
+        return isError(e) ? e : new Error(e);
+      }
+    });
+
+    /**
+     * Binds methods of an object to the object itself, overwriting the existing
+     * method.
+     *
+     * **Note:** This method doesn't set the "length" property of bound functions.
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Util
+     * @param {Object} object The object to bind and assign the bound methods to.
+     * @param {...(string|string[])} methodNames The object method names to bind.
+     * @returns {Object} Returns `object`.
+     * @example
+     *
+     * var view = {
+     *   'label': 'docs',
+     *   'click': function() {
+     *     console.log('clicked ' + this.label);
+     *   }
+     * };
+     *
+     * _.bindAll(view, ['click']);
+     * jQuery(element).on('click', view.click);
+     * // => Logs 'clicked docs' when clicked.
+     */
+    var bindAll = flatRest(function(object, methodNames) {
+      arrayEach(methodNames, function(key) {
+        key = toKey(key);
+        baseAssignValue(object, key, bind(object[key], object));
+      });
+      return object;
+    });
+
+    /**
+     * Creates a function that iterates over `pairs` and invokes the corresponding
+     * function of the first predicate to return truthy. The predicate-function
+     * pairs are invoked with the `this` binding and arguments of the created
+     * function.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Util
+     * @param {Array} pairs The predicate-function pairs.
+     * @returns {Function} Returns the new composite function.
+     * @example
+     *
+     * var func = _.cond([
+     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],
+     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
+     *   [_.stubTrue,                      _.constant('no match')]
+     * ]);
+     *
+     * func({ 'a': 1, 'b': 2 });
+     * // => 'matches A'
+     *
+     * func({ 'a': 0, 'b': 1 });
+     * // => 'matches B'
+     *
+     * func({ 'a': '1', 'b': '2' });
+     * // => 'no match'
+     */
+    function cond(pairs) {
+      var length = pairs == null ? 0 : pairs.length,
+          toIteratee = getIteratee();
+
+      pairs = !length ? [] : arrayMap(pairs, function(pair) {
+        if (typeof pair[1] != 'function') {
+          throw new TypeError(FUNC_ERROR_TEXT);
+        }
+        return [toIteratee(pair[0]), pair[1]];
+      });
+
+      return baseRest(function(args) {
+        var index = -1;
+        while (++index < length) {
+          var pair = pairs[index];
+          if (apply(pair[0], this, args)) {
+            return apply(pair[1], this, args);
+          }
+        }
+      });
+    }
+
+    /**
+     * Creates a function that invokes the predicate properties of `source` with
+     * the corresponding property values of a given object, returning `true` if
+     * all predicates return truthy, else `false`.
+     *
+     * **Note:** The created function is equivalent to `_.conformsTo` with
+     * `source` partially applied.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Util
+     * @param {Object} source The object of property predicates to conform to.
+     * @returns {Function} Returns the new spec function.
+     * @example
+     *
+     * var objects = [
+     *   { 'a': 2, 'b': 1 },
+     *   { 'a': 1, 'b': 2 }
+     * ];
+     *
+     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));
+     * // => [{ 'a': 1, 'b': 2 }]
+     */
+    function conforms(source) {
+      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
+    }
+
+    /**
+     * Creates a function that returns `value`.
+     *
+     * @static
+     * @memberOf _
+     * @since 2.4.0
+     * @category Util
+     * @param {*} value The value to return from the new function.
+     * @returns {Function} Returns the new constant function.
+     * @example
+     *
+     * var objects = _.times(2, _.constant({ 'a': 1 }));
+     *
+     * console.log(objects);
+     * // => [{ 'a': 1 }, { 'a': 1 }]
+     *
+     * console.log(objects[0] === objects[1]);
+     * // => true
+     */
+    function constant(value) {
+      return function() {
+        return value;
+      };
+    }
+
+    /**
+     * Checks `value` to determine whether a default value should be returned in
+     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
+     * or `undefined`.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.14.0
+     * @category Util
+     * @param {*} value The value to check.
+     * @param {*} defaultValue The default value.
+     * @returns {*} Returns the resolved value.
+     * @example
+     *
+     * _.defaultTo(1, 10);
+     * // => 1
+     *
+     * _.defaultTo(undefined, 10);
+     * // => 10
+     */
+    function defaultTo(value, defaultValue) {
+      return (value == null || value !== value) ? defaultValue : value;
+    }
+
+    /**
+     * Creates a function that returns the result of invoking the given functions
+     * with the `this` binding of the created function, where each successive
+     * invocation is supplied the return value of the previous.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.0.0
+     * @category Util
+     * @param {...(Function|Function[])} [funcs] The functions to invoke.
+     * @returns {Function} Returns the new composite function.
+     * @see _.flowRight
+     * @example
+     *
+     * function square(n) {
+     *   return n * n;
+     * }
+     *
+     * var addSquare = _.flow([_.add, square]);
+     * addSquare(1, 2);
+     * // => 9
+     */
+    var flow = createFlow();
+
+    /**
+     * This method is like `_.flow` except that it creates a function that
+     * invokes the given functions from right to left.
+     *
+     * @static
+     * @since 3.0.0
+     * @memberOf _
+     * @category Util
+     * @param {...(Function|Function[])} [funcs] The functions to invoke.
+     * @returns {Function} Returns the new composite function.
+     * @see _.flow
+     * @example
+     *
+     * function square(n) {
+     *   return n * n;
+     * }
+     *
+     * var addSquare = _.flowRight([square, _.add]);
+     * addSquare(1, 2);
+     * // => 9
+     */
+    var flowRight = createFlow(true);
+
+    /**
+     * This method returns the first argument it receives.
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Util
+     * @param {*} value Any value.
+     * @returns {*} Returns `value`.
+     * @example
+     *
+     * var object = { 'a': 1 };
+     *
+     * console.log(_.identity(object) === object);
+     * // => true
+     */
+    function identity(value) {
+      return value;
+    }
+
+    /**
+     * Creates a function that invokes `func` with the arguments of the created
+     * function. If `func` is a property name, the created function returns the
+     * property value for a given element. If `func` is an array or object, the
+     * created function returns `true` for elements that contain the equivalent
+     * source properties, otherwise it returns `false`.
+     *
+     * @static
+     * @since 4.0.0
+     * @memberOf _
+     * @category Util
+     * @param {*} [func=_.identity] The value to convert to a callback.
+     * @returns {Function} Returns the callback.
+     * @example
+     *
+     * var users = [
+     *   { 'user': 'barney', 'age': 36, 'active': true },
+     *   { 'user': 'fred',   'age': 40, 'active': false }
+     * ];
+     *
+     * // The `_.matches` iteratee shorthand.
+     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
+     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]
+     *
+     * // The `_.matchesProperty` iteratee shorthand.
+     * _.filter(users, _.iteratee(['user', 'fred']));
+     * // => [{ 'user': 'fred', 'age': 40 }]
+     *
+     * // The `_.property` iteratee shorthand.
+     * _.map(users, _.iteratee('user'));
+     * // => ['barney', 'fred']
+     *
+     * // Create custom iteratee shorthands.
+     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
+     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {
+     *     return func.test(string);
+     *   };
+     * });
+     *
+     * _.filter(['abc', 'def'], /ef/);
+     * // => ['def']
+     */
+    function iteratee(func) {
+      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
+    }
+
+    /**
+     * Creates a function that performs a partial deep comparison between a given
+     * object and `source`, returning `true` if the given object has equivalent
+     * property values, else `false`.
+     *
+     * **Note:** The created function is equivalent to `_.isMatch` with `source`
+     * 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 Util
+     * @param {Object} source The object of property values to match.
+     * @returns {Function} Returns the new spec function.
+     * @example
+     *
+     * var objects = [
+     *   { 'a': 1, 'b': 2, 'c': 3 },
+     *   { 'a': 4, 'b': 5, 'c': 6 }
+     * ];
+     *
+     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
+     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
+     */
+    function matches(source) {
+      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
+    }
+
+    /**
+     * Creates a function that performs a partial deep comparison between the
+     * value at `path` of a given object to `srcValue`, returning `true` if the
+     * object value is equivalent, else `false`.
+     *
+     * **Note:** Partial comparisons will match empty array and empty object
+     * `srcValue` values against any array or object value, respectively. See
+     * `_.isEqual` for a list of supported value comparisons.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.2.0
+     * @category Util
+     * @param {Array|string} path The path of the property to get.
+     * @param {*} srcValue The value to match.
+     * @returns {Function} Returns the new spec function.
+     * @example
+     *
+     * var objects = [
+     *   { 'a': 1, 'b': 2, 'c': 3 },
+     *   { 'a': 4, 'b': 5, 'c': 6 }
+     * ];
+     *
+     * _.find(objects, _.matchesProperty('a', 4));
+     * // => { 'a': 4, 'b': 5, 'c': 6 }
+     */
+    function matchesProperty(path, srcValue) {
+      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
+    }
+
+    /**
+     * Creates a function that invokes the method at `path` of a given object.
+     * Any additional arguments are provided to the invoked method.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.7.0
+     * @category Util
+     * @param {Array|string} path The path of the method to invoke.
+     * @param {...*} [args] The arguments to invoke the method with.
+     * @returns {Function} Returns the new invoker function.
+     * @example
+     *
+     * var objects = [
+     *   { 'a': { 'b': _.constant(2) } },
+     *   { 'a': { 'b': _.constant(1) } }
+     * ];
+     *
+     * _.map(objects, _.method('a.b'));
+     * // => [2, 1]
+     *
+     * _.map(objects, _.method(['a', 'b']));
+     * // => [2, 1]
+     */
+    var method = baseRest(function(path, args) {
+      return function(object) {
+        return baseInvoke(object, path, args);
+      };
+    });
+
+    /**
+     * The opposite of `_.method`; this method creates a function that invokes
+     * the method at a given path of `object`. Any additional arguments are
+     * provided to the invoked method.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.7.0
+     * @category Util
+     * @param {Object} object The object to query.
+     * @param {...*} [args] The arguments to invoke the method with.
+     * @returns {Function} Returns the new invoker function.
+     * @example
+     *
+     * var array = _.times(3, _.constant),
+     *     object = { 'a': array, 'b': array, 'c': array };
+     *
+     * _.map(['a[2]', 'c[0]'], _.methodOf(object));
+     * // => [2, 0]
+     *
+     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
+     * // => [2, 0]
+     */
+    var methodOf = baseRest(function(object, args) {
+      return function(path) {
+        return baseInvoke(object, path, args);
+      };
+    });
+
+    /**
+     * Adds all own enumerable string keyed function properties of a source
+     * object to the destination object. If `object` is a function, then methods
+     * are added to its prototype as well.
+     *
+     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
+     * avoid conflicts caused by modifying the original.
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Util
+     * @param {Function|Object} [object=lodash] The destination object.
+     * @param {Object} source The object of functions to add.
+     * @param {Object} [options={}] The options object.
+     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.
+     * @returns {Function|Object} Returns `object`.
+     * @example
+     *
+     * function vowels(string) {
+     *   return _.filter(string, function(v) {
+     *     return /[aeiou]/i.test(v);
+     *   });
+     * }
+     *
+     * _.mixin({ 'vowels': vowels });
+     * _.vowels('fred');
+     * // => ['e']
+     *
+     * _('fred').vowels().value();
+     * // => ['e']
+     *
+     * _.mixin({ 'vowels': vowels }, { 'chain': false });
+     * _('fred').vowels();
+     * // => ['e']
+     */
+    function mixin(object, source, options) {
+      var props = keys(source),
+          methodNames = baseFunctions(source, props);
+
+      if (options == null &&
+          !(isObject(source) && (methodNames.length || !props.length))) {
+        options = source;
+        source = object;
+        object = this;
+        methodNames = baseFunctions(source, keys(source));
+      }
+      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
+          isFunc = isFunction(object);
+
+      arrayEach(methodNames, function(methodName) {
+        var func = source[methodName];
+        object[methodName] = func;
+        if (isFunc) {
+          object.prototype[methodName] = function() {
+            var chainAll = this.__chain__;
+            if (chain || chainAll) {
+              var result = object(this.__wrapped__),
+                  actions = result.__actions__ = copyArray(this.__actions__);
+
+              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
+              result.__chain__ = chainAll;
+              return result;
+            }
+            return func.apply(object, arrayPush([this.value()], arguments));
+          };
+        }
+      });
+
+      return object;
+    }
+
+    /**
+     * Reverts the `_` variable to its previous value and returns a reference to
+     * the `lodash` function.
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Util
+     * @returns {Function} Returns the `lodash` function.
+     * @example
+     *
+     * var lodash = _.noConflict();
+     */
+    function noConflict() {
+      if (root._ === this) {
+        root._ = oldDash;
+      }
+      return this;
+    }
+
+    /**
+     * This method returns `undefined`.
+     *
+     * @static
+     * @memberOf _
+     * @since 2.3.0
+     * @category Util
+     * @example
+     *
+     * _.times(2, _.noop);
+     * // => [undefined, undefined]
+     */
+    function noop() {
+      // No operation performed.
+    }
+
+    /**
+     * Creates a function that gets the argument at index `n`. If `n` is negative,
+     * the nth argument from the end is returned.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Util
+     * @param {number} [n=0] The index of the argument to return.
+     * @returns {Function} Returns the new pass-thru function.
+     * @example
+     *
+     * var func = _.nthArg(1);
+     * func('a', 'b', 'c', 'd');
+     * // => 'b'
+     *
+     * var func = _.nthArg(-2);
+     * func('a', 'b', 'c', 'd');
+     * // => 'c'
+     */
+    function nthArg(n) {
+      n = toInteger(n);
+      return baseRest(function(args) {
+        return baseNth(args, n);
+      });
+    }
+
+    /**
+     * Creates a function that invokes `iteratees` with the arguments it receives
+     * and returns their results.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Util
+     * @param {...(Function|Function[])} [iteratees=[_.identity]]
+     *  The iteratees to invoke.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * var func = _.over([Math.max, Math.min]);
+     *
+     * func(1, 2, 3, 4);
+     * // => [4, 1]
+     */
+    var over = createOver(arrayMap);
+
+    /**
+     * Creates a function that checks if **all** of the `predicates` return
+     * truthy when invoked with the arguments it receives.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Util
+     * @param {...(Function|Function[])} [predicates=[_.identity]]
+     *  The predicates to check.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * var func = _.overEvery([Boolean, isFinite]);
+     *
+     * func('1');
+     * // => true
+     *
+     * func(null);
+     * // => false
+     *
+     * func(NaN);
+     * // => false
+     */
+    var overEvery = createOver(arrayEvery);
+
+    /**
+     * Creates a function that checks if **any** of the `predicates` return
+     * truthy when invoked with the arguments it receives.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Util
+     * @param {...(Function|Function[])} [predicates=[_.identity]]
+     *  The predicates to check.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * var func = _.overSome([Boolean, isFinite]);
+     *
+     * func('1');
+     * // => true
+     *
+     * func(null);
+     * // => true
+     *
+     * func(NaN);
+     * // => false
+     */
+    var overSome = createOver(arraySome);
+
+    /**
+     * Creates a function that returns the value at `path` of a given object.
+     *
+     * @static
+     * @memberOf _
+     * @since 2.4.0
+     * @category Util
+     * @param {Array|string} path The path of the property to get.
+     * @returns {Function} Returns the new accessor function.
+     * @example
+     *
+     * var objects = [
+     *   { 'a': { 'b': 2 } },
+     *   { 'a': { 'b': 1 } }
+     * ];
+     *
+     * _.map(objects, _.property('a.b'));
+     * // => [2, 1]
+     *
+     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
+     * // => [1, 2]
+     */
+    function property(path) {
+      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
+    }
+
+    /**
+     * The opposite of `_.property`; this method creates a function that returns
+     * the value at a given path of `object`.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.0.0
+     * @category Util
+     * @param {Object} object The object to query.
+     * @returns {Function} Returns the new accessor function.
+     * @example
+     *
+     * var array = [0, 1, 2],
+     *     object = { 'a': array, 'b': array, 'c': array };
+     *
+     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
+     * // => [2, 0]
+     *
+     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
+     * // => [2, 0]
+     */
+    function propertyOf(object) {
+      return function(path) {
+        return object == null ? undefined : baseGet(object, path);
+      };
+    }
+
+    /**
+     * Creates an array of numbers (positive and/or negative) progressing from
+     * `start` up to, but not including, `end`. A step of `-1` is used if a negative
+     * `start` is specified without an `end` or `step`. If `end` is not specified,
+     * it's set to `start` with `start` then set to `0`.
+     *
+     * **Note:** JavaScript follows the IEEE-754 standard for resolving
+     * floating-point values which can produce unexpected results.
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Util
+     * @param {number} [start=0] The start of the range.
+     * @param {number} end The end of the range.
+     * @param {number} [step=1] The value to increment or decrement by.
+     * @returns {Array} Returns the range of numbers.
+     * @see _.inRange, _.rangeRight
+     * @example
+     *
+     * _.range(4);
+     * // => [0, 1, 2, 3]
+     *
+     * _.range(-4);
+     * // => [0, -1, -2, -3]
+     *
+     * _.range(1, 5);
+     * // => [1, 2, 3, 4]
+     *
+     * _.range(0, 20, 5);
+     * // => [0, 5, 10, 15]
+     *
+     * _.range(0, -4, -1);
+     * // => [0, -1, -2, -3]
+     *
+     * _.range(1, 4, 0);
+     * // => [1, 1, 1]
+     *
+     * _.range(0);
+     * // => []
+     */
+    var range = createRange();
+
+    /**
+     * This method is like `_.range` except that it populates values in
+     * descending order.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Util
+     * @param {number} [start=0] The start of the range.
+     * @param {number} end The end of the range.
+     * @param {number} [step=1] The value to increment or decrement by.
+     * @returns {Array} Returns the range of numbers.
+     * @see _.inRange, _.range
+     * @example
+     *
+     * _.rangeRight(4);
+     * // => [3, 2, 1, 0]
+     *
+     * _.rangeRight(-4);
+     * // => [-3, -2, -1, 0]
+     *
+     * _.rangeRight(1, 5);
+     * // => [4, 3, 2, 1]
+     *
+     * _.rangeRight(0, 20, 5);
+     * // => [15, 10, 5, 0]
+     *
+     * _.rangeRight(0, -4, -1);
+     * // => [-3, -2, -1, 0]
+     *
+     * _.rangeRight(1, 4, 0);
+     * // => [1, 1, 1]
+     *
+     * _.rangeRight(0);
+     * // => []
+     */
+    var rangeRight = createRange(true);
+
+    /**
+     * This method returns a new empty array.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.13.0
+     * @category Util
+     * @returns {Array} Returns the new empty array.
+     * @example
+     *
+     * var arrays = _.times(2, _.stubArray);
+     *
+     * console.log(arrays);
+     * // => [[], []]
+     *
+     * console.log(arrays[0] === arrays[1]);
+     * // => false
+     */
+    function stubArray() {
+      return [];
+    }
+
+    /**
+     * This method returns `false`.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.13.0
+     * @category Util
+     * @returns {boolean} Returns `false`.
+     * @example
+     *
+     * _.times(2, _.stubFalse);
+     * // => [false, false]
+     */
+    function stubFalse() {
+      return false;
+    }
+
+    /**
+     * This method returns a new empty object.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.13.0
+     * @category Util
+     * @returns {Object} Returns the new empty object.
+     * @example
+     *
+     * var objects = _.times(2, _.stubObject);
+     *
+     * console.log(objects);
+     * // => [{}, {}]
+     *
+     * console.log(objects[0] === objects[1]);
+     * // => false
+     */
+    function stubObject() {
+      return {};
+    }
+
+    /**
+     * This method returns an empty string.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.13.0
+     * @category Util
+     * @returns {string} Returns the empty string.
+     * @example
+     *
+     * _.times(2, _.stubString);
+     * // => ['', '']
+     */
+    function stubString() {
+      return '';
+    }
+
+    /**
+     * This method returns `true`.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.13.0
+     * @category Util
+     * @returns {boolean} Returns `true`.
+     * @example
+     *
+     * _.times(2, _.stubTrue);
+     * // => [true, true]
+     */
+    function stubTrue() {
+      return true;
+    }
+
+    /**
+     * Invokes the iteratee `n` times, returning an array of the results of
+     * each invocation. The iteratee is invoked with one argument; (index).
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Util
+     * @param {number} n The number of times to invoke `iteratee`.
+     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+     * @returns {Array} Returns the array of results.
+     * @example
+     *
+     * _.times(3, String);
+     * // => ['0', '1', '2']
+     *
+     *  _.times(4, _.constant(0));
+     * // => [0, 0, 0, 0]
+     */
+    function times(n, iteratee) {
+      n = toInteger(n);
+      if (n < 1 || n > MAX_SAFE_INTEGER) {
+        return [];
+      }
+      var index = MAX_ARRAY_LENGTH,
+          length = nativeMin(n, MAX_ARRAY_LENGTH);
+
+      iteratee = getIteratee(iteratee);
+      n -= MAX_ARRAY_LENGTH;
+
+      var result = baseTimes(length, iteratee);
+      while (++index < n) {
+        iteratee(index);
+      }
+      return result;
+    }
+
+    /**
+     * Converts `value` to a property path array.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Util
+     * @param {*} value The value to convert.
+     * @returns {Array} Returns the new property path array.
+     * @example
+     *
+     * _.toPath('a.b.c');
+     * // => ['a', 'b', 'c']
+     *
+     * _.toPath('a[0].b.c');
+     * // => ['a', '0', 'b', 'c']
+     */
+    function toPath(value) {
+      if (isArray(value)) {
+        return arrayMap(value, toKey);
+      }
+      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
+    }
+
+    /**
+     * Generates a unique ID. If `prefix` is given, the ID is appended to it.
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Util
+     * @param {string} [prefix=''] The value to prefix the ID with.
+     * @returns {string} Returns the unique ID.
+     * @example
+     *
+     * _.uniqueId('contact_');
+     * // => 'contact_104'
+     *
+     * _.uniqueId();
+     * // => '105'
+     */
+    function uniqueId(prefix) {
+      var id = ++idCounter;
+      return toString(prefix) + id;
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Adds two numbers.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.4.0
+     * @category Math
+     * @param {number} augend The first number in an addition.
+     * @param {number} addend The second number in an addition.
+     * @returns {number} Returns the total.
+     * @example
+     *
+     * _.add(6, 4);
+     * // => 10
+     */
+    var add = createMathOperation(function(augend, addend) {
+      return augend + addend;
+    }, 0);
+
+    /**
+     * Computes `number` rounded up to `precision`.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.10.0
+     * @category Math
+     * @param {number} number The number to round up.
+     * @param {number} [precision=0] The precision to round up to.
+     * @returns {number} Returns the rounded up number.
+     * @example
+     *
+     * _.ceil(4.006);
+     * // => 5
+     *
+     * _.ceil(6.004, 2);
+     * // => 6.01
+     *
+     * _.ceil(6040, -2);
+     * // => 6100
+     */
+    var ceil = createRound('ceil');
+
+    /**
+     * Divide two numbers.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.7.0
+     * @category Math
+     * @param {number} dividend The first number in a division.
+     * @param {number} divisor The second number in a division.
+     * @returns {number} Returns the quotient.
+     * @example
+     *
+     * _.divide(6, 4);
+     * // => 1.5
+     */
+    var divide = createMathOperation(function(dividend, divisor) {
+      return dividend / divisor;
+    }, 1);
+
+    /**
+     * Computes `number` rounded down to `precision`.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.10.0
+     * @category Math
+     * @param {number} number The number to round down.
+     * @param {number} [precision=0] The precision to round down to.
+     * @returns {number} Returns the rounded down number.
+     * @example
+     *
+     * _.floor(4.006);
+     * // => 4
+     *
+     * _.floor(0.046, 2);
+     * // => 0.04
+     *
+     * _.floor(4060, -2);
+     * // => 4000
+     */
+    var floor = createRound('floor');
+
+    /**
+     * Computes the maximum value of `array`. If `array` is empty or falsey,
+     * `undefined` is returned.
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Math
+     * @param {Array} array The array to iterate over.
+     * @returns {*} Returns the maximum value.
+     * @example
+     *
+     * _.max([4, 2, 8, 6]);
+     * // => 8
+     *
+     * _.max([]);
+     * // => undefined
+     */
+    function max(array) {
+      return (array && array.length)
+        ? baseExtremum(array, identity, baseGt)
+        : undefined;
+    }
+
+    /**
+     * This method is like `_.max` except that it accepts `iteratee` which is
+     * invoked for each element in `array` to generate the criterion by which
+     * the value is ranked. The iteratee is invoked with one argument: (value).
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Math
+     * @param {Array} array The array to iterate over.
+     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+     * @returns {*} Returns the maximum value.
+     * @example
+     *
+     * var objects = [{ 'n': 1 }, { 'n': 2 }];
+     *
+     * _.maxBy(objects, function(o) { return o.n; });
+     * // => { 'n': 2 }
+     *
+     * // The `_.property` iteratee shorthand.
+     * _.maxBy(objects, 'n');
+     * // => { 'n': 2 }
+     */
+    function maxBy(array, iteratee) {
+      return (array && array.length)
+        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)
+        : undefined;
+    }
+
+    /**
+     * Computes the mean of the values in `array`.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Math
+     * @param {Array} array The array to iterate over.
+     * @returns {number} Returns the mean.
+     * @example
+     *
+     * _.mean([4, 2, 8, 6]);
+     * // => 5
+     */
+    function mean(array) {
+      return baseMean(array, identity);
+    }
+
+    /**
+     * This method is like `_.mean` except that it accepts `iteratee` which is
+     * invoked for each element in `array` to generate the value to be averaged.
+     * The iteratee is invoked with one argument: (value).
+     *
+     * @static
+     * @memberOf _
+     * @since 4.7.0
+     * @category Math
+     * @param {Array} array The array to iterate over.
+     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+     * @returns {number} Returns the mean.
+     * @example
+     *
+     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
+     *
+     * _.meanBy(objects, function(o) { return o.n; });
+     * // => 5
+     *
+     * // The `_.property` iteratee shorthand.
+     * _.meanBy(objects, 'n');
+     * // => 5
+     */
+    function meanBy(array, iteratee) {
+      return baseMean(array, getIteratee(iteratee, 2));
+    }
+
+    /**
+     * Computes the minimum value of `array`. If `array` is empty or falsey,
+     * `undefined` is returned.
+     *
+     * @static
+     * @since 0.1.0
+     * @memberOf _
+     * @category Math
+     * @param {Array} array The array to iterate over.
+     * @returns {*} Returns the minimum value.
+     * @example
+     *
+     * _.min([4, 2, 8, 6]);
+     * // => 2
+     *
+     * _.min([]);
+     * // => undefined
+     */
+    function min(array) {
+      return (array && array.length)
+        ? baseExtremum(array, identity, baseLt)
+        : undefined;
+    }
+
+    /**
+     * This method is like `_.min` except that it accepts `iteratee` which is
+     * invoked for each element in `array` to generate the criterion by which
+     * the value is ranked. The iteratee is invoked with one argument: (value).
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Math
+     * @param {Array} array The array to iterate over.
+     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+     * @returns {*} Returns the minimum value.
+     * @example
+     *
+     * var objects = [{ 'n': 1 }, { 'n': 2 }];
+     *
+     * _.minBy(objects, function(o) { return o.n; });
+     * // => { 'n': 1 }
+     *
+     * // The `_.property` iteratee shorthand.
+     * _.minBy(objects, 'n');
+     * // => { 'n': 1 }
+     */
+    function minBy(array, iteratee) {
+      return (array && array.length)
+        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)
+        : undefined;
+    }
+
+    /**
+     * Multiply two numbers.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.7.0
+     * @category Math
+     * @param {number} multiplier The first number in a multiplication.
+     * @param {number} multiplicand The second number in a multiplication.
+     * @returns {number} Returns the product.
+     * @example
+     *
+     * _.multiply(6, 4);
+     * // => 24
+     */
+    var multiply = createMathOperation(function(multiplier, multiplicand) {
+      return multiplier * multiplicand;
+    }, 1);
+
+    /**
+     * Computes `number` rounded to `precision`.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.10.0
+     * @category Math
+     * @param {number} number The number to round.
+     * @param {number} [precision=0] The precision to round to.
+     * @returns {number} Returns the rounded number.
+     * @example
+     *
+     * _.round(4.006);
+     * // => 4
+     *
+     * _.round(4.006, 2);
+     * // => 4.01
+     *
+     * _.round(4060, -2);
+     * // => 4100
+     */
+    var round = createRound('round');
+
+    /**
+     * Subtract two numbers.
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Math
+     * @param {number} minuend The first number in a subtraction.
+     * @param {number} subtrahend The second number in a subtraction.
+     * @returns {number} Returns the difference.
+     * @example
+     *
+     * _.subtract(6, 4);
+     * // => 2
+     */
+    var subtract = createMathOperation(function(minuend, subtrahend) {
+      return minuend - subtrahend;
+    }, 0);
+
+    /**
+     * Computes the sum of the values in `array`.
+     *
+     * @static
+     * @memberOf _
+     * @since 3.4.0
+     * @category Math
+     * @param {Array} array The array to iterate over.
+     * @returns {number} Returns the sum.
+     * @example
+     *
+     * _.sum([4, 2, 8, 6]);
+     * // => 20
+     */
+    function sum(array) {
+      return (array && array.length)
+        ? baseSum(array, identity)
+        : 0;
+    }
+
+    /**
+     * This method is like `_.sum` except that it accepts `iteratee` which is
+     * invoked for each element in `array` to generate the value to be summed.
+     * The iteratee is invoked with one argument: (value).
+     *
+     * @static
+     * @memberOf _
+     * @since 4.0.0
+     * @category Math
+     * @param {Array} array The array to iterate over.
+     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+     * @returns {number} Returns the sum.
+     * @example
+     *
+     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
+     *
+     * _.sumBy(objects, function(o) { return o.n; });
+     * // => 20
+     *
+     * // The `_.property` iteratee shorthand.
+     * _.sumBy(objects, 'n');
+     * // => 20
+     */
+    function sumBy(array, iteratee) {
+      return (array && array.length)
+        ? baseSum(array, getIteratee(iteratee, 2))
+        : 0;
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    // Add methods that return wrapped values in chain sequences.
+    lodash.after = after;
+    lodash.ary = ary;
+    lodash.assign = assign;
+    lodash.assignIn = assignIn;
+    lodash.assignInWith = assignInWith;
+    lodash.assignWith = assignWith;
+    lodash.at = at;
+    lodash.before = before;
+    lodash.bind = bind;
+    lodash.bindAll = bindAll;
+    lodash.bindKey = bindKey;
+    lodash.castArray = castArray;
+    lodash.chain = chain;
+    lodash.chunk = chunk;
+    lodash.compact = compact;
+    lodash.concat = concat;
+    lodash.cond = cond;
+    lodash.conforms = conforms;
+    lodash.constant = constant;
+    lodash.countBy = countBy;
+    lodash.create = create;
+    lodash.curry = curry;
+    lodash.curryRight = curryRight;
+    lodash.debounce = debounce;
+    lodash.defaults = defaults;
+    lodash.defaultsDeep = defaultsDeep;
+    lodash.defer = defer;
+    lodash.delay = delay;
+    lodash.difference = difference;
+    lodash.differenceBy = differenceBy;
+    lodash.differenceWith = differenceWith;
+    lodash.drop = drop;
+    lodash.dropRight = dropRight;
+    lodash.dropRightWhile = dropRightWhile;
+    lodash.dropWhile = dropWhile;
+    lodash.fill = fill;
+    lodash.filter = filter;
+    lodash.flatMap = flatMap;
+    lodash.flatMapDeep = flatMapDeep;
+    lodash.flatMapDepth = flatMapDepth;
+    lodash.flatten = flatten;
+    lodash.flattenDeep = flattenDeep;
+    lodash.flattenDepth = flattenDepth;
+    lodash.flip = flip;
+    lodash.flow = flow;
+    lodash.flowRight = flowRight;
+    lodash.fromPairs = fromPairs;
+    lodash.functions = functions;
+    lodash.functionsIn = functionsIn;
+    lodash.groupBy = groupBy;
+    lodash.initial = initial;
+    lodash.intersection = intersection;
+    lodash.intersectionBy = intersectionBy;
+    lodash.intersectionWith = intersectionWith;
+    lodash.invert = invert;
+    lodash.invertBy = invertBy;
+    lodash.invokeMap = invokeMap;
+    lodash.iteratee = iteratee;
+    lodash.keyBy = keyBy;
+    lodash.keys = keys;
+    lodash.keysIn = keysIn;
+    lodash.map = map;
+    lodash.mapKeys = mapKeys;
+    lodash.mapValues = mapValues;
+    lodash.matches = matches;
+    lodash.matchesProperty = matchesProperty;
+    lodash.memoize = memoize;
+    lodash.merge = merge;
+    lodash.mergeWith = mergeWith;
+    lodash.method = method;
+    lodash.methodOf = methodOf;
+    lodash.mixin = mixin;
+    lodash.negate = negate;
+    lodash.nthArg = nthArg;
+    lodash.omit = omit;
+    lodash.omitBy = omitBy;
+    lodash.once = once;
+    lodash.orderBy = orderBy;
+    lodash.over = over;
+    lodash.overArgs = overArgs;
+    lodash.overEvery = overEvery;
+    lodash.overSome = overSome;
+    lodash.partial = partial;
+    lodash.partialRight = partialRight;
+    lodash.partition = partition;
+    lodash.pick = pick;
+    lodash.pickBy = pickBy;
+    lodash.property = property;
+    lodash.propertyOf = propertyOf;
+    lodash.pull = pull;
+    lodash.pullAll = pullAll;
+    lodash.pullAllBy = pullAllBy;
+    lodash.pullAllWith = pullAllWith;
+    lodash.pullAt = pullAt;
+    lodash.range = range;
+    lodash.rangeRight = rangeRight;
+    lodash.rearg = rearg;
+    lodash.reject = reject;
+    lodash.remove = remove;
+    lodash.rest = rest;
+    lodash.reverse = reverse;
+    lodash.sampleSize = sampleSize;
+    lodash.set = set;
+    lodash.setWith = setWith;
+    lodash.shuffle = shuffle;
+    lodash.slice = slice;
+    lodash.sortBy = sortBy;
+    lodash.sortedUniq = sortedUniq;
+    lodash.sortedUniqBy = sortedUniqBy;
+    lodash.split = split;
+    lodash.spread = spread;
+    lodash.tail = tail;
+    lodash.take = take;
+    lodash.takeRight = takeRight;
+    lodash.takeRightWhile = takeRightWhile;
+    lodash.takeWhile = takeWhile;
+    lodash.tap = tap;
+    lodash.throttle = throttle;
+    lodash.thru = thru;
+    lodash.toArray = toArray;
+    lodash.toPairs = toPairs;
+    lodash.toPairsIn = toPairsIn;
+    lodash.toPath = toPath;
+    lodash.toPlainObject = toPlainObject;
+    lodash.transform = transform;
+    lodash.unary = unary;
+    lodash.union = union;
+    lodash.unionBy = unionBy;
+    lodash.unionWith = unionWith;
+    lodash.uniq = uniq;
+    lodash.uniqBy = uniqBy;
+    lodash.uniqWith = uniqWith;
+    lodash.unset = unset;
+    lodash.unzip = unzip;
+    lodash.unzipWith = unzipWith;
+    lodash.update = update;
+    lodash.updateWith = updateWith;
+    lodash.values = values;
+    lodash.valuesIn = valuesIn;
+    lodash.without = without;
+    lodash.words = words;
+    lodash.wrap = wrap;
+    lodash.xor = xor;
+    lodash.xorBy = xorBy;
+    lodash.xorWith = xorWith;
+    lodash.zip = zip;
+    lodash.zipObject = zipObject;
+    lodash.zipObjectDeep = zipObjectDeep;
+    lodash.zipWith = zipWith;
+
+    // Add aliases.
+    lodash.entries = toPairs;
+    lodash.entriesIn = toPairsIn;
+    lodash.extend = assignIn;
+    lodash.extendWith = assignInWith;
+
+    // Add methods to `lodash.prototype`.
+    mixin(lodash, lodash);
+
+    /*------------------------------------------------------------------------*/
+
+    // Add methods that return unwrapped values in chain sequences.
+    lodash.add = add;
+    lodash.attempt = attempt;
+    lodash.camelCase = camelCase;
+    lodash.capitalize = capitalize;
+    lodash.ceil = ceil;
+    lodash.clamp = clamp;
+    lodash.clone = clone;
+    lodash.cloneDeep = cloneDeep;
+    lodash.cloneDeepWith = cloneDeepWith;
+    lodash.cloneWith = cloneWith;
+    lodash.conformsTo = conformsTo;
+    lodash.deburr = deburr;
+    lodash.defaultTo = defaultTo;
+    lodash.divide = divide;
+    lodash.endsWith = endsWith;
+    lodash.eq = eq;
+    lodash.escape = escape;
+    lodash.escapeRegExp = escapeRegExp;
+    lodash.every = every;
+    lodash.find = find;
+    lodash.findIndex = findIndex;
+    lodash.findKey = findKey;
+    lodash.findLast = findLast;
+    lodash.findLastIndex = findLastIndex;
+    lodash.findLastKey = findLastKey;
+    lodash.floor = floor;
+    lodash.forEach = forEach;
+    lodash.forEachRight = forEachRight;
+    lodash.forIn = forIn;
+    lodash.forInRight = forInRight;
+    lodash.forOwn = forOwn;
+    lodash.forOwnRight = forOwnRight;
+    lodash.get = get;
+    lodash.gt = gt;
+    lodash.gte = gte;
+    lodash.has = has;
+    lodash.hasIn = hasIn;
+    lodash.head = head;
+    lodash.identity = identity;
+    lodash.includes = includes;
+    lodash.indexOf = indexOf;
+    lodash.inRange = inRange;
+    lodash.invoke = invoke;
+    lodash.isArguments = isArguments;
+    lodash.isArray = isArray;
+    lodash.isArrayBuffer = isArrayBuffer;
+    lodash.isArrayLike = isArrayLike;
+    lodash.isArrayLikeObject = isArrayLikeObject;
+    lodash.isBoolean = isBoolean;
+    lodash.isBuffer = isBuffer;
+    lodash.isDate = isDate;
+    lodash.isElement = isElement;
+    lodash.isEmpty = isEmpty;
+    lodash.isEqual = isEqual;
+    lodash.isEqualWith = isEqualWith;
+    lodash.isError = isError;
+    lodash.isFinite = isFinite;
+    lodash.isFunction = isFunction;
+    lodash.isInteger = isInteger;
+    lodash.isLength = isLength;
+    lodash.isMap = isMap;
+    lodash.isMatch = isMatch;
+    lodash.isMatchWith = isMatchWith;
+    lodash.isNaN = isNaN;
+    lodash.isNative = isNative;
+    lodash.isNil = isNil;
+    lodash.isNull = isNull;
+    lodash.isNumber = isNumber;
+    lodash.isObject = isObject;
+    lodash.isObjectLike = isObjectLike;
+    lodash.isPlainObject = isPlainObject;
+    lodash.isRegExp = isRegExp;
+    lodash.isSafeInteger = isSafeInteger;
+    lodash.isSet = isSet;
+    lodash.isString = isString;
+    lodash.isSymbol = isSymbol;
+    lodash.isTypedArray = isTypedArray;
+    lodash.isUndefined = isUndefined;
+    lodash.isWeakMap = isWeakMap;
+    lodash.isWeakSet = isWeakSet;
+    lodash.join = join;
+    lodash.kebabCase = kebabCase;
+    lodash.last = last;
+    lodash.lastIndexOf = lastIndexOf;
+    lodash.lowerCase = lowerCase;
+    lodash.lowerFirst = lowerFirst;
+    lodash.lt = lt;
+    lodash.lte = lte;
+    lodash.max = max;
+    lodash.maxBy = maxBy;
+    lodash.mean = mean;
+    lodash.meanBy = meanBy;
+    lodash.min = min;
+    lodash.minBy = minBy;
+    lodash.stubArray = stubArray;
+    lodash.stubFalse = stubFalse;
+    lodash.stubObject = stubObject;
+    lodash.stubString = stubString;
+    lodash.stubTrue = stubTrue;
+    lodash.multiply = multiply;
+    lodash.nth = nth;
+    lodash.noConflict = noConflict;
+    lodash.noop = noop;
+    lodash.now = now;
+    lodash.pad = pad;
+    lodash.padEnd = padEnd;
+    lodash.padStart = padStart;
+    lodash.parseInt = parseInt;
+    lodash.random = random;
+    lodash.reduce = reduce;
+    lodash.reduceRight = reduceRight;
+    lodash.repeat = repeat;
+    lodash.replace = replace;
+    lodash.result = result;
+    lodash.round = round;
+    lodash.runInContext = runInContext;
+    lodash.sample = sample;
+    lodash.size = size;
+    lodash.snakeCase = snakeCase;
+    lodash.some = some;
+    lodash.sortedIndex = sortedIndex;
+    lodash.sortedIndexBy = sortedIndexBy;
+    lodash.sortedIndexOf = sortedIndexOf;
+    lodash.sortedLastIndex = sortedLastIndex;
+    lodash.sortedLastIndexBy = sortedLastIndexBy;
+    lodash.sortedLastIndexOf = sortedLastIndexOf;
+    lodash.startCase = startCase;
+    lodash.startsWith = startsWith;
+    lodash.subtract = subtract;
+    lodash.sum = sum;
+    lodash.sumBy = sumBy;
+    lodash.template = template;
+    lodash.times = times;
+    lodash.toFinite = toFinite;
+    lodash.toInteger = toInteger;
+    lodash.toLength = toLength;
+    lodash.toLower = toLower;
+    lodash.toNumber = toNumber;
+    lodash.toSafeInteger = toSafeInteger;
+    lodash.toString = toString;
+    lodash.toUpper = toUpper;
+    lodash.trim = trim;
+    lodash.trimEnd = trimEnd;
+    lodash.trimStart = trimStart;
+    lodash.truncate = truncate;
+    lodash.unescape = unescape;
+    lodash.uniqueId = uniqueId;
+    lodash.upperCase = upperCase;
+    lodash.upperFirst = upperFirst;
+
+    // Add aliases.
+    lodash.each = forEach;
+    lodash.eachRight = forEachRight;
+    lodash.first = head;
+
+    mixin(lodash, (function() {
+      var source = {};
+      baseForOwn(lodash, function(func, methodName) {
+        if (!hasOwnProperty.call(lodash.prototype, methodName)) {
+          source[methodName] = func;
+        }
+      });
+      return source;
+    }()), { 'chain': false });
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * The semantic version number.
+     *
+     * @static
+     * @memberOf _
+     * @type {string}
+     */
+    lodash.VERSION = VERSION;
+
+    // Assign default placeholders.
+    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
+      lodash[methodName].placeholder = lodash;
+    });
+
+    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
+    arrayEach(['drop', 'take'], function(methodName, index) {
+      LazyWrapper.prototype[methodName] = function(n) {
+        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);
+
+        var result = (this.__filtered__ && !index)
+          ? new LazyWrapper(this)
+          : this.clone();
+
+        if (result.__filtered__) {
+          result.__takeCount__ = nativeMin(n, result.__takeCount__);
+        } else {
+          result.__views__.push({
+            'size': nativeMin(n, MAX_ARRAY_LENGTH),
+            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')
+          });
+        }
+        return result;
+      };
+
+      LazyWrapper.prototype[methodName + 'Right'] = function(n) {
+        return this.reverse()[methodName](n).reverse();
+      };
+    });
+
+    // Add `LazyWrapper` methods that accept an `iteratee` value.
+    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
+      var type = index + 1,
+          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;
+
+      LazyWrapper.prototype[methodName] = function(iteratee) {
+        var result = this.clone();
+        result.__iteratees__.push({
+          'iteratee': getIteratee(iteratee, 3),
+          'type': type
+        });
+        result.__filtered__ = result.__filtered__ || isFilter;
+        return result;
+      };
+    });
+
+    // Add `LazyWrapper` methods for `_.head` and `_.last`.
+    arrayEach(['head', 'last'], function(methodName, index) {
+      var takeName = 'take' + (index ? 'Right' : '');
+
+      LazyWrapper.prototype[methodName] = function() {
+        return this[takeName](1).value()[0];
+      };
+    });
+
+    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.
+    arrayEach(['initial', 'tail'], function(methodName, index) {
+      var dropName = 'drop' + (index ? '' : 'Right');
+
+      LazyWrapper.prototype[methodName] = function() {
+        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
+      };
+    });
+
+    LazyWrapper.prototype.compact = function() {
+      return this.filter(identity);
+    };
+
+    LazyWrapper.prototype.find = function(predicate) {
+      return this.filter(predicate).head();
+    };
+
+    LazyWrapper.prototype.findLast = function(predicate) {
+      return this.reverse().find(predicate);
+    };
+
+    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
+      if (typeof path == 'function') {
+        return new LazyWrapper(this);
+      }
+      return this.map(function(value) {
+        return baseInvoke(value, path, args);
+      });
+    });
+
+    LazyWrapper.prototype.reject = function(predicate) {
+      return this.filter(negate(getIteratee(predicate)));
+    };
+
+    LazyWrapper.prototype.slice = function(start, end) {
+      start = toInteger(start);
+
+      var result = this;
+      if (result.__filtered__ && (start > 0 || end < 0)) {
+        return new LazyWrapper(result);
+      }
+      if (start < 0) {
+        result = result.takeRight(-start);
+      } else if (start) {
+        result = result.drop(start);
+      }
+      if (end !== undefined) {
+        end = toInteger(end);
+        result = end < 0 ? result.dropRight(-end) : result.take(end - start);
+      }
+      return result;
+    };
+
+    LazyWrapper.prototype.takeRightWhile = function(predicate) {
+      return this.reverse().takeWhile(predicate).reverse();
+    };
+
+    LazyWrapper.prototype.toArray = function() {
+      return this.take(MAX_ARRAY_LENGTH);
+    };
+
+    // Add `LazyWrapper` methods to `lodash.prototype`.
+    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
+      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),
+          isTaker = /^(?:head|last)$/.test(methodName),
+          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
+          retUnwrapped = isTaker || /^find/.test(methodName);
+
+      if (!lodashFunc) {
+        return;
+      }
+      lodash.prototype[methodName] = function() {
+        var value = this.__wrapped__,
+            args = isTaker ? [1] : arguments,
+            isLazy = value instanceof LazyWrapper,
+            iteratee = args[0],
+            useLazy = isLazy || isArray(value);
+
+        var interceptor = function(value) {
+          var result = lodashFunc.apply(lodash, arrayPush([value], args));
+          return (isTaker && chainAll) ? result[0] : result;
+        };
+
+        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
+          // Avoid lazy use if the iteratee has a "length" value other than `1`.
+          isLazy = useLazy = false;
+        }
+        var chainAll = this.__chain__,
+            isHybrid = !!this.__actions__.length,
+            isUnwrapped = retUnwrapped && !chainAll,
+            onlyLazy = isLazy && !isHybrid;
+
+        if (!retUnwrapped && useLazy) {
+          value = onlyLazy ? value : new LazyWrapper(this);
+          var result = func.apply(value, args);
+          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
+          return new LodashWrapper(result, chainAll);
+        }
+        if (isUnwrapped && onlyLazy) {
+          return func.apply(this, args);
+        }
+        result = this.thru(interceptor);
+        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;
+      };
+    });
+
+    // Add `Array` methods to `lodash.prototype`.
+    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
+      var func = arrayProto[methodName],
+          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
+          retUnwrapped = /^(?:pop|shift)$/.test(methodName);
+
+      lodash.prototype[methodName] = function() {
+        var args = arguments;
+        if (retUnwrapped && !this.__chain__) {
+          var value = this.value();
+          return func.apply(isArray(value) ? value : [], args);
+        }
+        return this[chainName](function(value) {
+          return func.apply(isArray(value) ? value : [], args);
+        });
+      };
+    });
+
+    // Map minified method names to their real names.
+    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
+      var lodashFunc = lodash[methodName];
+      if (lodashFunc) {
+        var key = (lodashFunc.name + ''),
+            names = realNames[key] || (realNames[key] = []);
+
+        names.push({ 'name': methodName, 'func': lodashFunc });
+      }
+    });
+
+    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
+      'name': 'wrapper',
+      'func': undefined
+    }];
+
+    // Add methods to `LazyWrapper`.
+    LazyWrapper.prototype.clone = lazyClone;
+    LazyWrapper.prototype.reverse = lazyReverse;
+    LazyWrapper.prototype.value = lazyValue;
+
+    // Add chain sequence methods to the `lodash` wrapper.
+    lodash.prototype.at = wrapperAt;
+    lodash.prototype.chain = wrapperChain;
+    lodash.prototype.commit = wrapperCommit;
+    lodash.prototype.next = wrapperNext;
+    lodash.prototype.plant = wrapperPlant;
+    lodash.prototype.reverse = wrapperReverse;
+    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;
+
+    // Add lazy aliases.
+    lodash.prototype.first = lodash.prototype.head;
+
+    if (symIterator) {
+      lodash.prototype[symIterator] = wrapperToIterator;
+    }
+    return lodash;
+  });
+
+  /*--------------------------------------------------------------------------*/
+
+  // Export lodash.
+  var _ = runInContext();
+
+  // Some AMD build optimizers, like r.js, check for condition patterns like:
+  if (true) {
+    // Expose Lodash on the global object to prevent errors when Lodash is
+    // loaded by a script tag in the presence of an AMD loader.
+    // See http://requirejs.org/docs/errors.html#mismatch for more details.
+    // Use `_.noConflict` to remove Lodash from the global object.
+    root._ = _;
+
+    // Define as an anonymous module so, through path mapping, it can be
+    // referenced as the "underscore" module.
+    !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
+      return _;
+    }.call(exports, __webpack_require__, exports, module),
+				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+  }
+  // Check for `exports` after `define` in case a build optimizer adds it.
+  else if (freeModule) {
+    // Export for Node.js.
+    (freeModule.exports = _)._ = _;
+    // Export for CommonJS support.
+    freeExports._ = _;
+  }
+  else {
+    // Export to the global object.
+    root._ = _;
+  }
+}.call(this));
+
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6), __webpack_require__(14)(module)))
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* WEBPACK VAR INJECTION */(function(process) {
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var util = {};
+module.exports = util;
+
+util.isPipeObject = function (obj) {
+  return (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj.hasOwnProperty('pipe') && _typeof(obj.pipe) === 'object';
+};
+
+util.isPipeJson = function (obj) {
+  return (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj.hasOwnProperty('op') && obj.hasOwnProperty('params');
+};
+
+util.isNodeJs = function () {
+  return Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';
+};
+
+util.arrayBufferToString = function (buf) {
+
+  if (this.isNodeJs()) {
+    return buf.toString('utf-8');
+  } else {
+
+    if ("TextDecoder" in window) {
+      return new TextDecoder('utf-8').decode(buf);
+    } else {
+      var uint8arr = new Uint8Array(buf);
+      var utf8str = '';
+      var i,
+          len = uint8arr.length;
+      for (i = 0; i < len; ++i) {
+        utf8str += String.fromCharCode(uint8arr[i]);
+      }
+      return decodeURIComponent(escape(utf8str));
+    }
+  }
+};
+
+util.callbackAdapter = function (err, response, resolve, reject, callback) {
+  if (typeof callback == 'function') {
+    callback(err, response);
+  } else {
+    if (err) {
+      reject(err);
+    } else {
+      resolve(response);
+    }
+  }
+};
+
+module.exports.getUtilObject = function (Flexio) {
+
+  return new function () {
+
+    for (var method in util) {
+      if (util.hasOwnProperty(method)) {
+        this[method] = util[method];
+      }
+    }
+
+    this.debug = function (msg) {
+      var cfg = Flexio.getConfig();
+      if (cfg.debug) {
+        var msg = 'flexio-sdk-js: ' + msg;
+
+        console.log(msg);
+      }
+      return this;
+    };
+  }();
+};
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+module.exports = {
+  TASK_OP_CALC: 'calc',
+  TASK_OP_COMMENT: 'comment',
+  TASK_OP_CONVERT: 'convert',
+  TASK_OP_COPY: 'copy',
+  TASK_OP_CREATE: 'create',
+  TASK_OP_CUSTOM: 'custom',
+  TASK_OP_DISTINCT: 'distinct',
+  TASK_OP_DUMP: 'dump',
+  TASK_OP_DUPLICATE: 'duplicate',
+  TASK_OP_ECHO: 'echo',
+  TASK_OP_EMAIL_SEND: 'email',
+  TASK_OP_EXECUTE: 'execute',
+  TASK_OP_FIND_REPLACE: 'replace',
+  TASK_OP_FILTER: 'filter',
+  TASK_OP_FOREACH: 'foreach',
+  TASK_OP_GROUP: 'group',
+  TASK_OP_INSERT: 'insert',
+  TASK_OP_LIMIT: 'limit',
+  TASK_OP_LIST: 'list',
+  TASK_OP_MERGE: 'merge',
+  TASK_OP_MKDIR: 'mkdir',
+  TASK_OP_NOP: 'nop',
+  TASK_OP_PROMPT: 'prompt',
+  TASK_OP_R: 'r',
+  TASK_OP_READ: 'read',
+  TASK_OP_RENAME: 'rename',
+  TASK_OP_RENDER: 'render',
+  TASK_OP_REQUEST: 'request',
+  TASK_OP_SEARCH: 'search',
+  TASK_OP_SELECT: 'select',
+  TASK_OP_SEQUENCE: 'sequence',
+  TASK_OP_SET: 'set',
+  TASK_OP_SLEEP: 'sleep',
+  TASK_OP_SORT: 'sort',
+  TASK_OP_TRANSFORM: 'transform',
+  TASK_OP_WRITE: 'write'
+};
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var bind = __webpack_require__(7);
+var isBuffer = __webpack_require__(17);
+
+/*global toString:true*/
+
+// utils is a library of generic helper functions non-specific to axios
+
+var toString = Object.prototype.toString;
+
+/**
+ * Determine if a value is an Array
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an Array, otherwise false
+ */
+function isArray(val) {
+  return toString.call(val) === '[object Array]';
+}
+
+/**
+ * Determine if a value is an ArrayBuffer
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an ArrayBuffer, otherwise false
+ */
+function isArrayBuffer(val) {
+  return toString.call(val) === '[object ArrayBuffer]';
+}
+
+/**
+ * Determine if a value is a FormData
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an FormData, otherwise false
+ */
+function isFormData(val) {
+  return (typeof FormData !== 'undefined') && (val instanceof FormData);
+}
+
+/**
+ * Determine if a value is a view on an ArrayBuffer
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
+ */
+function isArrayBufferView(val) {
+  var result;
+  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
+    result = ArrayBuffer.isView(val);
+  } else {
+    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);
+  }
+  return result;
+}
+
+/**
+ * Determine if a value is a String
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a String, otherwise false
+ */
+function isString(val) {
+  return typeof val === 'string';
+}
+
+/**
+ * Determine if a value is a Number
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Number, otherwise false
+ */
+function isNumber(val) {
+  return typeof val === 'number';
+}
+
+/**
+ * Determine if a value is undefined
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if the value is undefined, otherwise false
+ */
+function isUndefined(val) {
+  return typeof val === 'undefined';
+}
+
+/**
+ * Determine if a value is an Object
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an Object, otherwise false
+ */
+function isObject(val) {
+  return val !== null && typeof val === 'object';
+}
+
+/**
+ * Determine if a value is a Date
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Date, otherwise false
+ */
+function isDate(val) {
+  return toString.call(val) === '[object Date]';
+}
+
+/**
+ * Determine if a value is a File
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a File, otherwise false
+ */
+function isFile(val) {
+  return toString.call(val) === '[object File]';
+}
+
+/**
+ * Determine if a value is a Blob
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Blob, otherwise false
+ */
+function isBlob(val) {
+  return toString.call(val) === '[object Blob]';
+}
+
+/**
+ * Determine if a value is a Function
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Function, otherwise false
+ */
+function isFunction(val) {
+  return toString.call(val) === '[object Function]';
+}
+
+/**
+ * Determine if a value is a Stream
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Stream, otherwise false
+ */
+function isStream(val) {
+  return isObject(val) && isFunction(val.pipe);
+}
+
+/**
+ * Determine if a value is a URLSearchParams object
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a URLSearchParams object, otherwise false
+ */
+function isURLSearchParams(val) {
+  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;
+}
+
+/**
+ * Trim excess whitespace off the beginning and end of a string
+ *
+ * @param {String} str The String to trim
+ * @returns {String} The String freed of excess whitespace
+ */
+function trim(str) {
+  return str.replace(/^\s*/, '').replace(/\s*$/, '');
+}
+
+/**
+ * Determine if we're running in a standard browser environment
+ *
+ * This allows axios to run in a web worker, and react-native.
+ * Both environments support XMLHttpRequest, but not fully standard globals.
+ *
+ * web workers:
+ *  typeof window -> undefined
+ *  typeof document -> undefined
+ *
+ * react-native:
+ *  navigator.product -> 'ReactNative'
+ */
+function isStandardBrowserEnv() {
+  if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
+    return false;
+  }
+  return (
+    typeof window !== 'undefined' &&
+    typeof document !== 'undefined'
+  );
+}
+
+/**
+ * Iterate over an Array or an Object invoking a function for each item.
+ *
+ * If `obj` is an Array callback will be called passing
+ * the value, index, and complete array for each item.
+ *
+ * If 'obj' is an Object callback will be called passing
+ * the value, key, and complete object for each property.
+ *
+ * @param {Object|Array} obj The object to iterate
+ * @param {Function} fn The callback to invoke for each item
+ */
+function forEach(obj, fn) {
+  // Don't bother if no value provided
+  if (obj === null || typeof obj === 'undefined') {
+    return;
+  }
+
+  // Force an array if not already something iterable
+  if (typeof obj !== 'object' && !isArray(obj)) {
+    /*eslint no-param-reassign:0*/
+    obj = [obj];
+  }
+
+  if (isArray(obj)) {
+    // Iterate over array values
+    for (var i = 0, l = obj.length; i < l; i++) {
+      fn.call(null, obj[i], i, obj);
+    }
+  } else {
+    // Iterate over object keys
+    for (var key in obj) {
+      if (Object.prototype.hasOwnProperty.call(obj, key)) {
+        fn.call(null, obj[key], key, obj);
+      }
+    }
+  }
+}
+
+/**
+ * Accepts varargs expecting each argument to be an object, then
+ * immutably merges the properties of each object and returns result.
+ *
+ * When multiple objects contain the same key the later object in
+ * the arguments list will take precedence.
+ *
+ * Example:
+ *
+ * ```js
+ * var result = merge({foo: 123}, {foo: 456});
+ * console.log(result.foo); // outputs 456
+ * ```
+ *
+ * @param {Object} obj1 Object to merge
+ * @returns {Object} Result of all merge properties
+ */
+function merge(/* obj1, obj2, obj3, ... */) {
+  var result = {};
+  function assignValue(val, key) {
+    if (typeof result[key] === 'object' && typeof val === 'object') {
+      result[key] = merge(result[key], val);
+    } else {
+      result[key] = val;
+    }
+  }
+
+  for (var i = 0, l = arguments.length; i < l; i++) {
+    forEach(arguments[i], assignValue);
+  }
+  return result;
+}
+
+/**
+ * Extends object a by mutably adding to it the properties of object b.
+ *
+ * @param {Object} a The object to be extended
+ * @param {Object} b The object to copy properties from
+ * @param {Object} thisArg The object to bind function to
+ * @return {Object} The resulting value of object a
+ */
+function extend(a, b, thisArg) {
+  forEach(b, function assignValue(val, key) {
+    if (thisArg && typeof val === 'function') {
+      a[key] = bind(val, thisArg);
+    } else {
+      a[key] = val;
+    }
+  });
+  return a;
+}
+
+module.exports = {
+  isArray: isArray,
+  isArrayBuffer: isArrayBuffer,
+  isBuffer: isBuffer,
+  isFormData: isFormData,
+  isArrayBufferView: isArrayBufferView,
+  isString: isString,
+  isNumber: isNumber,
+  isObject: isObject,
+  isUndefined: isUndefined,
+  isDate: isDate,
+  isFile: isFile,
+  isBlob: isBlob,
+  isFunction: isFunction,
+  isStream: isStream,
+  isURLSearchParams: isURLSearchParams,
+  isStandardBrowserEnv: isStandardBrowserEnv,
+  forEach: forEach,
+  merge: merge,
+  extend: extend,
+  trim: trim
+};
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports) {
+
+// shim for using process in browser
+var process = module.exports = {};
+
+// cached from whatever global is present so that test runners that stub it
+// don't break things.  But we need to wrap it in a try catch in case it is
+// wrapped in strict mode code which doesn't define any globals.  It's inside a
+// function because try/catches deoptimize in certain engines.
+
+var cachedSetTimeout;
+var cachedClearTimeout;
+
+function defaultSetTimout() {
+    throw new Error('setTimeout has not been defined');
+}
+function defaultClearTimeout () {
+    throw new Error('clearTimeout has not been defined');
+}
+(function () {
+    try {
+        if (typeof setTimeout === 'function') {
+            cachedSetTimeout = setTimeout;
+        } else {
+            cachedSetTimeout = defaultSetTimout;
+        }
+    } catch (e) {
+        cachedSetTimeout = defaultSetTimout;
+    }
+    try {
+        if (typeof clearTimeout === 'function') {
+            cachedClearTimeout = clearTimeout;
+        } else {
+            cachedClearTimeout = defaultClearTimeout;
+        }
+    } catch (e) {
+        cachedClearTimeout = defaultClearTimeout;
+    }
+} ())
+function runTimeout(fun) {
+    if (cachedSetTimeout === setTimeout) {
+        //normal enviroments in sane situations
+        return setTimeout(fun, 0);
+    }
+    // if setTimeout wasn't available but was latter defined
+    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
+        cachedSetTimeout = setTimeout;
+        return setTimeout(fun, 0);
+    }
+    try {
+        // when when somebody has screwed with setTimeout but no I.E. maddness
+        return cachedSetTimeout(fun, 0);
+    } catch(e){
+        try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
+            return cachedSetTimeout.call(null, fun, 0);
+        } catch(e){
+            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
+            return cachedSetTimeout.call(this, fun, 0);
+        }
+    }
+
+
+}
+function runClearTimeout(marker) {
+    if (cachedClearTimeout === clearTimeout) {
+        //normal enviroments in sane situations
+        return clearTimeout(marker);
+    }
+    // if clearTimeout wasn't available but was latter defined
+    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
+        cachedClearTimeout = clearTimeout;
+        return clearTimeout(marker);
+    }
+    try {
+        // when when somebody has screwed with setTimeout but no I.E. maddness
+        return cachedClearTimeout(marker);
+    } catch (e){
+        try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
+            return cachedClearTimeout.call(null, marker);
+        } catch (e){
+            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
+            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
+            return cachedClearTimeout.call(this, marker);
+        }
+    }
+
+
+
+}
+var queue = [];
+var draining = false;
+var currentQueue;
+var queueIndex = -1;
+
+function cleanUpNextTick() {
+    if (!draining || !currentQueue) {
+        return;
+    }
+    draining = false;
+    if (currentQueue.length) {
+        queue = currentQueue.concat(queue);
+    } else {
+        queueIndex = -1;
+    }
+    if (queue.length) {
+        drainQueue();
+    }
+}
+
+function drainQueue() {
+    if (draining) {
+        return;
+    }
+    var timeout = runTimeout(cleanUpNextTick);
+    draining = true;
+
+    var len = queue.length;
+    while(len) {
+        currentQueue = queue;
+        queue = [];
+        while (++queueIndex < len) {
+            if (currentQueue) {
+                currentQueue[queueIndex].run();
+            }
+        }
+        queueIndex = -1;
+        len = queue.length;
+    }
+    currentQueue = null;
+    draining = false;
+    runClearTimeout(timeout);
+}
+
+process.nextTick = function (fun) {
+    var args = new Array(arguments.length - 1);
+    if (arguments.length > 1) {
+        for (var i = 1; i < arguments.length; i++) {
+            args[i - 1] = arguments[i];
+        }
+    }
+    queue.push(new Item(fun, args));
+    if (queue.length === 1 && !draining) {
+        runTimeout(drainQueue);
+    }
+};
+
+// v8 likes predictible objects
+function Item(fun, array) {
+    this.fun = fun;
+    this.array = array;
+}
+Item.prototype.run = function () {
+    this.fun.apply(null, this.array);
+};
+process.title = 'browser';
+process.browser = true;
+process.env = {};
+process.argv = [];
+process.version = ''; // empty string to avoid regexp issues
+process.versions = {};
+
+function noop() {}
+
+process.on = noop;
+process.addListener = noop;
+process.once = noop;
+process.off = noop;
+process.removeListener = noop;
+process.removeAllListeners = noop;
+process.emit = noop;
+process.prependListener = noop;
+process.prependOnceListener = noop;
+
+process.listeners = function (name) { return [] }
+
+process.binding = function (name) {
+    throw new Error('process.binding is not supported');
+};
+
+process.cwd = function () { return '/' };
+process.chdir = function (dir) {
+    throw new Error('process.chdir is not supported');
+};
+process.umask = function() { return 0; };
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* WEBPACK VAR INJECTION */(function(process) {
+
+var utils = __webpack_require__(3);
+var normalizeHeaderName = __webpack_require__(19);
+
+var DEFAULT_CONTENT_TYPE = {
+  'Content-Type': 'application/x-www-form-urlencoded'
+};
+
+function setContentTypeIfUnset(headers, value) {
+  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
+    headers['Content-Type'] = value;
+  }
+}
+
+function getDefaultAdapter() {
+  var adapter;
+  if (typeof XMLHttpRequest !== 'undefined') {
+    // For browsers use XHR adapter
+    adapter = __webpack_require__(8);
+  } else if (typeof process !== 'undefined') {
+    // For node use HTTP adapter
+    adapter = __webpack_require__(8);
+  }
+  return adapter;
+}
+
+var defaults = {
+  adapter: getDefaultAdapter(),
+
+  transformRequest: [function transformRequest(data, headers) {
+    normalizeHeaderName(headers, 'Content-Type');
+    if (utils.isFormData(data) ||
+      utils.isArrayBuffer(data) ||
+      utils.isBuffer(data) ||
+      utils.isStream(data) ||
+      utils.isFile(data) ||
+      utils.isBlob(data)
+    ) {
+      return data;
+    }
+    if (utils.isArrayBufferView(data)) {
+      return data.buffer;
+    }
+    if (utils.isURLSearchParams(data)) {
+      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
+      return data.toString();
+    }
+    if (utils.isObject(data)) {
+      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
+      return JSON.stringify(data);
+    }
+    return data;
+  }],
+
+  transformResponse: [function transformResponse(data) {
+    /*eslint no-param-reassign:0*/
+    if (typeof data === 'string') {
+      try {
+        data = JSON.parse(data);
+      } catch (e) { /* Ignore */ }
+    }
+    return data;
+  }],
+
+  timeout: 0,
+
+  xsrfCookieName: 'XSRF-TOKEN',
+  xsrfHeaderName: 'X-XSRF-TOKEN',
+
+  maxContentLength: -1,
+
+  validateStatus: function validateStatus(status) {
+    return status >= 200 && status < 300;
+  }
+};
+
+defaults.headers = {
+  common: {
+    'Accept': 'application/json, text/plain, */*'
+  }
+};
+
+utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
+  defaults.headers[method] = {};
+});
+
+utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
+  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
+});
+
+module.exports = defaults;
+
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports) {
+
+var g;
+
+// This works in non-strict mode
+g = (function() {
+	return this;
+})();
+
+try {
+	// This works if eval is allowed (see CSP)
+	g = g || Function("return this")() || (1,eval)("this");
+} catch(e) {
+	// This works if the window reference is available
+	if(typeof window === "object")
+		g = window;
+}
+
+// g can still be undefined, but nothing to do about it...
+// We return undefined, instead of nothing here, so it's
+// easier to handle this case. if(!global) { ...}
+
+module.exports = g;
+
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+module.exports = function bind(fn, thisArg) {
+  return function wrap() {
+    var args = new Array(arguments.length);
+    for (var i = 0; i < args.length; i++) {
+      args[i] = arguments[i];
+    }
+    return fn.apply(thisArg, args);
+  };
+};
+
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* WEBPACK VAR INJECTION */(function(process) {
+
+var utils = __webpack_require__(3);
+var settle = __webpack_require__(20);
+var buildURL = __webpack_require__(22);
+var parseHeaders = __webpack_require__(23);
+var isURLSameOrigin = __webpack_require__(24);
+var createError = __webpack_require__(9);
+var btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || __webpack_require__(25);
+
+module.exports = function xhrAdapter(config) {
+  return new Promise(function dispatchXhrRequest(resolve, reject) {
+    var requestData = config.data;
+    var requestHeaders = config.headers;
+
+    if (utils.isFormData(requestData)) {
+      delete requestHeaders['Content-Type']; // Let the browser set it
+    }
+
+    var request = new XMLHttpRequest();
+    var loadEvent = 'onreadystatechange';
+    var xDomain = false;
+
+    // For IE 8/9 CORS support
+    // Only supports POST and GET calls and doesn't returns the response headers.
+    // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.
+    if (process.env.NODE_ENV !== 'test' &&
+        typeof window !== 'undefined' &&
+        window.XDomainRequest && !('withCredentials' in request) &&
+        !isURLSameOrigin(config.url)) {
+      request = new window.XDomainRequest();
+      loadEvent = 'onload';
+      xDomain = true;
+      request.onprogress = function handleProgress() {};
+      request.ontimeout = function handleTimeout() {};
+    }
+
+    // HTTP basic authentication
+    if (config.auth) {
+      var username = config.auth.username || '';
+      var password = config.auth.password || '';
+      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
+    }
+
+    request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);
+
+    // Set the request timeout in MS
+    request.timeout = config.timeout;
+
+    // Listen for ready state
+    request[loadEvent] = function handleLoad() {
+      if (!request || (request.readyState !== 4 && !xDomain)) {
+        return;
+      }
+
+      // The request errored out and we didn't get a response, this will be
+      // handled by onerror instead
+      // With one exception: request that using file: protocol, most browsers
+      // will return status as 0 even though it's a successful request
+      if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
+        return;
+      }
+
+      // Prepare the response
+      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
+      var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;
+      var response = {
+        data: responseData,
+        // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)
+        status: request.status === 1223 ? 204 : request.status,
+        statusText: request.status === 1223 ? 'No Content' : request.statusText,
+        headers: responseHeaders,
+        config: config,
+        request: request
+      };
+
+      settle(resolve, reject, response);
+
+      // Clean up request
+      request = null;
+    };
+
+    // Handle low level network errors
+    request.onerror = function handleError() {
+      // Real errors are hidden from us by the browser
+      // onerror should only fire if it's a network error
+      reject(createError('Network Error', config, null, request));
+
+      // Clean up request
+      request = null;
+    };
+
+    // Handle timeout
+    request.ontimeout = function handleTimeout() {
+      reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',
+        request));
+
+      // Clean up request
+      request = null;
+    };
+
+    // Add xsrf header
+    // This is only done if running in a standard browser environment.
+    // Specifically not if we're in a web worker, or react-native.
+    if (utils.isStandardBrowserEnv()) {
+      var cookies = __webpack_require__(26);
+
+      // Add xsrf header
+      var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?
+          cookies.read(config.xsrfCookieName) :
+          undefined;
+
+      if (xsrfValue) {
+        requestHeaders[config.xsrfHeaderName] = xsrfValue;
+      }
+    }
+
+    // Add headers to the request
+    if ('setRequestHeader' in request) {
+      utils.forEach(requestHeaders, function setRequestHeader(val, key) {
+        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
+          // Remove Content-Type if data is undefined
+          delete requestHeaders[key];
+        } else {
+          // Otherwise add header to the request
+          request.setRequestHeader(key, val);
+        }
+      });
+    }
+
+    // Add withCredentials to request if needed
+    if (config.withCredentials) {
+      request.withCredentials = true;
+    }
+
+    // Add responseType to request if needed
+    if (config.responseType) {
+      try {
+        request.responseType = config.responseType;
+      } catch (e) {
+        // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.
+        // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.
+        if (config.responseType !== 'json') {
+          throw e;
+        }
+      }
+    }
+
+    // Handle progress if needed
+    if (typeof config.onDownloadProgress === 'function') {
+      request.addEventListener('progress', config.onDownloadProgress);
+    }
+
+    // Not all browsers support upload events
+    if (typeof config.onUploadProgress === 'function' && request.upload) {
+      request.upload.addEventListener('progress', config.onUploadProgress);
+    }
+
+    if (config.cancelToken) {
+      // Handle cancellation
+      config.cancelToken.promise.then(function onCanceled(cancel) {
+        if (!request) {
+          return;
+        }
+
+        request.abort();
+        reject(cancel);
+        // Clean up request
+        request = null;
+      });
+    }
+
+    if (requestData === undefined) {
+      requestData = null;
+    }
+
+    // Send the request
+    request.send(requestData);
+  });
+};
+
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var enhanceError = __webpack_require__(21);
+
+/**
+ * Create an Error with the specified message, config, error code, request and response.
+ *
+ * @param {string} message The error message.
+ * @param {Object} config The config.
+ * @param {string} [code] The error code (for example, 'ECONNABORTED').
+ * @param {Object} [request] The request.
+ * @param {Object} [response] The response.
+ * @returns {Error} The created error.
+ */
+module.exports = function createError(message, config, code, request, response) {
+  var error = new Error(message);
+  return enhanceError(error, config, code, request, response);
+};
+
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+module.exports = function isCancel(value) {
+  return !!(value && value.__CANCEL__);
+};
+
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * A `Cancel` is an object that is thrown when an operation is canceled.
+ *
+ * @class
+ * @param {string=} message The message.
+ */
+function Cancel(message) {
+  this.message = message;
+}
+
+Cancel.prototype.toString = function toString() {
+  return 'Cancel' + (this.message ? ': ' + this.message : '');
+};
+
+Cancel.prototype.__CANCEL__ = true;
+
+module.exports = Cancel;
+
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+
+var Flexio = __webpack_require__(13);
+
+exports.default = Flexio;
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* WEBPACK VAR INJECTION */(function(process) {
+
+var _ = __webpack_require__(0);
+var axios = __webpack_require__(15);
+var task = __webpack_require__(34);
+
+var base_url = 'https://www.flex.io/api/v1';
+
+var cfg = {
+  token: '',
+  baseUrl: 'https://www.flex.io/api/v1',
+  insecure: false,
+  debug: false
+};
+
+var pipeToCode = function pipeToCode(task_arr) {
+  var retval = _.map(task_arr, function (t) {
+    var cmd_str = Flexio.task.toCode(t);
+
+    if (_.get(t, 'params.lang', '') != 'python') cmd_str = cmd_str.replace(/\n/g, '\n  ');
+
+    return cmd_str;
+  });
+
+  var retval = ['Flexio.pipe()'].concat(retval);
+
+  return retval.join('\n  .');
+};
+
+var Flexio = {
+  version: __webpack_require__(63).version,
+
+  _init: function _init() {
+    this.connections = __webpack_require__(64).getConnectionsObject(this);
+    this.pipes = __webpack_require__(65).getPipesObject(this);
+    this.util = __webpack_require__(1).getUtilObject(this);
+    this._http = null;
+
+    var getPipeConstructor = __webpack_require__(66).getPipeConstructor;
+    this.pipe = getPipeConstructor(this);
+
+
+    var getConnectionConstructor = __webpack_require__(67).getConnectionConstructor;
+    this.connection = getConnectionConstructor(this);
+  },
+  setup: function setup(token, params) {
+    cfg = _.assign(cfg, { token: token }, params);
+    this._http = null;
+    this._createHttp();
+    return this;
+  },
+  getConfig: function getConfig() {
+    return _.assign({}, cfg);
+  },
+  http: function http() {
+    if (!this._http) this._createHttp();
+
+    return this._http;
+  },
+
+
+  task: task,
+
+  _createHttp: function _createHttp() {
+    var axios_opts = {
+      baseURL: cfg.baseUrl,
+      headers: { 'Authorization': 'Bearer ' + cfg.token }
+    };
+
+    if (cfg.insecure === true) process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
+
+    this._http = axios.create(axios_opts);
+  }
+};
+
+Flexio._init();
+
+module.exports = Flexio;
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports) {
+
+module.exports = function(module) {
+	if(!module.webpackPolyfill) {
+		module.deprecate = function() {};
+		module.paths = [];
+		// module.parent = undefined by default
+		if(!module.children) module.children = [];
+		Object.defineProperty(module, "loaded", {
+			enumerable: true,
+			get: function() {
+				return module.l;
+			}
+		});
+		Object.defineProperty(module, "id", {
+			enumerable: true,
+			get: function() {
+				return module.i;
+			}
+		});
+		module.webpackPolyfill = 1;
+	}
+	return module;
+};
+
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__(16);
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+var bind = __webpack_require__(7);
+var Axios = __webpack_require__(18);
+var defaults = __webpack_require__(5);
+
+/**
+ * Create an instance of Axios
+ *
+ * @param {Object} defaultConfig The default config for the instance
+ * @return {Axios} A new instance of Axios
+ */
+function createInstance(defaultConfig) {
+  var context = new Axios(defaultConfig);
+  var instance = bind(Axios.prototype.request, context);
+
+  // Copy axios.prototype to instance
+  utils.extend(instance, Axios.prototype, context);
+
+  // Copy context to instance
+  utils.extend(instance, context);
+
+  return instance;
+}
+
+// Create the default instance to be exported
+var axios = createInstance(defaults);
+
+// Expose Axios class to allow class inheritance
+axios.Axios = Axios;
+
+// Factory for creating new instances
+axios.create = function create(instanceConfig) {
+  return createInstance(utils.merge(defaults, instanceConfig));
+};
+
+// Expose Cancel & CancelToken
+axios.Cancel = __webpack_require__(11);
+axios.CancelToken = __webpack_require__(32);
+axios.isCancel = __webpack_require__(10);
+
+// Expose all/spread
+axios.all = function all(promises) {
+  return Promise.all(promises);
+};
+axios.spread = __webpack_require__(33);
+
+module.exports = axios;
+
+// Allow use of default import syntax in TypeScript
+module.exports.default = axios;
+
+
+/***/ }),
+/* 17 */
+/***/ (function(module, exports) {
+
+/*!
+ * Determine if an object is a Buffer
+ *
+ * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
+ * @license  MIT
+ */
+
+// The _isBuffer check is for Safari 5-7 support, because it's missing
+// Object.prototype.constructor. Remove this eventually
+module.exports = function (obj) {
+  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
+}
+
+function isBuffer (obj) {
+  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
+}
+
+// For Node v0.10 support. Remove this eventually.
+function isSlowBuffer (obj) {
+  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
+}
+
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var defaults = __webpack_require__(5);
+var utils = __webpack_require__(3);
+var InterceptorManager = __webpack_require__(27);
+var dispatchRequest = __webpack_require__(28);
+var isAbsoluteURL = __webpack_require__(30);
+var combineURLs = __webpack_require__(31);
+
+/**
+ * Create a new instance of Axios
+ *
+ * @param {Object} instanceConfig The default config for the instance
+ */
+function Axios(instanceConfig) {
+  this.defaults = instanceConfig;
+  this.interceptors = {
+    request: new InterceptorManager(),
+    response: new InterceptorManager()
+  };
+}
+
+/**
+ * Dispatch a request
+ *
+ * @param {Object} config The config specific for this request (merged with this.defaults)
+ */
+Axios.prototype.request = function request(config) {
+  /*eslint no-param-reassign:0*/
+  // Allow for axios('example/url'[, config]) a la fetch API
+  if (typeof config === 'string') {
+    config = utils.merge({
+      url: arguments[0]
+    }, arguments[1]);
+  }
+
+  config = utils.merge(defaults, this.defaults, { method: 'get' }, config);
+  config.method = config.method.toLowerCase();
+
+  // Support baseURL config
+  if (config.baseURL && !isAbsoluteURL(config.url)) {
+    config.url = combineURLs(config.baseURL, config.url);
+  }
+
+  // Hook up interceptors middleware
+  var chain = [dispatchRequest, undefined];
+  var promise = Promise.resolve(config);
+
+  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
+    chain.unshift(interceptor.fulfilled, interceptor.rejected);
+  });
+
+  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
+    chain.push(interceptor.fulfilled, interceptor.rejected);
+  });
+
+  while (chain.length) {
+    promise = promise.then(chain.shift(), chain.shift());
+  }
+
+  return promise;
+};
+
+// Provide aliases for supported request methods
+utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
+  /*eslint func-names:0*/
+  Axios.prototype[method] = function(url, config) {
+    return this.request(utils.merge(config || {}, {
+      method: method,
+      url: url
+    }));
+  };
+});
+
+utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
+  /*eslint func-names:0*/
+  Axios.prototype[method] = function(url, data, config) {
+    return this.request(utils.merge(config || {}, {
+      method: method,
+      url: url,
+      data: data
+    }));
+  };
+});
+
+module.exports = Axios;
+
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+
+module.exports = function normalizeHeaderName(headers, normalizedName) {
+  utils.forEach(headers, function processHeader(value, name) {
+    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
+      headers[normalizedName] = value;
+      delete headers[name];
+    }
+  });
+};
+
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var createError = __webpack_require__(9);
+
+/**
+ * Resolve or reject a Promise based on response status.
+ *
+ * @param {Function} resolve A function that resolves the promise.
+ * @param {Function} reject A function that rejects the promise.
+ * @param {object} response The response.
+ */
+module.exports = function settle(resolve, reject, response) {
+  var validateStatus = response.config.validateStatus;
+  // Note: status is not exposed by XDomainRequest
+  if (!response.status || !validateStatus || validateStatus(response.status)) {
+    resolve(response);
+  } else {
+    reject(createError(
+      'Request failed with status code ' + response.status,
+      response.config,
+      null,
+      response.request,
+      response
+    ));
+  }
+};
+
+
+/***/ }),
+/* 21 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * Update an Error with the specified config, error code, and response.
+ *
+ * @param {Error} error The error to update.
+ * @param {Object} config The config.
+ * @param {string} [code] The error code (for example, 'ECONNABORTED').
+ * @param {Object} [request] The request.
+ * @param {Object} [response] The response.
+ * @returns {Error} The error.
+ */
+module.exports = function enhanceError(error, config, code, request, response) {
+  error.config = config;
+  if (code) {
+    error.code = code;
+  }
+  error.request = request;
+  error.response = response;
+  return error;
+};
+
+
+/***/ }),
+/* 22 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+
+function encode(val) {
+  return encodeURIComponent(val).
+    replace(/%40/gi, '@').
+    replace(/%3A/gi, ':').
+    replace(/%24/g, '$').
+    replace(/%2C/gi, ',').
+    replace(/%20/g, '+').
+    replace(/%5B/gi, '[').
+    replace(/%5D/gi, ']');
+}
+
+/**
+ * Build a URL by appending params to the end
+ *
+ * @param {string} url The base of the url (e.g., http://www.google.com)
+ * @param {object} [params] The params to be appended
+ * @returns {string} The formatted url
+ */
+module.exports = function buildURL(url, params, paramsSerializer) {
+  /*eslint no-param-reassign:0*/
+  if (!params) {
+    return url;
+  }
+
+  var serializedParams;
+  if (paramsSerializer) {
+    serializedParams = paramsSerializer(params);
+  } else if (utils.isURLSearchParams(params)) {
+    serializedParams = params.toString();
+  } else {
+    var parts = [];
+
+    utils.forEach(params, function serialize(val, key) {
+      if (val === null || typeof val === 'undefined') {
+        return;
+      }
+
+      if (utils.isArray(val)) {
+        key = key + '[]';
+      }
+
+      if (!utils.isArray(val)) {
+        val = [val];
+      }
+
+      utils.forEach(val, function parseValue(v) {
+        if (utils.isDate(v)) {
+          v = v.toISOString();
+        } else if (utils.isObject(v)) {
+          v = JSON.stringify(v);
+        }
+        parts.push(encode(key) + '=' + encode(v));
+      });
+    });
+
+    serializedParams = parts.join('&');
+  }
+
+  if (serializedParams) {
+    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
+  }
+
+  return url;
+};
+
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+
+/**
+ * Parse headers into an object
+ *
+ * ```
+ * Date: Wed, 27 Aug 2014 08:58:49 GMT
+ * Content-Type: application/json
+ * Connection: keep-alive
+ * Transfer-Encoding: chunked
+ * ```
+ *
+ * @param {String} headers Headers needing to be parsed
+ * @returns {Object} Headers parsed into an object
+ */
+module.exports = function parseHeaders(headers) {
+  var parsed = {};
+  var key;
+  var val;
+  var i;
+
+  if (!headers) { return parsed; }
+
+  utils.forEach(headers.split('\n'), function parser(line) {
+    i = line.indexOf(':');
+    key = utils.trim(line.substr(0, i)).toLowerCase();
+    val = utils.trim(line.substr(i + 1));
+
+    if (key) {
+      parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
+    }
+  });
+
+  return parsed;
+};
+
+
+/***/ }),
+/* 24 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+
+module.exports = (
+  utils.isStandardBrowserEnv() ?
+
+  // Standard browser envs have full support of the APIs needed to test
+  // whether the request URL is of the same origin as current location.
+  (function standardBrowserEnv() {
+    var msie = /(msie|trident)/i.test(navigator.userAgent);
+    var urlParsingNode = document.createElement('a');
+    var originURL;
+
+    /**
+    * Parse a URL to discover it's components
+    *
+    * @param {String} url The URL to be parsed
+    * @returns {Object}
+    */
+    function resolveURL(url) {
+      var href = url;
+
+      if (msie) {
+        // IE needs attribute set twice to normalize properties
+        urlParsingNode.setAttribute('href', href);
+        href = urlParsingNode.href;
+      }
+
+      urlParsingNode.setAttribute('href', href);
+
+      // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
+      return {
+        href: urlParsingNode.href,
+        protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
+        host: urlParsingNode.host,
+        search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
+        hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
+        hostname: urlParsingNode.hostname,
+        port: urlParsingNode.port,
+        pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
+                  urlParsingNode.pathname :
+                  '/' + urlParsingNode.pathname
+      };
+    }
+
+    originURL = resolveURL(window.location.href);
+
+    /**
+    * Determine if a URL shares the same origin as the current location
+    *
+    * @param {String} requestURL The URL to test
+    * @returns {boolean} True if URL shares the same origin, otherwise false
+    */
+    return function isURLSameOrigin(requestURL) {
+      var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
+      return (parsed.protocol === originURL.protocol &&
+            parsed.host === originURL.host);
+    };
+  })() :
+
+  // Non standard browser envs (web workers, react-native) lack needed support.
+  (function nonStandardBrowserEnv() {
+    return function isURLSameOrigin() {
+      return true;
+    };
+  })()
+);
+
+
+/***/ }),
+/* 25 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js
+
+var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+function E() {
+  this.message = 'String contains an invalid character';
+}
+E.prototype = new Error;
+E.prototype.code = 5;
+E.prototype.name = 'InvalidCharacterError';
+
+function btoa(input) {
+  var str = String(input);
+  var output = '';
+  for (
+    // initialize result and counter
+    var block, charCode, idx = 0, map = chars;
+    // if the next str index does not exist:
+    //   change the mapping table to "="
+    //   check if d has no fractional digits
+    str.charAt(idx | 0) || (map = '=', idx % 1);
+    // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8
+    output += map.charAt(63 & block >> 8 - idx % 1 * 8)
+  ) {
+    charCode = str.charCodeAt(idx += 3 / 4);
+    if (charCode > 0xFF) {
+      throw new E();
+    }
+    block = block << 8 | charCode;
+  }
+  return output;
+}
+
+module.exports = btoa;
+
+
+/***/ }),
+/* 26 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+
+module.exports = (
+  utils.isStandardBrowserEnv() ?
+
+  // Standard browser envs support document.cookie
+  (function standardBrowserEnv() {
+    return {
+      write: function write(name, value, expires, path, domain, secure) {
+        var cookie = [];
+        cookie.push(name + '=' + encodeURIComponent(value));
+
+        if (utils.isNumber(expires)) {
+          cookie.push('expires=' + new Date(expires).toGMTString());
+        }
+
+        if (utils.isString(path)) {
+          cookie.push('path=' + path);
+        }
+
+        if (utils.isString(domain)) {
+          cookie.push('domain=' + domain);
+        }
+
+        if (secure === true) {
+          cookie.push('secure');
+        }
+
+        document.cookie = cookie.join('; ');
+      },
+
+      read: function read(name) {
+        var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
+        return (match ? decodeURIComponent(match[3]) : null);
+      },
+
+      remove: function remove(name) {
+        this.write(name, '', Date.now() - 86400000);
+      }
+    };
+  })() :
+
+  // Non standard browser env (web workers, react-native) lack needed support.
+  (function nonStandardBrowserEnv() {
+    return {
+      write: function write() {},
+      read: function read() { return null; },
+      remove: function remove() {}
+    };
+  })()
+);
+
+
+/***/ }),
+/* 27 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+
+function InterceptorManager() {
+  this.handlers = [];
+}
+
+/**
+ * Add a new interceptor to the stack
+ *
+ * @param {Function} fulfilled The function to handle `then` for a `Promise`
+ * @param {Function} rejected The function to handle `reject` for a `Promise`
+ *
+ * @return {Number} An ID used to remove interceptor later
+ */
+InterceptorManager.prototype.use = function use(fulfilled, rejected) {
+  this.handlers.push({
+    fulfilled: fulfilled,
+    rejected: rejected
+  });
+  return this.handlers.length - 1;
+};
+
+/**
+ * Remove an interceptor from the stack
+ *
+ * @param {Number} id The ID that was returned by `use`
+ */
+InterceptorManager.prototype.eject = function eject(id) {
+  if (this.handlers[id]) {
+    this.handlers[id] = null;
+  }
+};
+
+/**
+ * Iterate over all the registered interceptors
+ *
+ * This method is particularly useful for skipping over any
+ * interceptors that may have become `null` calling `eject`.
+ *
+ * @param {Function} fn The function to call for each interceptor
+ */
+InterceptorManager.prototype.forEach = function forEach(fn) {
+  utils.forEach(this.handlers, function forEachHandler(h) {
+    if (h !== null) {
+      fn(h);
+    }
+  });
+};
+
+module.exports = InterceptorManager;
+
+
+/***/ }),
+/* 28 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+var transformData = __webpack_require__(29);
+var isCancel = __webpack_require__(10);
+var defaults = __webpack_require__(5);
+
+/**
+ * Throws a `Cancel` if cancellation has been requested.
+ */
+function throwIfCancellationRequested(config) {
+  if (config.cancelToken) {
+    config.cancelToken.throwIfRequested();
+  }
+}
+
+/**
+ * Dispatch a request to the server using the configured adapter.
+ *
+ * @param {object} config The config that is to be used for the request
+ * @returns {Promise} The Promise to be fulfilled
+ */
+module.exports = function dispatchRequest(config) {
+  throwIfCancellationRequested(config);
+
+  // Ensure headers exist
+  config.headers = config.headers || {};
+
+  // Transform request data
+  config.data = transformData(
+    config.data,
+    config.headers,
+    config.transformRequest
+  );
+
+  // Flatten headers
+  config.headers = utils.merge(
+    config.headers.common || {},
+    config.headers[config.method] || {},
+    config.headers || {}
+  );
+
+  utils.forEach(
+    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
+    function cleanHeaderConfig(method) {
+      delete config.headers[method];
+    }
+  );
+
+  var adapter = config.adapter || defaults.adapter;
+
+  return adapter(config).then(function onAdapterResolution(response) {
+    throwIfCancellationRequested(config);
+
+    // Transform response data
+    response.data = transformData(
+      response.data,
+      response.headers,
+      config.transformResponse
+    );
+
+    return response;
+  }, function onAdapterRejection(reason) {
+    if (!isCancel(reason)) {
+      throwIfCancellationRequested(config);
+
+      // Transform response data
+      if (reason && reason.response) {
+        reason.response.data = transformData(
+          reason.response.data,
+          reason.response.headers,
+          config.transformResponse
+        );
+      }
+    }
+
+    return Promise.reject(reason);
+  });
+};
+
+
+/***/ }),
+/* 29 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(3);
+
+/**
+ * Transform the data for a request or a response
+ *
+ * @param {Object|String} data The data to be transformed
+ * @param {Array} headers The headers for the request or response
+ * @param {Array|Function} fns A single function or Array of functions
+ * @returns {*} The resulting transformed data
+ */
+module.exports = function transformData(data, headers, fns) {
+  /*eslint no-param-reassign:0*/
+  utils.forEach(fns, function transform(fn) {
+    data = fn(data, headers);
+  });
+
+  return data;
+};
+
+
+/***/ }),
+/* 30 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * Determines whether the specified URL is absolute
+ *
+ * @param {string} url The URL to test
+ * @returns {boolean} True if the specified URL is absolute, otherwise false
+ */
+module.exports = function isAbsoluteURL(url) {
+  // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
+  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
+  // by any combination of letters, digits, plus, period, or hyphen.
+  return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
+};
+
+
+/***/ }),
+/* 31 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * Creates a new URL by combining the specified URLs
+ *
+ * @param {string} baseURL The base URL
+ * @param {string} relativeURL The relative URL
+ * @returns {string} The combined URL
+ */
+module.exports = function combineURLs(baseURL, relativeURL) {
+  return relativeURL
+    ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
+    : baseURL;
+};
+
+
+/***/ }),
+/* 32 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var Cancel = __webpack_require__(11);
+
+/**
+ * A `CancelToken` is an object that can be used to request cancellation of an operation.
+ *
+ * @class
+ * @param {Function} executor The executor function.
+ */
+function CancelToken(executor) {
+  if (typeof executor !== 'function') {
+    throw new TypeError('executor must be a function.');
+  }
+
+  var resolvePromise;
+  this.promise = new Promise(function promiseExecutor(resolve) {
+    resolvePromise = resolve;
+  });
+
+  var token = this;
+  executor(function cancel(message) {
+    if (token.reason) {
+      // Cancellation has already been requested
+      return;
+    }
+
+    token.reason = new Cancel(message);
+    resolvePromise(token.reason);
+  });
+}
+
+/**
+ * Throws a `Cancel` if cancellation has been requested.
+ */
+CancelToken.prototype.throwIfRequested = function throwIfRequested() {
+  if (this.reason) {
+    throw this.reason;
+  }
+};
+
+/**
+ * Returns an object that contains a new `CancelToken` and a function that, when called,
+ * cancels the `CancelToken`.
+ */
+CancelToken.source = function source() {
+  var cancel;
+  var token = new CancelToken(function executor(c) {
+    cancel = c;
+  });
+  return {
+    token: token,
+    cancel: cancel
+  };
+};
+
+module.exports = CancelToken;
+
+
+/***/ }),
+/* 33 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * Syntactic sugar for invoking a function and expanding an array for arguments.
+ *
+ * Common use case would be to use `Function.prototype.apply`.
+ *
+ *  ```js
+ *  function f(x, y, z) {}
+ *  var args = [1, 2, 3];
+ *  f.apply(null, args);
+ *  ```
+ *
+ * With `spread` this example can be re-written.
+ *
+ *  ```js
+ *  spread(function(x, y, z) {})([1, 2, 3]);
+ *  ```
+ *
+ * @param {Function} callback
+ * @returns {Function}
+ */
+module.exports = function spread(callback) {
+  return function wrap(arr) {
+    return callback.apply(null, arr);
+  };
+};
+
+
+/***/ }),
+/* 34 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var taskOps = __webpack_require__(2);
+
+var createFn = __webpack_require__(35);
+var convertFn = __webpack_require__(36);
+var copyFn = __webpack_require__(37);
+var dumpFn = __webpack_require__(38);
+var echoFn = __webpack_require__(39);
+var emailFn = __webpack_require__(40);
+var executeFn = __webpack_require__(41);
+var filterFn = __webpack_require__(46);
+var foreachFn = __webpack_require__(47);
+var insertFn = __webpack_require__(48);
+var limitFn = __webpack_require__(49);
+var mergeFn = __webpack_require__(50);
+var mkdirFn = __webpack_require__(51);
+var listFn = __webpack_require__(52);
+var readFn = __webpack_require__(53);
+var renderFn = __webpack_require__(54);
+var requestFn = __webpack_require__(55);
+var selectFn = __webpack_require__(56);
+var sequenceFn = __webpack_require__(57);
+var setFn = __webpack_require__(58);
+var sleepFn = __webpack_require__(59);
+var taskFn = __webpack_require__(60);
+var transformFn = __webpack_require__(61);
+var writeFn = __webpack_require__(62);
+
+var toCode = function toCode(json, Flexio) {
+  var op = _.get(json, 'op', '');
+
+  switch (op) {
+    default:
+      return taskFn.toCode(json);
+
+    case taskOps.TASK_OP_CREATE:
+      return createFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_CONVERT:
+      return convertFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_COPY:
+      return copyFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_DUMP:
+      return dumpFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_ECHO:
+      return echoFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_EMAIL_SEND:
+      return emailFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_EXECUTE:
+      return executeFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_FILTER:
+      return filterFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_FOREACH:
+      return foreachFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_INSERT:
+      return insertFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_LIMIT:
+      return limitFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_LIST:
+      return listFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_MERGE:
+      return mergeFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_MKDIR:
+      return mkdirFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_READ:
+      return readFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_RENDER:
+      return renderFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_REQUEST:
+      return requestFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_SELECT:
+      return selectFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_SEQUENCE:
+      return sequenceFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_SET:
+      return setFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_SLEEP:
+      return sleepFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_TRANSFORM:
+      return transformFn.toCode(json, Flexio);
+    case taskOps.TASK_OP_WRITE:
+      return writeFn.toCode(json, Flexio);
+  }
+};
+
+module.exports = {
+  create: createFn,
+  convert: convertFn,
+  copy: copyFn,
+  dump: dumpFn,
+  echo: echoFn,
+  email: emailFn,
+  execute: executeFn.execute,
+  insert: insertFn,
+  filter: filterFn,
+
+  foreach: foreachFn,
+  javascript: executeFn.javascript,
+  limit: limitFn,
+  list: listFn,
+  merge: mergeFn,
+  mkdir: mkdirFn,
+  python: executeFn.python,
+  read: readFn,
+  render: renderFn,
+  request: requestFn,
+  select: selectFn,
+  sequence: sequenceFn,
+  set: setFn,
+  sleep: sleepFn,
+  task: taskFn,
+  transform: transformFn,
+  write: writeFn,
+
+  toCode: toCode
+};
+
+/***/ }),
+/* 35 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var create = function create(p0, p1) {
+
+  if (Array.isArray(p0)) {
+    return {
+      op: taskOps.TASK_OP_CREATE,
+      params: {
+        content_type: "application/vnd.flexio.table",
+        columns: p0
+      }
+    };
+  } else {
+    var ret = {
+      op: taskOps.TASK_OP_CREATE,
+      params: {
+        path: p0
+      }
+    };
+
+    if (p1 !== undefined) {
+      if (Array.isArray(p1)) {
+        ret.params.columns = p1;
+      } else {
+        ret.params.content_type = p1;
+      }
+    }
+
+    return ret;
+  }
+};
+
+create.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var path = JSON.stringify(params.path) || undefined;
+  var content_type = JSON.stringify(params.content_type) || undefined;
+  var columns = JSON.stringify(params.columns) || undefined;
+
+  if (path !== undefined) {
+
+    if (columns !== undefined) {
+      return 'create(' + path + ', ' + columns + ')';
+    } else if (content_type !== undefined) {
+      return 'create(' + path + ', ' + content_type + ')';
+    } else {
+      return 'create(' + path + ')';
+    }
+  } else {
+
+    if (columns !== undefined) {
+      return 'create(' + columns + ')';
+    } else if (content_type !== undefined) {
+      return '';
+    }
+  }
+};
+
+module.exports = create;
+
+/***/ }),
+/* 36 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var DELIMITER_NONE = '{none}';
+var DELIMITER_COMMA = '{comma}';
+var DELIMITER_SEMICOLON = '{semicolon}';
+var DELIMITER_PIPE = '{pipe}';
+var DELIMITER_TAB = '{tab}';
+var DELIMITER_SPACE = '{space}';
+
+var TEXT_QUALIFIER_NONE = '{none}';
+var TEXT_QUALIFIER_SINGLE_QUOTE = '{single-quote}';
+var TEXT_QUALIFIER_DOUBLE_QUOTE = '{double-quote}';
+
+var FORMAT_DELIMITED_TEXT = 'delimited';
+var FORMAT_FIXED_LENGTH = 'fixed';
+var FORMAT_JSON = 'json';
+var FORMAT_RSS = 'rss';
+var FORMAT_PDF = 'pdf';
+var FORMAT_TABLE = 'table';
+
+var SHORTHAND_CSV = 'csv';
+var SHORTHAND_TSV = 'tsv';
+
+var FORMAT_CSV = {
+  format: FORMAT_DELIMITED_TEXT,
+  delimiter: DELIMITER_COMMA,
+  header: true,
+  qualifier: TEXT_QUALIFIER_DOUBLE_QUOTE
+};
+
+var FORMAT_TSV = {
+  format: FORMAT_DELIMITED_TEXT,
+  delimiter: DELIMITER_TAB,
+  header: true,
+  qualifier: TEXT_QUALIFIER_NONE
+};
+
+var convert = function convert(input, output) {
+
+  var task = {
+    op: taskOps.TASK_OP_CONVERT,
+    params: {}
+  };
+
+  if (_.isString(input)) {
+    if (input == SHORTHAND_CSV) _.set(task, 'params.input', FORMAT_CSV);else if (input == SHORTHAND_TSV) _.set(task, 'params.input', FORMAT_TSV);else _.set(task, 'params.input.format', input);
+  } else if (_.isPlainObject(input)) {
+    _.set(task, 'params.input', input);
+  }
+
+  if (_.isString(output)) {
+    if (output == SHORTHAND_CSV) _.set(task, 'params.output', FORMAT_CSV);else if (output == SHORTHAND_TSV) _.set(task, 'params.output', FORMAT_TSV);else _.set(task, 'params.output.format', output);
+  } else if (_.isPlainObject(output)) {
+    _.set(task, 'params.output', output);
+  }
+
+  return task;
+};
+
+convert.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var input = _.get(params, 'input', {});
+  var output = _.get(params, 'output', {});
+
+  var p1;
+  var p2;
+
+  if (_.isEqual(input, FORMAT_CSV)) p1 = SHORTHAND_CSV;
+  if (_.isEqual(output, FORMAT_CSV)) p2 = SHORTHAND_CSV;
+
+  if (_.isEqual(input, FORMAT_TSV)) p1 = SHORTHAND_TSV;
+  if (_.isEqual(output, FORMAT_TSV)) p2 = SHORTHAND_TSV;
+
+  if (_.isEmpty(_.omit(input, ['format']))) p1 = _.get(input, 'format', '');
+  if (_.isEmpty(_.omit(output, ['format']))) p2 = _.get(output, 'format', '');
+
+  if (!p1) p1 = input;
+  if (!p2) p2 = output;
+
+  return 'convert(' + JSON.stringify(p1) + ', ' + JSON.stringify(p2) + ')';
+};
+
+module.exports = convert;
+
+/***/ }),
+/* 37 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var copy = function copy(from, to, options) {
+  var ret = {
+    op: taskOps.TASK_OP_COPY,
+    params: {
+      from: from,
+      to: to
+    }
+  };
+
+  if (_.isPlainObject(options)) {
+    ret.params.options = options;
+  }
+  return ret;
+};
+
+copy.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var from = JSON.stringify(params.from) || '""';
+  var to = JSON.stringify(params.to) || '""';
+  var options = params.hasOwnProperty('options') && _.isPlainObject(params.options) ? JSON.stringify(params.options) : null;
+
+  var ret = 'copy(' + from + ', ' + to;
+  if (options !== null) {
+    ret += ', ' + options;
+  }
+  return ret + ')';
+};
+
+module.exports = copy;
+
+/***/ }),
+/* 38 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var dump = function dump(msg) {
+  return {
+    op: taskOps.TASK_OP_DUMP,
+    params: {
+      msg: msg
+    }
+  };
+};
+
+dump.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var msg = JSON.stringify(params.msg) || '""';
+  return 'dump(' + msg + ')';
+};
+
+module.exports = dump;
+
+/***/ }),
+/* 39 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var echo = function echo(msg) {
+  return {
+    op: taskOps.TASK_OP_ECHO,
+    params: {
+      msg: msg
+    }
+  };
+};
+
+echo.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var msg = JSON.stringify(params.msg) || '""';
+  return 'echo(' + msg + ')';
+};
+
+module.exports = echo;
+
+/***/ }),
+/* 40 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var email = function email(params) {
+  if (!_.isPlainObject(params)) throw 'The first function parameter must be an object';
+
+  if (!_.has(params, 'to')) throw 'The `to` parameter is required';
+
+  if (!_.has(params, 'body_text')) throw 'The `body_text` parameter is required';
+
+  return {
+    op: taskOps.TASK_OP_EMAIL_SEND,
+    params: params
+  };
+};
+
+email.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  return 'email(' + JSON.stringify(params, null, 2) + ')';
+};
+
+module.exports = email;
+
+/***/ }),
+/* 41 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* WEBPACK VAR INJECTION */(function(process, Buffer) {
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+
+var isNodeJs = function isNodeJs() {
+  return typeof process !== 'undefined';
+};
+
+var toBase64 = function toBase64(str) {
+  try {
+    if (isNodeJs()) {
+      return Buffer(str, 'utf8').toString('base64');
+    } else {
+      return btoa(unescape(encodeURIComponent(str)));
+    }
+  } catch (e) {
+    return e;
+  }
+};
+
+var fromBase64 = function fromBase64(str) {
+  try {
+    if (isNodeJs()) {
+      return Buffer.from(str, 'base64').toString('utf8');
+    } else {
+      return decodeURIComponent(escape(atob(str)));
+    }
+  } catch (e) {
+    return e;
+  }
+};
+
+var getJsFunctionBody = function getJsFunctionBody(f) {
+  var body;
+
+  try {
+    body = f.toString();
+
+    body = body.substring(body.indexOf('{') + 1, body.lastIndexOf('}'));
+  } catch (e) {
+    body = '';
+  }
+
+  return body;
+};
+
+var getJsExport = function getJsExport(f) {
+  if (_.isString(f)) return f;
+
+  if (_.isFunction(f)) {
+    var body;
+
+    if (f.length == 0) {
+      body = getJsFunctionBody(f);
+      return 'exports.flexio_handler = function(context) ' + body;
+    } else {
+      body = f.toString();
+      if (body.substring(0, 8) == 'function') {
+        body = body.slice(8);
+      } else {
+        var arrow = body.indexOf('=>');
+        var brace = body.indexOf('{');
+
+        if (arrow >= 0 && arrow < brace) {
+          body = body.replace('=>\s*{', '{');
+        }
+      }
+      return 'exports.flexio_handler = function' + body;
+    }
+  }
+};
+
+var execute = function execute() {
+  var args = Array.from(arguments);
+  var param0 = _.get(args, '[0]', null);
+  var param1 = _.get(args, '[1]', null);
+  var param2 = _.get(args, '[2]', null);
+  var lang, code, check;
+
+  var task = {
+    op: taskOps.TASK_OP_EXECUTE,
+    params: {}
+  };
+
+  if (param0 == 'python' || param0 == 'javascript') {
+    lang = param0;
+    code = param1;
+    if (code === null || code === undefined) {
+      code = '';
+    }
+    check = param2;
+  } else {
+    lang = 'javascript';
+    code = param0;
+    check = param1;
+  }
+
+  if (lang == 'javascript') {
+    code = getJsExport(code);
+  }
+
+  _.set(task, 'params.lang', lang);
+
+  var http_regex = /^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/;
+  if (code.match(http_regex)) {
+    _.set(task, 'params.path', code);
+  } else {
+    _.set(task, 'params.code', toBase64(code));
+  }
+
+  if (check !== null) {
+    _.set(task, 'params.integrity', check);
+  }
+
+  return task;
+};
+
+var javascript = function javascript() {
+  var args = Array.from(arguments);
+  args.unshift('javascript');
+  return execute.apply(this, args);
+};
+
+var python = function python() {
+  var args = Array.from(arguments);
+  args.unshift('python');
+  return execute.apply(this, args);
+};
+
+var toCode = function toCode(json) {
+  var params = _.get(json, 'params', {});
+  var lang = params.lang || '';
+  var code = fromBase64(params.code || '');
+
+  switch (lang) {
+    case 'javascript':
+      code = code.replace('exports.flexio_handler =', '');
+      return 'javascript(' + code.trim() + ')';
+    case 'python':
+      return 'python(`\n' + code + '\n`)';
+    default:
+      return 'execute(' + JSON.stringify(lang) + ', `\n' + code + '\n`)';
+  }
+};
+
+module.exports = {
+  execute: execute,
+  javascript: javascript,
+  python: python,
+  toCode: toCode
+};
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4), __webpack_require__(42).Buffer))
+
+/***/ }),
+/* 42 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* WEBPACK VAR INJECTION */(function(global) {/*!
+ * The buffer module from node.js, for the browser.
+ *
+ * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
+ * @license  MIT
+ */
+/* eslint-disable no-proto */
+
+
+
+var base64 = __webpack_require__(43)
+var ieee754 = __webpack_require__(44)
+var isArray = __webpack_require__(45)
+
+exports.Buffer = Buffer
+exports.SlowBuffer = SlowBuffer
+exports.INSPECT_MAX_BYTES = 50
+
+/**
+ * If `Buffer.TYPED_ARRAY_SUPPORT`:
+ *   === true    Use Uint8Array implementation (fastest)
+ *   === false   Use Object implementation (most compatible, even IE6)
+ *
+ * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
+ * Opera 11.6+, iOS 4.2+.
+ *
+ * Due to various browser bugs, sometimes the Object implementation will be used even
+ * when the browser supports typed arrays.
+ *
+ * Note:
+ *
+ *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
+ *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
+ *
+ *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
+ *
+ *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
+ *     incorrect length in some situations.
+
+ * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
+ * get the Object implementation, which is slower but behaves correctly.
+ */
+Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
+  ? global.TYPED_ARRAY_SUPPORT
+  : typedArraySupport()
+
+/*
+ * Export kMaxLength after typed array support is determined.
+ */
+exports.kMaxLength = kMaxLength()
+
+function typedArraySupport () {
+  try {
+    var arr = new Uint8Array(1)
+    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
+    return arr.foo() === 42 && // typed array instances can be augmented
+        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
+        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
+  } catch (e) {
+    return false
+  }
+}
+
+function kMaxLength () {
+  return Buffer.TYPED_ARRAY_SUPPORT
+    ? 0x7fffffff
+    : 0x3fffffff
+}
+
+function createBuffer (that, length) {
+  if (kMaxLength() < length) {
+    throw new RangeError('Invalid typed array length')
+  }
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    // Return an augmented `Uint8Array` instance, for best performance
+    that = new Uint8Array(length)
+    that.__proto__ = Buffer.prototype
+  } else {
+    // Fallback: Return an object instance of the Buffer class
+    if (that === null) {
+      that = new Buffer(length)
+    }
+    that.length = length
+  }
+
+  return that
+}
+
+/**
+ * The Buffer constructor returns instances of `Uint8Array` that have their
+ * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
+ * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
+ * and the `Uint8Array` methods. Square bracket notation works as expected -- it
+ * returns a single octet.
+ *
+ * The `Uint8Array` prototype remains unmodified.
+ */
+
+function Buffer (arg, encodingOrOffset, length) {
+  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
+    return new Buffer(arg, encodingOrOffset, length)
+  }
+
+  // Common case.
+  if (typeof arg === 'number') {
+    if (typeof encodingOrOffset === 'string') {
+      throw new Error(
+        'If encoding is specified then the first argument must be a string'
+      )
+    }
+    return allocUnsafe(this, arg)
+  }
+  return from(this, arg, encodingOrOffset, length)
+}
+
+Buffer.poolSize = 8192 // not used by this implementation
+
+// TODO: Legacy, not needed anymore. Remove in next major version.
+Buffer._augment = function (arr) {
+  arr.__proto__ = Buffer.prototype
+  return arr
+}
+
+function from (that, value, encodingOrOffset, length) {
+  if (typeof value === 'number') {
+    throw new TypeError('"value" argument must not be a number')
+  }
+
+  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
+    return fromArrayBuffer(that, value, encodingOrOffset, length)
+  }
+
+  if (typeof value === 'string') {
+    return fromString(that, value, encodingOrOffset)
+  }
+
+  return fromObject(that, value)
+}
+
+/**
+ * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
+ * if value is a number.
+ * Buffer.from(str[, encoding])
+ * Buffer.from(array)
+ * Buffer.from(buffer)
+ * Buffer.from(arrayBuffer[, byteOffset[, length]])
+ **/
+Buffer.from = function (value, encodingOrOffset, length) {
+  return from(null, value, encodingOrOffset, length)
+}
+
+if (Buffer.TYPED_ARRAY_SUPPORT) {
+  Buffer.prototype.__proto__ = Uint8Array.prototype
+  Buffer.__proto__ = Uint8Array
+  if (typeof Symbol !== 'undefined' && Symbol.species &&
+      Buffer[Symbol.species] === Buffer) {
+    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
+    Object.defineProperty(Buffer, Symbol.species, {
+      value: null,
+      configurable: true
+    })
+  }
+}
+
+function assertSize (size) {
+  if (typeof size !== 'number') {
+    throw new TypeError('"size" argument must be a number')
+  } else if (size < 0) {
+    throw new RangeError('"size" argument must not be negative')
+  }
+}
+
+function alloc (that, size, fill, encoding) {
+  assertSize(size)
+  if (size <= 0) {
+    return createBuffer(that, size)
+  }
+  if (fill !== undefined) {
+    // Only pay attention to encoding if it's a string. This
+    // prevents accidentally sending in a number that would
+    // be interpretted as a start offset.
+    return typeof encoding === 'string'
+      ? createBuffer(that, size).fill(fill, encoding)
+      : createBuffer(that, size).fill(fill)
+  }
+  return createBuffer(that, size)
+}
+
+/**
+ * Creates a new filled Buffer instance.
+ * alloc(size[, fill[, encoding]])
+ **/
+Buffer.alloc = function (size, fill, encoding) {
+  return alloc(null, size, fill, encoding)
+}
+
+function allocUnsafe (that, size) {
+  assertSize(size)
+  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)
+  if (!Buffer.TYPED_ARRAY_SUPPORT) {
+    for (var i = 0; i < size; ++i) {
+      that[i] = 0
+    }
+  }
+  return that
+}
+
+/**
+ * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
+ * */
+Buffer.allocUnsafe = function (size) {
+  return allocUnsafe(null, size)
+}
+/**
+ * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
+ */
+Buffer.allocUnsafeSlow = function (size) {
+  return allocUnsafe(null, size)
+}
+
+function fromString (that, string, encoding) {
+  if (typeof encoding !== 'string' || encoding === '') {
+    encoding = 'utf8'
+  }
+
+  if (!Buffer.isEncoding(encoding)) {
+    throw new TypeError('"encoding" must be a valid string encoding')
+  }
+
+  var length = byteLength(string, encoding) | 0
+  that = createBuffer(that, length)
+
+  var actual = that.write(string, encoding)
+
+  if (actual !== length) {
+    // Writing a hex string, for example, that contains invalid characters will
+    // cause everything after the first invalid character to be ignored. (e.g.
+    // 'abxxcd' will be treated as 'ab')
+    that = that.slice(0, actual)
+  }
+
+  return that
+}
+
+function fromArrayLike (that, array) {
+  var length = array.length < 0 ? 0 : checked(array.length) | 0
+  that = createBuffer(that, length)
+  for (var i = 0; i < length; i += 1) {
+    that[i] = array[i] & 255
+  }
+  return that
+}
+
+function fromArrayBuffer (that, array, byteOffset, length) {
+  array.byteLength // this throws if `array` is not a valid ArrayBuffer
+
+  if (byteOffset < 0 || array.byteLength < byteOffset) {
+    throw new RangeError('\'offset\' is out of bounds')
+  }
+
+  if (array.byteLength < byteOffset + (length || 0)) {
+    throw new RangeError('\'length\' is out of bounds')
+  }
+
+  if (byteOffset === undefined && length === undefined) {
+    array = new Uint8Array(array)
+  } else if (length === undefined) {
+    array = new Uint8Array(array, byteOffset)
+  } else {
+    array = new Uint8Array(array, byteOffset, length)
+  }
+
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    // Return an augmented `Uint8Array` instance, for best performance
+    that = array
+    that.__proto__ = Buffer.prototype
+  } else {
+    // Fallback: Return an object instance of the Buffer class
+    that = fromArrayLike(that, array)
+  }
+  return that
+}
+
+function fromObject (that, obj) {
+  if (Buffer.isBuffer(obj)) {
+    var len = checked(obj.length) | 0
+    that = createBuffer(that, len)
+
+    if (that.length === 0) {
+      return that
+    }
+
+    obj.copy(that, 0, 0, len)
+    return that
+  }
+
+  if (obj) {
+    if ((typeof ArrayBuffer !== 'undefined' &&
+        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
+      if (typeof obj.length !== 'number' || isnan(obj.length)) {
+        return createBuffer(that, 0)
+      }
+      return fromArrayLike(that, obj)
+    }
+
+    if (obj.type === 'Buffer' && isArray(obj.data)) {
+      return fromArrayLike(that, obj.data)
+    }
+  }
+
+  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
+}
+
+function checked (length) {
+  // Note: cannot use `length < kMaxLength()` here because that fails when
+  // length is NaN (which is otherwise coerced to zero.)
+  if (length >= kMaxLength()) {
+    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
+                         'size: 0x' + kMaxLength().toString(16) + ' bytes')
+  }
+  return length | 0
+}
+
+function SlowBuffer (length) {
+  if (+length != length) { // eslint-disable-line eqeqeq
+    length = 0
+  }
+  return Buffer.alloc(+length)
+}
+
+Buffer.isBuffer = function isBuffer (b) {
+  return !!(b != null && b._isBuffer)
+}
+
+Buffer.compare = function compare (a, b) {
+  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
+    throw new TypeError('Arguments must be Buffers')
+  }
+
+  if (a === b) return 0
+
+  var x = a.length
+  var y = b.length
+
+  for (var i = 0, len = Math.min(x, y); i < len; ++i) {
+    if (a[i] !== b[i]) {
+      x = a[i]
+      y = b[i]
+      break
+    }
+  }
+
+  if (x < y) return -1
+  if (y < x) return 1
+  return 0
+}
+
+Buffer.isEncoding = function isEncoding (encoding) {
+  switch (String(encoding).toLowerCase()) {
+    case 'hex':
+    case 'utf8':
+    case 'utf-8':
+    case 'ascii':
+    case 'latin1':
+    case 'binary':
+    case 'base64':
+    case 'ucs2':
+    case 'ucs-2':
+    case 'utf16le':
+    case 'utf-16le':
+      return true
+    default:
+      return false
+  }
+}
+
+Buffer.concat = function concat (list, length) {
+  if (!isArray(list)) {
+    throw new TypeError('"list" argument must be an Array of Buffers')
+  }
+
+  if (list.length === 0) {
+    return Buffer.alloc(0)
+  }
+
+  var i
+  if (length === undefined) {
+    length = 0
+    for (i = 0; i < list.length; ++i) {
+      length += list[i].length
+    }
+  }
+
+  var buffer = Buffer.allocUnsafe(length)
+  var pos = 0
+  for (i = 0; i < list.length; ++i) {
+    var buf = list[i]
+    if (!Buffer.isBuffer(buf)) {
+      throw new TypeError('"list" argument must be an Array of Buffers')
+    }
+    buf.copy(buffer, pos)
+    pos += buf.length
+  }
+  return buffer
+}
+
+function byteLength (string, encoding) {
+  if (Buffer.isBuffer(string)) {
+    return string.length
+  }
+  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
+      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
+    return string.byteLength
+  }
+  if (typeof string !== 'string') {
+    string = '' + string
+  }
+
+  var len = string.length
+  if (len === 0) return 0
+
+  // Use a for loop to avoid recursion
+  var loweredCase = false
+  for (;;) {
+    switch (encoding) {
+      case 'ascii':
+      case 'latin1':
+      case 'binary':
+        return len
+      case 'utf8':
+      case 'utf-8':
+      case undefined:
+        return utf8ToBytes(string).length
+      case 'ucs2':
+      case 'ucs-2':
+      case 'utf16le':
+      case 'utf-16le':
+        return len * 2
+      case 'hex':
+        return len >>> 1
+      case 'base64':
+        return base64ToBytes(string).length
+      default:
+        if (loweredCase) return utf8ToBytes(string).length // assume utf8
+        encoding = ('' + encoding).toLowerCase()
+        loweredCase = true
+    }
+  }
+}
+Buffer.byteLength = byteLength
+
+function slowToString (encoding, start, end) {
+  var loweredCase = false
+
+  // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
+  // property of a typed array.
+
+  // This behaves neither like String nor Uint8Array in that we set start/end
+  // to their upper/lower bounds if the value passed is out of range.
+  // undefined is handled specially as per ECMA-262 6th Edition,
+  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
+  if (start === undefined || start < 0) {
+    start = 0
+  }
+  // Return early if start > this.length. Done here to prevent potential uint32
+  // coercion fail below.
+  if (start > this.length) {
+    return ''
+  }
+
+  if (end === undefined || end > this.length) {
+    end = this.length
+  }
+
+  if (end <= 0) {
+    return ''
+  }
+
+  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
+  end >>>= 0
+  start >>>= 0
+
+  if (end <= start) {
+    return ''
+  }
+
+  if (!encoding) encoding = 'utf8'
+
+  while (true) {
+    switch (encoding) {
+      case 'hex':
+        return hexSlice(this, start, end)
+
+      case 'utf8':
+      case 'utf-8':
+        return utf8Slice(this, start, end)
+
+      case 'ascii':
+        return asciiSlice(this, start, end)
+
+      case 'latin1':
+      case 'binary':
+        return latin1Slice(this, start, end)
+
+      case 'base64':
+        return base64Slice(this, start, end)
+
+      case 'ucs2':
+      case 'ucs-2':
+      case 'utf16le':
+      case 'utf-16le':
+        return utf16leSlice(this, start, end)
+
+      default:
+        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
+        encoding = (encoding + '').toLowerCase()
+        loweredCase = true
+    }
+  }
+}
+
+// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
+// Buffer instances.
+Buffer.prototype._isBuffer = true
+
+function swap (b, n, m) {
+  var i = b[n]
+  b[n] = b[m]
+  b[m] = i
+}
+
+Buffer.prototype.swap16 = function swap16 () {
+  var len = this.length
+  if (len % 2 !== 0) {
+    throw new RangeError('Buffer size must be a multiple of 16-bits')
+  }
+  for (var i = 0; i < len; i += 2) {
+    swap(this, i, i + 1)
+  }
+  return this
+}
+
+Buffer.prototype.swap32 = function swap32 () {
+  var len = this.length
+  if (len % 4 !== 0) {
+    throw new RangeError('Buffer size must be a multiple of 32-bits')
+  }
+  for (var i = 0; i < len; i += 4) {
+    swap(this, i, i + 3)
+    swap(this, i + 1, i + 2)
+  }
+  return this
+}
+
+Buffer.prototype.swap64 = function swap64 () {
+  var len = this.length
+  if (len % 8 !== 0) {
+    throw new RangeError('Buffer size must be a multiple of 64-bits')
+  }
+  for (var i = 0; i < len; i += 8) {
+    swap(this, i, i + 7)
+    swap(this, i + 1, i + 6)
+    swap(this, i + 2, i + 5)
+    swap(this, i + 3, i + 4)
+  }
+  return this
+}
+
+Buffer.prototype.toString = function toString () {
+  var length = this.length | 0
+  if (length === 0) return ''
+  if (arguments.length === 0) return utf8Slice(this, 0, length)
+  return slowToString.apply(this, arguments)
+}
+
+Buffer.prototype.equals = function equals (b) {
+  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
+  if (this === b) return true
+  return Buffer.compare(this, b) === 0
+}
+
+Buffer.prototype.inspect = function inspect () {
+  var str = ''
+  var max = exports.INSPECT_MAX_BYTES
+  if (this.length > 0) {
+    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
+    if (this.length > max) str += ' ... '
+  }
+  return '<Buffer ' + str + '>'
+}
+
+Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
+  if (!Buffer.isBuffer(target)) {
+    throw new TypeError('Argument must be a Buffer')
+  }
+
+  if (start === undefined) {
+    start = 0
+  }
+  if (end === undefined) {
+    end = target ? target.length : 0
+  }
+  if (thisStart === undefined) {
+    thisStart = 0
+  }
+  if (thisEnd === undefined) {
+    thisEnd = this.length
+  }
+
+  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
+    throw new RangeError('out of range index')
+  }
+
+  if (thisStart >= thisEnd && start >= end) {
+    return 0
+  }
+  if (thisStart >= thisEnd) {
+    return -1
+  }
+  if (start >= end) {
+    return 1
+  }
+
+  start >>>= 0
+  end >>>= 0
+  thisStart >>>= 0
+  thisEnd >>>= 0
+
+  if (this === target) return 0
+
+  var x = thisEnd - thisStart
+  var y = end - start
+  var len = Math.min(x, y)
+
+  var thisCopy = this.slice(thisStart, thisEnd)
+  var targetCopy = target.slice(start, end)
+
+  for (var i = 0; i < len; ++i) {
+    if (thisCopy[i] !== targetCopy[i]) {
+      x = thisCopy[i]
+      y = targetCopy[i]
+      break
+    }
+  }
+
+  if (x < y) return -1
+  if (y < x) return 1
+  return 0
+}
+
+// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
+// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
+//
+// Arguments:
+// - buffer - a Buffer to search
+// - val - a string, Buffer, or number
+// - byteOffset - an index into `buffer`; will be clamped to an int32
+// - encoding - an optional encoding, relevant is val is a string
+// - dir - true for indexOf, false for lastIndexOf
+function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
+  // Empty buffer means no match
+  if (buffer.length === 0) return -1
+
+  // Normalize byteOffset
+  if (typeof byteOffset === 'string') {
+    encoding = byteOffset
+    byteOffset = 0
+  } else if (byteOffset > 0x7fffffff) {
+    byteOffset = 0x7fffffff
+  } else if (byteOffset < -0x80000000) {
+    byteOffset = -0x80000000
+  }
+  byteOffset = +byteOffset  // Coerce to Number.
+  if (isNaN(byteOffset)) {
+    // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
+    byteOffset = dir ? 0 : (buffer.length - 1)
+  }
+
+  // Normalize byteOffset: negative offsets start from the end of the buffer
+  if (byteOffset < 0) byteOffset = buffer.length + byteOffset
+  if (byteOffset >= buffer.length) {
+    if (dir) return -1
+    else byteOffset = buffer.length - 1
+  } else if (byteOffset < 0) {
+    if (dir) byteOffset = 0
+    else return -1
+  }
+
+  // Normalize val
+  if (typeof val === 'string') {
+    val = Buffer.from(val, encoding)
+  }
+
+  // Finally, search either indexOf (if dir is true) or lastIndexOf
+  if (Buffer.isBuffer(val)) {
+    // Special case: looking for empty string/buffer always fails
+    if (val.length === 0) {
+      return -1
+    }
+    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
+  } else if (typeof val === 'number') {
+    val = val & 0xFF // Search for a byte value [0-255]
+    if (Buffer.TYPED_ARRAY_SUPPORT &&
+        typeof Uint8Array.prototype.indexOf === 'function') {
+      if (dir) {
+        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
+      } else {
+        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
+      }
+    }
+    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
+  }
+
+  throw new TypeError('val must be string, number or Buffer')
+}
+
+function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
+  var indexSize = 1
+  var arrLength = arr.length
+  var valLength = val.length
+
+  if (encoding !== undefined) {
+    encoding = String(encoding).toLowerCase()
+    if (encoding === 'ucs2' || encoding === 'ucs-2' ||
+        encoding === 'utf16le' || encoding === 'utf-16le') {
+      if (arr.length < 2 || val.length < 2) {
+        return -1
+      }
+      indexSize = 2
+      arrLength /= 2
+      valLength /= 2
+      byteOffset /= 2
+    }
+  }
+
+  function read (buf, i) {
+    if (indexSize === 1) {
+      return buf[i]
+    } else {
+      return buf.readUInt16BE(i * indexSize)
+    }
+  }
+
+  var i
+  if (dir) {
+    var foundIndex = -1
+    for (i = byteOffset; i < arrLength; i++) {
+      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
+        if (foundIndex === -1) foundIndex = i
+        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
+      } else {
+        if (foundIndex !== -1) i -= i - foundIndex
+        foundIndex = -1
+      }
+    }
+  } else {
+    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
+    for (i = byteOffset; i >= 0; i--) {
+      var found = true
+      for (var j = 0; j < valLength; j++) {
+        if (read(arr, i + j) !== read(val, j)) {
+          found = false
+          break
+        }
+      }
+      if (found) return i
+    }
+  }
+
+  return -1
+}
+
+Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
+  return this.indexOf(val, byteOffset, encoding) !== -1
+}
+
+Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
+  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
+}
+
+Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
+  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
+}
+
+function hexWrite (buf, string, offset, length) {
+  offset = Number(offset) || 0
+  var remaining = buf.length - offset
+  if (!length) {
+    length = remaining
+  } else {
+    length = Number(length)
+    if (length > remaining) {
+      length = remaining
+    }
+  }
+
+  // must be an even number of digits
+  var strLen = string.length
+  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
+
+  if (length > strLen / 2) {
+    length = strLen / 2
+  }
+  for (var i = 0; i < length; ++i) {
+    var parsed = parseInt(string.substr(i * 2, 2), 16)
+    if (isNaN(parsed)) return i
+    buf[offset + i] = parsed
+  }
+  return i
+}
+
+function utf8Write (buf, string, offset, length) {
+  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
+}
+
+function asciiWrite (buf, string, offset, length) {
+  return blitBuffer(asciiToBytes(string), buf, offset, length)
+}
+
+function latin1Write (buf, string, offset, length) {
+  return asciiWrite(buf, string, offset, length)
+}
+
+function base64Write (buf, string, offset, length) {
+  return blitBuffer(base64ToBytes(string), buf, offset, length)
+}
+
+function ucs2Write (buf, string, offset, length) {
+  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
+}
+
+Buffer.prototype.write = function write (string, offset, length, encoding) {
+  // Buffer#write(string)
+  if (offset === undefined) {
+    encoding = 'utf8'
+    length = this.length
+    offset = 0
+  // Buffer#write(string, encoding)
+  } else if (length === undefined && typeof offset === 'string') {
+    encoding = offset
+    length = this.length
+    offset = 0
+  // Buffer#write(string, offset[, length][, encoding])
+  } else if (isFinite(offset)) {
+    offset = offset | 0
+    if (isFinite(length)) {
+      length = length | 0
+      if (encoding === undefined) encoding = 'utf8'
+    } else {
+      encoding = length
+      length = undefined
+    }
+  // legacy write(string, encoding, offset, length) - remove in v0.13
+  } else {
+    throw new Error(
+      'Buffer.write(string, encoding, offset[, length]) is no longer supported'
+    )
+  }
+
+  var remaining = this.length - offset
+  if (length === undefined || length > remaining) length = remaining
+
+  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
+    throw new RangeError('Attempt to write outside buffer bounds')
+  }
+
+  if (!encoding) encoding = 'utf8'
+
+  var loweredCase = false
+  for (;;) {
+    switch (encoding) {
+      case 'hex':
+        return hexWrite(this, string, offset, length)
+
+      case 'utf8':
+      case 'utf-8':
+        return utf8Write(this, string, offset, length)
+
+      case 'ascii':
+        return asciiWrite(this, string, offset, length)
+
+      case 'latin1':
+      case 'binary':
+        return latin1Write(this, string, offset, length)
+
+      case 'base64':
+        // Warning: maxLength not taken into account in base64Write
+        return base64Write(this, string, offset, length)
+
+      case 'ucs2':
+      case 'ucs-2':
+      case 'utf16le':
+      case 'utf-16le':
+        return ucs2Write(this, string, offset, length)
+
+      default:
+        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
+        encoding = ('' + encoding).toLowerCase()
+        loweredCase = true
+    }
+  }
+}
+
+Buffer.prototype.toJSON = function toJSON () {
+  return {
+    type: 'Buffer',
+    data: Array.prototype.slice.call(this._arr || this, 0)
+  }
+}
+
+function base64Slice (buf, start, end) {
+  if (start === 0 && end === buf.length) {
+    return base64.fromByteArray(buf)
+  } else {
+    return base64.fromByteArray(buf.slice(start, end))
+  }
+}
+
+function utf8Slice (buf, start, end) {
+  end = Math.min(buf.length, end)
+  var res = []
+
+  var i = start
+  while (i < end) {
+    var firstByte = buf[i]
+    var codePoint = null
+    var bytesPerSequence = (firstByte > 0xEF) ? 4
+      : (firstByte > 0xDF) ? 3
+      : (firstByte > 0xBF) ? 2
+      : 1
+
+    if (i + bytesPerSequence <= end) {
+      var secondByte, thirdByte, fourthByte, tempCodePoint
+
+      switch (bytesPerSequence) {
+        case 1:
+          if (firstByte < 0x80) {
+            codePoint = firstByte
+          }
+          break
+        case 2:
+          secondByte = buf[i + 1]
+          if ((secondByte & 0xC0) === 0x80) {
+            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
+            if (tempCodePoint > 0x7F) {
+              codePoint = tempCodePoint
+            }
+          }
+          break
+        case 3:
+          secondByte = buf[i + 1]
+          thirdByte = buf[i + 2]
+          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
+            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
+            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
+              codePoint = tempCodePoint
+            }
+          }
+          break
+        case 4:
+          secondByte = buf[i + 1]
+          thirdByte = buf[i + 2]
+          fourthByte = buf[i + 3]
+          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
+            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
+            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
+              codePoint = tempCodePoint
+            }
+          }
+      }
+    }
+
+    if (codePoint === null) {
+      // we did not generate a valid codePoint so insert a
+      // replacement char (U+FFFD) and advance only 1 byte
+      codePoint = 0xFFFD
+      bytesPerSequence = 1
+    } else if (codePoint > 0xFFFF) {
+      // encode to utf16 (surrogate pair dance)
+      codePoint -= 0x10000
+      res.push(codePoint >>> 10 & 0x3FF | 0xD800)
+      codePoint = 0xDC00 | codePoint & 0x3FF
+    }
+
+    res.push(codePoint)
+    i += bytesPerSequence
+  }
+
+  return decodeCodePointsArray(res)
+}
+
+// Based on http://stackoverflow.com/a/22747272/680742, the browser with
+// the lowest limit is Chrome, with 0x10000 args.
+// We go 1 magnitude less, for safety
+var MAX_ARGUMENTS_LENGTH = 0x1000
+
+function decodeCodePointsArray (codePoints) {
+  var len = codePoints.length
+  if (len <= MAX_ARGUMENTS_LENGTH) {
+    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
+  }
+
+  // Decode in chunks to avoid "call stack size exceeded".
+  var res = ''
+  var i = 0
+  while (i < len) {
+    res += String.fromCharCode.apply(
+      String,
+      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
+    )
+  }
+  return res
+}
+
+function asciiSlice (buf, start, end) {
+  var ret = ''
+  end = Math.min(buf.length, end)
+
+  for (var i = start; i < end; ++i) {
+    ret += String.fromCharCode(buf[i] & 0x7F)
+  }
+  return ret
+}
+
+function latin1Slice (buf, start, end) {
+  var ret = ''
+  end = Math.min(buf.length, end)
+
+  for (var i = start; i < end; ++i) {
+    ret += String.fromCharCode(buf[i])
+  }
+  return ret
+}
+
+function hexSlice (buf, start, end) {
+  var len = buf.length
+
+  if (!start || start < 0) start = 0
+  if (!end || end < 0 || end > len) end = len
+
+  var out = ''
+  for (var i = start; i < end; ++i) {
+    out += toHex(buf[i])
+  }
+  return out
+}
+
+function utf16leSlice (buf, start, end) {
+  var bytes = buf.slice(start, end)
+  var res = ''
+  for (var i = 0; i < bytes.length; i += 2) {
+    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
+  }
+  return res
+}
+
+Buffer.prototype.slice = function slice (start, end) {
+  var len = this.length
+  start = ~~start
+  end = end === undefined ? len : ~~end
+
+  if (start < 0) {
+    start += len
+    if (start < 0) start = 0
+  } else if (start > len) {
+    start = len
+  }
+
+  if (end < 0) {
+    end += len
+    if (end < 0) end = 0
+  } else if (end > len) {
+    end = len
+  }
+
+  if (end < start) end = start
+
+  var newBuf
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    newBuf = this.subarray(start, end)
+    newBuf.__proto__ = Buffer.prototype
+  } else {
+    var sliceLen = end - start
+    newBuf = new Buffer(sliceLen, undefined)
+    for (var i = 0; i < sliceLen; ++i) {
+      newBuf[i] = this[i + start]
+    }
+  }
+
+  return newBuf
+}
+
+/*
+ * Need to make sure that buffer isn't trying to write out of bounds.
+ */
+function checkOffset (offset, ext, length) {
+  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
+  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
+}
+
+Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+  var val = this[offset]
+  var mul = 1
+  var i = 0
+  while (++i < byteLength && (mul *= 0x100)) {
+    val += this[offset + i] * mul
+  }
+
+  return val
+}
+
+Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) {
+    checkOffset(offset, byteLength, this.length)
+  }
+
+  var val = this[offset + --byteLength]
+  var mul = 1
+  while (byteLength > 0 && (mul *= 0x100)) {
+    val += this[offset + --byteLength] * mul
+  }
+
+  return val
+}
+
+Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 1, this.length)
+  return this[offset]
+}
+
+Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 2, this.length)
+  return this[offset] | (this[offset + 1] << 8)
+}
+
+Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 2, this.length)
+  return (this[offset] << 8) | this[offset + 1]
+}
+
+Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+
+  return ((this[offset]) |
+      (this[offset + 1] << 8) |
+      (this[offset + 2] << 16)) +
+      (this[offset + 3] * 0x1000000)
+}
+
+Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+
+  return (this[offset] * 0x1000000) +
+    ((this[offset + 1] << 16) |
+    (this[offset + 2] << 8) |
+    this[offset + 3])
+}
+
+Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+  var val = this[offset]
+  var mul = 1
+  var i = 0
+  while (++i < byteLength && (mul *= 0x100)) {
+    val += this[offset + i] * mul
+  }
+  mul *= 0x80
+
+  if (val >= mul) val -= Math.pow(2, 8 * byteLength)
+
+  return val
+}
+
+Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+  var i = byteLength
+  var mul = 1
+  var val = this[offset + --i]
+  while (i > 0 && (mul *= 0x100)) {
+    val += this[offset + --i] * mul
+  }
+  mul *= 0x80
+
+  if (val >= mul) val -= Math.pow(2, 8 * byteLength)
+
+  return val
+}
+
+Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 1, this.length)
+  if (!(this[offset] & 0x80)) return (this[offset])
+  return ((0xff - this[offset] + 1) * -1)
+}
+
+Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 2, this.length)
+  var val = this[offset] | (this[offset + 1] << 8)
+  return (val & 0x8000) ? val | 0xFFFF0000 : val
+}
+
+Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 2, this.length)
+  var val = this[offset + 1] | (this[offset] << 8)
+  return (val & 0x8000) ? val | 0xFFFF0000 : val
+}
+
+Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+
+  return (this[offset]) |
+    (this[offset + 1] << 8) |
+    (this[offset + 2] << 16) |
+    (this[offset + 3] << 24)
+}
+
+Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+
+  return (this[offset] << 24) |
+    (this[offset + 1] << 16) |
+    (this[offset + 2] << 8) |
+    (this[offset + 3])
+}
+
+Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+  return ieee754.read(this, offset, true, 23, 4)
+}
+
+Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+  return ieee754.read(this, offset, false, 23, 4)
+}
+
+Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 8, this.length)
+  return ieee754.read(this, offset, true, 52, 8)
+}
+
+Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 8, this.length)
+  return ieee754.read(this, offset, false, 52, 8)
+}
+
+function checkInt (buf, value, offset, ext, max, min) {
+  if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
+  if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
+  if (offset + ext > buf.length) throw new RangeError('Index out of range')
+}
+
+Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
+  value = +value
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) {
+    var maxBytes = Math.pow(2, 8 * byteLength) - 1
+    checkInt(this, value, offset, byteLength, maxBytes, 0)
+  }
+
+  var mul = 1
+  var i = 0
+  this[offset] = value & 0xFF
+  while (++i < byteLength && (mul *= 0x100)) {
+    this[offset + i] = (value / mul) & 0xFF
+  }
+
+  return offset + byteLength
+}
+
+Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
+  value = +value
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) {
+    var maxBytes = Math.pow(2, 8 * byteLength) - 1
+    checkInt(this, value, offset, byteLength, maxBytes, 0)
+  }
+
+  var i = byteLength - 1
+  var mul = 1
+  this[offset + i] = value & 0xFF
+  while (--i >= 0 && (mul *= 0x100)) {
+    this[offset + i] = (value / mul) & 0xFF
+  }
+
+  return offset + byteLength
+}
+
+Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
+  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
+  this[offset] = (value & 0xff)
+  return offset + 1
+}
+
+function objectWriteUInt16 (buf, value, offset, littleEndian) {
+  if (value < 0) value = 0xffff + value + 1
+  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
+    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
+      (littleEndian ? i : 1 - i) * 8
+  }
+}
+
+Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value & 0xff)
+    this[offset + 1] = (value >>> 8)
+  } else {
+    objectWriteUInt16(this, value, offset, true)
+  }
+  return offset + 2
+}
+
+Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value >>> 8)
+    this[offset + 1] = (value & 0xff)
+  } else {
+    objectWriteUInt16(this, value, offset, false)
+  }
+  return offset + 2
+}
+
+function objectWriteUInt32 (buf, value, offset, littleEndian) {
+  if (value < 0) value = 0xffffffff + value + 1
+  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
+    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
+  }
+}
+
+Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset + 3] = (value >>> 24)
+    this[offset + 2] = (value >>> 16)
+    this[offset + 1] = (value >>> 8)
+    this[offset] = (value & 0xff)
+  } else {
+    objectWriteUInt32(this, value, offset, true)
+  }
+  return offset + 4
+}
+
+Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value >>> 24)
+    this[offset + 1] = (value >>> 16)
+    this[offset + 2] = (value >>> 8)
+    this[offset + 3] = (value & 0xff)
+  } else {
+    objectWriteUInt32(this, value, offset, false)
+  }
+  return offset + 4
+}
+
+Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) {
+    var limit = Math.pow(2, 8 * byteLength - 1)
+
+    checkInt(this, value, offset, byteLength, limit - 1, -limit)
+  }
+
+  var i = 0
+  var mul = 1
+  var sub = 0
+  this[offset] = value & 0xFF
+  while (++i < byteLength && (mul *= 0x100)) {
+    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
+      sub = 1
+    }
+    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
+  }
+
+  return offset + byteLength
+}
+
+Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) {
+    var limit = Math.pow(2, 8 * byteLength - 1)
+
+    checkInt(this, value, offset, byteLength, limit - 1, -limit)
+  }
+
+  var i = byteLength - 1
+  var mul = 1
+  var sub = 0
+  this[offset + i] = value & 0xFF
+  while (--i >= 0 && (mul *= 0x100)) {
+    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
+      sub = 1
+    }
+    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
+  }
+
+  return offset + byteLength
+}
+
+Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
+  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
+  if (value < 0) value = 0xff + value + 1
+  this[offset] = (value & 0xff)
+  return offset + 1
+}
+
+Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value & 0xff)
+    this[offset + 1] = (value >>> 8)
+  } else {
+    objectWriteUInt16(this, value, offset, true)
+  }
+  return offset + 2
+}
+
+Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value >>> 8)
+    this[offset + 1] = (value & 0xff)
+  } else {
+    objectWriteUInt16(this, value, offset, false)
+  }
+  return offset + 2
+}
+
+Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value & 0xff)
+    this[offset + 1] = (value >>> 8)
+    this[offset + 2] = (value >>> 16)
+    this[offset + 3] = (value >>> 24)
+  } else {
+    objectWriteUInt32(this, value, offset, true)
+  }
+  return offset + 4
+}
+
+Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
+  if (value < 0) value = 0xffffffff + value + 1
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value >>> 24)
+    this[offset + 1] = (value >>> 16)
+    this[offset + 2] = (value >>> 8)
+    this[offset + 3] = (value & 0xff)
+  } else {
+    objectWriteUInt32(this, value, offset, false)
+  }
+  return offset + 4
+}
+
+function checkIEEE754 (buf, value, offset, ext, max, min) {
+  if (offset + ext > buf.length) throw new RangeError('Index out of range')
+  if (offset < 0) throw new RangeError('Index out of range')
+}
+
+function writeFloat (buf, value, offset, littleEndian, noAssert) {
+  if (!noAssert) {
+    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
+  }
+  ieee754.write(buf, value, offset, littleEndian, 23, 4)
+  return offset + 4
+}
+
+Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
+  return writeFloat(this, value, offset, true, noAssert)
+}
+
+Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
+  return writeFloat(this, value, offset, false, noAssert)
+}
+
+function writeDouble (buf, value, offset, littleEndian, noAssert) {
+  if (!noAssert) {
+    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
+  }
+  ieee754.write(buf, value, offset, littleEndian, 52, 8)
+  return offset + 8
+}
+
+Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
+  return writeDouble(this, value, offset, true, noAssert)
+}
+
+Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
+  return writeDouble(this, value, offset, false, noAssert)
+}
+
+// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
+Buffer.prototype.copy = function copy (target, targetStart, start, end) {
+  if (!start) start = 0
+  if (!end && end !== 0) end = this.length
+  if (targetStart >= target.length) targetStart = target.length
+  if (!targetStart) targetStart = 0
+  if (end > 0 && end < start) end = start
+
+  // Copy 0 bytes; we're done
+  if (end === start) return 0
+  if (target.length === 0 || this.length === 0) return 0
+
+  // Fatal error conditions
+  if (targetStart < 0) {
+    throw new RangeError('targetStart out of bounds')
+  }
+  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
+  if (end < 0) throw new RangeError('sourceEnd out of bounds')
+
+  // Are we oob?
+  if (end > this.length) end = this.length
+  if (target.length - targetStart < end - start) {
+    end = target.length - targetStart + start
+  }
+
+  var len = end - start
+  var i
+
+  if (this === target && start < targetStart && targetStart < end) {
+    // descending copy from end
+    for (i = len - 1; i >= 0; --i) {
+      target[i + targetStart] = this[i + start]
+    }
+  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
+    // ascending copy from start
+    for (i = 0; i < len; ++i) {
+      target[i + targetStart] = this[i + start]
+    }
+  } else {
+    Uint8Array.prototype.set.call(
+      target,
+      this.subarray(start, start + len),
+      targetStart
+    )
+  }
+
+  return len
+}
+
+// Usage:
+//    buffer.fill(number[, offset[, end]])
+//    buffer.fill(buffer[, offset[, end]])
+//    buffer.fill(string[, offset[, end]][, encoding])
+Buffer.prototype.fill = function fill (val, start, end, encoding) {
+  // Handle string cases:
+  if (typeof val === 'string') {
+    if (typeof start === 'string') {
+      encoding = start
+      start = 0
+      end = this.length
+    } else if (typeof end === 'string') {
+      encoding = end
+      end = this.length
+    }
+    if (val.length === 1) {
+      var code = val.charCodeAt(0)
+      if (code < 256) {
+        val = code
+      }
+    }
+    if (encoding !== undefined && typeof encoding !== 'string') {
+      throw new TypeError('encoding must be a string')
+    }
+    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
+      throw new TypeError('Unknown encoding: ' + encoding)
+    }
+  } else if (typeof val === 'number') {
+    val = val & 255
+  }
+
+  // Invalid ranges are not set to a default, so can range check early.
+  if (start < 0 || this.length < start || this.length < end) {
+    throw new RangeError('Out of range index')
+  }
+
+  if (end <= start) {
+    return this
+  }
+
+  start = start >>> 0
+  end = end === undefined ? this.length : end >>> 0
+
+  if (!val) val = 0
+
+  var i
+  if (typeof val === 'number') {
+    for (i = start; i < end; ++i) {
+      this[i] = val
+    }
+  } else {
+    var bytes = Buffer.isBuffer(val)
+      ? val
+      : utf8ToBytes(new Buffer(val, encoding).toString())
+    var len = bytes.length
+    for (i = 0; i < end - start; ++i) {
+      this[i + start] = bytes[i % len]
+    }
+  }
+
+  return this
+}
+
+// HELPER FUNCTIONS
+// ================
+
+var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
+
+function base64clean (str) {
+  // Node strips out invalid characters like \n and \t from the string, base64-js does not
+  str = stringtrim(str).replace(INVALID_BASE64_RE, '')
+  // Node converts strings with length < 2 to ''
+  if (str.length < 2) return ''
+  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
+  while (str.length % 4 !== 0) {
+    str = str + '='
+  }
+  return str
+}
+
+function stringtrim (str) {
+  if (str.trim) return str.trim()
+  return str.replace(/^\s+|\s+$/g, '')
+}
+
+function toHex (n) {
+  if (n < 16) return '0' + n.toString(16)
+  return n.toString(16)
+}
+
+function utf8ToBytes (string, units) {
+  units = units || Infinity
+  var codePoint
+  var length = string.length
+  var leadSurrogate = null
+  var bytes = []
+
+  for (var i = 0; i < length; ++i) {
+    codePoint = string.charCodeAt(i)
+
+    // is surrogate component
+    if (codePoint > 0xD7FF && codePoint < 0xE000) {
+      // last char was a lead
+      if (!leadSurrogate) {
+        // no lead yet
+        if (codePoint > 0xDBFF) {
+          // unexpected trail
+          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+          continue
+        } else if (i + 1 === length) {
+          // unpaired lead
+          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+          continue
+        }
+
+        // valid lead
+        leadSurrogate = codePoint
+
+        continue
+      }
+
+      // 2 leads in a row
+      if (codePoint < 0xDC00) {
+        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+        leadSurrogate = codePoint
+        continue
+      }
+
+      // valid surrogate pair
+      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
+    } else if (leadSurrogate) {
+      // valid bmp char, but last char was a lead
+      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+    }
+
+    leadSurrogate = null
+
+    // encode utf8
+    if (codePoint < 0x80) {
+      if ((units -= 1) < 0) break
+      bytes.push(codePoint)
+    } else if (codePoint < 0x800) {
+      if ((units -= 2) < 0) break
+      bytes.push(
+        codePoint >> 0x6 | 0xC0,
+        codePoint & 0x3F | 0x80
+      )
+    } else if (codePoint < 0x10000) {
+      if ((units -= 3) < 0) break
+      bytes.push(
+        codePoint >> 0xC | 0xE0,
+        codePoint >> 0x6 & 0x3F | 0x80,
+        codePoint & 0x3F | 0x80
+      )
+    } else if (codePoint < 0x110000) {
+      if ((units -= 4) < 0) break
+      bytes.push(
+        codePoint >> 0x12 | 0xF0,
+        codePoint >> 0xC & 0x3F | 0x80,
+        codePoint >> 0x6 & 0x3F | 0x80,
+        codePoint & 0x3F | 0x80
+      )
+    } else {
+      throw new Error('Invalid code point')
+    }
+  }
+
+  return bytes
+}
+
+function asciiToBytes (str) {
+  var byteArray = []
+  for (var i = 0; i < str.length; ++i) {
+    // Node's code seems to be doing this and not & 0x7F..
+    byteArray.push(str.charCodeAt(i) & 0xFF)
+  }
+  return byteArray
+}
+
+function utf16leToBytes (str, units) {
+  var c, hi, lo
+  var byteArray = []
+  for (var i = 0; i < str.length; ++i) {
+    if ((units -= 2) < 0) break
+
+    c = str.charCodeAt(i)
+    hi = c >> 8
+    lo = c % 256
+    byteArray.push(lo)
+    byteArray.push(hi)
+  }
+
+  return byteArray
+}
+
+function base64ToBytes (str) {
+  return base64.toByteArray(base64clean(str))
+}
+
+function blitBuffer (src, dst, offset, length) {
+  for (var i = 0; i < length; ++i) {
+    if ((i + offset >= dst.length) || (i >= src.length)) break
+    dst[i + offset] = src[i]
+  }
+  return i
+}
+
+function isnan (val) {
+  return val !== val // eslint-disable-line no-self-compare
+}
+
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+
+/***/ }),
+/* 43 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.byteLength = byteLength
+exports.toByteArray = toByteArray
+exports.fromByteArray = fromByteArray
+
+var lookup = []
+var revLookup = []
+var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
+
+var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
+for (var i = 0, len = code.length; i < len; ++i) {
+  lookup[i] = code[i]
+  revLookup[code.charCodeAt(i)] = i
+}
+
+revLookup['-'.charCodeAt(0)] = 62
+revLookup['_'.charCodeAt(0)] = 63
+
+function placeHoldersCount (b64) {
+  var len = b64.length
+  if (len % 4 > 0) {
+    throw new Error('Invalid string. Length must be a multiple of 4')
+  }
+
+  // the number of equal signs (place holders)
+  // if there are two placeholders, than the two characters before it
+  // represent one byte
+  // if there is only one, then the three characters before it represent 2 bytes
+  // this is just a cheap hack to not do indexOf twice
+  return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
+}
+
+function byteLength (b64) {
+  // base64 is 4/3 + up to two characters of the original data
+  return (b64.length * 3 / 4) - placeHoldersCount(b64)
+}
+
+function toByteArray (b64) {
+  var i, l, tmp, placeHolders, arr
+  var len = b64.length
+  placeHolders = placeHoldersCount(b64)
+
+  arr = new Arr((len * 3 / 4) - placeHolders)
+
+  // if there are placeholders, only get up to the last complete 4 chars
+  l = placeHolders > 0 ? len - 4 : len
+
+  var L = 0
+
+  for (i = 0; i < l; i += 4) {
+    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
+    arr[L++] = (tmp >> 16) & 0xFF
+    arr[L++] = (tmp >> 8) & 0xFF
+    arr[L++] = tmp & 0xFF
+  }
+
+  if (placeHolders === 2) {
+    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
+    arr[L++] = tmp & 0xFF
+  } else if (placeHolders === 1) {
+    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
+    arr[L++] = (tmp >> 8) & 0xFF
+    arr[L++] = tmp & 0xFF
+  }
+
+  return arr
+}
+
+function tripletToBase64 (num) {
+  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
+}
+
+function encodeChunk (uint8, start, end) {
+  var tmp
+  var output = []
+  for (var i = start; i < end; i += 3) {
+    tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
+    output.push(tripletToBase64(tmp))
+  }
+  return output.join('')
+}
+
+function fromByteArray (uint8) {
+  var tmp
+  var len = uint8.length
+  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
+  var output = ''
+  var parts = []
+  var maxChunkLength = 16383 // must be multiple of 3
+
+  // go through the array every three bytes, we'll deal with trailing stuff later
+  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
+    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
+  }
+
+  // pad the end with zeros, but make sure to not forget the extra bytes
+  if (extraBytes === 1) {
+    tmp = uint8[len - 1]
+    output += lookup[tmp >> 2]
+    output += lookup[(tmp << 4) & 0x3F]
+    output += '=='
+  } else if (extraBytes === 2) {
+    tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
+    output += lookup[tmp >> 10]
+    output += lookup[(tmp >> 4) & 0x3F]
+    output += lookup[(tmp << 2) & 0x3F]
+    output += '='
+  }
+
+  parts.push(output)
+
+  return parts.join('')
+}
+
+
+/***/ }),
+/* 44 */
+/***/ (function(module, exports) {
+
+exports.read = function (buffer, offset, isLE, mLen, nBytes) {
+  var e, m
+  var eLen = nBytes * 8 - mLen - 1
+  var eMax = (1 << eLen) - 1
+  var eBias = eMax >> 1
+  var nBits = -7
+  var i = isLE ? (nBytes - 1) : 0
+  var d = isLE ? -1 : 1
+  var s = buffer[offset + i]
+
+  i += d
+
+  e = s & ((1 << (-nBits)) - 1)
+  s >>= (-nBits)
+  nBits += eLen
+  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
+
+  m = e & ((1 << (-nBits)) - 1)
+  e >>= (-nBits)
+  nBits += mLen
+  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
+
+  if (e === 0) {
+    e = 1 - eBias
+  } else if (e === eMax) {
+    return m ? NaN : ((s ? -1 : 1) * Infinity)
+  } else {
+    m = m + Math.pow(2, mLen)
+    e = e - eBias
+  }
+  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
+}
+
+exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
+  var e, m, c
+  var eLen = nBytes * 8 - mLen - 1
+  var eMax = (1 << eLen) - 1
+  var eBias = eMax >> 1
+  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
+  var i = isLE ? 0 : (nBytes - 1)
+  var d = isLE ? 1 : -1
+  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
+
+  value = Math.abs(value)
+
+  if (isNaN(value) || value === Infinity) {
+    m = isNaN(value) ? 1 : 0
+    e = eMax
+  } else {
+    e = Math.floor(Math.log(value) / Math.LN2)
+    if (value * (c = Math.pow(2, -e)) < 1) {
+      e--
+      c *= 2
+    }
+    if (e + eBias >= 1) {
+      value += rt / c
+    } else {
+      value += rt * Math.pow(2, 1 - eBias)
+    }
+    if (value * c >= 2) {
+      e++
+      c /= 2
+    }
+
+    if (e + eBias >= eMax) {
+      m = 0
+      e = eMax
+    } else if (e + eBias >= 1) {
+      m = (value * c - 1) * Math.pow(2, mLen)
+      e = e + eBias
+    } else {
+      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
+      e = 0
+    }
+  }
+
+  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
+
+  e = (e << mLen) | m
+  eLen += mLen
+  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
+
+  buffer[offset + i - d] |= s * 128
+}
+
+
+/***/ }),
+/* 45 */
+/***/ (function(module, exports) {
+
+var toString = {}.toString;
+
+module.exports = Array.isArray || function (arr) {
+  return toString.call(arr) == '[object Array]';
+};
+
+
+/***/ }),
+/* 46 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var filter = function filter(where) {
+
+  if (_.isNil(where)) throw 'The `filter` parameter is required';
+
+  return {
+    op: taskOps.TASK_OP_FILTER,
+    params: {
+      where: where
+    }
+  };
+};
+
+filter.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var where = JSON.stringify(params.where) || '""';
+  return 'filter(' + where + ')';
+};
+
+module.exports = filter;
+
+/***/ }),
+/* 47 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var foreach = function foreach(p0, p1) {
+
+  var res = {
+    op: taskOps.TASK_OP_FOREACH,
+    params: {}
+  };
+
+  if (typeof p0 === 'string' || p0 instanceof String) {
+    res.params.spec = p0;
+  }
+
+  if (util.isPipeObject(p0)) {
+    res.params.run = p0.pipe.task;
+  } else if (util.isPipeObject(p1)) {
+    res.params.run = p1.pipe.task;
+  }
+
+  return res;
+};
+
+foreach.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {}),
+      p = [];
+  if (params.hasOwnProperty('spec')) {
+    p.push(JSON.stringify(params.spec));
+  }
+  if (params.hasOwnProperty('run')) {
+    p.push(Flexio.task.toCode(params.run, Flexio));
+  }
+
+  return 'foreach(' + p.join(', ') + ')';
+};
+
+module.exports = foreach;
+
+/***/ }),
+/* 48 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var insert = function insert(path, values) {
+
+  var data;
+  if (Array.isArray(values)) data = values;else data = [values];
+
+  return {
+    op: taskOps.TASK_OP_INSERT,
+    params: {
+      path: path,
+      values: data
+    }
+  };
+};
+
+insert.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var path = _.get(params, 'path', undefined);
+  var values = _.get(params, 'values', undefined);
+
+  if (!Array.isArray(values)) values = [values];
+
+  path = JSON.stringify(path);
+  values = JSON.stringify(values);
+
+  return 'insert(' + path + ', ' + values + ')';
+};
+
+module.exports = insert;
+
+/***/ }),
+/* 49 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var limit = function limit(value) {
+  value = _.defaultTo(value, 10);
+
+  return {
+    op: taskOps.TASK_OP_LIMIT,
+    params: {
+      value: value
+    }
+  };
+};
+
+limit.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var val = JSON.stringify(params.value) || '';
+  return 'limit(' + val + ')';
+};
+
+module.exports = limit;
+
+/***/ }),
+/* 50 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var merge = function merge(path) {
+
+  if (Array.isArray(path)) {
+    var files = path;
+  } else {
+    var files = [];
+    for (var i = 0; i < arguments.length; ++i) {
+      files.push(arguments[i]);
+    }
+  }
+
+  return {
+    op: taskOps.TASK_OP_MERGE,
+    params: {
+      files: files
+    }
+  };
+};
+
+merge.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var files = _.get(params, 'files', []);
+  for (var i = 0; i < files.length; ++i) {
+    if (typeof files[i] === 'string' || files[i] instanceof String) {
+      files[i] = JSON.stringify(files[i]);
+    } else {
+      files[i] = Flexio.merge.toCode(files[i], Flexio);
+    }
+  }
+
+  var param = files.length >= 10 ? '[' + files.join(', ') + ']' : files.join(', ');
+  return 'merge(' + param + ')';
+};
+
+module.exports = merge;
+
+/***/ }),
+/* 51 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var mkdir = function mkdir(path) {
+  return {
+    op: taskOps.TASK_OP_MKDIR,
+    params: {
+      path: path
+    }
+  };
+};
+
+mkdir.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var path = JSON.stringify(params.path) || '""';
+  return 'mkdir(' + path + ')';
+};
+
+module.exports = mkdir;
+
+/***/ }),
+/* 52 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var list = function list(path) {
+  return {
+    op: taskOps.TASK_OP_LIST,
+    params: {
+      path: path
+    }
+  };
+};
+
+list.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var path = JSON.stringify(params.path) || '""';
+  return 'list(' + path + ')';
+};
+
+module.exports = list;
+
+/***/ }),
+/* 53 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var read = function read(path) {
+  return {
+    op: taskOps.TASK_OP_READ,
+    params: {
+      path: path
+    }
+  };
+};
+
+read.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var path = JSON.stringify(params.path) || '""';
+  return 'read(' + path + ')';
+};
+
+module.exports = read;
+
+/***/ }),
+/* 54 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+
+var defaults = {
+  format: 'png',
+  width: 800,
+  height: 600,
+  scrollbars: false
+};
+
+var render = function render(url, options) {
+  var args = Array.from(arguments);
+  var url = _.get(args, '[0]', '');
+  var params = _.get(args, '[1]', {});
+
+  if (_.isNil(url)) throw 'The `url` parameter is required';
+
+  if (_.isPlainObject(_.get(args, '[0]', {}))) {
+    var params = _.get(args, '[0]', {});
+  } else {
+    var params = _.assign({}, defaults, options, { url: url });
+  }
+
+  return {
+    op: taskOps.TASK_OP_RENDER,
+    params: params
+  };
+};
+
+render.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var url = JSON.stringify(params.url) || '';
+  var opts = _.omit(params, ['url']);
+
+  if (_.isEqual(opts, defaults)) return 'render(' + url + ')';else return 'render(' + url + ', ' + JSON.stringify(opts, null, 2) + ')';
+};
+
+module.exports = render;
+
+/***/ }),
+/* 55 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var request = function request() {
+  var args = Array.from(arguments);
+  var url = _.get(args, '[0]', '');
+  var params = _.get(args, '[1]', {});
+
+  if (_.isPlainObject(_.get(args, '[0]', {}))) {
+    params = _.get(args, '[0]', {});
+  } else {
+    params = _.assign({}, { url: url }, params);
+  }
+
+  params = _.assign({ method: 'GET' }, params);
+
+  return {
+    op: taskOps.TASK_OP_REQUEST,
+    params: params
+  };
+};
+
+request.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var url = _.get(params, 'url', '');
+  var opts = _.omit(params, ['url']);
+  if (_.get(opts, 'method', '') == 'GET') opts = _.omit(opts, ['method']);
+
+  if (_.isEmpty(opts)) return 'request(' + JSON.stringify(url) + ')';else return 'request(' + JSON.stringify(url) + ', ' + JSON.stringify(opts, null, 2) + ')';
+};
+
+module.exports = request;
+
+/***/ }),
+/* 56 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var select = function select() {
+  var columns = Array.from(arguments);
+
+  if (columns.length == 1 && _.isArray(_.get(columns, '[0]'))) columns = _.get(columns, '[0]', []);
+
+  return {
+    op: taskOps.TASK_OP_SELECT,
+    params: {
+      columns: columns
+    }
+  };
+};
+
+select.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var cols = JSON.stringify(params.columns) || '';
+  if (cols.indexOf('[') != -1 && cols.indexOf(']') != -1) cols = cols.substring(1, cols.length - 1);
+  return 'select(' + cols + ')';
+};
+
+module.exports = select;
+
+/***/ }),
+/* 57 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var sequence = function sequence(steps) {
+
+  return {
+    op: taskOps.TASK_OP_SEQUENCE,
+    params: {
+      steps: steps
+    }
+  };
+};
+
+sequence.toCode = function (json, Flexio) {
+  var retval = _.map(json.params.items, function (t) {
+
+    var cmd_str = Flexio.task.toCode(t, Flexio);
+
+    if (_.get(t, 'params.lang', '') != 'python') cmd_str = cmd_str.replace(/\n/g, '\n  ');
+
+    return cmd_str;
+  });
+
+  var retval = ['Flexio.pipe()'].concat(retval);
+
+  return retval.join('\n  .');
+};
+
+module.exports = sequence;
+
+/***/ }),
+/* 58 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var set = function set(variable, value) {
+
+  if (util.isPipeObject(value)) value = value.pipe.task;
+
+  return {
+    op: taskOps.TASK_OP_SET,
+    params: {
+      "var": variable,
+      "value": value
+    }
+  };
+};
+
+set.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var variable = _.get(params, 'variable', '');
+  var value = _.get(params, 'value', '');
+
+  variable = JSON.stringify(variable);
+
+  if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value !== null && value.hasOwnProperty('op')) {
+    value = Flexio.task.toCode(value, Flexio);
+  } else {
+    value = JSON.stringify(value);
+  }
+
+  return 'set(' + variable + ', ' + value + ')';
+};
+
+module.exports = set;
+
+/***/ }),
+/* 59 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var sleep = function sleep(value) {
+  value = _.defaultTo(value, 10);
+
+  return {
+    op: taskOps.TASK_OP_SLEEP,
+    params: {
+      value: value
+    }
+  };
+};
+
+sleep.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var val = JSON.stringify(params.value) || '';
+  return 'sleep(' + val + ')';
+};
+
+module.exports = sleep;
+
+/***/ }),
+/* 60 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var task = function task(json) {
+  return json;
+};
+
+task.toCode = function (json, Flexio) {
+  return 'task(' + JSON.stringify(json, null, 2) + ')';
+};
+
+module.exports = task;
+
+/***/ }),
+/* 61 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var transform = function transform(value) {
+  var args = Array.from(arguments);
+
+  var default_params = { operations: [] };
+  var params = {};
+  var columns = undefined;
+  var operations = [];
+
+  var arg1 = _.get(args, '[0]');
+
+  if (_.isPlainObject(arg1)) {
+    if (args.length == 1 && _.has(arg1, 'operations')) {
+      params = _.pick(arg1, ['columns', 'operations']);
+      params = _.assign(default_params, params);
+    } else {
+      operations = [].concat(args);
+      params = { operations: operations };
+    }
+
+    return {
+      op: taskOps.TASK_OP_TRANSFORM,
+      params: params
+    };
+  }
+
+  return {
+    op: taskOps.TASK_OP_TRANSFORM,
+    params: {
+      columns: columns,
+      operations: operations
+    }
+  };
+};
+
+transform.toCode = function (json, Flexio) {
+  var params = json.hasOwnProperty('params') ? json.params : {};
+  if (!params.hasOwnProperty('columns') && params.hasOwnProperty('operations') && Array.isArray(params.operations) && params.operations.length == 1) return "transform(" + JSON.stringify(params.operations[0]) + ")";
+  return "transform(" + JSON.stringify(params) + ")";
+};
+
+module.exports = transform;
+
+/***/ }),
+/* 62 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+var taskOps = __webpack_require__(2);
+var write = function write(path) {
+  return {
+    op: taskOps.TASK_OP_WRITE,
+    params: {
+      path: path
+    }
+  };
+};
+
+write.toCode = function (json, Flexio) {
+  var params = _.get(json, 'params', {});
+  var path = JSON.stringify(params.path) || '""';
+  return 'write(' + path + ')';
+};
+
+module.exports = write;
+
+/***/ }),
+/* 63 */
+/***/ (function(module, exports) {
+
+module.exports = {"name":"flexio-sdk-js","version":"1.20.2","description":"Javascript SDK for managing Flex.io resources and services","author":"David Z. Williams <dave@flex.io>","--main":"dist/flexio-node.js","main":"src/main.js","--browser":"src/main.js","browser":"dist/flexio.min.js","scripts":{"dev":"cross-env build=development webpack-dev-server --config ./build/webpack.dev.js --open --inline --https --hot","build:debug":"cross-env build=debug webpack --config build/webpack.dist.js","build:release":"cross-env build=production webpack --config build/webpack.dist.js","build:examples":"webpack --config build/webpack.examples.js","build":"npm run build:debug && npm run build:release && npm run build:examples","test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/flexiodata/flexio-sdk-js.git"},"keywords":[],"license":"Apache-2.0","bugs":{"url":"https://github.com/flexiodata/flexio-sdk-js/issues"},"homepage":"https://github.com/flexiodata/flexio-sdk-js/","dependencies":{"axios":"^0.16.2","lodash":"^4.17.4","vue-highlightjs":"^1.3.3"},"devDependencies":{"autoprefixer":"^7.1.4","babel-core":"^6.26.0","babel-loader":"^7.1.2","babel-plugin-lodash":"^3.2.11","babel-plugin-transform-es2015-destructuring":"^6.23.0","babel-plugin-transform-es2015-parameters":"^6.24.1","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-es2015":"^6.24.1","babel-preset-stage-2":"^6.24.1","cross-env":"^5.0.5","css-loader":"^0.28.7","deep-assign":"^2.0.0","vue":"^2.4.4","vue-loader":"^13.0.4","vue-simple-spinner":"^1.2.7","vue-style-loader":"^3.0.3","vue-template-compiler":"^2.4.4","webpack":"^3.5.5","webpack-dev-server":"^2.8.2"}}
+
+/***/ }),
+/* 64 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+var util = __webpack_require__(1);
+
+module.exports = {};
+module.exports.getConnectionsObject = function (Flexio) {
+
+  return new function () {
+
+    this.create = function (conn, callback) {
+
+      var data;
+      if (_.isPlainObject(conn)) {
+        data = conn;
+      } else if (conn instanceof Flexio.connection) {
+        data = conn.connection;
+      } else {
+        throw "Unknown connection object type";
+      }
+
+      return new Promise(function (resolve, reject) {
+        Flexio.http().post('/connections', data).then(function (response) {
+          Flexio.util.callbackAdapter(null, response.data, resolve, reject, callback);
+        }).catch(function (error) {
+          Flexio.util.debug('Flexio.connections.create(): Failed.');
+          Flexio.util.callbackAdapter(error, null, resolve, reject, callback);
+        });
+      });
+    };
+
+    this.list = function (callback) {
+      var args = Array.from(arguments);
+      var callback = _.get(args, '[0]');
+
+      return new Promise(function (resolve, reject) {
+        Flexio.util.debug('Requesting Connections...');
+        Flexio.http().get('/connections').then(function (response) {
+          var items = _.get(response, 'data', []);
+          Flexio.util.debug('Success!');
+          Flexio.util.callbackAdapter(null, items, resolve, reject, callback);
+        }).catch(function (error) {
+          Flexio.util.debug('Failed.');
+          Flexio.util.callbackAdapter(error, null, resolve, reject, callback);
+        });
+      });
+    };
+  }();
+};
+
+/***/ }),
+/* 65 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+
+module.exports = {};
+module.exports.getPipesObject = function (Flexio) {
+
+  return new function () {
+
+    this.create = function (pipe, callback) {
+
+      var data;
+      if (_.isPlainObject(pipe)) {
+        data = pipe;
+      } else if (pipe instanceof Flexio.pipe) {
+        data = pipe.pipe;
+      } else {
+        throw "Unknown pipe object type";
+      }
+
+      return new Promise(function (resolve, reject) {
+        Flexio.http().post('/pipes', data).then(function (response) {
+          Flexio.util.callbackAdapter(null, response.data, resolve, reject, callback);
+        }).catch(function (error) {
+          Flexio.util.debug('Flexio.pipes.create(): Failed.');
+          Flexio.util.callbackAdapter(error, null, resolve, reject, callback);
+        });
+      });
+    };
+
+    this.list = function (callback) {
+      var args = Array.from(arguments);
+      var callback = _.get(args, '[0]');
+
+      return new Promise(function (resolve, reject) {
+        Flexio.util.debug('Requesting Pipes...');
+
+        Flexio.http().get('/pipes').then(function (response) {
+          var items = _.get(response, 'data', []);
+          Flexio.util.debug('Success!');
+          Flexio.util.callbackAdapter(null, items, resolve, reject, callback);
+        }).catch(function (error) {
+          Flexio.util.debug('Failed.');
+          Flexio.util.callbackAdapter(error, null, resolve, reject, callback);
+        });
+      });
+    };
+
+    this.run = function () {
+      var args = Array.from(arguments);
+      args.push(null, null, null);
+
+      var run_params = {};
+      var callback;
+      var pipe_identifier;
+      var tasks_array = null;
+
+      if (args[0] instanceof Flexio.pipe) {
+        pipe_identifier = _.get(args[0], 'pipe.eid', '');
+        tasks_array = _.get(args[0], 'pipe.task', '');
+      } else if (Array.isArray(args[0])) {
+        pipe_identifier = '';
+        tasks_array = args[0];
+      } else {
+        pipe_identifier = args[0];
+      }
+
+      if (_.isPlainObject(args[1])) {
+        run_params = args[1];
+      }
+
+      if (_.isFunction(args[1])) {
+        callback = args[1];
+      } else if (_.isFunction(args[2])) {
+        callback = args[2];
+      } else {
+        callback = null;
+      }
+
+      var getResponseObjectFromArrayBuffer = function getResponseObjectFromArrayBuffer(arraybuffer, content_type) {
+        return {
+          contentType: content_type,
+          buffer: arraybuffer,
+          get blob() {
+            return new Blob([this.buffer], { "type": content_type });
+          },
+          get text() {
+            return Flexio.util.arrayBufferToString(this.buffer);
+          },
+          get data() {
+            try {
+              return JSON.parse(Flexio.util.arrayBufferToString(this.buffer));
+            } catch (e) {
+              return null;
+            }
+          }
+        };
+      };
+
+      return new Promise(function (resolve, reject) {
+
+        Flexio.util.debug('Running Pipe `' + (pipe_identifier.length == 0 ? '[Pipe Object/Task Array]' : pipe_identifier) + '`...');
+
+        if (pipe_identifier.length == 0) {
+
+          var create_params = {
+            name: 'SDK Pipe',
+            description: 'SDK Pipe',
+            task: tasks_array,
+
+            process_mode: 'R'
+          };
+
+          Flexio.http().post('/processes', create_params).then(function (response) {
+            var obj = _.get(response, 'data', {});
+            var process_eid = _.get(obj, 'eid', '');
+            Flexio.util.debug('Created Process.');
+
+            var http_config = {
+              method: 'post',
+              url: '/processes/' + process_eid + '/run',
+              responseType: 'arraybuffer'
+            };
+
+            if (run_params.hasOwnProperty('data')) {
+              http_config.data = run_params.data;
+            }
+
+            if (run_params.hasOwnProperty('query')) {
+              http_config.params = run_params.query;
+            }
+
+            var http = Flexio.http();
+            http(http_config).then(function (response) {
+              Flexio.util.debug('Process Complete.');
+              var content_type = _.get(response, 'headers.content-type', 'text/plain');
+              var response_object = getResponseObjectFromArrayBuffer(response.data, content_type);
+              Flexio.util.callbackAdapter(null, response_object, resolve, reject, callback);
+            }).catch(function (error) {
+              Flexio.util.debug('Process Run Failed. ' + error);
+              Flexio.util.callbackAdapter(error, null, resolve, reject, callback);
+            });
+          }).catch(function (error) {
+            Flexio.util.debug('Process Create Failed. ' + error);
+            Flexio.util.callbackAdapter(error, null, resolve, reject, callback);
+          });
+        } else {
+
+          var http_config = {
+            method: 'post',
+            url: '/pipes/' + pipe_identifier + '/run',
+            responseType: 'arraybuffer'
+          };
+
+          if (run_params.hasOwnProperty('data')) {
+            http_config.data = run_params.data;
+          }
+
+          if (run_params.hasOwnProperty('query')) {
+            http_config.params = run_params.query;
+          }
+
+          if (run_params.hasOwnProperty('contentType')) {
+            http_config.headers = { 'Content-Type': run_params.contentType };
+          } else {
+            if (http_config.hasOwnProperty('data')) {
+              if (_.isPlainObject(http_config.data)) {} else if (_.isString(http_config.data)) {
+                http_config.headers = { 'Content-Type': 'text/plain' };
+              } else {
+                http_config.headers = { 'Content-Type': 'application/octet-stream' };
+              }
+            }
+          }
+
+          var http = Flexio.http();
+          http(http_config).then(function (response) {
+            Flexio.util.debug('Process Complete.');
+            var content_type = _.get(response, 'headers.content-type', 'text/plain');
+            var response_object = getResponseObjectFromArrayBuffer(response.data, content_type);
+            Flexio.util.callbackAdapter(null, response_object, resolve, reject, callback);
+          }).catch(function (error) {
+            Flexio.util.debug('Pipe Run Call Failed. ' + error);
+            Flexio.util.callbackAdapter(error, null, resolve, reject, callback);
+          });
+        }
+      });
+    };
+  }();
+};
+
+/***/ }),
+/* 66 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _ = __webpack_require__(0);
+
+module.exports = {};
+module.exports.getPipeConstructor = function (Flexio) {
+
+  return function (pipeconstruct_param) {
+
+    if (!(this instanceof Flexio.pipe)) {
+      return new Flexio.pipe(pipeconstruct_param);
+    }
+
+    var pipeobj = _.assign(this, {
+
+      pipe: {
+        name: 'Untitled',
+        description: '',
+        task: { op: 'sequence', params: { items: [] } }
+      },
+      processes: [],
+      _params: {},
+      loading: false,
+      saving: false,
+      running: false,
+
+      getJSON: function getJSON() {
+        return _.assign({}, this.pipe);
+      },
+      getProcesses: function getProcesses() {
+        return [].concat(this.processes);
+      },
+      getLastProcess: function getLastProcess() {
+        return _.last(this.processes);
+      },
+      addTask: function addTask(task) {
+        this.pipe.task.params.items.push(task);
+        return this;
+      },
+      clearTasks: function clearTasks() {
+        this.pipe.task.params.items = [];
+        return this;
+      },
+      getTasks: function getTasks() {
+        return this.pipe.task.params.items;
+      },
+      load: function load() {
+        var _this = this,
+            _arguments = arguments;
+
+        var args = Array.from(arguments);
+        var identifier = _.get(args, '[0]');
+        var callback = _.get(args, '[1]');
+
+        if (this.loading === true || this.saving === true || this.running === true) {
+          setTimeout(function () {
+            _this.load.apply(_this, _arguments);
+          }, 50);
+          return this;
+        }
+
+        if (_.isNil(identifier)) return Flexio.util.debug("The `identifier` parameter is required. Either the pipe's eid or pipe's alias may be used.");
+
+        this.loading = true;
+        Flexio.util.debug('Loading Pipe `' + identifier + '`...');
+
+        Flexio.http().get('/pipes/' + identifier).then(function (response) {
+          var obj = _.get(response, 'data', {});
+          _this.pipe = _.assign({}, obj);
+          _this.loading = false;
+          Flexio.util.debug('Pipe Loaded.');
+
+          if (typeof callback == 'function') callback.call(_this, null, obj);
+        }).catch(function (error) {
+          _this.loading = false;
+          Flexio.util.debug('Pipe Load Failed. ');
+
+          if (typeof callback == 'function') callback.call(_this, error, null);
+        });
+
+        return this;
+      },
+      save: function save() {
+        var _this2 = this,
+            _arguments2 = arguments;
+
+        var args = Array.from(arguments);
+        var params = _.get(args, '[0]');
+        var callback = _.get(args, '[0]');
+
+        if (this.loading === true || this.saving === true || this.running === true) {
+          setTimeout(function () {
+            _this2.save.apply(_this2, _arguments2);
+          }, 50);
+          return this;
+        }
+
+        if (_.isPlainObject(params)) {
+          _.assign(this.pipe, _.pick(params, ['name', 'description', 'ename']));
+          callback = _.get(args, '[1]');
+        }
+
+        this.saving = true;
+        Flexio.util.debug('Saving Pipe `' + _.get(this.pipe, 'name', 'Untitled Pipe') + '`...');
+
+        Flexio.http().post('/pipes', this.pipe).then(function (response) {
+          var pipe = _.get(response, 'data', {});
+          _this2.pipe = _.assign({}, pipe);
+          _this2.saving = false;
+          Flexio.util.debug('Pipe Saved.');
+
+          if (typeof callback == 'function') callback.call(_this2, null, _this2.pipe);
+        }).catch(function (error) {
+          _this2.saving = false;
+          Flexio.util.debug('Pipe Save Failed.');
+
+          if (typeof callback == 'function') callback.call(_this2, error, null);
+        });
+
+        return this;
+      },
+      run: function run() {
+        var args = Array.from(arguments);
+        args.unshift(this);
+        return Flexio.pipes.run.apply(null, args);
+      },
+      params: function params(_params) {
+        this._params = _.assign({}, this.getParams(), _params);
+        return this;
+      },
+      clearParams: function clearParams(keys) {
+        if (_.isArray(keys)) this._params = _.omit(this._params, keys);else if (_.isNil(keys)) this._params = {};
+
+        return this;
+      },
+      getParams: function getParams() {
+        return _.assign({}, this._params);
+      },
+      toCode: function toCode(p) {
+        return Flexio.task.toCode(this.pipe.task, Flexio);
+      }
+    });
+
+    _.each(Flexio.task, function (taskFn, task_name) {
+      if (task_name != 'toCode') {
+        pipeobj[task_name] = function () {
+          return pipeobj.addTask(taskFn.apply(pipeobj, arguments));
+        };
+      }
+    });
+
+    if (pipeconstruct_param !== undefined) {
+      if (typeof pipeconstruct_param === 'string' || pipeconstruct_param instanceof String) {
+        pipeobj.pipe.eid = pipeconstruct_param;
+      } else if ((typeof pipeconstruct_param === 'undefined' ? 'undefined' : _typeof(pipeconstruct_param)) === 'object') {
+        if (pipeconstruct_param.hasOwnProperty('pipe')) {
+          pipeobj.pipe = JSON.parse(JSON.stringify(pipeconstruct_param.pipe));
+        } else if (pipeconstruct_param.hasOwnProperty('task')) {
+          pipeobj.pipe = JSON.parse(JSON.stringify(pipeconstruct_param));
+        } else if (pipeconstruct_param.hasOwnProperty('op')) {
+          pipeobj.pipe.task = pipeconstruct_param;
+        }
+      }
+    }
+
+    return pipeobj;
+  };
+};
+
+/***/ }),
+/* 67 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _ = __webpack_require__(0);
+
+var method_types = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'];
+var allowed_auth = ['', 'basic', 'bearer', 'oauth2'];
+
+function toBase64(str) {
+  try {
+    return btoa(unescape(encodeURIComponent(str)));
+  } catch (e) {
+    return '';
+  }
+}
+
+function fromBase64(str) {
+  try {
+    return decodeURIComponent(escape(atob(str)));
+  } catch (e) {
+    return '';
+  }
+}
+
+module.exports = {};
+module.exports.getConnectionConstructor = function (Flexio) {
+
+  return function () {
+
+    if (!(this instanceof Flexio.connection)) {
+      return new Flexio.connection();
+    }
+
+    var retval = _.assign(this, {
+
+      connection: {
+        name: 'Untitled',
+        description: '',
+        connection_type: "http",
+        connection_info: {
+          method: '',
+          url: '',
+          auth: '',
+          username: '',
+          password: '',
+          token: '',
+          access_token: '',
+          refresh_token: '',
+          expires: '',
+          data: {},
+          headers: {} }
+      },
+      loading: false,
+      saving: false,
+      running: false,
+
+      getJSON: function getJSON() {
+        return _.assign({}, this.connection);
+      },
+      name: function name(value) {
+        this.connection.name = value;
+        return this;
+      },
+      description: function description(value) {
+        this.connection.description = value;
+        return this;
+      },
+      method: function method() {
+        var args = Array.from(arguments);
+        var method = _.get(args, '[0]');
+
+        if (!_.isString(method)) return this;
+
+        if (!_.includes(method_types, method)) return this;
+
+        return this._setInfo('method', method);
+      },
+      url: function url() {
+        var args = Array.from(arguments);
+        var url = _.get(args, '[0]');
+
+        if (!_.isString(url)) return this;
+
+        return this._setInfo('url', url);
+      },
+      auth: function auth() {
+        var args = Array.from(arguments);
+        var auth = _.get(args, '[0]');
+
+        if (!_.isString(auth)) return this;
+
+        if (!_.includes(allowed_auth, auth)) return this;
+
+        if (auth == 'none') auth = '';
+
+        return this._setInfo('auth', auth);
+      },
+      username: function username() {
+        var args = Array.from(arguments);
+        var username = _.get(args, '[0]');
+
+        if (!_.isString(username)) return this;
+
+        return this._setInfo('username', username);
+      },
+      password: function password() {
+        var args = Array.from(arguments);
+        var password = _.get(args, '[0]');
+
+        if (!_.isString(password)) return this;
+
+        return this._setInfo('password', password);
+      },
+      token: function token() {
+        var args = Array.from(arguments);
+        var token = _.get(args, '[0]');
+
+        if (!_.isString(token)) return this;
+
+        return this._setInfo('token', token);
+      },
+      accessToken: function accessToken() {
+        var args = Array.from(arguments);
+        var token = _.get(args, '[0]');
+
+        if (!_.isString(token)) return this;
+
+        return this._setInfo('access_token', token);
+      },
+      refreshToken: function refreshToken() {
+        var args = Array.from(arguments);
+        var token = _.get(args, '[0]');
+
+        if (!_.isString(token)) return this;
+
+        return this._setInfo('refresh_token', token);
+      },
+      expires: function expires() {
+        var args = Array.from(arguments);
+        var expires = _.get(args, '[0]');
+
+        if (_.isNumber(expires)) expires = '' + expires;
+
+        if (!_.isString(expires)) return this;
+
+        return this._setInfo('expires', expires);
+      },
+      data: function data() {
+        var args = Array.from(arguments);
+        var data = _.get(args, '[0]');
+
+        if (!_.isPlainObject(data)) return this;
+
+        var existing_data = this._getInfo('data', {});
+        data = _.assign({}, existing_data, data);
+
+        return this._setInfo('data', data);
+      },
+      clearData: function clearData() {
+        var keys = Array.from(arguments);
+
+        if (keys.length == 0) return this._setInfo('data', {});
+
+        if (keys.length == 1 && _.isArray(_.get(keys, '[0]'))) keys = _.get(keys, '[0]', []);
+
+        var existing_data = this._getInfo('data', {});
+        var data = _.omit(existing_data, keys);
+
+        return this._setInfo('data', data);
+      },
+      headers: function headers() {
+        var args = Array.from(arguments);
+        var headers = _.get(args, '[0]');
+
+        if (!_.isPlainObject(headers)) return this;
+
+        var existing_headers = this._getInfo('headers', {});
+        headers = _.assign({}, existing_headers, headers);
+
+        return this._setInfo('headers', headers);
+      },
+      clearHeaders: function clearHeaders() {
+        var keys = Array.from(arguments);
+
+        if (keys.length == 0) return this._setInfo('headers', {});
+
+        if (keys.length == 1 && _.isArray(_.get(keys, '[0]'))) keys = _.get(keys, '[0]', []);
+
+        var existing_headers = this._getInfo('headers', {});
+        var headers = _.omit(existing_headers, keys);
+
+        return this._setInfo('headers', headers);
+      },
+      load: function load() {
+        var _this = this,
+            _arguments = arguments;
+
+        var args = Array.from(arguments);
+        var identifier = _.get(args, '[0]');
+        var callback = _.get(args, '[1]');
+
+        if (this.loading === true || this.saving === true || this.running === true) {
+          setTimeout(function () {
+            _this.load.apply(_this, _arguments);
+          }, 50);
+          return this;
+        }
+
+        if (_.isNil(identifier)) return Flexio.util.debug("The `identifier` parameter is required. Either the connection's eid or connection's alias may be used.");
+
+        this.loading = true;
+        Flexio.util.debug('Loading Connection `' + identifier + '`...');
+
+        Flexio.http().get('/connections/' + identifier).then(function (response) {
+          var connection = _.get(response, 'data', {});
+          _this.connection = _.assign({}, connection);
+          _this.loading = false;
+          Flexio.util.debug('Connection Loaded.');
+
+          if (typeof callback == 'function') callback.call(_this, null, connection);
+        }).catch(function (error) {
+          _this.loading = false;
+          Flexio.util.debug('Connection Load Failed.');
+
+          if (typeof callback == 'function') callback.call(_this, error, null);
+        });
+
+        return this;
+      },
+      save: function save() {
+        var _this2 = this,
+            _arguments2 = arguments;
+
+        var args = Array.from(arguments);
+        var params = _.get(args, '[0]');
+        var callback = _.get(args, '[0]');
+
+        if (this.loading === true || this.saving === true || this.running === true) {
+          setTimeout(function () {
+            _this2.save.apply(_this2, _arguments2);
+          }, 50);
+          return this;
+        }
+
+        if (_.isPlainObject(params)) {
+          _.assign(this.connection, _.pick(params, ['name', 'description', 'ename']));
+          callback = _.get(args, '[1]');
+        }
+
+        this.saving = true;
+        Flexio.util.debug('Saving Connection `' + _.get(this.connection, 'name', 'Untitled Connection') + '`...');
+
+        Flexio.http().post('/connections', this.connection).then(function (response) {
+          var connection = _.get(response, 'data', {});
+          _this2.connection = _.assign({}, connection);
+          _this2.saving = false;
+          Flexio.util.debug('Connection Saved.');
+
+          if (typeof callback == 'function') callback.call(_this2, null, _this2.connection);
+        }).catch(function (error) {
+          _this2.saving = false;
+          Flexio.util.debug('Connection Save Failed.');
+
+          if (typeof callback == 'function') callback.call(_this2, error, null);
+        });
+
+        return this;
+      },
+      _getInfo: function _getInfo(key, default_val) {
+        return _.get(this.connection, 'connection_info.' + key, default_val);
+      },
+      _setInfo: function _setInfo(key, val) {
+        _.set(this.connection, 'connection_info.' + key, val);
+        return this;
+      }
+    });
+
+    return retval;
+  };
+};
+
+/***/ })
+/******/ ])["default"];
+});
\ No newline at end of file
diff --git a/dist/orig/flexio.min.js b/dist/orig/flexio.min.js
new file mode 100644
index 0000000..01f3180
--- /dev/null
+++ b/dist/orig/flexio.min.js
@@ -0,0 +1,17 @@
+/*!
+ * Flex.io Javascript SDK v1.20.2 (https://github.com/flexiodata/flexio-sdk-js)
+ * (c) 2018 Gold Prairie LLC
+ */
+!function(t,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.Flexio=n():t.Flexio=n()}(this,function(){return function(t){function n(e){if(r[e])return r[e].exports;var i=r[e]={i:e,l:!1,exports:{}};return t[e].call(i.exports,i,i.exports,n),i.l=!0,i.exports}var r={};return n.m=t,n.c=r,n.d=function(t,r,e){n.o(t,r)||Object.defineProperty(t,r,{configurable:!1,enumerable:!0,get:e})},n.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(r,"a",r),r},n.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},n.p="",n(n.s=12)}([function(t,n,r){(function(t,e){var i;(function(){function o(t,n){return t.set(n[0],n[1]),t}function u(t,n){return t.add(n),t}function a(t,n,r){switch(r.length){case 0:return t.call(n);case 1:return t.call(n,r[0]);case 2:return t.call(n,r[0],r[1]);case 3:return t.call(n,r[0],r[1],r[2])}return t.apply(n,r)}function f(t,n,r,e){for(var i=-1,o=null==t?0:t.length;++i<o;){var u=t[i];n(e,u,r(u),t)}return e}function s(t,n){for(var r=-1,e=null==t?0:t.length;++r<e&&!1!==n(t[r],r,t););return t}function c(t,n){for(var r=null==t?0:t.length;r--&&!1!==n(t[r],r,t););return t}function l(t,n){for(var r=-1,e=null==t?0:t.length;++r<e;)if(!n(t[r],r,t))return!1;return!0}function p(t,n){for(var r=-1,e=null==t?0:t.length,i=0,o=[];++r<e;){var u=t[r];n(u,r,t)&&(o[i++]=u)}return o}function h(t,n){return!!(null==t?0:t.length)&&O(t,n,0)>-1}function g(t,n,r){for(var e=-1,i=null==t?0:t.length;++e<i;)if(r(n,t[e]))return!0;return!1}function d(t,n){for(var r=-1,e=null==t?0:t.length,i=Array(e);++r<e;)i[r]=n(t[r],r,t);return i}function v(t,n){for(var r=-1,e=n.length,i=t.length;++r<e;)t[i+r]=n[r];return t}function _(t,n,r,e){var i=-1,o=null==t?0:t.length;for(e&&o&&(r=t[++i]);++i<o;)r=n(r,t[i],i,t);return r}function y(t,n,r,e){var i=null==t?0:t.length;for(e&&i&&(r=t[--i]);i--;)r=n(r,t[i],i,t);return r}function m(t,n){for(var r=-1,e=null==t?0:t.length;++r<e;)if(n(t[r],r,t))return!0;return!1}function b(t){return t.split("")}function w(t){return t.match(Fn)||[]}function A(t,n,r){var e;return r(t,function(t,r,i){if(n(t,r,i))return e=r,!1}),e}function S(t,n,r,e){for(var i=t.length,o=r+(e?1:-1);e?o--:++o<i;)if(n(t[o],o,t))return o;return-1}function O(t,n,r){return n===n?G(t,n,r):S(t,E,r)}function x(t,n,r,e){for(var i=r-1,o=t.length;++i<o;)if(e(t[i],n))return i;return-1}function E(t){return t!==t}function T(t,n){var r=null==t?0:t.length;return r?k(t,n)/r:Nt}function P(t){return function(n){return null==n?it:n[t]}}function R(t){return function(n){return null==t?it:t[n]}}function C(t,n,r,e,i){return i(t,function(t,i,o){r=e?(e=!1,t):n(r,t,i,o)}),r}function j(t,n){var r=t.length;for(t.sort(n);r--;)t[r]=t[r].value;return t}function k(t,n){for(var r,e=-1,i=t.length;++e<i;){var o=n(t[e]);o!==it&&(r=r===it?o:r+o)}return r}function I(t,n){for(var r=-1,e=Array(t);++r<t;)e[r]=n(r);return e}function U(t,n){return d(n,function(n){return[n,t[n]]})}function N(t){return function(n){return t(n)}}function L(t,n){return d(n,function(n){return t[n]})}function B(t,n){return t.has(n)}function D(t,n){for(var r=-1,e=t.length;++r<e&&O(n,t[r],0)>-1;);return r}function K(t,n){for(var r=t.length;r--&&O(n,t[r],0)>-1;);return r}function M(t,n){for(var r=t.length,e=0;r--;)t[r]===n&&++e;return e}function F(t){return"\\"+Pr[t]}function z(t,n){return null==t?it:t[n]}function q(t){return mr.test(t)}function J(t){return br.test(t)}function Y(t){for(var n,r=[];!(n=t.next()).done;)r.push(n.value);return r}function W(t){var n=-1,r=Array(t.size);return t.forEach(function(t,e){r[++n]=[e,t]}),r}function $(t,n){return function(r){return t(n(r))}}function H(t,n){for(var r=-1,e=t.length,i=0,o=[];++r<e;){var u=t[r];u!==n&&u!==ct||(t[r]=ct,o[i++]=r)}return o}function V(t){var n=-1,r=Array(t.size);return t.forEach(function(t){r[++n]=t}),r}function Z(t){var n=-1,r=Array(t.size);return t.forEach(function(t){r[++n]=[t,t]}),r}function G(t,n,r){for(var e=r-1,i=t.length;++e<i;)if(t[e]===n)return e;return-1}function X(t,n,r){for(var e=r+1;e--;)if(t[e]===n)return e;return e}function Q(t){return q(t)?nt(t):Yr(t)}function tt(t){return q(t)?rt(t):b(t)}function nt(t){for(var n=_r.lastIndex=0;_r.test(t);)++n;return n}function rt(t){return t.match(_r)||[]}function et(t){return t.match(yr)||[]}var it,ot=200,ut="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",at="Expected a function",ft="__lodash_hash_undefined__",st=500,ct="__lodash_placeholder__",lt=1,pt=2,ht=4,gt=1,dt=2,vt=1,_t=2,yt=4,mt=8,bt=16,wt=32,At=64,St=128,Ot=256,xt=512,Et=30,Tt="...",Pt=800,Rt=16,Ct=1,jt=2,kt=1/0,It=9007199254740991,Ut=1.7976931348623157e308,Nt=NaN,Lt=4294967295,Bt=Lt-1,Dt=Lt>>>1,Kt=[["ary",St],["bind",vt],["bindKey",_t],["curry",mt],["curryRight",bt],["flip",xt],["partial",wt],["partialRight",At],["rearg",Ot]],Mt="[object Arguments]",Ft="[object Array]",zt="[object AsyncFunction]",qt="[object Boolean]",Jt="[object Date]",Yt="[object DOMException]",Wt="[object Error]",$t="[object Function]",Ht="[object GeneratorFunction]",Vt="[object Map]",Zt="[object Number]",Gt="[object Null]",Xt="[object Object]",Qt="[object Proxy]",tn="[object RegExp]",nn="[object Set]",rn="[object String]",en="[object Symbol]",on="[object Undefined]",un="[object WeakMap]",an="[object WeakSet]",fn="[object ArrayBuffer]",sn="[object DataView]",cn="[object Float32Array]",ln="[object Float64Array]",pn="[object Int8Array]",hn="[object Int16Array]",gn="[object Int32Array]",dn="[object Uint8Array]",vn="[object Uint8ClampedArray]",_n="[object Uint16Array]",yn="[object Uint32Array]",mn=/\b__p \+= '';/g,bn=/\b(__p \+=) '' \+/g,wn=/(__e\(.*?\)|\b__t\)) \+\n'';/g,An=/&(?:amp|lt|gt|quot|#39);/g,Sn=/[&<>"']/g,On=RegExp(An.source),xn=RegExp(Sn.source),En=/<%-([\s\S]+?)%>/g,Tn=/<%([\s\S]+?)%>/g,Pn=/<%=([\s\S]+?)%>/g,Rn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Cn=/^\w*$/,jn=/^\./,kn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,In=/[\\^$.*+?()[\]{}|]/g,Un=RegExp(In.source),Nn=/^\s+|\s+$/g,Ln=/^\s+/,Bn=/\s+$/,Dn=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Kn=/\{\n\/\* \[wrapped with (.+)\] \*/,Mn=/,? & /,Fn=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,zn=/\\(\\)?/g,qn=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Jn=/\w*$/,Yn=/^[-+]0x[0-9a-f]+$/i,Wn=/^0b[01]+$/i,$n=/^\[object .+?Constructor\]$/,Hn=/^0o[0-7]+$/i,Vn=/^(?:0|[1-9]\d*)$/,Zn=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Gn=/($^)/,Xn=/['\n\r\u2028\u2029\\]/g,Qn="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",tr="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\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",nr="["+tr+"]",rr="["+Qn+"]",er="[a-z\\xdf-\\xf6\\xf8-\\xff]",ir="[^\\ud800-\\udfff"+tr+"\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",or="\\ud83c[\\udffb-\\udfff]",ur="(?:\\ud83c[\\udde6-\\uddff]){2}",ar="[\\ud800-\\udbff][\\udc00-\\udfff]",fr="[A-Z\\xc0-\\xd6\\xd8-\\xde]",sr="(?:"+er+"|"+ir+")",cr="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",lr="(?:\\u200d(?:"+["[^\\ud800-\\udfff]",ur,ar].join("|")+")[\\ufe0e\\ufe0f]?"+cr+")*",pr="[\\ufe0e\\ufe0f]?"+cr+lr,hr="(?:"+["[\\u2700-\\u27bf]",ur,ar].join("|")+")"+pr,gr="(?:"+["[^\\ud800-\\udfff]"+rr+"?",rr,ur,ar,"[\\ud800-\\udfff]"].join("|")+")",dr=RegExp("['’]","g"),vr=RegExp(rr,"g"),_r=RegExp(or+"(?="+or+")|"+gr+pr,"g"),yr=RegExp([fr+"?"+er+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[nr,fr,"$"].join("|")+")","(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\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\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[nr,fr+sr,"$"].join("|")+")",fr+"?"+sr+"+(?:['’](?:d|ll|m|re|s|t|ve))?",fr+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)","\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)","\\d+",hr].join("|"),"g"),mr=RegExp("[\\u200d\\ud800-\\udfff"+Qn+"\\ufe0e\\ufe0f]"),br=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,wr=["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"],Ar=-1,Sr={};Sr[cn]=Sr[ln]=Sr[pn]=Sr[hn]=Sr[gn]=Sr[dn]=Sr[vn]=Sr[_n]=Sr[yn]=!0,Sr[Mt]=Sr[Ft]=Sr[fn]=Sr[qt]=Sr[sn]=Sr[Jt]=Sr[Wt]=Sr[$t]=Sr[Vt]=Sr[Zt]=Sr[Xt]=Sr[tn]=Sr[nn]=Sr[rn]=Sr[un]=!1;var Or={};Or[Mt]=Or[Ft]=Or[fn]=Or[sn]=Or[qt]=Or[Jt]=Or[cn]=Or[ln]=Or[pn]=Or[hn]=Or[gn]=Or[Vt]=Or[Zt]=Or[Xt]=Or[tn]=Or[nn]=Or[rn]=Or[en]=Or[dn]=Or[vn]=Or[_n]=Or[yn]=!0,Or[Wt]=Or[$t]=Or[un]=!1;var xr={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"},Er={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Tr={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"},Pr={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Rr=parseFloat,Cr=parseInt,jr="object"==typeof t&&t&&t.Object===Object&&t,kr="object"==typeof self&&self&&self.Object===Object&&self,Ir=jr||kr||Function("return this")(),Ur="object"==typeof n&&n&&!n.nodeType&&n,Nr=Ur&&"object"==typeof e&&e&&!e.nodeType&&e,Lr=Nr&&Nr.exports===Ur,Br=Lr&&jr.process,Dr=function(){try{return Br&&Br.binding&&Br.binding("util")}catch(t){}}(),Kr=Dr&&Dr.isArrayBuffer,Mr=Dr&&Dr.isDate,Fr=Dr&&Dr.isMap,zr=Dr&&Dr.isRegExp,qr=Dr&&Dr.isSet,Jr=Dr&&Dr.isTypedArray,Yr=P("length"),Wr=R(xr),$r=R(Er),Hr=R(Tr),Vr=function t(n){function r(t){if(uf(t)&&!_p(t)&&!(t instanceof b)){if(t instanceof i)return t;if(_c.call(t,"__wrapped__"))return ru(t)}return new i(t)}function e(){}function i(t,n){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=it}function b(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Lt,this.__views__=[]}function R(){var t=new b(this.__wrapped__);return t.__actions__=Bi(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Bi(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Bi(this.__views__),t}function G(){if(this.__filtered__){var t=new b(this);t.__dir__=-1,t.__filtered__=!0}else t=this.clone(),t.__dir__*=-1;return t}function nt(){var t=this.__wrapped__.value(),n=this.__dir__,r=_p(t),e=n<0,i=r?t.length:0,o=To(0,i,this.__views__),u=o.start,a=o.end,f=a-u,s=e?a:u-1,c=this.__iteratees__,l=c.length,p=0,h=$c(f,this.__takeCount__);if(!r||!e&&i==f&&h==f)return yi(t,this.__actions__);var g=[];t:for(;f--&&p<h;){s+=n;for(var d=-1,v=t[s];++d<l;){var _=c[d],y=_.iteratee,m=_.type,b=y(v);if(m==jt)v=b;else if(!b){if(m==Ct)continue t;break t}}g[p++]=v}return g}function rt(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var e=t[n];this.set(e[0],e[1])}}function Fn(){this.__data__=el?el(null):{},this.size=0}function Qn(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n}function tr(t){var n=this.__data__;if(el){var r=n[t];return r===ft?it:r}return _c.call(n,t)?n[t]:it}function nr(t){var n=this.__data__;return el?n[t]!==it:_c.call(n,t)}function rr(t,n){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=el&&n===it?ft:n,this}function er(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var e=t[n];this.set(e[0],e[1])}}function ir(){this.__data__=[],this.size=0}function or(t){var n=this.__data__,r=Zr(n,t);return!(r<0)&&(r==n.length-1?n.pop():jc.call(n,r,1),--this.size,!0)}function ur(t){var n=this.__data__,r=Zr(n,t);return r<0?it:n[r][1]}function ar(t){return Zr(this.__data__,t)>-1}function fr(t,n){var r=this.__data__,e=Zr(r,t);return e<0?(++this.size,r.push([t,n])):r[e][1]=n,this}function sr(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var e=t[n];this.set(e[0],e[1])}}function cr(){this.size=0,this.__data__={hash:new rt,map:new(Qc||er),string:new rt}}function lr(t){var n=So(this,t).delete(t);return this.size-=n?1:0,n}function pr(t){return So(this,t).get(t)}function hr(t){return So(this,t).has(t)}function gr(t,n){var r=So(this,t),e=r.size;return r.set(t,n),this.size+=r.size==e?0:1,this}function _r(t){var n=-1,r=null==t?0:t.length;for(this.__data__=new sr;++n<r;)this.add(t[n])}function yr(t){return this.__data__.set(t,ft),this}function mr(t){return this.__data__.has(t)}function br(t){var n=this.__data__=new er(t);this.size=n.size}function xr(){this.__data__=new er,this.size=0}function Er(t){var n=this.__data__,r=n.delete(t);return this.size=n.size,r}function Tr(t){return this.__data__.get(t)}function Pr(t){return this.__data__.has(t)}function jr(t,n){var r=this.__data__;if(r instanceof er){var e=r.__data__;if(!Qc||e.length<ot-1)return e.push([t,n]),this.size=++r.size,this;r=this.__data__=new sr(e)}return r.set(t,n),this.size=r.size,this}function kr(t,n){var r=_p(t),e=!r&&vp(t),i=!r&&!e&&mp(t),o=!r&&!e&&!i&&Op(t),u=r||e||i||o,a=u?I(t.length,cc):[],f=a.length;for(var s in t)!n&&!_c.call(t,s)||u&&("length"==s||i&&("offset"==s||"parent"==s)||o&&("buffer"==s||"byteLength"==s||"byteOffset"==s)||No(s,f))||a.push(s);return a}function Ur(t){var n=t.length;return n?t[Qe(0,n-1)]:it}function Nr(t,n){return Xo(Bi(t),re(n,0,t.length))}function Br(t){return Xo(Bi(t))}function Dr(t,n,r){(r===it||Ya(t[n],r))&&(r!==it||n in t)||te(t,n,r)}function Yr(t,n,r){var e=t[n];_c.call(t,n)&&Ya(e,r)&&(r!==it||n in t)||te(t,n,r)}function Zr(t,n){for(var r=t.length;r--;)if(Ya(t[r][0],n))return r;return-1}function Gr(t,n,r,e){return dl(t,function(t,i,o){n(e,t,r(t),o)}),e}function Xr(t,n){return t&&Di(n,Ff(n),t)}function Qr(t,n){return t&&Di(n,zf(n),t)}function te(t,n,r){"__proto__"==n&&Nc?Nc(t,n,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[n]=r}function ne(t,n){for(var r=-1,e=n.length,i=ec(e),o=null==t;++r<e;)i[r]=o?it:Df(t,n[r]);return i}function re(t,n,r){return t===t&&(r!==it&&(t=t<=r?t:r),n!==it&&(t=t>=n?t:n)),t}function ee(t,n,r,e,i,o){var u,a=n&lt,f=n&pt,c=n&ht;if(r&&(u=i?r(t,e,i,o):r(t)),u!==it)return u;if(!of(t))return t;var l=_p(t);if(l){if(u=Co(t),!a)return Bi(t,u)}else{var p=Tl(t),h=p==$t||p==Ht;if(mp(t))return xi(t,a);if(p==Xt||p==Mt||h&&!i){if(u=f||h?{}:jo(t),!a)return f?Mi(t,Qr(u,t)):Ki(t,Xr(u,t))}else{if(!Or[p])return i?t:{};u=ko(t,p,ee,a)}}o||(o=new br);var g=o.get(t);if(g)return g;o.set(t,u);var d=c?f?mo:yo:f?zf:Ff,v=l?it:d(t);return s(v||t,function(e,i){v&&(i=e,e=t[i]),Yr(u,i,ee(e,n,r,i,t,o))}),u}function ie(t){var n=Ff(t);return function(r){return oe(r,t,n)}}function oe(t,n,r){var e=r.length;if(null==t)return!e;for(t=fc(t);e--;){var i=r[e],o=n[i],u=t[i];if(u===it&&!(i in t)||!o(u))return!1}return!0}function ue(t,n,r){if("function"!=typeof t)throw new lc(at);return Cl(function(){t.apply(it,r)},n)}function ae(t,n,r,e){var i=-1,o=h,u=!0,a=t.length,f=[],s=n.length;if(!a)return f;r&&(n=d(n,N(r))),e?(o=g,u=!1):n.length>=ot&&(o=B,u=!1,n=new _r(n));t:for(;++i<a;){var c=t[i],l=null==r?c:r(c);if(c=e||0!==c?c:0,u&&l===l){for(var p=s;p--;)if(n[p]===l)continue t;f.push(c)}else o(n,l,e)||f.push(c)}return f}function fe(t,n){var r=!0;return dl(t,function(t,e,i){return r=!!n(t,e,i)}),r}function se(t,n,r){for(var e=-1,i=t.length;++e<i;){var o=t[e],u=n(o);if(null!=u&&(a===it?u===u&&!_f(u):r(u,a)))var a=u,f=o}return f}function ce(t,n,r,e){var i=t.length;for(r=Sf(r),r<0&&(r=-r>i?0:i+r),e=e===it||e>i?i:Sf(e),e<0&&(e+=i),e=r>e?0:Of(e);r<e;)t[r++]=n;return t}function le(t,n){var r=[];return dl(t,function(t,e,i){n(t,e,i)&&r.push(t)}),r}function pe(t,n,r,e,i){var o=-1,u=t.length;for(r||(r=Uo),i||(i=[]);++o<u;){var a=t[o];n>0&&r(a)?n>1?pe(a,n-1,r,e,i):v(i,a):e||(i[i.length]=a)}return i}function he(t,n){return t&&_l(t,n,Ff)}function ge(t,n){return t&&yl(t,n,Ff)}function de(t,n){return p(n,function(n){return nf(t[n])})}function ve(t,n){n=Si(n,t);for(var r=0,e=n.length;null!=t&&r<e;)t=t[Qo(n[r++])];return r&&r==e?t:it}function _e(t,n,r){var e=n(t);return _p(t)?e:v(e,r(t))}function ye(t){return null==t?t===it?on:Gt:Uc&&Uc in fc(t)?Eo(t):Wo(t)}function me(t,n){return t>n}function be(t,n){return null!=t&&_c.call(t,n)}function we(t,n){return null!=t&&n in fc(t)}function Ae(t,n,r){return t>=$c(n,r)&&t<Wc(n,r)}function Se(t,n,r){for(var e=r?g:h,i=t[0].length,o=t.length,u=o,a=ec(o),f=1/0,s=[];u--;){var c=t[u];u&&n&&(c=d(c,N(n))),f=$c(c.length,f),a[u]=!r&&(n||i>=120&&c.length>=120)?new _r(u&&c):it}c=t[0];var l=-1,p=a[0];t:for(;++l<i&&s.length<f;){var v=c[l],_=n?n(v):v;if(v=r||0!==v?v:0,!(p?B(p,_):e(s,_,r))){for(u=o;--u;){var y=a[u];if(!(y?B(y,_):e(t[u],_,r)))continue t}p&&p.push(_),s.push(v)}}return s}function Oe(t,n,r,e){return he(t,function(t,i,o){n(e,r(t),i,o)}),e}function xe(t,n,r){n=Si(n,t),t=Ho(t,n);var e=null==t?t:t[Qo(wu(n))];return null==e?it:a(e,t,r)}function Ee(t){return uf(t)&&ye(t)==Mt}function Te(t){return uf(t)&&ye(t)==fn}function Pe(t){return uf(t)&&ye(t)==Jt}function Re(t,n,r,e,i){return t===n||(null==t||null==n||!uf(t)&&!uf(n)?t!==t&&n!==n:Ce(t,n,r,e,Re,i))}function Ce(t,n,r,e,i,o){var u=_p(t),a=_p(n),f=u?Ft:Tl(t),s=a?Ft:Tl(n);f=f==Mt?Xt:f,s=s==Mt?Xt:s;var c=f==Xt,l=s==Xt,p=f==s;if(p&&mp(t)){if(!mp(n))return!1;u=!0,c=!1}if(p&&!c)return o||(o=new br),u||Op(t)?ho(t,n,r,e,i,o):go(t,n,f,r,e,i,o);if(!(r&gt)){var h=c&&_c.call(t,"__wrapped__"),g=l&&_c.call(n,"__wrapped__");if(h||g){var d=h?t.value():t,v=g?n.value():n;return o||(o=new br),i(d,v,r,e,o)}}return!!p&&(o||(o=new br),vo(t,n,r,e,i,o))}function je(t){return uf(t)&&Tl(t)==Vt}function ke(t,n,r,e){var i=r.length,o=i,u=!e;if(null==t)return!o;for(t=fc(t);i--;){var a=r[i];if(u&&a[2]?a[1]!==t[a[0]]:!(a[0]in t))return!1}for(;++i<o;){a=r[i];var f=a[0],s=t[f],c=a[1];if(u&&a[2]){if(s===it&&!(f in t))return!1}else{var l=new br;if(e)var p=e(s,c,f,t,n,l);if(!(p===it?Re(c,s,gt|dt,e,l):p))return!1}}return!0}function Ie(t){return!(!of(t)||Mo(t))&&(nf(t)?Sc:$n).test(tu(t))}function Ue(t){return uf(t)&&ye(t)==tn}function Ne(t){return uf(t)&&Tl(t)==nn}function Le(t){return uf(t)&&ef(t.length)&&!!Sr[ye(t)]}function Be(t){return"function"==typeof t?t:null==t?js:"object"==typeof t?_p(t)?qe(t[0],t[1]):ze(t):Ks(t)}function De(t){if(!Fo(t))return Yc(t);var n=[];for(var r in fc(t))_c.call(t,r)&&"constructor"!=r&&n.push(r);return n}function Ke(t){if(!of(t))return Yo(t);var n=Fo(t),r=[];for(var e in t)("constructor"!=e||!n&&_c.call(t,e))&&r.push(e);return r}function Me(t,n){return t<n}function Fe(t,n){var r=-1,e=Wa(t)?ec(t.length):[];return dl(t,function(t,i,o){e[++r]=n(t,i,o)}),e}function ze(t){var n=Oo(t);return 1==n.length&&n[0][2]?qo(n[0][0],n[0][1]):function(r){return r===t||ke(r,t,n)}}function qe(t,n){return Bo(t)&&zo(n)?qo(Qo(t),n):function(r){var e=Df(r,t);return e===it&&e===n?Mf(r,t):Re(n,e,gt|dt)}}function Je(t,n,r,e,i){t!==n&&_l(n,function(o,u){if(of(o))i||(i=new br),Ye(t,n,u,r,Je,e,i);else{var a=e?e(t[u],o,u+"",t,n,i):it;a===it&&(a=o),Dr(t,u,a)}},zf)}function Ye(t,n,r,e,i,o,u){var a=t[r],f=n[r],s=u.get(f);if(s)return void Dr(t,r,s);var c=o?o(a,f,r+"",t,n,u):it,l=c===it;if(l){var p=_p(f),h=!p&&mp(f),g=!p&&!h&&Op(f);c=f,p||h||g?_p(a)?c=a:$a(a)?c=Bi(a):h?(l=!1,c=xi(f,!0)):g?(l=!1,c=ki(f,!0)):c=[]:gf(f)||vp(f)?(c=a,vp(a)?c=Ef(a):(!of(a)||e&&nf(a))&&(c=jo(f))):l=!1}l&&(u.set(f,c),i(c,f,e,o,u),u.delete(f)),Dr(t,r,c)}function We(t,n){var r=t.length;if(r)return n+=n<0?r:0,No(n,r)?t[n]:it}function $e(t,n,r){var e=-1;return n=d(n.length?n:[js],N(Ao())),j(Fe(t,function(t,r,i){return{criteria:d(n,function(n){return n(t)}),index:++e,value:t}}),function(t,n){return Ui(t,n,r)})}function He(t,n){return Ve(t,n,function(n,r){return Mf(t,r)})}function Ve(t,n,r){for(var e=-1,i=n.length,o={};++e<i;){var u=n[e],a=ve(t,u);r(a,u)&&oi(o,Si(u,t),a)}return o}function Ze(t){return function(n){return ve(n,t)}}function Ge(t,n,r,e){var i=e?x:O,o=-1,u=n.length,a=t;for(t===n&&(n=Bi(n)),r&&(a=d(t,N(r)));++o<u;)for(var f=0,s=n[o],c=r?r(s):s;(f=i(a,c,f,e))>-1;)a!==t&&jc.call(a,f,1),jc.call(t,f,1);return t}function Xe(t,n){for(var r=t?n.length:0,e=r-1;r--;){var i=n[r];if(r==e||i!==o){var o=i;No(i)?jc.call(t,i,1):di(t,i)}}return t}function Qe(t,n){return t+Mc(Zc()*(n-t+1))}function ti(t,n,r,e){for(var i=-1,o=Wc(Kc((n-t)/(r||1)),0),u=ec(o);o--;)u[e?o:++i]=t,t+=r;return u}function ni(t,n){var r="";if(!t||n<1||n>It)return r;do{n%2&&(r+=t),(n=Mc(n/2))&&(t+=t)}while(n);return r}function ri(t,n){return jl($o(t,n,js),t+"")}function ei(t){return Ur(ts(t))}function ii(t,n){var r=ts(t);return Xo(r,re(n,0,r.length))}function oi(t,n,r,e){if(!of(t))return t;n=Si(n,t);for(var i=-1,o=n.length,u=o-1,a=t;null!=a&&++i<o;){var f=Qo(n[i]),s=r;if(i!=u){var c=a[f];s=e?e(c,f,a):it,s===it&&(s=of(c)?c:No(n[i+1])?[]:{})}Yr(a,f,s),a=a[f]}return t}function ui(t){return Xo(ts(t))}function ai(t,n,r){var e=-1,i=t.length;n<0&&(n=-n>i?0:i+n),r=r>i?i:r,r<0&&(r+=i),i=n>r?0:r-n>>>0,n>>>=0;for(var o=ec(i);++e<i;)o[e]=t[e+n];return o}function fi(t,n){var r;return dl(t,function(t,e,i){return!(r=n(t,e,i))}),!!r}function si(t,n,r){var e=0,i=null==t?e:t.length;if("number"==typeof n&&n===n&&i<=Dt){for(;e<i;){var o=e+i>>>1,u=t[o];null!==u&&!_f(u)&&(r?u<=n:u<n)?e=o+1:i=o}return i}return ci(t,n,js,r)}function ci(t,n,r,e){n=r(n);for(var i=0,o=null==t?0:t.length,u=n!==n,a=null===n,f=_f(n),s=n===it;i<o;){var c=Mc((i+o)/2),l=r(t[c]),p=l!==it,h=null===l,g=l===l,d=_f(l);if(u)var v=e||g;else v=s?g&&(e||p):a?g&&p&&(e||!h):f?g&&p&&!h&&(e||!d):!h&&!d&&(e?l<=n:l<n);v?i=c+1:o=c}return $c(o,Bt)}function li(t,n){for(var r=-1,e=t.length,i=0,o=[];++r<e;){var u=t[r],a=n?n(u):u;if(!r||!Ya(a,f)){var f=a;o[i++]=0===u?0:u}}return o}function pi(t){return"number"==typeof t?t:_f(t)?Nt:+t}function hi(t){if("string"==typeof t)return t;if(_p(t))return d(t,hi)+"";if(_f(t))return hl?hl.call(t):"";var n=t+"";return"0"==n&&1/t==-kt?"-0":n}function gi(t,n,r){var e=-1,i=h,o=t.length,u=!0,a=[],f=a;if(r)u=!1,i=g;else if(o>=ot){var s=n?null:Sl(t);if(s)return V(s);u=!1,i=B,f=new _r}else f=n?[]:a;t:for(;++e<o;){var c=t[e],l=n?n(c):c;if(c=r||0!==c?c:0,u&&l===l){for(var p=f.length;p--;)if(f[p]===l)continue t;n&&f.push(l),a.push(c)}else i(f,l,r)||(f!==a&&f.push(l),a.push(c))}return a}function di(t,n){return n=Si(n,t),null==(t=Ho(t,n))||delete t[Qo(wu(n))]}function vi(t,n,r,e){return oi(t,n,r(ve(t,n)),e)}function _i(t,n,r,e){for(var i=t.length,o=e?i:-1;(e?o--:++o<i)&&n(t[o],o,t););return r?ai(t,e?0:o,e?o+1:i):ai(t,e?o+1:0,e?i:o)}function yi(t,n){var r=t;return r instanceof b&&(r=r.value()),_(n,function(t,n){return n.func.apply(n.thisArg,v([t],n.args))},r)}function mi(t,n,r){var e=t.length;if(e<2)return e?gi(t[0]):[];for(var i=-1,o=ec(e);++i<e;)for(var u=t[i],a=-1;++a<e;)a!=i&&(o[i]=ae(o[i]||u,t[a],n,r));return gi(pe(o,1),n,r)}function bi(t,n,r){for(var e=-1,i=t.length,o=n.length,u={};++e<i;){var a=e<o?n[e]:it;r(u,t[e],a)}return u}function wi(t){return $a(t)?t:[]}function Ai(t){return"function"==typeof t?t:js}function Si(t,n){return _p(t)?t:Bo(t,n)?[t]:kl(Pf(t))}function Oi(t,n,r){var e=t.length;return r=r===it?e:r,!n&&r>=e?t:ai(t,n,r)}function xi(t,n){if(n)return t.slice();var r=t.length,e=Tc?Tc(r):new t.constructor(r);return t.copy(e),e}function Ei(t){var n=new t.constructor(t.byteLength);return new Ec(n).set(new Ec(t)),n}function Ti(t,n){var r=n?Ei(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}function Pi(t,n,r){return _(n?r(W(t),lt):W(t),o,new t.constructor)}function Ri(t){var n=new t.constructor(t.source,Jn.exec(t));return n.lastIndex=t.lastIndex,n}function Ci(t,n,r){return _(n?r(V(t),lt):V(t),u,new t.constructor)}function ji(t){return pl?fc(pl.call(t)):{}}function ki(t,n){var r=n?Ei(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}function Ii(t,n){if(t!==n){var r=t!==it,e=null===t,i=t===t,o=_f(t),u=n!==it,a=null===n,f=n===n,s=_f(n);if(!a&&!s&&!o&&t>n||o&&u&&f&&!a&&!s||e&&u&&f||!r&&f||!i)return 1;if(!e&&!o&&!s&&t<n||s&&r&&i&&!e&&!o||a&&r&&i||!u&&i||!f)return-1}return 0}function Ui(t,n,r){for(var e=-1,i=t.criteria,o=n.criteria,u=i.length,a=r.length;++e<u;){var f=Ii(i[e],o[e]);if(f){if(e>=a)return f;return f*("desc"==r[e]?-1:1)}}return t.index-n.index}function Ni(t,n,r,e){for(var i=-1,o=t.length,u=r.length,a=-1,f=n.length,s=Wc(o-u,0),c=ec(f+s),l=!e;++a<f;)c[a]=n[a];for(;++i<u;)(l||i<o)&&(c[r[i]]=t[i]);for(;s--;)c[a++]=t[i++];return c}function Li(t,n,r,e){for(var i=-1,o=t.length,u=-1,a=r.length,f=-1,s=n.length,c=Wc(o-a,0),l=ec(c+s),p=!e;++i<c;)l[i]=t[i];for(var h=i;++f<s;)l[h+f]=n[f];for(;++u<a;)(p||i<o)&&(l[h+r[u]]=t[i++]);return l}function Bi(t,n){var r=-1,e=t.length;for(n||(n=ec(e));++r<e;)n[r]=t[r];return n}function Di(t,n,r,e){var i=!r;r||(r={});for(var o=-1,u=n.length;++o<u;){var a=n[o],f=e?e(r[a],t[a],a,r,t):it;f===it&&(f=t[a]),i?te(r,a,f):Yr(r,a,f)}return r}function Ki(t,n){return Di(t,xl(t),n)}function Mi(t,n){return Di(t,El(t),n)}function Fi(t,n){return function(r,e){var i=_p(r)?f:Gr,o=n?n():{};return i(r,t,Ao(e,2),o)}}function zi(t){return ri(function(n,r){var e=-1,i=r.length,o=i>1?r[i-1]:it,u=i>2?r[2]:it;for(o=t.length>3&&"function"==typeof o?(i--,o):it,u&&Lo(r[0],r[1],u)&&(o=i<3?it:o,i=1),n=fc(n);++e<i;){var a=r[e];a&&t(n,a,e,o)}return n})}function qi(t,n){return function(r,e){if(null==r)return r;if(!Wa(r))return t(r,e);for(var i=r.length,o=n?i:-1,u=fc(r);(n?o--:++o<i)&&!1!==e(u[o],o,u););return r}}function Ji(t){return function(n,r,e){for(var i=-1,o=fc(n),u=e(n),a=u.length;a--;){var f=u[t?a:++i];if(!1===r(o[f],f,o))break}return n}}function Yi(t,n,r){function e(){return(this&&this!==Ir&&this instanceof e?o:t).apply(i?r:this,arguments)}var i=n&vt,o=Hi(t);return e}function Wi(t){return function(n){n=Pf(n);var r=q(n)?tt(n):it,e=r?r[0]:n.charAt(0),i=r?Oi(r,1).join(""):n.slice(1);return e[t]()+i}}function $i(t){return function(n){return _(Es(us(n).replace(dr,"")),t,"")}}function Hi(t){return function(){var n=arguments;switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3]);case 5:return new t(n[0],n[1],n[2],n[3],n[4]);case 6:return new t(n[0],n[1],n[2],n[3],n[4],n[5]);case 7:return new t(n[0],n[1],n[2],n[3],n[4],n[5],n[6])}var r=gl(t.prototype),e=t.apply(r,n);return of(e)?e:r}}function Vi(t,n,r){function e(){for(var o=arguments.length,u=ec(o),f=o,s=wo(e);f--;)u[f]=arguments[f];var c=o<3&&u[0]!==s&&u[o-1]!==s?[]:H(u,s);return(o-=c.length)<r?uo(t,n,Xi,e.placeholder,it,u,c,it,it,r-o):a(this&&this!==Ir&&this instanceof e?i:t,this,u)}var i=Hi(t);return e}function Zi(t){return function(n,r,e){var i=fc(n);if(!Wa(n)){var o=Ao(r,3);n=Ff(n),r=function(t){return o(i[t],t,i)}}var u=t(n,r,e);return u>-1?i[o?n[u]:u]:it}}function Gi(t){return _o(function(n){var r=n.length,e=r,o=i.prototype.thru;for(t&&n.reverse();e--;){var u=n[e];if("function"!=typeof u)throw new lc(at);if(o&&!a&&"wrapper"==bo(u))var a=new i([],!0)}for(e=a?e:r;++e<r;){u=n[e];var f=bo(u),s="wrapper"==f?Ol(u):it;a=s&&Ko(s[0])&&s[1]==(St|mt|wt|Ot)&&!s[4].length&&1==s[9]?a[bo(s[0])].apply(a,s[3]):1==u.length&&Ko(u)?a[f]():a.thru(u)}return function(){var t=arguments,e=t[0];if(a&&1==t.length&&_p(e))return a.plant(e).value();for(var i=0,o=r?n[i].apply(this,t):e;++i<r;)o=n[i].call(this,o);return o}})}function Xi(t,n,r,e,i,o,u,a,f,s){function c(){for(var _=arguments.length,y=ec(_),m=_;m--;)y[m]=arguments[m];if(g)var b=wo(c),w=M(y,b);if(e&&(y=Ni(y,e,i,g)),o&&(y=Li(y,o,u,g)),_-=w,g&&_<s){var A=H(y,b);return uo(t,n,Xi,c.placeholder,r,y,A,a,f,s-_)}var S=p?r:this,O=h?S[t]:t;return _=y.length,a?y=Vo(y,a):d&&_>1&&y.reverse(),l&&f<_&&(y.length=f),this&&this!==Ir&&this instanceof c&&(O=v||Hi(O)),O.apply(S,y)}var l=n&St,p=n&vt,h=n&_t,g=n&(mt|bt),d=n&xt,v=h?it:Hi(t);return c}function Qi(t,n){return function(r,e){return Oe(r,t,n(e),{})}}function to(t,n){return function(r,e){var i;if(r===it&&e===it)return n;if(r!==it&&(i=r),e!==it){if(i===it)return e;"string"==typeof r||"string"==typeof e?(r=hi(r),e=hi(e)):(r=pi(r),e=pi(e)),i=t(r,e)}return i}}function no(t){return _o(function(n){return n=d(n,N(Ao())),ri(function(r){var e=this;return t(n,function(t){return a(t,e,r)})})})}function ro(t,n){n=n===it?" ":hi(n);var r=n.length;if(r<2)return r?ni(n,t):n;var e=ni(n,Kc(t/Q(n)));return q(n)?Oi(tt(e),0,t).join(""):e.slice(0,t)}function eo(t,n,r,e){function i(){for(var n=-1,f=arguments.length,s=-1,c=e.length,l=ec(c+f),p=this&&this!==Ir&&this instanceof i?u:t;++s<c;)l[s]=e[s];for(;f--;)l[s++]=arguments[++n];return a(p,o?r:this,l)}var o=n&vt,u=Hi(t);return i}function io(t){return function(n,r,e){return e&&"number"!=typeof e&&Lo(n,r,e)&&(r=e=it),n=Af(n),r===it?(r=n,n=0):r=Af(r),e=e===it?n<r?1:-1:Af(e),ti(n,r,e,t)}}function oo(t){return function(n,r){return"string"==typeof n&&"string"==typeof r||(n=xf(n),r=xf(r)),t(n,r)}}function uo(t,n,r,e,i,o,u,a,f,s){var c=n&mt,l=c?u:it,p=c?it:u,h=c?o:it,g=c?it:o;n|=c?wt:At,(n&=~(c?At:wt))&yt||(n&=~(vt|_t));var d=[t,n,i,h,l,g,p,a,f,s],v=r.apply(it,d);return Ko(t)&&Rl(v,d),v.placeholder=e,Zo(v,t,n)}function ao(t){var n=ac[t];return function(t,r){if(t=xf(t),r=null==r?0:$c(Sf(r),292)){var e=(Pf(t)+"e").split("e");return e=(Pf(n(e[0]+"e"+(+e[1]+r)))+"e").split("e"),+(e[0]+"e"+(+e[1]-r))}return n(t)}}function fo(t){return function(n){var r=Tl(n);return r==Vt?W(n):r==nn?Z(n):U(n,t(n))}}function so(t,n,r,e,i,o,u,a){var f=n&_t;if(!f&&"function"!=typeof t)throw new lc(at);var s=e?e.length:0;if(s||(n&=~(wt|At),e=i=it),u=u===it?u:Wc(Sf(u),0),a=a===it?a:Sf(a),s-=i?i.length:0,n&At){var c=e,l=i;e=i=it}var p=f?it:Ol(t),h=[t,n,r,e,i,c,l,o,u,a];if(p&&Jo(h,p),t=h[0],n=h[1],r=h[2],e=h[3],i=h[4],a=h[9]=h[9]===it?f?0:t.length:Wc(h[9]-s,0),!a&&n&(mt|bt)&&(n&=~(mt|bt)),n&&n!=vt)g=n==mt||n==bt?Vi(t,n,a):n!=wt&&n!=(vt|wt)||i.length?Xi.apply(it,h):eo(t,n,r,e);else var g=Yi(t,n,r);return Zo((p?ml:Rl)(g,h),t,n)}function co(t,n,r,e){return t===it||Ya(t,gc[r])&&!_c.call(e,r)?n:t}function lo(t,n,r,e,i,o){return of(t)&&of(n)&&(o.set(n,t),Je(t,n,it,lo,o),o.delete(n)),t}function po(t){return gf(t)?it:t}function ho(t,n,r,e,i,o){var u=r&gt,a=t.length,f=n.length;if(a!=f&&!(u&&f>a))return!1;var s=o.get(t);if(s&&o.get(n))return s==n;var c=-1,l=!0,p=r&dt?new _r:it;for(o.set(t,n),o.set(n,t);++c<a;){var h=t[c],g=n[c];if(e)var d=u?e(g,h,c,n,t,o):e(h,g,c,t,n,o);if(d!==it){if(d)continue;l=!1;break}if(p){if(!m(n,function(t,n){if(!B(p,n)&&(h===t||i(h,t,r,e,o)))return p.push(n)})){l=!1;break}}else if(h!==g&&!i(h,g,r,e,o)){l=!1;break}}return o.delete(t),o.delete(n),l}function go(t,n,r,e,i,o,u){switch(r){case sn:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case fn:return!(t.byteLength!=n.byteLength||!o(new Ec(t),new Ec(n)));case qt:case Jt:case Zt:return Ya(+t,+n);case Wt:return t.name==n.name&&t.message==n.message;case tn:case rn:return t==n+"";case Vt:var a=W;case nn:var f=e&gt;if(a||(a=V),t.size!=n.size&&!f)return!1;var s=u.get(t);if(s)return s==n;e|=dt,u.set(t,n);var c=ho(a(t),a(n),e,i,o,u);return u.delete(t),c;case en:if(pl)return pl.call(t)==pl.call(n)}return!1}function vo(t,n,r,e,i,o){var u=r&gt,a=yo(t),f=a.length;if(f!=yo(n).length&&!u)return!1;for(var s=f;s--;){var c=a[s];if(!(u?c in n:_c.call(n,c)))return!1}var l=o.get(t);if(l&&o.get(n))return l==n;var p=!0;o.set(t,n),o.set(n,t);for(var h=u;++s<f;){c=a[s];var g=t[c],d=n[c];if(e)var v=u?e(d,g,c,n,t,o):e(g,d,c,t,n,o);if(!(v===it?g===d||i(g,d,r,e,o):v)){p=!1;break}h||(h="constructor"==c)}if(p&&!h){var _=t.constructor,y=n.constructor;_!=y&&"constructor"in t&&"constructor"in n&&!("function"==typeof _&&_ instanceof _&&"function"==typeof y&&y instanceof y)&&(p=!1)}return o.delete(t),o.delete(n),p}function _o(t){return jl($o(t,it,hu),t+"")}function yo(t){return _e(t,Ff,xl)}function mo(t){return _e(t,zf,El)}function bo(t){for(var n=t.name+"",r=ol[n],e=_c.call(ol,n)?r.length:0;e--;){var i=r[e],o=i.func;if(null==o||o==t)return i.name}return n}function wo(t){return(_c.call(r,"placeholder")?r:t).placeholder}function Ao(){var t=r.iteratee||ks;return t=t===ks?Be:t,arguments.length?t(arguments[0],arguments[1]):t}function So(t,n){var r=t.__data__;return Do(n)?r["string"==typeof n?"string":"hash"]:r.map}function Oo(t){for(var n=Ff(t),r=n.length;r--;){var e=n[r],i=t[e];n[r]=[e,i,zo(i)]}return n}function xo(t,n){var r=z(t,n);return Ie(r)?r:it}function Eo(t){var n=_c.call(t,Uc),r=t[Uc];try{t[Uc]=it;var e=!0}catch(t){}var i=bc.call(t);return e&&(n?t[Uc]=r:delete t[Uc]),i}function To(t,n,r){for(var e=-1,i=r.length;++e<i;){var o=r[e],u=o.size;switch(o.type){case"drop":t+=u;break;case"dropRight":n-=u;break;case"take":n=$c(n,t+u);break;case"takeRight":t=Wc(t,n-u)}}return{start:t,end:n}}function Po(t){var n=t.match(Kn);return n?n[1].split(Mn):[]}function Ro(t,n,r){n=Si(n,t);for(var e=-1,i=n.length,o=!1;++e<i;){var u=Qo(n[e]);if(!(o=null!=t&&r(t,u)))break;t=t[u]}return o||++e!=i?o:!!(i=null==t?0:t.length)&&ef(i)&&No(u,i)&&(_p(t)||vp(t))}function Co(t){var n=t.length,r=t.constructor(n);return n&&"string"==typeof t[0]&&_c.call(t,"index")&&(r.index=t.index,r.input=t.input),r}function jo(t){return"function"!=typeof t.constructor||Fo(t)?{}:gl(Pc(t))}function ko(t,n,r,e){var i=t.constructor;switch(n){case fn:return Ei(t);case qt:case Jt:return new i(+t);case sn:return Ti(t,e);case cn:case ln:case pn:case hn:case gn:case dn:case vn:case _n:case yn:return ki(t,e);case Vt:return Pi(t,e,r);case Zt:case rn:return new i(t);case tn:return Ri(t);case nn:return Ci(t,e,r);case en:return ji(t)}}function Io(t,n){var r=n.length;if(!r)return t;var e=r-1;return n[e]=(r>1?"& ":"")+n[e],n=n.join(r>2?", ":" "),t.replace(Dn,"{\n/* [wrapped with "+n+"] */\n")}function Uo(t){return _p(t)||vp(t)||!!(kc&&t&&t[kc])}function No(t,n){return!!(n=null==n?It:n)&&("number"==typeof t||Vn.test(t))&&t>-1&&t%1==0&&t<n}function Lo(t,n,r){if(!of(r))return!1;var e=typeof n;return!!("number"==e?Wa(r)&&No(n,r.length):"string"==e&&n in r)&&Ya(r[n],t)}function Bo(t,n){if(_p(t))return!1;var r=typeof t;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=t&&!_f(t))||(Cn.test(t)||!Rn.test(t)||null!=n&&t in fc(n))}function Do(t){var n=typeof t;return"string"==n||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==t:null===t}function Ko(t){var n=bo(t),e=r[n];if("function"!=typeof e||!(n in b.prototype))return!1;if(t===e)return!0;var i=Ol(e);return!!i&&t===i[0]}function Mo(t){return!!mc&&mc in t}function Fo(t){var n=t&&t.constructor;return t===("function"==typeof n&&n.prototype||gc)}function zo(t){return t===t&&!of(t)}function qo(t,n){return function(r){return null!=r&&(r[t]===n&&(n!==it||t in fc(r)))}}function Jo(t,n){var r=t[1],e=n[1],i=r|e,o=i<(vt|_t|St),u=e==St&&r==mt||e==St&&r==Ot&&t[7].length<=n[8]||e==(St|Ot)&&n[7].length<=n[8]&&r==mt;if(!o&&!u)return t;e&vt&&(t[2]=n[2],i|=r&vt?0:yt);var a=n[3];if(a){var f=t[3];t[3]=f?Ni(f,a,n[4]):a,t[4]=f?H(t[3],ct):n[4]}return a=n[5],a&&(f=t[5],t[5]=f?Li(f,a,n[6]):a,t[6]=f?H(t[5],ct):n[6]),a=n[7],a&&(t[7]=a),e&St&&(t[8]=null==t[8]?n[8]:$c(t[8],n[8])),null==t[9]&&(t[9]=n[9]),t[0]=n[0],t[1]=i,t}function Yo(t){var n=[];if(null!=t)for(var r in fc(t))n.push(r);return n}function Wo(t){return bc.call(t)}function $o(t,n,r){return n=Wc(n===it?t.length-1:n,0),function(){for(var e=arguments,i=-1,o=Wc(e.length-n,0),u=ec(o);++i<o;)u[i]=e[n+i];i=-1;for(var f=ec(n+1);++i<n;)f[i]=e[i];return f[n]=r(u),a(t,this,f)}}function Ho(t,n){return n.length<2?t:ve(t,ai(n,0,-1))}function Vo(t,n){for(var r=t.length,e=$c(n.length,r),i=Bi(t);e--;){var o=n[e];t[e]=No(o,r)?i[o]:it}return t}function Zo(t,n,r){var e=n+"";return jl(t,Io(e,nu(Po(e),r)))}function Go(t){var n=0,r=0;return function(){var e=Hc(),i=Rt-(e-r);if(r=e,i>0){if(++n>=Pt)return arguments[0]}else n=0;return t.apply(it,arguments)}}function Xo(t,n){var r=-1,e=t.length,i=e-1;for(n=n===it?e:n;++r<n;){var o=Qe(r,i),u=t[o];t[o]=t[r],t[r]=u}return t.length=n,t}function Qo(t){if("string"==typeof t||_f(t))return t;var n=t+"";return"0"==n&&1/t==-kt?"-0":n}function tu(t){if(null!=t){try{return vc.call(t)}catch(t){}try{return t+""}catch(t){}}return""}function nu(t,n){return s(Kt,function(r){var e="_."+r[0];n&r[1]&&!h(t,e)&&t.push(e)}),t.sort()}function ru(t){if(t instanceof b)return t.clone();var n=new i(t.__wrapped__,t.__chain__);return n.__actions__=Bi(t.__actions__),n.__index__=t.__index__,n.__values__=t.__values__,n}function eu(t,n,r){n=(r?Lo(t,n,r):n===it)?1:Wc(Sf(n),0);var e=null==t?0:t.length;if(!e||n<1)return[];for(var i=0,o=0,u=ec(Kc(e/n));i<e;)u[o++]=ai(t,i,i+=n);return u}function iu(t){for(var n=-1,r=null==t?0:t.length,e=0,i=[];++n<r;){var o=t[n];o&&(i[e++]=o)}return i}function ou(){var t=arguments.length;if(!t)return[];for(var n=ec(t-1),r=arguments[0],e=t;e--;)n[e-1]=arguments[e];return v(_p(r)?Bi(r):[r],pe(n,1))}function uu(t,n,r){var e=null==t?0:t.length;return e?(n=r||n===it?1:Sf(n),ai(t,n<0?0:n,e)):[]}function au(t,n,r){var e=null==t?0:t.length;return e?(n=r||n===it?1:Sf(n),n=e-n,ai(t,0,n<0?0:n)):[]}function fu(t,n){return t&&t.length?_i(t,Ao(n,3),!0,!0):[]}function su(t,n){return t&&t.length?_i(t,Ao(n,3),!0):[]}function cu(t,n,r,e){var i=null==t?0:t.length;return i?(r&&"number"!=typeof r&&Lo(t,n,r)&&(r=0,e=i),ce(t,n,r,e)):[]}function lu(t,n,r){var e=null==t?0:t.length;if(!e)return-1;var i=null==r?0:Sf(r);return i<0&&(i=Wc(e+i,0)),S(t,Ao(n,3),i)}function pu(t,n,r){var e=null==t?0:t.length;if(!e)return-1;var i=e-1;return r!==it&&(i=Sf(r),i=r<0?Wc(e+i,0):$c(i,e-1)),S(t,Ao(n,3),i,!0)}function hu(t){return(null==t?0:t.length)?pe(t,1):[]}function gu(t){return(null==t?0:t.length)?pe(t,kt):[]}function du(t,n){return(null==t?0:t.length)?(n=n===it?1:Sf(n),pe(t,n)):[]}function vu(t){for(var n=-1,r=null==t?0:t.length,e={};++n<r;){var i=t[n];e[i[0]]=i[1]}return e}function _u(t){return t&&t.length?t[0]:it}function yu(t,n,r){var e=null==t?0:t.length;if(!e)return-1;var i=null==r?0:Sf(r);return i<0&&(i=Wc(e+i,0)),O(t,n,i)}function mu(t){return(null==t?0:t.length)?ai(t,0,-1):[]}function bu(t,n){return null==t?"":Jc.call(t,n)}function wu(t){var n=null==t?0:t.length;return n?t[n-1]:it}function Au(t,n,r){var e=null==t?0:t.length;if(!e)return-1;var i=e;return r!==it&&(i=Sf(r),i=i<0?Wc(e+i,0):$c(i,e-1)),n===n?X(t,n,i):S(t,E,i,!0)}function Su(t,n){return t&&t.length?We(t,Sf(n)):it}function Ou(t,n){return t&&t.length&&n&&n.length?Ge(t,n):t}function xu(t,n,r){return t&&t.length&&n&&n.length?Ge(t,n,Ao(r,2)):t}function Eu(t,n,r){return t&&t.length&&n&&n.length?Ge(t,n,it,r):t}function Tu(t,n){var r=[];if(!t||!t.length)return r;var e=-1,i=[],o=t.length;for(n=Ao(n,3);++e<o;){var u=t[e];n(u,e,t)&&(r.push(u),i.push(e))}return Xe(t,i),r}function Pu(t){return null==t?t:Gc.call(t)}function Ru(t,n,r){var e=null==t?0:t.length;return e?(r&&"number"!=typeof r&&Lo(t,n,r)?(n=0,r=e):(n=null==n?0:Sf(n),r=r===it?e:Sf(r)),ai(t,n,r)):[]}function Cu(t,n){return si(t,n)}function ju(t,n,r){return ci(t,n,Ao(r,2))}function ku(t,n){var r=null==t?0:t.length;if(r){var e=si(t,n);if(e<r&&Ya(t[e],n))return e}return-1}function Iu(t,n){return si(t,n,!0)}function Uu(t,n,r){return ci(t,n,Ao(r,2),!0)}function Nu(t,n){if(null==t?0:t.length){var r=si(t,n,!0)-1;if(Ya(t[r],n))return r}return-1}function Lu(t){return t&&t.length?li(t):[]}function Bu(t,n){return t&&t.length?li(t,Ao(n,2)):[]}function Du(t){var n=null==t?0:t.length;return n?ai(t,1,n):[]}function Ku(t,n,r){return t&&t.length?(n=r||n===it?1:Sf(n),ai(t,0,n<0?0:n)):[]}function Mu(t,n,r){var e=null==t?0:t.length;return e?(n=r||n===it?1:Sf(n),n=e-n,ai(t,n<0?0:n,e)):[]}function Fu(t,n){return t&&t.length?_i(t,Ao(n,3),!1,!0):[]}function zu(t,n){return t&&t.length?_i(t,Ao(n,3)):[]}function qu(t){return t&&t.length?gi(t):[]}function Ju(t,n){return t&&t.length?gi(t,Ao(n,2)):[]}function Yu(t,n){return n="function"==typeof n?n:it,t&&t.length?gi(t,it,n):[]}function Wu(t){if(!t||!t.length)return[];var n=0;return t=p(t,function(t){if($a(t))return n=Wc(t.length,n),!0}),I(n,function(n){return d(t,P(n))})}function $u(t,n){if(!t||!t.length)return[];var r=Wu(t);return null==n?r:d(r,function(t){return a(n,it,t)})}function Hu(t,n){return bi(t||[],n||[],Yr)}function Vu(t,n){return bi(t||[],n||[],oi)}function Zu(t){var n=r(t);return n.__chain__=!0,n}function Gu(t,n){return n(t),t}function Xu(t,n){return n(t)}function Qu(){return Zu(this)}function ta(){return new i(this.value(),this.__chain__)}function na(){this.__values__===it&&(this.__values__=wf(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?it:this.__values__[this.__index__++]}}function ra(){return this}function ea(t){for(var n,r=this;r instanceof e;){var i=ru(r);i.__index__=0,i.__values__=it,n?o.__wrapped__=i:n=i;var o=i;r=r.__wrapped__}return o.__wrapped__=t,n}function ia(){var t=this.__wrapped__;if(t instanceof b){var n=t;return this.__actions__.length&&(n=new b(this)),n=n.reverse(),n.__actions__.push({func:Xu,args:[Pu],thisArg:it}),new i(n,this.__chain__)}return this.thru(Pu)}function oa(){return yi(this.__wrapped__,this.__actions__)}function ua(t,n,r){var e=_p(t)?l:fe;return r&&Lo(t,n,r)&&(n=it),e(t,Ao(n,3))}function aa(t,n){return(_p(t)?p:le)(t,Ao(n,3))}function fa(t,n){return pe(ga(t,n),1)}function sa(t,n){return pe(ga(t,n),kt)}function ca(t,n,r){return r=r===it?1:Sf(r),pe(ga(t,n),r)}function la(t,n){return(_p(t)?s:dl)(t,Ao(n,3))}function pa(t,n){return(_p(t)?c:vl)(t,Ao(n,3))}function ha(t,n,r,e){t=Wa(t)?t:ts(t),r=r&&!e?Sf(r):0;var i=t.length;return r<0&&(r=Wc(i+r,0)),vf(t)?r<=i&&t.indexOf(n,r)>-1:!!i&&O(t,n,r)>-1}function ga(t,n){return(_p(t)?d:Fe)(t,Ao(n,3))}function da(t,n,r,e){return null==t?[]:(_p(n)||(n=null==n?[]:[n]),r=e?it:r,_p(r)||(r=null==r?[]:[r]),$e(t,n,r))}function va(t,n,r){var e=_p(t)?_:C,i=arguments.length<3;return e(t,Ao(n,4),r,i,dl)}function _a(t,n,r){var e=_p(t)?y:C,i=arguments.length<3;return e(t,Ao(n,4),r,i,vl)}function ya(t,n){return(_p(t)?p:le)(t,ka(Ao(n,3)))}function ma(t){return(_p(t)?Ur:ei)(t)}function ba(t,n,r){return n=(r?Lo(t,n,r):n===it)?1:Sf(n),(_p(t)?Nr:ii)(t,n)}function wa(t){return(_p(t)?Br:ui)(t)}function Aa(t){if(null==t)return 0;if(Wa(t))return vf(t)?Q(t):t.length;var n=Tl(t);return n==Vt||n==nn?t.size:De(t).length}function Sa(t,n,r){var e=_p(t)?m:fi;return r&&Lo(t,n,r)&&(n=it),e(t,Ao(n,3))}function Oa(t,n){if("function"!=typeof n)throw new lc(at);return t=Sf(t),function(){if(--t<1)return n.apply(this,arguments)}}function xa(t,n,r){return n=r?it:n,n=t&&null==n?t.length:n,so(t,St,it,it,it,it,n)}function Ea(t,n){var r;if("function"!=typeof n)throw new lc(at);return t=Sf(t),function(){return--t>0&&(r=n.apply(this,arguments)),t<=1&&(n=it),r}}function Ta(t,n,r){n=r?it:n;var e=so(t,mt,it,it,it,it,it,n);return e.placeholder=Ta.placeholder,e}function Pa(t,n,r){n=r?it:n;var e=so(t,bt,it,it,it,it,it,n);return e.placeholder=Pa.placeholder,e}function Ra(t,n,r){function e(n){var r=p,e=h;return p=h=it,y=n,d=t.apply(e,r)}function i(t){return y=t,v=Cl(a,n),m?e(t):d}function o(t){var r=t-_,e=t-y,i=n-r;return b?$c(i,g-e):i}function u(t){var r=t-_,e=t-y;return _===it||r>=n||r<0||b&&e>=g}function a(){var t=op();if(u(t))return f(t);v=Cl(a,o(t))}function f(t){return v=it,w&&p?e(t):(p=h=it,d)}function s(){v!==it&&Al(v),y=0,p=_=h=v=it}function c(){return v===it?d:f(op())}function l(){var t=op(),r=u(t);if(p=arguments,h=this,_=t,r){if(v===it)return i(_);if(b)return v=Cl(a,n),e(_)}return v===it&&(v=Cl(a,n)),d}var p,h,g,d,v,_,y=0,m=!1,b=!1,w=!0;if("function"!=typeof t)throw new lc(at);return n=xf(n)||0,of(r)&&(m=!!r.leading,b="maxWait"in r,g=b?Wc(xf(r.maxWait)||0,n):g,w="trailing"in r?!!r.trailing:w),l.cancel=s,l.flush=c,l}function Ca(t){return so(t,xt)}function ja(t,n){if("function"!=typeof t||null!=n&&"function"!=typeof n)throw new lc(at);var r=function(){var e=arguments,i=n?n.apply(this,e):e[0],o=r.cache;if(o.has(i))return o.get(i);var u=t.apply(this,e);return r.cache=o.set(i,u)||o,u};return r.cache=new(ja.Cache||sr),r}function ka(t){if("function"!=typeof t)throw new lc(at);return function(){var n=arguments;switch(n.length){case 0:return!t.call(this);case 1:return!t.call(this,n[0]);case 2:return!t.call(this,n[0],n[1]);case 3:return!t.call(this,n[0],n[1],n[2])}return!t.apply(this,n)}}function Ia(t){return Ea(2,t)}function Ua(t,n){if("function"!=typeof t)throw new lc(at);return n=n===it?n:Sf(n),ri(t,n)}function Na(t,n){if("function"!=typeof t)throw new lc(at);return n=null==n?0:Wc(Sf(n),0),ri(function(r){var e=r[n],i=Oi(r,0,n);return e&&v(i,e),a(t,this,i)})}function La(t,n,r){var e=!0,i=!0;if("function"!=typeof t)throw new lc(at);return of(r)&&(e="leading"in r?!!r.leading:e,i="trailing"in r?!!r.trailing:i),Ra(t,n,{leading:e,maxWait:n,trailing:i})}function Ba(t){return xa(t,1)}function Da(t,n){return lp(Ai(n),t)}function Ka(){if(!arguments.length)return[];var t=arguments[0];return _p(t)?t:[t]}function Ma(t){return ee(t,ht)}function Fa(t,n){return n="function"==typeof n?n:it,ee(t,ht,n)}function za(t){return ee(t,lt|ht)}function qa(t,n){return n="function"==typeof n?n:it,ee(t,lt|ht,n)}function Ja(t,n){return null==n||oe(t,n,Ff(n))}function Ya(t,n){return t===n||t!==t&&n!==n}function Wa(t){return null!=t&&ef(t.length)&&!nf(t)}function $a(t){return uf(t)&&Wa(t)}function Ha(t){return!0===t||!1===t||uf(t)&&ye(t)==qt}function Va(t){return uf(t)&&1===t.nodeType&&!gf(t)}function Za(t){if(null==t)return!0;if(Wa(t)&&(_p(t)||"string"==typeof t||"function"==typeof t.splice||mp(t)||Op(t)||vp(t)))return!t.length;var n=Tl(t);if(n==Vt||n==nn)return!t.size;if(Fo(t))return!De(t).length;for(var r in t)if(_c.call(t,r))return!1;return!0}function Ga(t,n){return Re(t,n)}function Xa(t,n,r){r="function"==typeof r?r:it;var e=r?r(t,n):it;return e===it?Re(t,n,it,r):!!e}function Qa(t){if(!uf(t))return!1;var n=ye(t);return n==Wt||n==Yt||"string"==typeof t.message&&"string"==typeof t.name&&!gf(t)}function tf(t){return"number"==typeof t&&qc(t)}function nf(t){if(!of(t))return!1;var n=ye(t);return n==$t||n==Ht||n==zt||n==Qt}function rf(t){return"number"==typeof t&&t==Sf(t)}function ef(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=It}function of(t){var n=typeof t;return null!=t&&("object"==n||"function"==n)}function uf(t){return null!=t&&"object"==typeof t}function af(t,n){return t===n||ke(t,n,Oo(n))}function ff(t,n,r){return r="function"==typeof r?r:it,ke(t,n,Oo(n),r)}function sf(t){return hf(t)&&t!=+t}function cf(t){if(Pl(t))throw new oc(ut);return Ie(t)}function lf(t){return null===t}function pf(t){return null==t}function hf(t){return"number"==typeof t||uf(t)&&ye(t)==Zt}function gf(t){if(!uf(t)||ye(t)!=Xt)return!1;var n=Pc(t);if(null===n)return!0;var r=_c.call(n,"constructor")&&n.constructor;return"function"==typeof r&&r instanceof r&&vc.call(r)==wc}function df(t){return rf(t)&&t>=-It&&t<=It}function vf(t){return"string"==typeof t||!_p(t)&&uf(t)&&ye(t)==rn}function _f(t){return"symbol"==typeof t||uf(t)&&ye(t)==en}function yf(t){return t===it}function mf(t){return uf(t)&&Tl(t)==un}function bf(t){return uf(t)&&ye(t)==an}function wf(t){if(!t)return[];if(Wa(t))return vf(t)?tt(t):Bi(t);if(Ic&&t[Ic])return Y(t[Ic]());var n=Tl(t);return(n==Vt?W:n==nn?V:ts)(t)}function Af(t){if(!t)return 0===t?t:0;if((t=xf(t))===kt||t===-kt){return(t<0?-1:1)*Ut}return t===t?t:0}function Sf(t){var n=Af(t),r=n%1;return n===n?r?n-r:n:0}function Of(t){return t?re(Sf(t),0,Lt):0}function xf(t){if("number"==typeof t)return t;if(_f(t))return Nt;if(of(t)){var n="function"==typeof t.valueOf?t.valueOf():t;t=of(n)?n+"":n}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Nn,"");var r=Wn.test(t);return r||Hn.test(t)?Cr(t.slice(2),r?2:8):Yn.test(t)?Nt:+t}function Ef(t){return Di(t,zf(t))}function Tf(t){return t?re(Sf(t),-It,It):0===t?t:0}function Pf(t){return null==t?"":hi(t)}function Rf(t,n){var r=gl(t);return null==n?r:Xr(r,n)}function Cf(t,n){return A(t,Ao(n,3),he)}function jf(t,n){return A(t,Ao(n,3),ge)}function kf(t,n){return null==t?t:_l(t,Ao(n,3),zf)}function If(t,n){return null==t?t:yl(t,Ao(n,3),zf)}function Uf(t,n){return t&&he(t,Ao(n,3))}function Nf(t,n){return t&&ge(t,Ao(n,3))}function Lf(t){return null==t?[]:de(t,Ff(t))}function Bf(t){return null==t?[]:de(t,zf(t))}function Df(t,n,r){var e=null==t?it:ve(t,n);return e===it?r:e}function Kf(t,n){return null!=t&&Ro(t,n,be)}function Mf(t,n){return null!=t&&Ro(t,n,we)}function Ff(t){return Wa(t)?kr(t):De(t)}function zf(t){return Wa(t)?kr(t,!0):Ke(t)}function qf(t,n){var r={};return n=Ao(n,3),he(t,function(t,e,i){te(r,n(t,e,i),t)}),r}function Jf(t,n){var r={};return n=Ao(n,3),he(t,function(t,e,i){te(r,e,n(t,e,i))}),r}function Yf(t,n){return Wf(t,ka(Ao(n)))}function Wf(t,n){if(null==t)return{};var r=d(mo(t),function(t){return[t]});return n=Ao(n),Ve(t,r,function(t,r){return n(t,r[0])})}function $f(t,n,r){n=Si(n,t);var e=-1,i=n.length;for(i||(i=1,t=it);++e<i;){var o=null==t?it:t[Qo(n[e])];o===it&&(e=i,o=r),t=nf(o)?o.call(t):o}return t}function Hf(t,n,r){return null==t?t:oi(t,n,r)}function Vf(t,n,r,e){return e="function"==typeof e?e:it,null==t?t:oi(t,n,r,e)}function Zf(t,n,r){var e=_p(t),i=e||mp(t)||Op(t);if(n=Ao(n,4),null==r){var o=t&&t.constructor;r=i?e?new o:[]:of(t)&&nf(o)?gl(Pc(t)):{}}return(i?s:he)(t,function(t,e,i){return n(r,t,e,i)}),r}function Gf(t,n){return null==t||di(t,n)}function Xf(t,n,r){return null==t?t:vi(t,n,Ai(r))}function Qf(t,n,r,e){return e="function"==typeof e?e:it,null==t?t:vi(t,n,Ai(r),e)}function ts(t){return null==t?[]:L(t,Ff(t))}function ns(t){return null==t?[]:L(t,zf(t))}function rs(t,n,r){return r===it&&(r=n,n=it),r!==it&&(r=xf(r),r=r===r?r:0),n!==it&&(n=xf(n),n=n===n?n:0),re(xf(t),n,r)}function es(t,n,r){return n=Af(n),r===it?(r=n,n=0):r=Af(r),t=xf(t),Ae(t,n,r)}function is(t,n,r){if(r&&"boolean"!=typeof r&&Lo(t,n,r)&&(n=r=it),r===it&&("boolean"==typeof n?(r=n,n=it):"boolean"==typeof t&&(r=t,t=it)),t===it&&n===it?(t=0,n=1):(t=Af(t),n===it?(n=t,t=0):n=Af(n)),t>n){var e=t;t=n,n=e}if(r||t%1||n%1){var i=Zc();return $c(t+i*(n-t+Rr("1e-"+((i+"").length-1))),n)}return Qe(t,n)}function os(t){return Zp(Pf(t).toLowerCase())}function us(t){return(t=Pf(t))&&t.replace(Zn,Wr).replace(vr,"")}function as(t,n,r){t=Pf(t),n=hi(n);var e=t.length;r=r===it?e:re(Sf(r),0,e);var i=r;return(r-=n.length)>=0&&t.slice(r,i)==n}function fs(t){return t=Pf(t),t&&xn.test(t)?t.replace(Sn,$r):t}function ss(t){return t=Pf(t),t&&Un.test(t)?t.replace(In,"\\$&"):t}function cs(t,n,r){t=Pf(t),n=Sf(n);var e=n?Q(t):0;if(!n||e>=n)return t;var i=(n-e)/2;return ro(Mc(i),r)+t+ro(Kc(i),r)}function ls(t,n,r){t=Pf(t),n=Sf(n);var e=n?Q(t):0;return n&&e<n?t+ro(n-e,r):t}function ps(t,n,r){t=Pf(t),n=Sf(n);var e=n?Q(t):0;return n&&e<n?ro(n-e,r)+t:t}function hs(t,n,r){return r||null==n?n=0:n&&(n=+n),Vc(Pf(t).replace(Ln,""),n||0)}function gs(t,n,r){return n=(r?Lo(t,n,r):n===it)?1:Sf(n),ni(Pf(t),n)}function ds(){var t=arguments,n=Pf(t[0]);return t.length<3?n:n.replace(t[1],t[2])}function vs(t,n,r){return r&&"number"!=typeof r&&Lo(t,n,r)&&(n=r=it),(r=r===it?Lt:r>>>0)?(t=Pf(t),t&&("string"==typeof n||null!=n&&!Ap(n))&&!(n=hi(n))&&q(t)?Oi(tt(t),0,r):t.split(n,r)):[]}function _s(t,n,r){return t=Pf(t),r=null==r?0:re(Sf(r),0,t.length),n=hi(n),t.slice(r,r+n.length)==n}function ys(t,n,e){var i=r.templateSettings;e&&Lo(t,n,e)&&(n=it),t=Pf(t),n=Rp({},n,i,co);var o,u,a=Rp({},n.imports,i.imports,co),f=Ff(a),s=L(a,f),c=0,l=n.interpolate||Gn,p="__p += '",h=sc((n.escape||Gn).source+"|"+l.source+"|"+(l===Pn?qn:Gn).source+"|"+(n.evaluate||Gn).source+"|$","g"),g="//# sourceURL="+("sourceURL"in n?n.sourceURL:"lodash.templateSources["+ ++Ar+"]")+"\n";t.replace(h,function(n,r,e,i,a,f){return e||(e=i),p+=t.slice(c,f).replace(Xn,F),r&&(o=!0,p+="' +\n__e("+r+") +\n'"),a&&(u=!0,p+="';\n"+a+";\n__p += '"),e&&(p+="' +\n((__t = ("+e+")) == null ? '' : __t) +\n'"),c=f+n.length,n}),p+="';\n";var d=n.variable;d||(p="with (obj) {\n"+p+"\n}\n"),p=(u?p.replace(mn,""):p).replace(bn,"$1").replace(wn,"$1;"),p="function("+(d||"obj")+") {\n"+(d?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(o?", __e = _.escape":"")+(u?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+p+"return __p\n}";var v=Gp(function(){return uc(f,g+"return "+p).apply(it,s)});if(v.source=p,Qa(v))throw v;return v}function ms(t){return Pf(t).toLowerCase()}function bs(t){return Pf(t).toUpperCase()}function ws(t,n,r){if((t=Pf(t))&&(r||n===it))return t.replace(Nn,"");if(!t||!(n=hi(n)))return t;var e=tt(t),i=tt(n);return Oi(e,D(e,i),K(e,i)+1).join("")}function As(t,n,r){if((t=Pf(t))&&(r||n===it))return t.replace(Bn,"");if(!t||!(n=hi(n)))return t;var e=tt(t);return Oi(e,0,K(e,tt(n))+1).join("")}function Ss(t,n,r){if((t=Pf(t))&&(r||n===it))return t.replace(Ln,"");if(!t||!(n=hi(n)))return t;var e=tt(t);return Oi(e,D(e,tt(n))).join("")}function Os(t,n){var r=Et,e=Tt;if(of(n)){var i="separator"in n?n.separator:i;r="length"in n?Sf(n.length):r,e="omission"in n?hi(n.omission):e}t=Pf(t);var o=t.length;if(q(t)){var u=tt(t);o=u.length}if(r>=o)return t;var a=r-Q(e);if(a<1)return e;var f=u?Oi(u,0,a).join(""):t.slice(0,a);if(i===it)return f+e;if(u&&(a+=f.length-a),Ap(i)){if(t.slice(a).search(i)){var s,c=f;for(i.global||(i=sc(i.source,Pf(Jn.exec(i))+"g")),i.lastIndex=0;s=i.exec(c);)var l=s.index;f=f.slice(0,l===it?a:l)}}else if(t.indexOf(hi(i),a)!=a){var p=f.lastIndexOf(i);p>-1&&(f=f.slice(0,p))}return f+e}function xs(t){return t=Pf(t),t&&On.test(t)?t.replace(An,Hr):t}function Es(t,n,r){return t=Pf(t),n=r?it:n,n===it?J(t)?et(t):w(t):t.match(n)||[]}function Ts(t){var n=null==t?0:t.length,r=Ao();return t=n?d(t,function(t){if("function"!=typeof t[1])throw new lc(at);return[r(t[0]),t[1]]}):[],ri(function(r){for(var e=-1;++e<n;){var i=t[e];if(a(i[0],this,r))return a(i[1],this,r)}})}function Ps(t){return ie(ee(t,lt))}function Rs(t){return function(){return t}}function Cs(t,n){return null==t||t!==t?n:t}function js(t){return t}function ks(t){return Be("function"==typeof t?t:ee(t,lt))}function Is(t){return ze(ee(t,lt))}function Us(t,n){return qe(t,ee(n,lt))}function Ns(t,n,r){var e=Ff(n),i=de(n,e);null!=r||of(n)&&(i.length||!e.length)||(r=n,n=t,t=this,i=de(n,Ff(n)));var o=!(of(r)&&"chain"in r&&!r.chain),u=nf(t);return s(i,function(r){var e=n[r];t[r]=e,u&&(t.prototype[r]=function(){var n=this.__chain__;if(o||n){var r=t(this.__wrapped__);return(r.__actions__=Bi(this.__actions__)).push({func:e,args:arguments,thisArg:t}),r.__chain__=n,r}return e.apply(t,v([this.value()],arguments))})}),t}function Ls(){return Ir._===this&&(Ir._=Ac),this}function Bs(){}function Ds(t){return t=Sf(t),ri(function(n){return We(n,t)})}function Ks(t){return Bo(t)?P(Qo(t)):Ze(t)}function Ms(t){return function(n){return null==t?it:ve(t,n)}}function Fs(){return[]}function zs(){return!1}function qs(){return{}}function Js(){return""}function Ys(){return!0}function Ws(t,n){if((t=Sf(t))<1||t>It)return[];var r=Lt,e=$c(t,Lt);n=Ao(n),t-=Lt;for(var i=I(e,n);++r<t;)n(r);return i}function $s(t){return _p(t)?d(t,Qo):_f(t)?[t]:Bi(kl(Pf(t)))}function Hs(t){var n=++yc;return Pf(t)+n}function Vs(t){return t&&t.length?se(t,js,me):it}function Zs(t,n){return t&&t.length?se(t,Ao(n,2),me):it}function Gs(t){return T(t,js)}function Xs(t,n){return T(t,Ao(n,2))}function Qs(t){return t&&t.length?se(t,js,Me):it}function tc(t,n){return t&&t.length?se(t,Ao(n,2),Me):it}function nc(t){return t&&t.length?k(t,js):0}function rc(t,n){return t&&t.length?k(t,Ao(n,2)):0}n=null==n?Ir:Vr.defaults(Ir.Object(),n,Vr.pick(Ir,wr));var ec=n.Array,ic=n.Date,oc=n.Error,uc=n.Function,ac=n.Math,fc=n.Object,sc=n.RegExp,cc=n.String,lc=n.TypeError,pc=ec.prototype,hc=uc.prototype,gc=fc.prototype,dc=n["__core-js_shared__"],vc=hc.toString,_c=gc.hasOwnProperty,yc=0,mc=function(){var t=/[^.]+$/.exec(dc&&dc.keys&&dc.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),bc=gc.toString,wc=vc.call(fc),Ac=Ir._,Sc=sc("^"+vc.call(_c).replace(In,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Oc=Lr?n.Buffer:it,xc=n.Symbol,Ec=n.Uint8Array,Tc=Oc?Oc.allocUnsafe:it,Pc=$(fc.getPrototypeOf,fc),Rc=fc.create,Cc=gc.propertyIsEnumerable,jc=pc.splice,kc=xc?xc.isConcatSpreadable:it,Ic=xc?xc.iterator:it,Uc=xc?xc.toStringTag:it,Nc=function(){try{var t=xo(fc,"defineProperty");return t({},"",{}),t}catch(t){}}(),Lc=n.clearTimeout!==Ir.clearTimeout&&n.clearTimeout,Bc=ic&&ic.now!==Ir.Date.now&&ic.now,Dc=n.setTimeout!==Ir.setTimeout&&n.setTimeout,Kc=ac.ceil,Mc=ac.floor,Fc=fc.getOwnPropertySymbols,zc=Oc?Oc.isBuffer:it,qc=n.isFinite,Jc=pc.join,Yc=$(fc.keys,fc),Wc=ac.max,$c=ac.min,Hc=ic.now,Vc=n.parseInt,Zc=ac.random,Gc=pc.reverse,Xc=xo(n,"DataView"),Qc=xo(n,"Map"),tl=xo(n,"Promise"),nl=xo(n,"Set"),rl=xo(n,"WeakMap"),el=xo(fc,"create"),il=rl&&new rl,ol={},ul=tu(Xc),al=tu(Qc),fl=tu(tl),sl=tu(nl),cl=tu(rl),ll=xc?xc.prototype:it,pl=ll?ll.valueOf:it,hl=ll?ll.toString:it,gl=function(){function t(){}return function(n){if(!of(n))return{};if(Rc)return Rc(n);t.prototype=n;var r=new t;return t.prototype=it,r}}();r.templateSettings={escape:En,evaluate:Tn,interpolate:Pn,variable:"",imports:{_:r}},r.prototype=e.prototype,r.prototype.constructor=r,i.prototype=gl(e.prototype),i.prototype.constructor=i,b.prototype=gl(e.prototype),b.prototype.constructor=b,rt.prototype.clear=Fn,rt.prototype.delete=Qn,rt.prototype.get=tr,rt.prototype.has=nr,rt.prototype.set=rr,er.prototype.clear=ir,er.prototype.delete=or,er.prototype.get=ur,er.prototype.has=ar,er.prototype.set=fr,sr.prototype.clear=cr,sr.prototype.delete=lr,sr.prototype.get=pr,sr.prototype.has=hr,sr.prototype.set=gr,_r.prototype.add=_r.prototype.push=yr,_r.prototype.has=mr,br.prototype.clear=xr,br.prototype.delete=Er,br.prototype.get=Tr,br.prototype.has=Pr,br.prototype.set=jr;var dl=qi(he),vl=qi(ge,!0),_l=Ji(),yl=Ji(!0),ml=il?function(t,n){return il.set(t,n),t}:js,bl=Nc?function(t,n){return Nc(t,"toString",{configurable:!0,enumerable:!1,value:Rs(n),writable:!0})}:js,wl=ri,Al=Lc||function(t){return Ir.clearTimeout(t)},Sl=nl&&1/V(new nl([,-0]))[1]==kt?function(t){return new nl(t)}:Bs,Ol=il?function(t){return il.get(t)}:Bs,xl=Fc?function(t){return null==t?[]:(t=fc(t),p(Fc(t),function(n){return Cc.call(t,n)}))}:Fs,El=Fc?function(t){for(var n=[];t;)v(n,xl(t)),t=Pc(t);return n}:Fs,Tl=ye;(Xc&&Tl(new Xc(new ArrayBuffer(1)))!=sn||Qc&&Tl(new Qc)!=Vt||tl&&"[object Promise]"!=Tl(tl.resolve())||nl&&Tl(new nl)!=nn||rl&&Tl(new rl)!=un)&&(Tl=function(t){var n=ye(t),r=n==Xt?t.constructor:it,e=r?tu(r):"";if(e)switch(e){case ul:return sn;case al:return Vt;case fl:return"[object Promise]";case sl:return nn;case cl:return un}return n});var Pl=dc?nf:zs,Rl=Go(ml),Cl=Dc||function(t,n){return Ir.setTimeout(t,n)},jl=Go(bl),kl=function(t){var n=ja(t,function(t){return r.size===st&&r.clear(),t}),r=n.cache;return n}(function(t){var n=[];return jn.test(t)&&n.push(""),t.replace(kn,function(t,r,e,i){n.push(e?i.replace(zn,"$1"):r||t)}),n}),Il=ri(function(t,n){return $a(t)?ae(t,pe(n,1,$a,!0)):[]}),Ul=ri(function(t,n){var r=wu(n);return $a(r)&&(r=it),$a(t)?ae(t,pe(n,1,$a,!0),Ao(r,2)):[]}),Nl=ri(function(t,n){var r=wu(n);return $a(r)&&(r=it),$a(t)?ae(t,pe(n,1,$a,!0),it,r):[]}),Ll=ri(function(t){var n=d(t,wi);return n.length&&n[0]===t[0]?Se(n):[]}),Bl=ri(function(t){var n=wu(t),r=d(t,wi);return n===wu(r)?n=it:r.pop(),r.length&&r[0]===t[0]?Se(r,Ao(n,2)):[]}),Dl=ri(function(t){var n=wu(t),r=d(t,wi);return n="function"==typeof n?n:it,n&&r.pop(),r.length&&r[0]===t[0]?Se(r,it,n):[]}),Kl=ri(Ou),Ml=_o(function(t,n){var r=null==t?0:t.length,e=ne(t,n);return Xe(t,d(n,function(t){return No(t,r)?+t:t}).sort(Ii)),e}),Fl=ri(function(t){return gi(pe(t,1,$a,!0))}),zl=ri(function(t){var n=wu(t);return $a(n)&&(n=it),gi(pe(t,1,$a,!0),Ao(n,2))}),ql=ri(function(t){var n=wu(t);return n="function"==typeof n?n:it,gi(pe(t,1,$a,!0),it,n)}),Jl=ri(function(t,n){return $a(t)?ae(t,n):[]}),Yl=ri(function(t){return mi(p(t,$a))}),Wl=ri(function(t){var n=wu(t);return $a(n)&&(n=it),mi(p(t,$a),Ao(n,2))}),$l=ri(function(t){var n=wu(t);return n="function"==typeof n?n:it,mi(p(t,$a),it,n)}),Hl=ri(Wu),Vl=ri(function(t){var n=t.length,r=n>1?t[n-1]:it;return r="function"==typeof r?(t.pop(),r):it,$u(t,r)}),Zl=_o(function(t){var n=t.length,r=n?t[0]:0,e=this.__wrapped__,o=function(n){return ne(n,t)};return!(n>1||this.__actions__.length)&&e instanceof b&&No(r)?(e=e.slice(r,+r+(n?1:0)),e.__actions__.push({func:Xu,args:[o],thisArg:it}),new i(e,this.__chain__).thru(function(t){return n&&!t.length&&t.push(it),t})):this.thru(o)}),Gl=Fi(function(t,n,r){_c.call(t,r)?++t[r]:te(t,r,1)}),Xl=Zi(lu),Ql=Zi(pu),tp=Fi(function(t,n,r){_c.call(t,r)?t[r].push(n):te(t,r,[n])}),np=ri(function(t,n,r){var e=-1,i="function"==typeof n,o=Wa(t)?ec(t.length):[];return dl(t,function(t){o[++e]=i?a(n,t,r):xe(t,n,r)}),o}),rp=Fi(function(t,n,r){te(t,r,n)}),ep=Fi(function(t,n,r){t[r?0:1].push(n)},function(){return[[],[]]}),ip=ri(function(t,n){if(null==t)return[];var r=n.length;return r>1&&Lo(t,n[0],n[1])?n=[]:r>2&&Lo(n[0],n[1],n[2])&&(n=[n[0]]),$e(t,pe(n,1),[])}),op=Bc||function(){return Ir.Date.now()},up=ri(function(t,n,r){var e=vt;if(r.length){var i=H(r,wo(up));e|=wt}return so(t,e,n,r,i)}),ap=ri(function(t,n,r){var e=vt|_t;if(r.length){var i=H(r,wo(ap));e|=wt}return so(n,e,t,r,i)}),fp=ri(function(t,n){return ue(t,1,n)}),sp=ri(function(t,n,r){return ue(t,xf(n)||0,r)});ja.Cache=sr;var cp=wl(function(t,n){n=1==n.length&&_p(n[0])?d(n[0],N(Ao())):d(pe(n,1),N(Ao()));var r=n.length;return ri(function(e){for(var i=-1,o=$c(e.length,r);++i<o;)e[i]=n[i].call(this,e[i]);return a(t,this,e)})}),lp=ri(function(t,n){var r=H(n,wo(lp));return so(t,wt,it,n,r)}),pp=ri(function(t,n){var r=H(n,wo(pp));return so(t,At,it,n,r)}),hp=_o(function(t,n){return so(t,Ot,it,it,it,n)}),gp=oo(me),dp=oo(function(t,n){return t>=n}),vp=Ee(function(){return arguments}())?Ee:function(t){return uf(t)&&_c.call(t,"callee")&&!Cc.call(t,"callee")},_p=ec.isArray,yp=Kr?N(Kr):Te,mp=zc||zs,bp=Mr?N(Mr):Pe,wp=Fr?N(Fr):je,Ap=zr?N(zr):Ue,Sp=qr?N(qr):Ne,Op=Jr?N(Jr):Le,xp=oo(Me),Ep=oo(function(t,n){return t<=n}),Tp=zi(function(t,n){if(Fo(n)||Wa(n))return void Di(n,Ff(n),t);for(var r in n)_c.call(n,r)&&Yr(t,r,n[r])}),Pp=zi(function(t,n){Di(n,zf(n),t)}),Rp=zi(function(t,n,r,e){Di(n,zf(n),t,e)}),Cp=zi(function(t,n,r,e){Di(n,Ff(n),t,e)}),jp=_o(ne),kp=ri(function(t){return t.push(it,co),a(Rp,it,t)}),Ip=ri(function(t){return t.push(it,lo),a(Dp,it,t)}),Up=Qi(function(t,n,r){t[n]=r},Rs(js)),Np=Qi(function(t,n,r){_c.call(t,n)?t[n].push(r):t[n]=[r]},Ao),Lp=ri(xe),Bp=zi(function(t,n,r){Je(t,n,r)}),Dp=zi(function(t,n,r,e){Je(t,n,r,e)}),Kp=_o(function(t,n){var r={};if(null==t)return r;var e=!1;n=d(n,function(n){return n=Si(n,t),e||(e=n.length>1),n}),Di(t,mo(t),r),e&&(r=ee(r,lt|pt|ht,po));for(var i=n.length;i--;)di(r,n[i]);return r}),Mp=_o(function(t,n){return null==t?{}:He(t,n)}),Fp=fo(Ff),zp=fo(zf),qp=$i(function(t,n,r){return n=n.toLowerCase(),t+(r?os(n):n)}),Jp=$i(function(t,n,r){return t+(r?"-":"")+n.toLowerCase()}),Yp=$i(function(t,n,r){return t+(r?" ":"")+n.toLowerCase()}),Wp=Wi("toLowerCase"),$p=$i(function(t,n,r){return t+(r?"_":"")+n.toLowerCase()}),Hp=$i(function(t,n,r){return t+(r?" ":"")+Zp(n)}),Vp=$i(function(t,n,r){return t+(r?" ":"")+n.toUpperCase()}),Zp=Wi("toUpperCase"),Gp=ri(function(t,n){try{return a(t,it,n)}catch(t){return Qa(t)?t:new oc(t)}}),Xp=_o(function(t,n){return s(n,function(n){n=Qo(n),te(t,n,up(t[n],t))}),t}),Qp=Gi(),th=Gi(!0),nh=ri(function(t,n){return function(r){return xe(r,t,n)}}),rh=ri(function(t,n){return function(r){return xe(t,r,n)}}),eh=no(d),ih=no(l),oh=no(m),uh=io(),ah=io(!0),fh=to(function(t,n){return t+n},0),sh=ao("ceil"),ch=to(function(t,n){return t/n},1),lh=ao("floor"),ph=to(function(t,n){return t*n},1),hh=ao("round"),gh=to(function(t,n){return t-n},0);return r.after=Oa,r.ary=xa,r.assign=Tp,r.assignIn=Pp,r.assignInWith=Rp,r.assignWith=Cp,r.at=jp,r.before=Ea,r.bind=up,r.bindAll=Xp,r.bindKey=ap,r.castArray=Ka,r.chain=Zu,r.chunk=eu,r.compact=iu,r.concat=ou,r.cond=Ts,r.conforms=Ps,r.constant=Rs,r.countBy=Gl,r.create=Rf,r.curry=Ta,r.curryRight=Pa,r.debounce=Ra,r.defaults=kp,r.defaultsDeep=Ip,r.defer=fp,r.delay=sp,r.difference=Il,r.differenceBy=Ul,r.differenceWith=Nl,r.drop=uu,r.dropRight=au,r.dropRightWhile=fu,r.dropWhile=su,r.fill=cu,r.filter=aa,r.flatMap=fa,r.flatMapDeep=sa,r.flatMapDepth=ca,r.flatten=hu,r.flattenDeep=gu,r.flattenDepth=du,r.flip=Ca,r.flow=Qp,r.flowRight=th,r.fromPairs=vu,r.functions=Lf,r.functionsIn=Bf,r.groupBy=tp,r.initial=mu,r.intersection=Ll,r.intersectionBy=Bl,r.intersectionWith=Dl,r.invert=Up,r.invertBy=Np,r.invokeMap=np,r.iteratee=ks,r.keyBy=rp,r.keys=Ff,r.keysIn=zf,r.map=ga,r.mapKeys=qf,r.mapValues=Jf,r.matches=Is,r.matchesProperty=Us,r.memoize=ja,r.merge=Bp,r.mergeWith=Dp,r.method=nh,r.methodOf=rh,r.mixin=Ns,r.negate=ka,r.nthArg=Ds,r.omit=Kp,r.omitBy=Yf,r.once=Ia,r.orderBy=da,r.over=eh,r.overArgs=cp,r.overEvery=ih,r.overSome=oh,r.partial=lp,r.partialRight=pp,r.partition=ep,r.pick=Mp,r.pickBy=Wf,r.property=Ks,r.propertyOf=Ms,r.pull=Kl,r.pullAll=Ou,r.pullAllBy=xu,r.pullAllWith=Eu,r.pullAt=Ml,r.range=uh,r.rangeRight=ah,r.rearg=hp,r.reject=ya,r.remove=Tu,r.rest=Ua,r.reverse=Pu,r.sampleSize=ba,r.set=Hf,r.setWith=Vf,r.shuffle=wa,r.slice=Ru,r.sortBy=ip,r.sortedUniq=Lu,r.sortedUniqBy=Bu,r.split=vs,r.spread=Na,r.tail=Du,r.take=Ku,r.takeRight=Mu,r.takeRightWhile=Fu,r.takeWhile=zu,r.tap=Gu,r.throttle=La,r.thru=Xu,r.toArray=wf,r.toPairs=Fp,r.toPairsIn=zp,r.toPath=$s,r.toPlainObject=Ef,r.transform=Zf,r.unary=Ba,r.union=Fl,r.unionBy=zl,r.unionWith=ql,r.uniq=qu,r.uniqBy=Ju,r.uniqWith=Yu,r.unset=Gf,r.unzip=Wu,r.unzipWith=$u,r.update=Xf,r.updateWith=Qf,r.values=ts,r.valuesIn=ns,r.without=Jl,r.words=Es,r.wrap=Da,r.xor=Yl,r.xorBy=Wl,r.xorWith=$l,r.zip=Hl,r.zipObject=Hu,r.zipObjectDeep=Vu,r.zipWith=Vl,r.entries=Fp,r.entriesIn=zp,r.extend=Pp,r.extendWith=Rp,Ns(r,r),r.add=fh,r.attempt=Gp,r.camelCase=qp,r.capitalize=os,r.ceil=sh,r.clamp=rs,r.clone=Ma,r.cloneDeep=za,r.cloneDeepWith=qa,r.cloneWith=Fa,r.conformsTo=Ja,r.deburr=us,r.defaultTo=Cs,r.divide=ch,r.endsWith=as,r.eq=Ya,r.escape=fs,r.escapeRegExp=ss,r.every=ua,r.find=Xl,r.findIndex=lu,r.findKey=Cf,r.findLast=Ql,r.findLastIndex=pu,r.findLastKey=jf,r.floor=lh,r.forEach=la,r.forEachRight=pa,r.forIn=kf,r.forInRight=If,r.forOwn=Uf,r.forOwnRight=Nf,r.get=Df,r.gt=gp,r.gte=dp,r.has=Kf,r.hasIn=Mf,r.head=_u,r.identity=js,r.includes=ha,r.indexOf=yu,r.inRange=es,r.invoke=Lp,r.isArguments=vp,r.isArray=_p,r.isArrayBuffer=yp,r.isArrayLike=Wa,r.isArrayLikeObject=$a,r.isBoolean=Ha,r.isBuffer=mp,r.isDate=bp,r.isElement=Va,r.isEmpty=Za,r.isEqual=Ga,r.isEqualWith=Xa,r.isError=Qa,r.isFinite=tf,r.isFunction=nf,r.isInteger=rf,r.isLength=ef,r.isMap=wp,r.isMatch=af,r.isMatchWith=ff,r.isNaN=sf,r.isNative=cf,r.isNil=pf,r.isNull=lf,r.isNumber=hf,r.isObject=of,r.isObjectLike=uf,r.isPlainObject=gf,r.isRegExp=Ap,r.isSafeInteger=df,r.isSet=Sp,r.isString=vf,r.isSymbol=_f,r.isTypedArray=Op,r.isUndefined=yf,r.isWeakMap=mf,r.isWeakSet=bf,r.join=bu,r.kebabCase=Jp,r.last=wu,r.lastIndexOf=Au,r.lowerCase=Yp,r.lowerFirst=Wp,r.lt=xp,r.lte=Ep,r.max=Vs,r.maxBy=Zs,r.mean=Gs,r.meanBy=Xs,r.min=Qs,r.minBy=tc,r.stubArray=Fs,r.stubFalse=zs,r.stubObject=qs,r.stubString=Js,r.stubTrue=Ys,r.multiply=ph,r.nth=Su,r.noConflict=Ls,r.noop=Bs,r.now=op,r.pad=cs,r.padEnd=ls,r.padStart=ps,r.parseInt=hs,r.random=is,r.reduce=va,r.reduceRight=_a,r.repeat=gs,r.replace=ds,r.result=$f,r.round=hh,r.runInContext=t,r.sample=ma,r.size=Aa,r.snakeCase=$p,r.some=Sa,r.sortedIndex=Cu,r.sortedIndexBy=ju,r.sortedIndexOf=ku,r.sortedLastIndex=Iu,r.sortedLastIndexBy=Uu,r.sortedLastIndexOf=Nu,r.startCase=Hp,r.startsWith=_s,r.subtract=gh,r.sum=nc,r.sumBy=rc,r.template=ys,r.times=Ws,r.toFinite=Af,r.toInteger=Sf,r.toLength=Of,r.toLower=ms,r.toNumber=xf,r.toSafeInteger=Tf,r.toString=Pf,r.toUpper=bs,r.trim=ws,r.trimEnd=As,r.trimStart=Ss,r.truncate=Os,r.unescape=xs,r.uniqueId=Hs,r.upperCase=Vp,r.upperFirst=Zp,r.each=la,r.eachRight=pa,r.first=_u,Ns(r,function(){var t={};return he(r,function(n,e){_c.call(r.prototype,e)||(t[e]=n)}),t}(),{chain:!1}),r.VERSION="4.17.4",s(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){r[t].placeholder=r}),s(["drop","take"],function(t,n){b.prototype[t]=function(r){r=r===it?1:Wc(Sf(r),0);var e=this.__filtered__&&!n?new b(this):this.clone();return e.__filtered__?e.__takeCount__=$c(r,e.__takeCount__):e.__views__.push({size:$c(r,Lt),type:t+(e.__dir__<0?"Right":"")}),e},b.prototype[t+"Right"]=function(n){return this.reverse()[t](n).reverse()}}),s(["filter","map","takeWhile"],function(t,n){var r=n+1,e=r==Ct||3==r;b.prototype[t]=function(t){var n=this.clone();return n.__iteratees__.push({iteratee:Ao(t,3),type:r}),n.__filtered__=n.__filtered__||e,n}}),s(["head","last"],function(t,n){var r="take"+(n?"Right":"");b.prototype[t]=function(){return this[r](1).value()[0]}}),s(["initial","tail"],function(t,n){var r="drop"+(n?"":"Right");b.prototype[t]=function(){return this.__filtered__?new b(this):this[r](1)}}),b.prototype.compact=function(){return this.filter(js)},b.prototype.find=function(t){return this.filter(t).head()},b.prototype.findLast=function(t){return this.reverse().find(t)},b.prototype.invokeMap=ri(function(t,n){return"function"==typeof t?new b(this):this.map(function(r){return xe(r,t,n)})}),b.prototype.reject=function(t){return this.filter(ka(Ao(t)))},b.prototype.slice=function(t,n){t=Sf(t);var r=this;return r.__filtered__&&(t>0||n<0)?new b(r):(t<0?r=r.takeRight(-t):t&&(r=r.drop(t)),n!==it&&(n=Sf(n),r=n<0?r.dropRight(-n):r.take(n-t)),r)},b.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},b.prototype.toArray=function(){return this.take(Lt)},he(b.prototype,function(t,n){var e=/^(?:filter|find|map|reject)|While$/.test(n),o=/^(?:head|last)$/.test(n),u=r[o?"take"+("last"==n?"Right":""):n],a=o||/^find/.test(n);u&&(r.prototype[n]=function(){var n=this.__wrapped__,f=o?[1]:arguments,s=n instanceof b,c=f[0],l=s||_p(n),p=function(t){var n=u.apply(r,v([t],f));return o&&h?n[0]:n};l&&e&&"function"==typeof c&&1!=c.length&&(s=l=!1);var h=this.__chain__,g=!!this.__actions__.length,d=a&&!h,_=s&&!g;if(!a&&l){n=_?n:new b(this);var y=t.apply(n,f);return y.__actions__.push({func:Xu,args:[p],thisArg:it}),new i(y,h)}return d&&_?t.apply(this,f):(y=this.thru(p),d?o?y.value()[0]:y.value():y)})}),s(["pop","push","shift","sort","splice","unshift"],function(t){var n=pc[t],e=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",i=/^(?:pop|shift)$/.test(t);r.prototype[t]=function(){var t=arguments;if(i&&!this.__chain__){var r=this.value();return n.apply(_p(r)?r:[],t)}return this[e](function(r){return n.apply(_p(r)?r:[],t)})}}),he(b.prototype,function(t,n){var e=r[n];if(e){var i=e.name+"";(ol[i]||(ol[i]=[])).push({name:n,func:e})}}),ol[Xi(it,_t).name]=[{name:"wrapper",func:it}],b.prototype.clone=R,b.prototype.reverse=G,b.prototype.value=nt,r.prototype.at=Zl,r.prototype.chain=Qu,r.prototype.commit=ta,r.prototype.next=na,r.prototype.plant=ea,r.prototype.reverse=ia,r.prototype.toJSON=r.prototype.valueOf=r.prototype.value=oa,r.prototype.first=r.prototype.head,Ic&&(r.prototype[Ic]=ra),r}();Ir._=Vr,(i=function(){return Vr}.call(n,r,n,e))!==it&&(e.exports=i)}).call(this)}).call(n,r(6),r(14)(t))},function(t,n,r){"use strict";(function(n){var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e={};t.exports=e,e.isPipeObject=function(t){return"object"===(void 0===t?"undefined":r(t))&&t.hasOwnProperty("pipe")&&"object"===r(t.pipe)},e.isPipeJson=function(t){return"object"===(void 0===t?"undefined":r(t))&&t.hasOwnProperty("op")&&t.hasOwnProperty("params")},e.isNodeJs=function(){return"[object process]"===Object.prototype.toString.call(void 0!==n?n:0)},e.arrayBufferToString=function(t){if(this.isNodeJs())return t.toString("utf-8");if("TextDecoder"in window)return new TextDecoder("utf-8").decode(t);var n,r=new Uint8Array(t),e="",i=r.length;for(n=0;n<i;++n)e+=String.fromCharCode(r[n]);return decodeURIComponent(escape(e))},e.callbackAdapter=function(t,n,r,e,i){"function"==typeof i?i(t,n):t?e(t):r(n)},t.exports.getUtilObject=function(t){return new function(){for(var n in e)e.hasOwnProperty(n)&&(this[n]=e[n]);this.debug=function(n){if(t.getConfig().debug){var n="flexio-sdk-js: "+n;console.log(n)}return this}}}}).call(n,r(4))},function(t,n,r){"use strict";t.exports={TASK_OP_CALC:"calc",TASK_OP_COMMENT:"comment",TASK_OP_CONVERT:"convert",TASK_OP_COPY:"copy",TASK_OP_CREATE:"create",TASK_OP_CUSTOM:"custom",TASK_OP_DISTINCT:"distinct",TASK_OP_DUMP:"dump",TASK_OP_DUPLICATE:"duplicate",TASK_OP_ECHO:"echo",TASK_OP_EMAIL_SEND:"email",TASK_OP_EXECUTE:"execute",TASK_OP_FIND_REPLACE:"replace",TASK_OP_FILTER:"filter",TASK_OP_FOREACH:"foreach",TASK_OP_GROUP:"group",TASK_OP_INSERT:"insert",TASK_OP_LIMIT:"limit",TASK_OP_LIST:"list",TASK_OP_MERGE:"merge",TASK_OP_MKDIR:"mkdir",TASK_OP_NOP:"nop",TASK_OP_PROMPT:"prompt",TASK_OP_R:"r",TASK_OP_READ:"read",TASK_OP_RENAME:"rename",TASK_OP_RENDER:"render",TASK_OP_REQUEST:"request",TASK_OP_SEARCH:"search",TASK_OP_SELECT:"select",TASK_OP_SEQUENCE:"sequence",TASK_OP_SET:"set",TASK_OP_SLEEP:"sleep",TASK_OP_SORT:"sort",TASK_OP_TRANSFORM:"transform",TASK_OP_WRITE:"write"}},function(t,n,r){"use strict";function e(t){return"[object Array]"===O.call(t)}function i(t){return"[object ArrayBuffer]"===O.call(t)}function o(t){return"undefined"!=typeof FormData&&t instanceof FormData}function u(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function a(t){return"string"==typeof t}function f(t){return"number"==typeof t}function s(t){return void 0===t}function c(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===O.call(t)}function p(t){return"[object File]"===O.call(t)}function h(t){return"[object Blob]"===O.call(t)}function g(t){return"[object Function]"===O.call(t)}function d(t){return c(t)&&g(t.pipe)}function v(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams}function _(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function y(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function m(t,n){if(null!==t&&void 0!==t)if("object"==typeof t||e(t)||(t=[t]),e(t))for(var r=0,i=t.length;r<i;r++)n.call(null,t[r],r,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&n.call(null,t[o],o,t)}function b(){function t(t,r){"object"==typeof n[r]&&"object"==typeof t?n[r]=b(n[r],t):n[r]=t}for(var n={},r=0,e=arguments.length;r<e;r++)m(arguments[r],t);return n}function w(t,n,r){return m(n,function(n,e){t[e]=r&&"function"==typeof n?A(n,r):n}),t}var A=r(7),S=r(17),O=Object.prototype.toString;t.exports={isArray:e,isArrayBuffer:i,isBuffer:S,isFormData:o,isArrayBufferView:u,isString:a,isNumber:f,isObject:c,isUndefined:s,isDate:l,isFile:p,isBlob:h,isFunction:g,isStream:d,isURLSearchParams:v,isStandardBrowserEnv:y,forEach:m,merge:b,extend:w,trim:_}},function(t,n){function r(){throw new Error("setTimeout has not been defined")}function e(){throw new Error("clearTimeout has not been defined")}function i(t){if(c===setTimeout)return setTimeout(t,0);if((c===r||!c)&&setTimeout)return c=setTimeout,setTimeout(t,0);try{return c(t,0)}catch(n){try{return c.call(null,t,0)}catch(n){return c.call(this,t,0)}}}function o(t){if(l===clearTimeout)return clearTimeout(t);if((l===e||!l)&&clearTimeout)return l=clearTimeout,clearTimeout(t);try{return l(t)}catch(n){try{return l.call(null,t)}catch(n){return l.call(this,t)}}}function u(){d&&h&&(d=!1,h.length?g=h.concat(g):v=-1,g.length&&a())}function a(){if(!d){var t=i(u);d=!0;for(var n=g.length;n;){for(h=g,g=[];++v<n;)h&&h[v].run();v=-1,n=g.length}h=null,d=!1,o(t)}}function f(t,n){this.fun=t,this.array=n}function s(){}var c,l,p=t.exports={};!function(){try{c="function"==typeof setTimeout?setTimeout:r}catch(t){c=r}try{l="function"==typeof clearTimeout?clearTimeout:e}catch(t){l=e}}();var h,g=[],d=!1,v=-1;p.nextTick=function(t){var n=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)n[r-1]=arguments[r];g.push(new f(t,n)),1!==g.length||d||i(a)},f.prototype.run=function(){this.fun.apply(null,this.array)},p.title="browser",p.browser=!0,p.env={},p.argv=[],p.version="",p.versions={},p.on=s,p.addListener=s,p.once=s,p.off=s,p.removeListener=s,p.removeAllListeners=s,p.emit=s,p.prependListener=s,p.prependOnceListener=s,p.listeners=function(t){return[]},p.binding=function(t){throw new Error("process.binding is not supported")},p.cwd=function(){return"/"},p.chdir=function(t){throw new Error("process.chdir is not supported")},p.umask=function(){return 0}},function(t,n,r){"use strict";(function(n){function e(t,n){!i.isUndefined(t)&&i.isUndefined(t["Content-Type"])&&(t["Content-Type"]=n)}var i=r(3),o=r(19),u={"Content-Type":"application/x-www-form-urlencoded"},a={adapter:function(){var t;return"undefined"!=typeof XMLHttpRequest?t=r(8):void 0!==n&&(t=r(8)),t}(),transformRequest:[function(t,n){return o(n,"Content-Type"),i.isFormData(t)||i.isArrayBuffer(t)||i.isBuffer(t)||i.isStream(t)||i.isFile(t)||i.isBlob(t)?t:i.isArrayBufferView(t)?t.buffer:i.isURLSearchParams(t)?(e(n,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):i.isObject(t)?(e(n,"application/json;charset=utf-8"),JSON.stringify(t)):t}],transformResponse:[function(t){if("string"==typeof t)try{t=JSON.parse(t)}catch(t){}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(t){return t>=200&&t<300}};a.headers={common:{Accept:"application/json, text/plain, */*"}},i.forEach(["delete","get","head"],function(t){a.headers[t]={}}),i.forEach(["post","put","patch"],function(t){a.headers[t]=i.merge(u)}),t.exports=a}).call(n,r(4))},function(t,n){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,n,r){"use strict";t.exports=function(t,n){return function(){for(var r=new Array(arguments.length),e=0;e<r.length;e++)r[e]=arguments[e];return t.apply(n,r)}}},function(t,n,r){"use strict";(function(n){var e=r(3),i=r(20),o=r(22),u=r(23),a=r(24),f=r(9),s="undefined"!=typeof window&&window.btoa&&window.btoa.bind(window)||r(25);t.exports=function(t){return new Promise(function(c,l){var p=t.data,h=t.headers;e.isFormData(p)&&delete h["Content-Type"];var g=new XMLHttpRequest,d="onreadystatechange",v=!1;if("test"===n.env.NODE_ENV||"undefined"==typeof window||!window.XDomainRequest||"withCredentials"in g||a(t.url)||(g=new window.XDomainRequest,d="onload",v=!0,g.onprogress=function(){},g.ontimeout=function(){}),t.auth){var _=t.auth.username||"",y=t.auth.password||"";h.Authorization="Basic "+s(_+":"+y)}if(g.open(t.method.toUpperCase(),o(t.url,t.params,t.paramsSerializer),!0),g.timeout=t.timeout,g[d]=function(){if(g&&(4===g.readyState||v)&&(0!==g.status||g.responseURL&&0===g.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in g?u(g.getAllResponseHeaders()):null,r=t.responseType&&"text"!==t.responseType?g.response:g.responseText,e={data:r,status:1223===g.status?204:g.status,statusText:1223===g.status?"No Content":g.statusText,headers:n,config:t,request:g};i(c,l,e),g=null}},g.onerror=function(){l(f("Network Error",t,null,g)),g=null},g.ontimeout=function(){l(f("timeout of "+t.timeout+"ms exceeded",t,"ECONNABORTED",g)),g=null},e.isStandardBrowserEnv()){var m=r(26),b=(t.withCredentials||a(t.url))&&t.xsrfCookieName?m.read(t.xsrfCookieName):void 0;b&&(h[t.xsrfHeaderName]=b)}if("setRequestHeader"in g&&e.forEach(h,function(t,n){void 0===p&&"content-type"===n.toLowerCase()?delete h[n]:g.setRequestHeader(n,t)}),t.withCredentials&&(g.withCredentials=!0),t.responseType)try{g.responseType=t.responseType}catch(n){if("json"!==t.responseType)throw n}"function"==typeof t.onDownloadProgress&&g.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&g.upload&&g.upload.addEventListener("progress",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then(function(t){g&&(g.abort(),l(t),g=null)}),void 0===p&&(p=null),g.send(p)})}}).call(n,r(4))},function(t,n,r){"use strict";var e=r(21);t.exports=function(t,n,r,i,o){var u=new Error(t);return e(u,n,r,i,o)}},function(t,n,r){"use strict";t.exports=function(t){return!(!t||!t.__CANCEL__)}},function(t,n,r){"use strict";function e(t){this.message=t}e.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},e.prototype.__CANCEL__=!0,t.exports=e},function(t,n,r){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var e=r(13);n.default=e},function(t,n,r){"use strict";(function(n){var e=r(0),i=r(15),o=r(34),u={token:"",baseUrl:"https://www.flex.io/api/v1",insecure:!1,debug:!1},a={version:r(63).version,_init:function(){this.connections=r(64).getConnectionsObject(this),this.pipes=r(65).getPipesObject(this),this.util=r(1).getUtilObject(this),this._http=null;var t=r(66).getPipeConstructor;this.pipe=t(this);var n=r(67).getConnectionConstructor;this.connection=n(this)},setup:function(t,n){return u=e.assign(u,{token:t},n),this._http=null,this._createHttp(),this},getConfig:function(){return e.assign({},u)},http:function(){return this._http||this._createHttp(),this._http},task:o,_createHttp:function(){var t={baseURL:u.baseUrl,headers:{Authorization:"Bearer "+u.token}};!0===u.insecure&&(n.env.NODE_TLS_REJECT_UNAUTHORIZED="0"),this._http=i.create(t)}};a._init(),t.exports=a}).call(n,r(4))},function(t,n){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,n,r){t.exports=r(16)},function(t,n,r){"use strict";function e(t){var n=new u(t),r=o(u.prototype.request,n);return i.extend(r,u.prototype,n),i.extend(r,n),r}var i=r(3),o=r(7),u=r(18),a=r(5),f=e(a);f.Axios=u,f.create=function(t){return e(i.merge(a,t))},f.Cancel=r(11),f.CancelToken=r(32),f.isCancel=r(10),f.all=function(t){return Promise.all(t)},f.spread=r(33),t.exports=f,t.exports.default=f},function(t,n){function r(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}function e(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&r(t.slice(0,0))}/*!
+ * Determine if an object is a Buffer
+ *
+ * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
+ * @license  MIT
+ */
+t.exports=function(t){return null!=t&&(r(t)||e(t)||!!t._isBuffer)}},function(t,n,r){"use strict";function e(t){this.defaults=t,this.interceptors={request:new u,response:new u}}var i=r(5),o=r(3),u=r(27),a=r(28),f=r(30),s=r(31);e.prototype.request=function(t){"string"==typeof t&&(t=o.merge({url:arguments[0]},arguments[1])),t=o.merge(i,this.defaults,{method:"get"},t),t.method=t.method.toLowerCase(),t.baseURL&&!f(t.url)&&(t.url=s(t.baseURL,t.url));var n=[a,void 0],r=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){n.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){n.push(t.fulfilled,t.rejected)});n.length;)r=r.then(n.shift(),n.shift());return r},o.forEach(["delete","get","head","options"],function(t){e.prototype[t]=function(n,r){return this.request(o.merge(r||{},{method:t,url:n}))}}),o.forEach(["post","put","patch"],function(t){e.prototype[t]=function(n,r,e){return this.request(o.merge(e||{},{method:t,url:n,data:r}))}}),t.exports=e},function(t,n,r){"use strict";var e=r(3);t.exports=function(t,n){e.forEach(t,function(r,e){e!==n&&e.toUpperCase()===n.toUpperCase()&&(t[n]=r,delete t[e])})}},function(t,n,r){"use strict";var e=r(9);t.exports=function(t,n,r){var i=r.config.validateStatus;r.status&&i&&!i(r.status)?n(e("Request failed with status code "+r.status,r.config,null,r.request,r)):t(r)}},function(t,n,r){"use strict";t.exports=function(t,n,r,e,i){return t.config=n,r&&(t.code=r),t.request=e,t.response=i,t}},function(t,n,r){"use strict";function e(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var i=r(3);t.exports=function(t,n,r){if(!n)return t;var o;if(r)o=r(n);else if(i.isURLSearchParams(n))o=n.toString();else{var u=[];i.forEach(n,function(t,n){null!==t&&void 0!==t&&(i.isArray(t)&&(n+="[]"),i.isArray(t)||(t=[t]),i.forEach(t,function(t){i.isDate(t)?t=t.toISOString():i.isObject(t)&&(t=JSON.stringify(t)),u.push(e(n)+"="+e(t))}))}),o=u.join("&")}return o&&(t+=(-1===t.indexOf("?")?"?":"&")+o),t}},function(t,n,r){"use strict";var e=r(3);t.exports=function(t){var n,r,i,o={};return t?(e.forEach(t.split("\n"),function(t){i=t.indexOf(":"),n=e.trim(t.substr(0,i)).toLowerCase(),r=e.trim(t.substr(i+1)),n&&(o[n]=o[n]?o[n]+", "+r:r)}),o):o}},function(t,n,r){"use strict";var e=r(3);t.exports=e.isStandardBrowserEnv()?function(){function t(t){var n=t;return r&&(i.setAttribute("href",n),n=i.href),i.setAttribute("href",n),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}var n,r=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");return n=t(window.location.href),function(r){var i=e.isString(r)?t(r):r;return i.protocol===n.protocol&&i.host===n.host}}():function(){return function(){return!0}}()},function(t,n,r){"use strict";function e(){this.message="String contains an invalid character"}function i(t){for(var n,r,i=String(t),u="",a=0,f=o;i.charAt(0|a)||(f="=",a%1);u+=f.charAt(63&n>>8-a%1*8)){if((r=i.charCodeAt(a+=.75))>255)throw new e;n=n<<8|r}return u}var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";e.prototype=new Error,e.prototype.code=5,e.prototype.name="InvalidCharacterError",t.exports=i},function(t,n,r){"use strict";var e=r(3);t.exports=e.isStandardBrowserEnv()?function(){return{write:function(t,n,r,i,o,u){var a=[];a.push(t+"="+encodeURIComponent(n)),e.isNumber(r)&&a.push("expires="+new Date(r).toGMTString()),e.isString(i)&&a.push("path="+i),e.isString(o)&&a.push("domain="+o),!0===u&&a.push("secure"),document.cookie=a.join("; ")},read:function(t){var n=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return n?decodeURIComponent(n[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(t,n,r){"use strict";function e(){this.handlers=[]}var i=r(3);e.prototype.use=function(t,n){return this.handlers.push({fulfilled:t,rejected:n}),this.handlers.length-1},e.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},e.prototype.forEach=function(t){i.forEach(this.handlers,function(n){null!==n&&t(n)})},t.exports=e},function(t,n,r){"use strict";function e(t){t.cancelToken&&t.cancelToken.throwIfRequested()}var i=r(3),o=r(29),u=r(10),a=r(5);t.exports=function(t){return e(t),t.headers=t.headers||{},t.data=o(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(n){delete t.headers[n]}),(t.adapter||a.adapter)(t).then(function(n){return e(t),n.data=o(n.data,n.headers,t.transformResponse),n},function(n){return u(n)||(e(t),n&&n.response&&(n.response.data=o(n.response.data,n.response.headers,t.transformResponse))),Promise.reject(n)})}},function(t,n,r){"use strict";var e=r(3);t.exports=function(t,n,r){return e.forEach(r,function(r){t=r(t,n)}),t}},function(t,n,r){"use strict";t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,n,r){"use strict";t.exports=function(t,n){return n?t.replace(/\/+$/,"")+"/"+n.replace(/^\/+/,""):t}},function(t,n,r){"use strict";function e(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var n;this.promise=new Promise(function(t){n=t});var r=this;t(function(t){r.reason||(r.reason=new i(t),n(r.reason))})}var i=r(11);e.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},e.source=function(){var t;return{token:new e(function(n){t=n}),cancel:t}},t.exports=e},function(t,n,r){"use strict";t.exports=function(t){return function(n){return t.apply(null,n)}}},function(t,n,r){"use strict";var e=r(0),i=r(2),o=r(35),u=r(36),a=r(37),f=r(38),s=r(39),c=r(40),l=r(41),p=r(46),h=r(47),g=r(48),d=r(49),v=r(50),_=r(51),y=r(52),m=r(53),b=r(54),w=r(55),A=r(56),S=r(57),O=r(58),x=r(59),E=r(60),T=r(61),P=r(62),R=function(t,n){switch(e.get(t,"op","")){default:return E.toCode(t);case i.TASK_OP_CREATE:return o.toCode(t,n);case i.TASK_OP_CONVERT:return u.toCode(t,n);case i.TASK_OP_COPY:return a.toCode(t,n);case i.TASK_OP_DUMP:return f.toCode(t,n);case i.TASK_OP_ECHO:return s.toCode(t,n);case i.TASK_OP_EMAIL_SEND:return c.toCode(t,n);case i.TASK_OP_EXECUTE:return l.toCode(t,n);case i.TASK_OP_FILTER:return p.toCode(t,n);case i.TASK_OP_FOREACH:return h.toCode(t,n);case i.TASK_OP_INSERT:return g.toCode(t,n);case i.TASK_OP_LIMIT:return d.toCode(t,n);case i.TASK_OP_LIST:return y.toCode(t,n);case i.TASK_OP_MERGE:return v.toCode(t,n);case i.TASK_OP_MKDIR:return _.toCode(t,n);case i.TASK_OP_READ:return m.toCode(t,n);case i.TASK_OP_RENDER:return b.toCode(t,n);case i.TASK_OP_REQUEST:return w.toCode(t,n);case i.TASK_OP_SELECT:return A.toCode(t,n);case i.TASK_OP_SEQUENCE:return S.toCode(t,n);case i.TASK_OP_SET:return O.toCode(t,n);case i.TASK_OP_SLEEP:return x.toCode(t,n);case i.TASK_OP_TRANSFORM:return T.toCode(t,n);case i.TASK_OP_WRITE:return P.toCode(t,n)}};t.exports={create:o,convert:u,copy:a,dump:f,echo:s,email:c,execute:l.execute,insert:g,filter:p,foreach:h,javascript:l.javascript,limit:d,list:y,merge:v,mkdir:_,python:l.python,read:m,render:b,request:w,select:A,sequence:S,set:O,sleep:x,task:E,transform:T,write:P,toCode:R}},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(t,n){if(Array.isArray(t))return{op:i.TASK_OP_CREATE,params:{content_type:"application/vnd.flexio.table",columns:t}};var r={op:i.TASK_OP_CREATE,params:{path:t}};return void 0!==n&&(Array.isArray(n)?r.params.columns=n:r.params.content_type=n),r};o.toCode=function(t,n){var r=e.get(t,"params",{}),i=JSON.stringify(r.path)||void 0,o=JSON.stringify(r.content_type)||void 0,u=JSON.stringify(r.columns)||void 0;return void 0!==i?void 0!==u?"create("+i+", "+u+")":void 0!==o?"create("+i+", "+o+")":"create("+i+")":void 0!==u?"create("+u+")":void 0!==o?"":void 0},t.exports=o},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o={format:"delimited",delimiter:"{comma}",header:!0,qualifier:"{double-quote}"},u={format:"delimited",delimiter:"{tab}",header:!0,qualifier:"{none}"},a=function(t,n){var r={op:i.TASK_OP_CONVERT,params:{}};return e.isString(t)?"csv"==t?e.set(r,"params.input",o):"tsv"==t?e.set(r,"params.input",u):e.set(r,"params.input.format",t):e.isPlainObject(t)&&e.set(r,"params.input",t),e.isString(n)?"csv"==n?e.set(r,"params.output",o):"tsv"==n?e.set(r,"params.output",u):e.set(r,"params.output.format",n):e.isPlainObject(n)&&e.set(r,"params.output",n),r};a.toCode=function(t,n){var r,i,a=e.get(t,"params",{}),f=e.get(a,"input",{}),s=e.get(a,"output",{});return e.isEqual(f,o)&&(r="csv"),e.isEqual(s,o)&&(i="csv"),e.isEqual(f,u)&&(r="tsv"),e.isEqual(s,u)&&(i="tsv"),e.isEmpty(e.omit(f,["format"]))&&(r=e.get(f,"format","")),e.isEmpty(e.omit(s,["format"]))&&(i=e.get(s,"format","")),r||(r=f),i||(i=s),"convert("+JSON.stringify(r)+", "+JSON.stringify(i)+")"},t.exports=a},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(t,n,r){var o={op:i.TASK_OP_COPY,params:{from:t,to:n}};return e.isPlainObject(r)&&(o.params.options=r),o};o.toCode=function(t,n){var r=e.get(t,"params",{}),i=JSON.stringify(r.from)||'""',o=JSON.stringify(r.to)||'""',u=r.hasOwnProperty("options")&&e.isPlainObject(r.options)?JSON.stringify(r.options):null,a="copy("+i+", "+o;return null!==u&&(a+=", "+u),a+")"},t.exports=o},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(t){return{op:i.TASK_OP_DUMP,params:{msg:t}}};o.toCode=function(t,n){var r=e.get(t,"params",{});return"dump("+(JSON.stringify(r.msg)||'""')+")"},t.exports=o},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(t){return{op:i.TASK_OP_ECHO,params:{msg:t}}};o.toCode=function(t,n){var r=e.get(t,"params",{});return"echo("+(JSON.stringify(r.msg)||'""')+")"},t.exports=o},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(t){if(!e.isPlainObject(t))throw"The first function parameter must be an object";if(!e.has(t,"to"))throw"The `to` parameter is required";if(!e.has(t,"body_text"))throw"The `body_text` parameter is required";return{op:i.TASK_OP_EMAIL_SEND,params:t}};o.toCode=function(t,n){var r=e.get(t,"params",{});return"email("+JSON.stringify(r,null,2)+")"},t.exports=o},function(t,n,r){"use strict";(function(n,e){var i=r(0),o=(r(1),r(2)),u=function(){return void 0!==n},a=function(t){try{return u()?e(t,"utf8").toString("base64"):btoa(unescape(encodeURIComponent(t)))}catch(t){return t}},f=function(t){try{return u()?e.from(t,"base64").toString("utf8"):decodeURIComponent(escape(atob(t)))}catch(t){return t}},s=function(t){var n;try{n=t.toString(),n=n.substring(n.indexOf("{")+1,n.lastIndexOf("}"))}catch(t){n=""}return n},c=function(t){if(i.isString(t))return t;if(i.isFunction(t)){var n;if(0==t.length)return"exports.flexio_handler = function(context) "+(n=s(t));if(n=t.toString(),"function"==n.substring(0,8))n=n.slice(8);else{var r=n.indexOf("=>"),e=n.indexOf("{");r>=0&&r<e&&(n=n.replace("=>s*{","{"))}return"exports.flexio_handler = function"+n}},l=function(){var t,n,r,e=Array.from(arguments),u=i.get(e,"[0]",null),f=i.get(e,"[1]",null),s=i.get(e,"[2]",null),l={op:o.TASK_OP_EXECUTE,params:{}};"python"==u||"javascript"==u?(t=u,n=f,null!==n&&void 0!==n||(n=""),r=s):(t="javascript",n=u,r=f),"javascript"==t&&(n=c(n)),i.set(l,"params.lang",t);var p=/^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/;return n.match(p)?i.set(l,"params.path",n):i.set(l,"params.code",a(n)),null!==r&&i.set(l,"params.integrity",r),l},p=function(){var t=Array.from(arguments);return t.unshift("javascript"),l.apply(this,t)},h=function(){var t=Array.from(arguments);return t.unshift("python"),l.apply(this,t)},g=function(t){var n=i.get(t,"params",{}),r=n.lang||"",e=f(n.code||"");switch(r){case"javascript":return e=e.replace("exports.flexio_handler =",""),"javascript("+e.trim()+")";case"python":return"python(`\n"+e+"\n`)";default:return"execute("+JSON.stringify(r)+", `\n"+e+"\n`)"}};t.exports={execute:l,javascript:p,python:h,toCode:g}}).call(n,r(4),r(42).Buffer)},function(t,n,r){"use strict";(function(t){function e(){return o.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function i(t,n){if(e()<n)throw new RangeError("Invalid typed array length");return o.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(n),t.__proto__=o.prototype):(null===t&&(t=new o(n)),t.length=n),t}function o(t,n,r){if(!(o.TYPED_ARRAY_SUPPORT||this instanceof o))return new o(t,n,r);if("number"==typeof t){if("string"==typeof n)throw new Error("If encoding is specified then the first argument must be a string");return s(this,t)}return u(this,t,n,r)}function u(t,n,r,e){if("number"==typeof n)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&n instanceof ArrayBuffer?p(t,n,r,e):"string"==typeof n?c(t,n,r):h(t,n)}function a(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function f(t,n,r,e){return a(n),n<=0?i(t,n):void 0!==r?"string"==typeof e?i(t,n).fill(r,e):i(t,n).fill(r):i(t,n)}function s(t,n){if(a(n),t=i(t,n<0?0:0|g(n)),!o.TYPED_ARRAY_SUPPORT)for(var r=0;r<n;++r)t[r]=0;return t}function c(t,n,r){if("string"==typeof r&&""!==r||(r="utf8"),!o.isEncoding(r))throw new TypeError('"encoding" must be a valid string encoding');var e=0|v(n,r);t=i(t,e);var u=t.write(n,r);return u!==e&&(t=t.slice(0,u)),t}function l(t,n){var r=n.length<0?0:0|g(n.length);t=i(t,r);for(var e=0;e<r;e+=1)t[e]=255&n[e];return t}function p(t,n,r,e){if(n.byteLength,r<0||n.byteLength<r)throw new RangeError("'offset' is out of bounds");if(n.byteLength<r+(e||0))throw new RangeError("'length' is out of bounds");return n=void 0===r&&void 0===e?new Uint8Array(n):void 0===e?new Uint8Array(n,r):new Uint8Array(n,r,e),o.TYPED_ARRAY_SUPPORT?(t=n,t.__proto__=o.prototype):t=l(t,n),t}function h(t,n){if(o.isBuffer(n)){var r=0|g(n.length);return t=i(t,r),0===t.length?t:(n.copy(t,0,0,r),t)}if(n){if("undefined"!=typeof ArrayBuffer&&n.buffer instanceof ArrayBuffer||"length"in n)return"number"!=typeof n.length||V(n.length)?i(t,0):l(t,n);if("Buffer"===n.type&&X(n.data))return l(t,n.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function g(t){if(t>=e())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+e().toString(16)+" bytes");return 0|t}function d(t){return+t!=t&&(t=0),o.alloc(+t)}function v(t,n){if(o.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var e=!1;;)switch(n){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return J(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return $(t).length;default:if(e)return J(t).length;n=(""+n).toLowerCase(),e=!0}}function _(t,n,r){var e=!1;if((void 0===n||n<0)&&(n=0),n>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if(r>>>=0,n>>>=0,r<=n)return"";for(t||(t="utf8");;)switch(t){case"hex":return k(this,n,r);case"utf8":case"utf-8":return P(this,n,r);case"ascii":return C(this,n,r);case"latin1":case"binary":return j(this,n,r);case"base64":return T(this,n,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,n,r);default:if(e)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),e=!0}}function y(t,n,r){var e=t[n];t[n]=t[r],t[r]=e}function m(t,n,r,e,i){if(0===t.length)return-1;if("string"==typeof r?(e=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof n&&(n=o.from(n,e)),o.isBuffer(n))return 0===n.length?-1:b(t,n,r,e,i);if("number"==typeof n)return n&=255,o.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,n,r):Uint8Array.prototype.lastIndexOf.call(t,n,r):b(t,[n],r,e,i);throw new TypeError("val must be string, number or Buffer")}function b(t,n,r,e,i){function o(t,n){return 1===u?t[n]:t.readUInt16BE(n*u)}var u=1,a=t.length,f=n.length;if(void 0!==e&&("ucs2"===(e=String(e).toLowerCase())||"ucs-2"===e||"utf16le"===e||"utf-16le"===e)){if(t.length<2||n.length<2)return-1;u=2,a/=2,f/=2,r/=2}var s;if(i){var c=-1;for(s=r;s<a;s++)if(o(t,s)===o(n,-1===c?0:s-c)){if(-1===c&&(c=s),s-c+1===f)return c*u}else-1!==c&&(s-=s-c),c=-1}else for(r+f>a&&(r=a-f),s=r;s>=0;s--){for(var l=!0,p=0;p<f;p++)if(o(t,s+p)!==o(n,p)){l=!1;break}if(l)return s}return-1}function w(t,n,r,e){r=Number(r)||0;var i=t.length-r;e?(e=Number(e))>i&&(e=i):e=i;var o=n.length;if(o%2!=0)throw new TypeError("Invalid hex string");e>o/2&&(e=o/2);for(var u=0;u<e;++u){var a=parseInt(n.substr(2*u,2),16);if(isNaN(a))return u;t[r+u]=a}return u}function A(t,n,r,e){return H(J(n,t.length-r),t,r,e)}function S(t,n,r,e){return H(Y(n),t,r,e)}function O(t,n,r,e){return S(t,n,r,e)}function x(t,n,r,e){return H($(n),t,r,e)}function E(t,n,r,e){return H(W(n,t.length-r),t,r,e)}function T(t,n,r){return 0===n&&r===t.length?Z.fromByteArray(t):Z.fromByteArray(t.slice(n,r))}function P(t,n,r){r=Math.min(t.length,r);for(var e=[],i=n;i<r;){var o=t[i],u=null,a=o>239?4:o>223?3:o>191?2:1;if(i+a<=r){var f,s,c,l;switch(a){case 1:o<128&&(u=o);break;case 2:f=t[i+1],128==(192&f)&&(l=(31&o)<<6|63&f)>127&&(u=l);break;case 3:f=t[i+1],s=t[i+2],128==(192&f)&&128==(192&s)&&(l=(15&o)<<12|(63&f)<<6|63&s)>2047&&(l<55296||l>57343)&&(u=l);break;case 4:f=t[i+1],s=t[i+2],c=t[i+3],128==(192&f)&&128==(192&s)&&128==(192&c)&&(l=(15&o)<<18|(63&f)<<12|(63&s)<<6|63&c)>65535&&l<1114112&&(u=l)}}null===u?(u=65533,a=1):u>65535&&(u-=65536,e.push(u>>>10&1023|55296),u=56320|1023&u),e.push(u),i+=a}return R(e)}function R(t){var n=t.length;if(n<=Q)return String.fromCharCode.apply(String,t);for(var r="",e=0;e<n;)r+=String.fromCharCode.apply(String,t.slice(e,e+=Q));return r}function C(t,n,r){var e="";r=Math.min(t.length,r);for(var i=n;i<r;++i)e+=String.fromCharCode(127&t[i]);return e}function j(t,n,r){var e="";r=Math.min(t.length,r);for(var i=n;i<r;++i)e+=String.fromCharCode(t[i]);return e}function k(t,n,r){var e=t.length;(!n||n<0)&&(n=0),(!r||r<0||r>e)&&(r=e);for(var i="",o=n;o<r;++o)i+=q(t[o]);return i}function I(t,n,r){for(var e=t.slice(n,r),i="",o=0;o<e.length;o+=2)i+=String.fromCharCode(e[o]+256*e[o+1]);return i}function U(t,n,r){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+n>r)throw new RangeError("Trying to access beyond buffer length")}function N(t,n,r,e,i,u){if(!o.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(n>i||n<u)throw new RangeError('"value" argument is out of bounds');if(r+e>t.length)throw new RangeError("Index out of range")}function L(t,n,r,e){n<0&&(n=65535+n+1);for(var i=0,o=Math.min(t.length-r,2);i<o;++i)t[r+i]=(n&255<<8*(e?i:1-i))>>>8*(e?i:1-i)}function B(t,n,r,e){n<0&&(n=4294967295+n+1);for(var i=0,o=Math.min(t.length-r,4);i<o;++i)t[r+i]=n>>>8*(e?i:3-i)&255}function D(t,n,r,e,i,o){if(r+e>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function K(t,n,r,e,i){return i||D(t,n,r,4,3.4028234663852886e38,-3.4028234663852886e38),G.write(t,n,r,e,23,4),r+4}function M(t,n,r,e,i){return i||D(t,n,r,8,1.7976931348623157e308,-1.7976931348623157e308),G.write(t,n,r,e,52,8),r+8}function F(t){if(t=z(t).replace(tt,""),t.length<2)return"";for(;t.length%4!=0;)t+="=";return t}function z(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function q(t){return t<16?"0"+t.toString(16):t.toString(16)}function J(t,n){n=n||1/0;for(var r,e=t.length,i=null,o=[],u=0;u<e;++u){if((r=t.charCodeAt(u))>55295&&r<57344){if(!i){if(r>56319){(n-=3)>-1&&o.push(239,191,189);continue}if(u+1===e){(n-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(n-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(n-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((n-=1)<0)break;o.push(r)}else if(r<2048){if((n-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((n-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((n-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function Y(t){for(var n=[],r=0;r<t.length;++r)n.push(255&t.charCodeAt(r));return n}function W(t,n){for(var r,e,i,o=[],u=0;u<t.length&&!((n-=2)<0);++u)r=t.charCodeAt(u),e=r>>8,i=r%256,o.push(i),o.push(e);return o}function $(t){return Z.toByteArray(F(t))}function H(t,n,r,e){for(var i=0;i<e&&!(i+r>=n.length||i>=t.length);++i)n[i+r]=t[i];return i}function V(t){return t!==t}/*!
+ * The buffer module from node.js, for the browser.
+ *
+ * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
+ * @license  MIT
+ */
+var Z=r(43),G=r(44),X=r(45);n.Buffer=o,n.SlowBuffer=d,n.INSPECT_MAX_BYTES=50,o.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}(),n.kMaxLength=e(),o.poolSize=8192,o._augment=function(t){return t.__proto__=o.prototype,t},o.from=function(t,n,r){return u(null,t,n,r)},o.TYPED_ARRAY_SUPPORT&&(o.prototype.__proto__=Uint8Array.prototype,o.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&o[Symbol.species]===o&&Object.defineProperty(o,Symbol.species,{value:null,configurable:!0})),o.alloc=function(t,n,r){return f(null,t,n,r)},o.allocUnsafe=function(t){return s(null,t)},o.allocUnsafeSlow=function(t){return s(null,t)},o.isBuffer=function(t){return!(null==t||!t._isBuffer)},o.compare=function(t,n){if(!o.isBuffer(t)||!o.isBuffer(n))throw new TypeError("Arguments must be Buffers");if(t===n)return 0;for(var r=t.length,e=n.length,i=0,u=Math.min(r,e);i<u;++i)if(t[i]!==n[i]){r=t[i],e=n[i];break}return r<e?-1:e<r?1:0},o.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},o.concat=function(t,n){if(!X(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return o.alloc(0);var r;if(void 0===n)for(n=0,r=0;r<t.length;++r)n+=t[r].length;var e=o.allocUnsafe(n),i=0;for(r=0;r<t.length;++r){var u=t[r];if(!o.isBuffer(u))throw new TypeError('"list" argument must be an Array of Buffers');u.copy(e,i),i+=u.length}return e},o.byteLength=v,o.prototype._isBuffer=!0,o.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var n=0;n<t;n+=2)y(this,n,n+1);return this},o.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var n=0;n<t;n+=4)y(this,n,n+3),y(this,n+1,n+2);return this},o.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var n=0;n<t;n+=8)y(this,n,n+7),y(this,n+1,n+6),y(this,n+2,n+5),y(this,n+3,n+4);return this},o.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?P(this,0,t):_.apply(this,arguments)},o.prototype.equals=function(t){if(!o.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===o.compare(this,t)},o.prototype.inspect=function(){var t="",r=n.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),"<Buffer "+t+">"},o.prototype.compare=function(t,n,r,e,i){if(!o.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===n&&(n=0),void 0===r&&(r=t?t.length:0),void 0===e&&(e=0),void 0===i&&(i=this.length),n<0||r>t.length||e<0||i>this.length)throw new RangeError("out of range index");if(e>=i&&n>=r)return 0;if(e>=i)return-1;if(n>=r)return 1;if(n>>>=0,r>>>=0,e>>>=0,i>>>=0,this===t)return 0;for(var u=i-e,a=r-n,f=Math.min(u,a),s=this.slice(e,i),c=t.slice(n,r),l=0;l<f;++l)if(s[l]!==c[l]){u=s[l],a=c[l];break}return u<a?-1:a<u?1:0},o.prototype.includes=function(t,n,r){return-1!==this.indexOf(t,n,r)},o.prototype.indexOf=function(t,n,r){return m(this,t,n,r,!0)},o.prototype.lastIndexOf=function(t,n,r){return m(this,t,n,r,!1)},o.prototype.write=function(t,n,r,e){if(void 0===n)e="utf8",r=this.length,n=0;else if(void 0===r&&"string"==typeof n)e=n,r=this.length,n=0;else{if(!isFinite(n))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");n|=0,isFinite(r)?(r|=0,void 0===e&&(e="utf8")):(e=r,r=void 0)}var i=this.length-n;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||n<0)||n>this.length)throw new RangeError("Attempt to write outside buffer bounds");e||(e="utf8");for(var o=!1;;)switch(e){case"hex":return w(this,t,n,r);case"utf8":case"utf-8":return A(this,t,n,r);case"ascii":return S(this,t,n,r);case"latin1":case"binary":return O(this,t,n,r);case"base64":return x(this,t,n,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,t,n,r);default:if(o)throw new TypeError("Unknown encoding: "+e);e=(""+e).toLowerCase(),o=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Q=4096;o.prototype.slice=function(t,n){var r=this.length;t=~~t,n=void 0===n?r:~~n,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),n<0?(n+=r)<0&&(n=0):n>r&&(n=r),n<t&&(n=t);var e;if(o.TYPED_ARRAY_SUPPORT)e=this.subarray(t,n),e.__proto__=o.prototype;else{var i=n-t;e=new o(i,void 0);for(var u=0;u<i;++u)e[u]=this[u+t]}return e},o.prototype.readUIntLE=function(t,n,r){t|=0,n|=0,r||U(t,n,this.length);for(var e=this[t],i=1,o=0;++o<n&&(i*=256);)e+=this[t+o]*i;return e},o.prototype.readUIntBE=function(t,n,r){t|=0,n|=0,r||U(t,n,this.length);for(var e=this[t+--n],i=1;n>0&&(i*=256);)e+=this[t+--n]*i;return e},o.prototype.readUInt8=function(t,n){return n||U(t,1,this.length),this[t]},o.prototype.readUInt16LE=function(t,n){return n||U(t,2,this.length),this[t]|this[t+1]<<8},o.prototype.readUInt16BE=function(t,n){return n||U(t,2,this.length),this[t]<<8|this[t+1]},o.prototype.readUInt32LE=function(t,n){return n||U(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},o.prototype.readUInt32BE=function(t,n){return n||U(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},o.prototype.readIntLE=function(t,n,r){t|=0,n|=0,r||U(t,n,this.length);for(var e=this[t],i=1,o=0;++o<n&&(i*=256);)e+=this[t+o]*i;return i*=128,e>=i&&(e-=Math.pow(2,8*n)),e},o.prototype.readIntBE=function(t,n,r){t|=0,n|=0,r||U(t,n,this.length);for(var e=n,i=1,o=this[t+--e];e>0&&(i*=256);)o+=this[t+--e]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*n)),o},o.prototype.readInt8=function(t,n){return n||U(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},o.prototype.readInt16LE=function(t,n){n||U(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt16BE=function(t,n){n||U(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt32LE=function(t,n){return n||U(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},o.prototype.readInt32BE=function(t,n){return n||U(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},o.prototype.readFloatLE=function(t,n){return n||U(t,4,this.length),G.read(this,t,!0,23,4)},o.prototype.readFloatBE=function(t,n){return n||U(t,4,this.length),G.read(this,t,!1,23,4)},o.prototype.readDoubleLE=function(t,n){return n||U(t,8,this.length),G.read(this,t,!0,52,8)},o.prototype.readDoubleBE=function(t,n){return n||U(t,8,this.length),G.read(this,t,!1,52,8)},o.prototype.writeUIntLE=function(t,n,r,e){if(t=+t,n|=0,r|=0,!e){N(this,t,n,r,Math.pow(2,8*r)-1,0)}var i=1,o=0;for(this[n]=255&t;++o<r&&(i*=256);)this[n+o]=t/i&255;return n+r},o.prototype.writeUIntBE=function(t,n,r,e){if(t=+t,n|=0,r|=0,!e){N(this,t,n,r,Math.pow(2,8*r)-1,0)}var i=r-1,o=1;for(this[n+i]=255&t;--i>=0&&(o*=256);)this[n+i]=t/o&255;return n+r},o.prototype.writeUInt8=function(t,n,r){return t=+t,n|=0,r||N(this,t,n,1,255,0),o.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[n]=255&t,n+1},o.prototype.writeUInt16LE=function(t,n,r){return t=+t,n|=0,r||N(this,t,n,2,65535,0),o.TYPED_ARRAY_SUPPORT?(this[n]=255&t,this[n+1]=t>>>8):L(this,t,n,!0),n+2},o.prototype.writeUInt16BE=function(t,n,r){return t=+t,n|=0,r||N(this,t,n,2,65535,0),o.TYPED_ARRAY_SUPPORT?(this[n]=t>>>8,this[n+1]=255&t):L(this,t,n,!1),n+2},o.prototype.writeUInt32LE=function(t,n,r){return t=+t,n|=0,r||N(this,t,n,4,4294967295,0),o.TYPED_ARRAY_SUPPORT?(this[n+3]=t>>>24,this[n+2]=t>>>16,this[n+1]=t>>>8,this[n]=255&t):B(this,t,n,!0),n+4},o.prototype.writeUInt32BE=function(t,n,r){return t=+t,n|=0,r||N(this,t,n,4,4294967295,0),o.TYPED_ARRAY_SUPPORT?(this[n]=t>>>24,this[n+1]=t>>>16,this[n+2]=t>>>8,this[n+3]=255&t):B(this,t,n,!1),n+4},o.prototype.writeIntLE=function(t,n,r,e){if(t=+t,n|=0,!e){var i=Math.pow(2,8*r-1);N(this,t,n,r,i-1,-i)}var o=0,u=1,a=0;for(this[n]=255&t;++o<r&&(u*=256);)t<0&&0===a&&0!==this[n+o-1]&&(a=1),this[n+o]=(t/u>>0)-a&255;return n+r},o.prototype.writeIntBE=function(t,n,r,e){if(t=+t,n|=0,!e){var i=Math.pow(2,8*r-1);N(this,t,n,r,i-1,-i)}var o=r-1,u=1,a=0;for(this[n+o]=255&t;--o>=0&&(u*=256);)t<0&&0===a&&0!==this[n+o+1]&&(a=1),this[n+o]=(t/u>>0)-a&255;return n+r},o.prototype.writeInt8=function(t,n,r){return t=+t,n|=0,r||N(this,t,n,1,127,-128),o.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[n]=255&t,n+1},o.prototype.writeInt16LE=function(t,n,r){return t=+t,n|=0,r||N(this,t,n,2,32767,-32768),o.TYPED_ARRAY_SUPPORT?(this[n]=255&t,this[n+1]=t>>>8):L(this,t,n,!0),n+2},o.prototype.writeInt16BE=function(t,n,r){return t=+t,n|=0,r||N(this,t,n,2,32767,-32768),o.TYPED_ARRAY_SUPPORT?(this[n]=t>>>8,this[n+1]=255&t):L(this,t,n,!1),n+2},o.prototype.writeInt32LE=function(t,n,r){return t=+t,n|=0,r||N(this,t,n,4,2147483647,-2147483648),o.TYPED_ARRAY_SUPPORT?(this[n]=255&t,this[n+1]=t>>>8,this[n+2]=t>>>16,this[n+3]=t>>>24):B(this,t,n,!0),n+4},o.prototype.writeInt32BE=function(t,n,r){return t=+t,n|=0,r||N(this,t,n,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),o.TYPED_ARRAY_SUPPORT?(this[n]=t>>>24,this[n+1]=t>>>16,this[n+2]=t>>>8,this[n+3]=255&t):B(this,t,n,!1),n+4},o.prototype.writeFloatLE=function(t,n,r){return K(this,t,n,!0,r)},o.prototype.writeFloatBE=function(t,n,r){return K(this,t,n,!1,r)},o.prototype.writeDoubleLE=function(t,n,r){return M(this,t,n,!0,r)},o.prototype.writeDoubleBE=function(t,n,r){return M(this,t,n,!1,r)},o.prototype.copy=function(t,n,r,e){if(r||(r=0),e||0===e||(e=this.length),n>=t.length&&(n=t.length),n||(n=0),e>0&&e<r&&(e=r),e===r)return 0;if(0===t.length||0===this.length)return 0;if(n<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("sourceStart out of bounds");if(e<0)throw new RangeError("sourceEnd out of bounds");e>this.length&&(e=this.length),t.length-n<e-r&&(e=t.length-n+r);var i,u=e-r;if(this===t&&r<n&&n<e)for(i=u-1;i>=0;--i)t[i+n]=this[i+r];else if(u<1e3||!o.TYPED_ARRAY_SUPPORT)for(i=0;i<u;++i)t[i+n]=this[i+r];else Uint8Array.prototype.set.call(t,this.subarray(r,r+u),n);return u},o.prototype.fill=function(t,n,r,e){if("string"==typeof t){if("string"==typeof n?(e=n,n=0,r=this.length):"string"==typeof r&&(e=r,r=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==e&&"string"!=typeof e)throw new TypeError("encoding must be a string");if("string"==typeof e&&!o.isEncoding(e))throw new TypeError("Unknown encoding: "+e)}else"number"==typeof t&&(t&=255);if(n<0||this.length<n||this.length<r)throw new RangeError("Out of range index");if(r<=n)return this;n>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0);var u;if("number"==typeof t)for(u=n;u<r;++u)this[u]=t;else{var a=o.isBuffer(t)?t:J(new o(t,e).toString()),f=a.length;for(u=0;u<r-n;++u)this[u+n]=a[u%f]}return this};var tt=/[^+\/0-9A-Za-z-_]/g}).call(n,r(6))},function(t,n,r){"use strict";function e(t){var n=t.length;if(n%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===t[n-2]?2:"="===t[n-1]?1:0}function i(t){return 3*t.length/4-e(t)}function o(t){var n,r,i,o,u,a=t.length;o=e(t),u=new l(3*a/4-o),r=o>0?a-4:a;var f=0;for(n=0;n<r;n+=4)i=c[t.charCodeAt(n)]<<18|c[t.charCodeAt(n+1)]<<12|c[t.charCodeAt(n+2)]<<6|c[t.charCodeAt(n+3)],u[f++]=i>>16&255,u[f++]=i>>8&255,u[f++]=255&i;return 2===o?(i=c[t.charCodeAt(n)]<<2|c[t.charCodeAt(n+1)]>>4,u[f++]=255&i):1===o&&(i=c[t.charCodeAt(n)]<<10|c[t.charCodeAt(n+1)]<<4|c[t.charCodeAt(n+2)]>>2,u[f++]=i>>8&255,u[f++]=255&i),u}function u(t){return s[t>>18&63]+s[t>>12&63]+s[t>>6&63]+s[63&t]}function a(t,n,r){for(var e,i=[],o=n;o<r;o+=3)e=(t[o]<<16)+(t[o+1]<<8)+t[o+2],i.push(u(e));return i.join("")}function f(t){for(var n,r=t.length,e=r%3,i="",o=[],u=0,f=r-e;u<f;u+=16383)o.push(a(t,u,u+16383>f?f:u+16383));return 1===e?(n=t[r-1],i+=s[n>>2],i+=s[n<<4&63],i+="=="):2===e&&(n=(t[r-2]<<8)+t[r-1],i+=s[n>>10],i+=s[n>>4&63],i+=s[n<<2&63],i+="="),o.push(i),o.join("")}n.byteLength=i,n.toByteArray=o,n.fromByteArray=f;for(var s=[],c=[],l="undefined"!=typeof Uint8Array?Uint8Array:Array,p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=0,g=p.length;h<g;++h)s[h]=p[h],c[p.charCodeAt(h)]=h;c["-".charCodeAt(0)]=62,c["_".charCodeAt(0)]=63},function(t,n){n.read=function(t,n,r,e,i){var o,u,a=8*i-e-1,f=(1<<a)-1,s=f>>1,c=-7,l=r?i-1:0,p=r?-1:1,h=t[n+l];for(l+=p,o=h&(1<<-c)-1,h>>=-c,c+=a;c>0;o=256*o+t[n+l],l+=p,c-=8);for(u=o&(1<<-c)-1,o>>=-c,c+=e;c>0;u=256*u+t[n+l],l+=p,c-=8);if(0===o)o=1-s;else{if(o===f)return u?NaN:1/0*(h?-1:1);u+=Math.pow(2,e),o-=s}return(h?-1:1)*u*Math.pow(2,o-e)},n.write=function(t,n,r,e,i,o){var u,a,f,s=8*o-i-1,c=(1<<s)-1,l=c>>1,p=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,h=e?0:o-1,g=e?1:-1,d=n<0||0===n&&1/n<0?1:0;for(n=Math.abs(n),isNaN(n)||n===1/0?(a=isNaN(n)?1:0,u=c):(u=Math.floor(Math.log(n)/Math.LN2),n*(f=Math.pow(2,-u))<1&&(u--,f*=2),n+=u+l>=1?p/f:p*Math.pow(2,1-l),n*f>=2&&(u++,f/=2),u+l>=c?(a=0,u=c):u+l>=1?(a=(n*f-1)*Math.pow(2,i),u+=l):(a=n*Math.pow(2,l-1)*Math.pow(2,i),u=0));i>=8;t[r+h]=255&a,h+=g,a/=256,i-=8);for(u=u<<i|a,s+=i;s>0;t[r+h]=255&u,h+=g,u/=256,s-=8);t[r+h-g]|=128*d}},function(t,n){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(t){if(e.isNil(t))throw"The `filter` parameter is required";return{op:i.TASK_OP_FILTER,params:{where:t}}};o.toCode=function(t,n){var r=e.get(t,"params",{});return"filter("+(JSON.stringify(r.where)||'""')+")"},t.exports=o},function(t,n,r){"use strict";var e=r(0),i=r(1),o=r(2),u=function(t,n){var r={op:o.TASK_OP_FOREACH,params:{}};return("string"==typeof t||t instanceof String)&&(r.params.spec=t),i.isPipeObject(t)?r.params.run=t.pipe.task:i.isPipeObject(n)&&(r.params.run=n.pipe.task),r};u.toCode=function(t,n){var r=e.get(t,"params",{}),i=[];return r.hasOwnProperty("spec")&&i.push(JSON.stringify(r.spec)),r.hasOwnProperty("run")&&i.push(n.task.toCode(r.run,n)),"foreach("+i.join(", ")+")"},t.exports=u},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(t,n){var r;return r=Array.isArray(n)?n:[n],{op:i.TASK_OP_INSERT,params:{path:t,values:r}}};o.toCode=function(t,n){var r=e.get(t,"params",{}),i=e.get(r,"path",void 0),o=e.get(r,"values",void 0);return Array.isArray(o)||(o=[o]),i=JSON.stringify(i),o=JSON.stringify(o),"insert("+i+", "+o+")"},t.exports=o},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(t){return t=e.defaultTo(t,10),{op:i.TASK_OP_LIMIT,params:{value:t}}};o.toCode=function(t,n){var r=e.get(t,"params",{});return"limit("+(JSON.stringify(r.value)||"")+")"},t.exports=o},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(t){if(Array.isArray(t))var n=t;else for(var n=[],r=0;r<arguments.length;++r)n.push(arguments[r]);return{op:i.TASK_OP_MERGE,params:{files:n}}};o.toCode=function(t,n){for(var r=e.get(t,"params",{}),i=e.get(r,"files",[]),o=0;o<i.length;++o)"string"==typeof i[o]||i[o]instanceof String?i[o]=JSON.stringify(i[o]):i[o]=n.merge.toCode(i[o],n);return"merge("+(i.length>=10?"["+i.join(", ")+"]":i.join(", "))+")"},t.exports=o},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(t){return{op:i.TASK_OP_MKDIR,params:{path:t}}};o.toCode=function(t,n){var r=e.get(t,"params",{});return"mkdir("+(JSON.stringify(r.path)||'""')+")"},t.exports=o},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(t){return{op:i.TASK_OP_LIST,params:{path:t}}};o.toCode=function(t,n){var r=e.get(t,"params",{});return"list("+(JSON.stringify(r.path)||'""')+")"},t.exports=o},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(t){return{op:i.TASK_OP_READ,params:{path:t}}};o.toCode=function(t,n){var r=e.get(t,"params",{});return"read("+(JSON.stringify(r.path)||'""')+")"},t.exports=o},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o={format:"png",width:800,height:600,scrollbars:!1},u=function(t,n){var r=Array.from(arguments),t=e.get(r,"[0]",""),u=e.get(r,"[1]",{});if(e.isNil(t))throw"The `url` parameter is required";if(e.isPlainObject(e.get(r,"[0]",{})))var u=e.get(r,"[0]",{});else var u=e.assign({},o,n,{url:t});return{op:i.TASK_OP_RENDER,params:u}};u.toCode=function(t,n){var r=e.get(t,"params",{}),i=JSON.stringify(r.url)||"",u=e.omit(r,["url"]);return e.isEqual(u,o)?"render("+i+")":"render("+i+", "+JSON.stringify(u,null,2)+")"},t.exports=u},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(){var t=Array.from(arguments),n=e.get(t,"[0]",""),r=e.get(t,"[1]",{});return r=e.isPlainObject(e.get(t,"[0]",{}))?e.get(t,"[0]",{}):e.assign({},{url:n},r),r=e.assign({method:"GET"},r),{op:i.TASK_OP_REQUEST,params:r}};o.toCode=function(t,n){var r=e.get(t,"params",{}),i=e.get(r,"url",""),o=e.omit(r,["url"]);return"GET"==e.get(o,"method","")&&(o=e.omit(o,["method"])),e.isEmpty(o)?"request("+JSON.stringify(i)+")":"request("+JSON.stringify(i)+", "+JSON.stringify(o,null,2)+")"},t.exports=o},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(){var t=Array.from(arguments);return 1==t.length&&e.isArray(e.get(t,"[0]"))&&(t=e.get(t,"[0]",[])),{op:i.TASK_OP_SELECT,params:{columns:t}}};o.toCode=function(t,n){var r=e.get(t,"params",{}),i=JSON.stringify(r.columns)||"";return-1!=i.indexOf("[")&&-1!=i.indexOf("]")&&(i=i.substring(1,i.length-1)),"select("+i+")"},t.exports=o},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(t){return{op:i.TASK_OP_SEQUENCE,params:{steps:t}}};o.toCode=function(t,n){var r=e.map(t.params.items,function(t){var r=n.task.toCode(t,n);return"python"!=e.get(t,"params.lang","")&&(r=r.replace(/\n/g,"\n  ")),r}),r=["Flexio.pipe()"].concat(r);return r.join("\n  .")},t.exports=o},function(t,n,r){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=r(0),o=r(1),u=r(2),a=function(t,n){return o.isPipeObject(n)&&(n=n.pipe.task),{op:u.TASK_OP_SET,params:{var:t,value:n}}};a.toCode=function(t,n){var r=i.get(t,"params",{}),o=i.get(r,"variable",""),u=i.get(r,"value","");return o=JSON.stringify(o),u="object"===(void 0===u?"undefined":e(u))&&null!==u&&u.hasOwnProperty("op")?n.task.toCode(u,n):JSON.stringify(u),"set("+o+", "+u+")"},t.exports=a},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(t){return t=e.defaultTo(t,10),{op:i.TASK_OP_SLEEP,params:{value:t}}};o.toCode=function(t,n){var r=e.get(t,"params",{});return"sleep("+(JSON.stringify(r.value)||"")+")"},t.exports=o},function(t,n,r){"use strict";var e=(r(0),r(1),function(t){return t});e.toCode=function(t,n){return"task("+JSON.stringify(t,null,2)+")"},t.exports=e},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(t){var n=Array.from(arguments),r={operations:[]},o={},u=[],a=e.get(n,"[0]");return e.isPlainObject(a)?(1==n.length&&e.has(a,"operations")?(o=e.pick(a,["columns","operations"]),o=e.assign(r,o)):(u=[].concat(n),o={operations:u}),{op:i.TASK_OP_TRANSFORM,params:o}):{op:i.TASK_OP_TRANSFORM,params:{columns:void 0,operations:u}}};o.toCode=function(t,n){var r=t.hasOwnProperty("params")?t.params:{};return!r.hasOwnProperty("columns")&&r.hasOwnProperty("operations")&&Array.isArray(r.operations)&&1==r.operations.length?"transform("+JSON.stringify(r.operations[0])+")":"transform("+JSON.stringify(r)+")"},t.exports=o},function(t,n,r){"use strict";var e=r(0),i=(r(1),r(2)),o=function(t){return{op:i.TASK_OP_WRITE,params:{path:t}}};o.toCode=function(t,n){var r=e.get(t,"params",{});return"write("+(JSON.stringify(r.path)||'""')+")"},t.exports=o},function(t,n){t.exports={name:"flexio-sdk-js",version:"1.20.2",description:"Javascript SDK for managing Flex.io resources and services",author:"David Z. Williams <dave@flex.io>","--main":"dist/flexio-node.js",main:"src/main.js","--browser":"src/main.js",browser:"dist/flexio.min.js",scripts:{dev:"cross-env build=development webpack-dev-server --config ./build/webpack.dev.js --open --inline --https --hot","build:debug":"cross-env build=debug webpack --config build/webpack.dist.js","build:release":"cross-env build=production webpack --config build/webpack.dist.js","build:examples":"webpack --config build/webpack.examples.js",build:"npm run build:debug && npm run build:release && npm run build:examples",test:'echo "Error: no test specified" && exit 1'},repository:{type:"git",url:"git+https://github.com/flexiodata/flexio-sdk-js.git"},keywords:[],license:"Apache-2.0",bugs:{url:"https://github.com/flexiodata/flexio-sdk-js/issues"},homepage:"https://github.com/flexiodata/flexio-sdk-js/",dependencies:{axios:"^0.16.2",lodash:"^4.17.4","vue-highlightjs":"^1.3.3"},devDependencies:{autoprefixer:"^7.1.4","babel-core":"^6.26.0","babel-loader":"^7.1.2","babel-plugin-lodash":"^3.2.11","babel-plugin-transform-es2015-destructuring":"^6.23.0","babel-plugin-transform-es2015-parameters":"^6.24.1","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-es2015":"^6.24.1","babel-preset-stage-2":"^6.24.1","cross-env":"^5.0.5","css-loader":"^0.28.7","deep-assign":"^2.0.0",vue:"^2.4.4","vue-loader":"^13.0.4","vue-simple-spinner":"^1.2.7","vue-style-loader":"^3.0.3","vue-template-compiler":"^2.4.4",webpack:"^3.5.5","webpack-dev-server":"^2.8.2"}}},function(t,n,r){"use strict";var e=r(0);r(1);t.exports={},t.exports.getConnectionsObject=function(t){return new function(){this.create=function(n,r){var i;if(e.isPlainObject(n))i=n;else{if(!(n instanceof t.connection))throw"Unknown connection object type";i=n.connection}return new Promise(function(n,e){t.http().post("/connections",i).then(function(i){t.util.callbackAdapter(null,i.data,n,e,r)}).catch(function(i){t.util.debug("Flexio.connections.create(): Failed."),t.util.callbackAdapter(i,null,n,e,r)})})},this.list=function(n){var r=Array.from(arguments),n=e.get(r,"[0]");return new Promise(function(r,i){t.util.debug("Requesting Connections..."),t.http().get("/connections").then(function(o){var u=e.get(o,"data",[]);t.util.debug("Success!"),t.util.callbackAdapter(null,u,r,i,n)}).catch(function(e){t.util.debug("Failed."),t.util.callbackAdapter(e,null,r,i,n)})})}}}},function(t,n,r){"use strict";var e=r(0);t.exports={},t.exports.getPipesObject=function(t){return new function(){this.create=function(n,r){var i;if(e.isPlainObject(n))i=n;else{if(!(n instanceof t.pipe))throw"Unknown pipe object type";i=n.pipe}return new Promise(function(n,e){t.http().post("/pipes",i).then(function(i){t.util.callbackAdapter(null,i.data,n,e,r)}).catch(function(i){t.util.debug("Flexio.pipes.create(): Failed."),t.util.callbackAdapter(i,null,n,e,r)})})},this.list=function(n){var r=Array.from(arguments),n=e.get(r,"[0]");return new Promise(function(r,i){t.util.debug("Requesting Pipes..."),t.http().get("/pipes").then(function(o){var u=e.get(o,"data",[]);t.util.debug("Success!"),t.util.callbackAdapter(null,u,r,i,n)}).catch(function(e){t.util.debug("Failed."),t.util.callbackAdapter(e,null,r,i,n)})})},this.run=function(){var n=Array.from(arguments);n.push(null,null,null);var r,i,o={},u=null;n[0]instanceof t.pipe?(i=e.get(n[0],"pipe.eid",""),u=e.get(n[0],"pipe.task","")):Array.isArray(n[0])?(i="",u=n[0]):i=n[0],e.isPlainObject(n[1])&&(o=n[1]),r=e.isFunction(n[1])?n[1]:e.isFunction(n[2])?n[2]:null;var a=function(n,r){return{contentType:r,buffer:n,get blob(){return new Blob([this.buffer],{type:r})},get text(){return t.util.arrayBufferToString(this.buffer)},get data(){try{return JSON.parse(t.util.arrayBufferToString(this.buffer))}catch(t){return null}}}};return new Promise(function(n,f){if(t.util.debug("Running Pipe `"+(0==i.length?"[Pipe Object/Task Array]":i)+"`..."),0==i.length){var s={name:"SDK Pipe",description:"SDK Pipe",task:u,process_mode:"R"};t.http().post("/processes",s).then(function(i){var u=e.get(i,"data",{}),s=e.get(u,"eid","");t.util.debug("Created Process.");var c={method:"post",url:"/processes/"+s+"/run",responseType:"arraybuffer"};o.hasOwnProperty("data")&&(c.data=o.data),o.hasOwnProperty("query")&&(c.params=o.query),t.http()(c).then(function(i){t.util.debug("Process Complete.");var o=e.get(i,"headers.content-type","text/plain"),u=a(i.data,o);t.util.callbackAdapter(null,u,n,f,r)}).catch(function(e){t.util.debug("Process Run Failed. "+e),t.util.callbackAdapter(e,null,n,f,r)})}).catch(function(e){t.util.debug("Process Create Failed. "+e),t.util.callbackAdapter(e,null,n,f,r)})}else{var c={method:"post",url:"/pipes/"+i+"/run",responseType:"arraybuffer"};o.hasOwnProperty("data")&&(c.data=o.data),o.hasOwnProperty("query")&&(c.params=o.query),o.hasOwnProperty("contentType")?c.headers={"Content-Type":o.contentType}:c.hasOwnProperty("data")&&(e.isPlainObject(c.data)||(e.isString(c.data)?c.headers={"Content-Type":"text/plain"}:c.headers={"Content-Type":"application/octet-stream"}));t.http()(c).then(function(i){t.util.debug("Process Complete.");var o=e.get(i,"headers.content-type","text/plain"),u=a(i.data,o);t.util.callbackAdapter(null,u,n,f,r)}).catch(function(e){t.util.debug("Pipe Run Call Failed. "+e),t.util.callbackAdapter(e,null,n,f,r)})}})}}}},function(t,n,r){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=r(0);t.exports={},t.exports.getPipeConstructor=function(t){return function(n){if(!(this instanceof t.pipe))return new t.pipe(n);var r=i.assign(this,{pipe:{name:"Untitled",description:"",task:{op:"sequence",params:{items:[]}}},processes:[],_params:{},loading:!1,saving:!1,running:!1,getJSON:function(){return i.assign({},this.pipe)},getProcesses:function(){return[].concat(this.processes)},getLastProcess:function(){return i.last(this.processes)},addTask:function(t){return this.pipe.task.params.items.push(t),this},clearTasks:function(){return this.pipe.task.params.items=[],this},getTasks:function(){return this.pipe.task.params.items},load:function(){var n=this,r=arguments,e=Array.from(arguments),o=i.get(e,"[0]"),u=i.get(e,"[1]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){n.load.apply(n,r)},50),this):i.isNil(o)?t.util.debug("The `identifier` parameter is required. Either the pipe's eid or pipe's alias may be used."):(this.loading=!0,t.util.debug("Loading Pipe `"+o+"`..."),t.http().get("/pipes/"+o).then(function(r){var e=i.get(r,"data",{});n.pipe=i.assign({},e),n.loading=!1,t.util.debug("Pipe Loaded."),"function"==typeof u&&u.call(n,null,e)}).catch(function(r){n.loading=!1,t.util.debug("Pipe Load Failed. "),"function"==typeof u&&u.call(n,r,null)}),this)},save:function(){var n=this,r=arguments,e=Array.from(arguments),o=i.get(e,"[0]"),u=i.get(e,"[0]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){n.save.apply(n,r)},50),this):(i.isPlainObject(o)&&(i.assign(this.pipe,i.pick(o,["name","description","ename"])),u=i.get(e,"[1]")),this.saving=!0,t.util.debug("Saving Pipe `"+i.get(this.pipe,"name","Untitled Pipe")+"`..."),t.http().post("/pipes",this.pipe).then(function(r){var e=i.get(r,"data",{});n.pipe=i.assign({},e),n.saving=!1,t.util.debug("Pipe Saved."),"function"==typeof u&&u.call(n,null,n.pipe)}).catch(function(r){n.saving=!1,t.util.debug("Pipe Save Failed."),"function"==typeof u&&u.call(n,r,null)}),this)},run:function(){var n=Array.from(arguments);return n.unshift(this),t.pipes.run.apply(null,n)},params:function(t){return this._params=i.assign({},this.getParams(),t),this},clearParams:function(t){return i.isArray(t)?this._params=i.omit(this._params,t):i.isNil(t)&&(this._params={}),this},getParams:function(){return i.assign({},this._params)},toCode:function(n){return t.task.toCode(this.pipe.task,t)}});return i.each(t.task,function(t,n){"toCode"!=n&&(r[n]=function(){return r.addTask(t.apply(r,arguments))})}),void 0!==n&&("string"==typeof n||n instanceof String?r.pipe.eid=n:"object"===(void 0===n?"undefined":e(n))&&(n.hasOwnProperty("pipe")?r.pipe=JSON.parse(JSON.stringify(n.pipe)):n.hasOwnProperty("task")?r.pipe=JSON.parse(JSON.stringify(n)):n.hasOwnProperty("op")&&(r.pipe.task=n))),r}}},function(t,n,r){"use strict";var e=r(0),i=["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"],o=["","basic","bearer","oauth2"];t.exports={},t.exports.getConnectionConstructor=function(t){return function(){return this instanceof t.connection?e.assign(this,{connection:{name:"Untitled",description:"",connection_type:"http",connection_info:{method:"",url:"",auth:"",username:"",password:"",token:"",access_token:"",refresh_token:"",expires:"",data:{},headers:{}}},loading:!1,saving:!1,running:!1,getJSON:function(){return e.assign({},this.connection)},name:function(t){return this.connection.name=t,this},description:function(t){return this.connection.description=t,this},method:function(){var t=Array.from(arguments),n=e.get(t,"[0]");return e.isString(n)&&e.includes(i,n)?this._setInfo("method",n):this},url:function(){var t=Array.from(arguments),n=e.get(t,"[0]");return e.isString(n)?this._setInfo("url",n):this},auth:function(){var t=Array.from(arguments),n=e.get(t,"[0]");return e.isString(n)&&e.includes(o,n)?("none"==n&&(n=""),this._setInfo("auth",n)):this},username:function(){var t=Array.from(arguments),n=e.get(t,"[0]");return e.isString(n)?this._setInfo("username",n):this},password:function(){var t=Array.from(arguments),n=e.get(t,"[0]");return e.isString(n)?this._setInfo("password",n):this},token:function(){var t=Array.from(arguments),n=e.get(t,"[0]");return e.isString(n)?this._setInfo("token",n):this},accessToken:function(){var t=Array.from(arguments),n=e.get(t,"[0]");return e.isString(n)?this._setInfo("access_token",n):this},refreshToken:function(){var t=Array.from(arguments),n=e.get(t,"[0]");return e.isString(n)?this._setInfo("refresh_token",n):this},expires:function(){var t=Array.from(arguments),n=e.get(t,"[0]");return e.isNumber(n)&&(n=""+n),e.isString(n)?this._setInfo("expires",n):this},data:function(){var t=Array.from(arguments),n=e.get(t,"[0]");if(!e.isPlainObject(n))return this;var r=this._getInfo("data",{});return n=e.assign({},r,n),this._setInfo("data",n)},clearData:function(){var t=Array.from(arguments);if(0==t.length)return this._setInfo("data",{});1==t.length&&e.isArray(e.get(t,"[0]"))&&(t=e.get(t,"[0]",[]));var n=this._getInfo("data",{}),r=e.omit(n,t);return this._setInfo("data",r)},headers:function(){var t=Array.from(arguments),n=e.get(t,"[0]");if(!e.isPlainObject(n))return this;var r=this._getInfo("headers",{});return n=e.assign({},r,n),this._setInfo("headers",n)},clearHeaders:function(){var t=Array.from(arguments);if(0==t.length)return this._setInfo("headers",{});1==t.length&&e.isArray(e.get(t,"[0]"))&&(t=e.get(t,"[0]",[]));var n=this._getInfo("headers",{}),r=e.omit(n,t);return this._setInfo("headers",r)},load:function(){var n=this,r=arguments,i=Array.from(arguments),o=e.get(i,"[0]"),u=e.get(i,"[1]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){n.load.apply(n,r)},50),this):e.isNil(o)?t.util.debug("The `identifier` parameter is required. Either the connection's eid or connection's alias may be used."):(this.loading=!0,t.util.debug("Loading Connection `"+o+"`..."),t.http().get("/connections/"+o).then(function(r){var i=e.get(r,"data",{});n.connection=e.assign({},i),n.loading=!1,t.util.debug("Connection Loaded."),"function"==typeof u&&u.call(n,null,i)}).catch(function(r){n.loading=!1,t.util.debug("Connection Load Failed."),"function"==typeof u&&u.call(n,r,null)}),this)},save:function(){var n=this,r=arguments,i=Array.from(arguments),o=e.get(i,"[0]"),u=e.get(i,"[0]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){n.save.apply(n,r)},50),this):(e.isPlainObject(o)&&(e.assign(this.connection,e.pick(o,["name","description","ename"])),u=e.get(i,"[1]")),this.saving=!0,t.util.debug("Saving Connection `"+e.get(this.connection,"name","Untitled Connection")+"`..."),t.http().post("/connections",this.connection).then(function(r){var i=e.get(r,"data",{});n.connection=e.assign({},i),n.saving=!1,t.util.debug("Connection Saved."),"function"==typeof u&&u.call(n,null,n.connection)}).catch(function(r){n.saving=!1,t.util.debug("Connection Save Failed."),"function"==typeof u&&u.call(n,r,null)}),this)},_getInfo:function(t,n){return e.get(this.connection,"connection_info."+t,n)},_setInfo:function(t,n){return e.set(this.connection,"connection_info."+t,n),this}}):new t.connection}}}]).default});
\ No newline at end of file
diff --git a/examples/examples.bundle.js b/examples/examples.bundle.js
index a10ae7d..5ff71af 100644
--- a/examples/examples.bundle.js
+++ b/examples/examples.bundle.js
@@ -4,12 +4,12 @@
  * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
  * @license  MIT
  */
-var G=n(42),Z=n(43),X=n(14);e.Buffer=o,e.SlowBuffer=v,e.INSPECT_MAX_BYTES=50,o.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}(),e.kMaxLength=r(),o.poolSize=8192,o._augment=function(t){return t.__proto__=o.prototype,t},o.from=function(t,e,n){return a(null,t,e,n)},o.TYPED_ARRAY_SUPPORT&&(o.prototype.__proto__=Uint8Array.prototype,o.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&o[Symbol.species]===o&&Object.defineProperty(o,Symbol.species,{value:null,configurable:!0})),o.alloc=function(t,e,n){return u(null,t,e,n)},o.allocUnsafe=function(t){return c(null,t)},o.allocUnsafeSlow=function(t){return c(null,t)},o.isBuffer=function(t){return!(null==t||!t._isBuffer)},o.compare=function(t,e){if(!o.isBuffer(t)||!o.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,r=e.length,i=0,a=Math.min(n,r);i<a;++i)if(t[i]!==e[i]){n=t[i],r=e[i];break}return n<r?-1:r<n?1:0},o.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},o.concat=function(t,e){if(!X(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return o.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var r=o.allocUnsafe(e),i=0;for(n=0;n<t.length;++n){var a=t[n];if(!o.isBuffer(a))throw new TypeError('"list" argument must be an Array of Buffers');a.copy(r,i),i+=a.length}return r},o.byteLength=g,o.prototype._isBuffer=!0,o.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)y(this,e,e+1);return this},o.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)y(this,e,e+3),y(this,e+1,e+2);return this},o.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)y(this,e,e+7),y(this,e+1,e+6),y(this,e+2,e+5),y(this,e+3,e+4);return this},o.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?k(this,0,t):m.apply(this,arguments)},o.prototype.equals=function(t){if(!o.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===o.compare(this,t)},o.prototype.inspect=function(){var t="",n=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),"<Buffer "+t+">"},o.prototype.compare=function(t,e,n,r,i){if(!o.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),e<0||n>t.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&e>=n)return 0;if(r>=i)return-1;if(e>=n)return 1;if(e>>>=0,n>>>=0,r>>>=0,i>>>=0,this===t)return 0;for(var a=i-r,s=n-e,u=Math.min(a,s),c=this.slice(r,i),f=t.slice(e,n),l=0;l<u;++l)if(c[l]!==f[l]){a=c[l],s=f[l];break}return a<s?-1:s<a?1:0},o.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},o.prototype.indexOf=function(t,e,n){return _(this,t,e,n,!0)},o.prototype.lastIndexOf=function(t,e,n){return _(this,t,e,n,!1)},o.prototype.write=function(t,e,n,r){if(void 0===e)r="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)r=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(n)?(n|=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var i=this.length-e;if((void 0===n||n>i)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return w(this,t,e,n);case"utf8":case"utf-8":return x(this,t,e,n);case"ascii":return E(this,t,e,n);case"latin1":case"binary":return O(this,t,e,n);case"base64":return C(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Q=4096;o.prototype.slice=function(t,e){var n=this.length;t=~~t,e=void 0===e?n:~~e,t<0?(t+=n)<0&&(t=0):t>n&&(t=n),e<0?(e+=n)<0&&(e=0):e>n&&(e=n),e<t&&(e=t);var r;if(o.TYPED_ARRAY_SUPPORT)r=this.subarray(t,e),r.__proto__=o.prototype;else{var i=e-t;r=new o(i,void 0);for(var a=0;a<i;++a)r[a]=this[a+t]}return r},o.prototype.readUIntLE=function(t,e,n){t|=0,e|=0,n||$(t,e,this.length);for(var r=this[t],i=1,o=0;++o<e&&(i*=256);)r+=this[t+o]*i;return r},o.prototype.readUIntBE=function(t,e,n){t|=0,e|=0,n||$(t,e,this.length);for(var r=this[t+--e],i=1;e>0&&(i*=256);)r+=this[t+--e]*i;return r},o.prototype.readUInt8=function(t,e){return e||$(t,1,this.length),this[t]},o.prototype.readUInt16LE=function(t,e){return e||$(t,2,this.length),this[t]|this[t+1]<<8},o.prototype.readUInt16BE=function(t,e){return e||$(t,2,this.length),this[t]<<8|this[t+1]},o.prototype.readUInt32LE=function(t,e){return e||$(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},o.prototype.readUInt32BE=function(t,e){return e||$(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},o.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||$(t,e,this.length);for(var r=this[t],i=1,o=0;++o<e&&(i*=256);)r+=this[t+o]*i;return i*=128,r>=i&&(r-=Math.pow(2,8*e)),r},o.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||$(t,e,this.length);for(var r=e,i=1,o=this[t+--r];r>0&&(i*=256);)o+=this[t+--r]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},o.prototype.readInt8=function(t,e){return e||$(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},o.prototype.readInt16LE=function(t,e){e||$(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},o.prototype.readInt16BE=function(t,e){e||$(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},o.prototype.readInt32LE=function(t,e){return e||$(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},o.prototype.readInt32BE=function(t,e){return e||$(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},o.prototype.readFloatLE=function(t,e){return e||$(t,4,this.length),Z.read(this,t,!0,23,4)},o.prototype.readFloatBE=function(t,e){return e||$(t,4,this.length),Z.read(this,t,!1,23,4)},o.prototype.readDoubleLE=function(t,e){return e||$(t,8,this.length),Z.read(this,t,!0,52,8)},o.prototype.readDoubleBE=function(t,e){return e||$(t,8,this.length),Z.read(this,t,!1,52,8)},o.prototype.writeUIntLE=function(t,e,n,r){if(t=+t,e|=0,n|=0,!r){D(this,t,e,n,Math.pow(2,8*n)-1,0)}var i=1,o=0;for(this[e]=255&t;++o<n&&(i*=256);)this[e+o]=t/i&255;return e+n},o.prototype.writeUIntBE=function(t,e,n,r){if(t=+t,e|=0,n|=0,!r){D(this,t,e,n,Math.pow(2,8*n)-1,0)}var i=n-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+n},o.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,1,255,0),o.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},o.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,2,65535,0),o.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):L(this,t,e,!0),e+2},o.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,2,65535,0),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):L(this,t,e,!1),e+2},o.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,4,4294967295,0),o.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):I(this,t,e,!0),e+4},o.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,4,4294967295,0),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):I(this,t,e,!1),e+4},o.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);D(this,t,e,n,i-1,-i)}var o=0,a=1,s=0;for(this[e]=255&t;++o<n&&(a*=256);)t<0&&0===s&&0!==this[e+o-1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+n},o.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);D(this,t,e,n,i-1,-i)}var o=n-1,a=1,s=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+n},o.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,1,127,-128),o.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},o.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,2,32767,-32768),o.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):L(this,t,e,!0),e+2},o.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,2,32767,-32768),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):L(this,t,e,!1),e+2},o.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,4,2147483647,-2147483648),o.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):I(this,t,e,!0),e+4},o.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):I(this,t,e,!1),e+4},o.prototype.writeFloatLE=function(t,e,n){return U(this,t,e,!0,n)},o.prototype.writeFloatBE=function(t,e,n){return U(this,t,e,!1,n)},o.prototype.writeDoubleLE=function(t,e,n){return B(this,t,e,!0,n)},o.prototype.writeDoubleBE=function(t,e,n){return B(this,t,e,!1,n)},o.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e<r-n&&(r=t.length-e+n);var i,a=r-n;if(this===t&&n<e&&e<r)for(i=a-1;i>=0;--i)t[i+e]=this[i+n];else if(a<1e3||!o.TYPED_ARRAY_SUPPORT)for(i=0;i<a;++i)t[i+e]=this[i+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+a),e);return a},o.prototype.fill=function(t,e,n,r){if("string"==typeof t){if("string"==typeof e?(r=e,e=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!o.isEncoding(r))throw new TypeError("Unknown encoding: "+r)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<n)throw new RangeError("Out of range index");if(n<=e)return this;e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0);var a;if("number"==typeof t)for(a=e;a<n;++a)this[a]=t;else{var s=o.isBuffer(t)?t:z(new o(t,r).toString()),u=s.length;for(a=0;a<n-e;++a)this[a+e]=s[a%u]}return this};var tt=/[^+\/0-9A-Za-z-_]/g}).call(e,n(1))},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}},function(t,e,n){"use strict";(function(e,n){var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i={};t.exports=i,i.isPipeObject=function(t){return"object"===(void 0===t?"undefined":r(t))&&t.hasOwnProperty("pipe")&&"object"===r(t.pipe)},i.isPipeJson=function(t){return"object"===(void 0===t?"undefined":r(t))&&t.hasOwnProperty("op")&&t.hasOwnProperty("params")},i.isNodeJs=function(){return"[object process]"===Object.prototype.toString.call(void 0!==e?e:0)},i.arrayBufferToString=function(t){if(this.isNodeJs())return t instanceof n?t.toString("utf-8"):n.from(t).toString("utf-8");if("TextDecoder"in window)return new TextDecoder("utf-8").decode(t);var e,r=new Uint8Array(t),i="",o=r.length;for(e=0;e<o;++e)i+=String.fromCharCode(r[e]);return decodeURIComponent(escape(i))},i.callbackAdapter=function(t,e,n,r,i){"function"==typeof i?i(t,e):t?r(t):n(e)},t.exports.getUtilObject=function(t){return new function(){for(var e in i)i.hasOwnProperty(e)&&(this[e]=i[e]);this.debug=function(e){if(t.getConfig().debug){var e="flexio-sdk-js: "+e;console.log(e)}return this}}}}).call(e,n(2),n(3).Buffer)},function(t,e,n){"use strict";function r(t){if(!(this instanceof r))return new r(t);c.call(this,t),f.call(this,t),t&&!1===t.readable&&(this.readable=!1),t&&!1===t.writable&&(this.writable=!1),this.allowHalfOpen=!0,t&&!1===t.allowHalfOpen&&(this.allowHalfOpen=!1),this.once("end",i)}function i(){this.allowHalfOpen||this._writableState.ended||a(o,this)}function o(t){t.end()}var a=n(8),s=Object.keys||function(t){var e=[];for(var n in t)e.push(n);return e};t.exports=r;var u=n(7);u.inherits=n(4);var c=n(17),f=n(21);u.inherits(r,c);for(var l=s(f.prototype),p=0;p<l.length;p++){var h=l[p];r.prototype[h]||(r.prototype[h]=f.prototype[h])}Object.defineProperty(r.prototype,"destroyed",{get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed&&this._writableState.destroyed)},set:function(t){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=t,this._writableState.destroyed=t)}}),r.prototype._destroy=function(t,e){this.push(null),this.end(),a(e,t)}},function(t,e,n){(function(t){function n(t){return Array.isArray?Array.isArray(t):"[object Array]"===g(t)}function r(t){return"boolean"==typeof t}function i(t){return null===t}function o(t){return null==t}function a(t){return"number"==typeof t}function s(t){return"string"==typeof t}function u(t){return"symbol"==typeof t}function c(t){return void 0===t}function f(t){return"[object RegExp]"===g(t)}function l(t){return"object"==typeof t&&null!==t}function p(t){return"[object Date]"===g(t)}function h(t){return"[object Error]"===g(t)||t instanceof Error}function d(t){return"function"==typeof t}function v(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||void 0===t}function g(t){return Object.prototype.toString.call(t)}e.isArray=n,e.isBoolean=r,e.isNull=i,e.isNullOrUndefined=o,e.isNumber=a,e.isString=s,e.isSymbol=u,e.isUndefined=c,e.isRegExp=f,e.isObject=l,e.isDate=p,e.isError=h,e.isFunction=d,e.isPrimitive=v,e.isBuffer=t.isBuffer}).call(e,n(3).Buffer)},function(t,e,n){"use strict";(function(e){function n(t,n,r,i){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var o,a,s=arguments.length;switch(s){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick(function(){t.call(null,n)});case 3:return e.nextTick(function(){t.call(null,n,r)});case 4:return e.nextTick(function(){t.call(null,n,r,i)});default:for(o=new Array(s-1),a=0;a<o.length;)o[a++]=arguments[a];return e.nextTick(function(){t.apply(null,o)})}}!e.version||0===e.version.indexOf("v0.")||0===e.version.indexOf("v1.")&&0!==e.version.indexOf("v1.8.")?t.exports=n:t.exports=e.nextTick}).call(e,n(2))},function(t,e,n){function r(t,e){for(var n in t)e[n]=t[n]}function i(t,e,n){return a(t,e,n)}var o=n(3),a=o.Buffer;a.from&&a.alloc&&a.allocUnsafe&&a.allocUnsafeSlow?t.exports=o:(r(o,e),e.Buffer=i),r(a,i),i.from=function(t,e,n){if("number"==typeof t)throw new TypeError("Argument must not be a number");return a(t,e,n)},i.alloc=function(t,e,n){if("number"!=typeof t)throw new TypeError("Argument must be a number");var r=a(t);return void 0!==e?"string"==typeof n?r.fill(e,n):r.fill(e):r.fill(0),r},i.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return a(t)},i.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return o.SlowBuffer(t)}},function(t,e){t.exports=function(t,e,n,r,i){var o,a=t=t||{},s=typeof t.default;"object"!==s&&"function"!==s||(o=t,a=t.default);var u="function"==typeof a?a.options:a;e&&(u.render=e.render,u.staticRenderFns=e.staticRenderFns),r&&(u._scopeId=r);var c;if(i?(c=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),n&&n.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(i)},u._ssrRegister=c):n&&(c=n),c){var f=u.functional,l=f?u.render:u.beforeCreate;f?u.render=function(t,e){return c.call(e),l(t,e)}:u.beforeCreate=l?[].concat(l,c):[c]}return{esModule:o,exports:a,options:u}}},function(t,e,n){(function(t,r){var i;(function(){function o(t,e){return t.set(e[0],e[1]),t}function a(t,e){return t.add(e),t}function s(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function u(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var a=t[i];e(r,a,n(a),t)}return r}function c(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function f(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function l(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function p(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var a=t[n];e(a,n,t)&&(o[i++]=a)}return o}function h(t,e){return!!(null==t?0:t.length)&&O(t,e,0)>-1}function d(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function v(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function g(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function m(t,e,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function y(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function _(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}function b(t){return t.split("")}function w(t){return t.match(Be)||[]}function x(t,e,n){var r;return n(t,function(t,n,i){if(e(t,n,i))return r=n,!1}),r}function E(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function O(t,e,n){return e===e?Z(t,e,n):E(t,S,n)}function C(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function S(t){return t!==t}function A(t,e){var n=null==t?0:t.length;return n?R(t,e)/n:Dt}function k(t){return function(e){return null==e?it:e[t]}}function N(t){return function(e){return null==t?it:t[e]}}function T(t,e,n,r,i){return i(t,function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)}),n}function j(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}function R(t,e){for(var n,r=-1,i=t.length;++r<i;){var o=e(t[r]);o!==it&&(n=n===it?o:n+o)}return n}function P(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function $(t,e){return v(e,function(e){return[e,t[e]]})}function D(t){return function(e){return t(e)}}function L(t,e){return v(e,function(e){return t[e]})}function I(t,e){return t.has(e)}function M(t,e){for(var n=-1,r=t.length;++n<r&&O(e,t[n],0)>-1;);return n}function U(t,e){for(var n=t.length;n--&&O(e,t[n],0)>-1;);return n}function B(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}function V(t){return"\\"+kn[t]}function F(t,e){return null==t?it:t[e]}function q(t){return _n.test(t)}function z(t){return bn.test(t)}function H(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}function J(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function W(t,e){return function(n){return t(e(n))}}function Y(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n];a!==e&&a!==ft||(t[n]=ft,o[i++]=n)}return o}function K(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function G(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=[t,t]}),n}function Z(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}function X(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}function Q(t){return q(t)?et(t):Hn(t)}function tt(t){return q(t)?nt(t):b(t)}function et(t){for(var e=mn.lastIndex=0;mn.test(t);)++e;return e}function nt(t){return t.match(mn)||[]}function rt(t){return t.match(yn)||[]}var it,ot=200,at="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",st="Expected a function",ut="__lodash_hash_undefined__",ct=500,ft="__lodash_placeholder__",lt=1,pt=2,ht=4,dt=1,vt=2,gt=1,mt=2,yt=4,_t=8,bt=16,wt=32,xt=64,Et=128,Ot=256,Ct=512,St=30,At="...",kt=800,Nt=16,Tt=1,jt=2,Rt=1/0,Pt=9007199254740991,$t=1.7976931348623157e308,Dt=NaN,Lt=4294967295,It=Lt-1,Mt=Lt>>>1,Ut=[["ary",Et],["bind",gt],["bindKey",mt],["curry",_t],["curryRight",bt],["flip",Ct],["partial",wt],["partialRight",xt],["rearg",Ot]],Bt="[object Arguments]",Vt="[object Array]",Ft="[object AsyncFunction]",qt="[object Boolean]",zt="[object Date]",Ht="[object DOMException]",Jt="[object Error]",Wt="[object Function]",Yt="[object GeneratorFunction]",Kt="[object Map]",Gt="[object Number]",Zt="[object Null]",Xt="[object Object]",Qt="[object Proxy]",te="[object RegExp]",ee="[object Set]",ne="[object String]",re="[object Symbol]",ie="[object Undefined]",oe="[object WeakMap]",ae="[object WeakSet]",se="[object ArrayBuffer]",ue="[object DataView]",ce="[object Float32Array]",fe="[object Float64Array]",le="[object Int8Array]",pe="[object Int16Array]",he="[object Int32Array]",de="[object Uint8Array]",ve="[object Uint8ClampedArray]",ge="[object Uint16Array]",me="[object Uint32Array]",ye=/\b__p \+= '';/g,_e=/\b(__p \+=) '' \+/g,be=/(__e\(.*?\)|\b__t\)) \+\n'';/g,we=/&(?:amp|lt|gt|quot|#39);/g,xe=/[&<>"']/g,Ee=RegExp(we.source),Oe=RegExp(xe.source),Ce=/<%-([\s\S]+?)%>/g,Se=/<%([\s\S]+?)%>/g,Ae=/<%=([\s\S]+?)%>/g,ke=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ne=/^\w*$/,Te=/^\./,je=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Re=/[\\^$.*+?()[\]{}|]/g,Pe=RegExp(Re.source),$e=/^\s+|\s+$/g,De=/^\s+/,Le=/\s+$/,Ie=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Me=/\{\n\/\* \[wrapped with (.+)\] \*/,Ue=/,? & /,Be=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Ve=/\\(\\)?/g,Fe=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,qe=/\w*$/,ze=/^[-+]0x[0-9a-f]+$/i,He=/^0b[01]+$/i,Je=/^\[object .+?Constructor\]$/,We=/^0o[0-7]+$/i,Ye=/^(?:0|[1-9]\d*)$/,Ke=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ge=/($^)/,Ze=/['\n\r\u2028\u2029\\]/g,Xe="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Qe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\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",tn="["+Qe+"]",en="["+Xe+"]",nn="[a-z\\xdf-\\xf6\\xf8-\\xff]",rn="[^\\ud800-\\udfff"+Qe+"\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",on="\\ud83c[\\udffb-\\udfff]",an="(?:\\ud83c[\\udde6-\\uddff]){2}",sn="[\\ud800-\\udbff][\\udc00-\\udfff]",un="[A-Z\\xc0-\\xd6\\xd8-\\xde]",cn="(?:"+nn+"|"+rn+")",fn="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",ln="(?:\\u200d(?:"+["[^\\ud800-\\udfff]",an,sn].join("|")+")[\\ufe0e\\ufe0f]?"+fn+")*",pn="[\\ufe0e\\ufe0f]?"+fn+ln,hn="(?:"+["[\\u2700-\\u27bf]",an,sn].join("|")+")"+pn,dn="(?:"+["[^\\ud800-\\udfff]"+en+"?",en,an,sn,"[\\ud800-\\udfff]"].join("|")+")",vn=RegExp("['’]","g"),gn=RegExp(en,"g"),mn=RegExp(on+"(?="+on+")|"+dn+pn,"g"),yn=RegExp([un+"?"+nn+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[tn,un,"$"].join("|")+")","(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\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\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[tn,un+cn,"$"].join("|")+")",un+"?"+cn+"+(?:['’](?:d|ll|m|re|s|t|ve))?",un+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)","\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)","\\d+",hn].join("|"),"g"),_n=RegExp("[\\u200d\\ud800-\\udfff"+Xe+"\\ufe0e\\ufe0f]"),bn=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,wn=["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"],xn=-1,En={};En[ce]=En[fe]=En[le]=En[pe]=En[he]=En[de]=En[ve]=En[ge]=En[me]=!0,En[Bt]=En[Vt]=En[se]=En[qt]=En[ue]=En[zt]=En[Jt]=En[Wt]=En[Kt]=En[Gt]=En[Xt]=En[te]=En[ee]=En[ne]=En[oe]=!1;var On={};On[Bt]=On[Vt]=On[se]=On[ue]=On[qt]=On[zt]=On[ce]=On[fe]=On[le]=On[pe]=On[he]=On[Kt]=On[Gt]=On[Xt]=On[te]=On[ee]=On[ne]=On[re]=On[de]=On[ve]=On[ge]=On[me]=!0,On[Jt]=On[Wt]=On[oe]=!1;var Cn={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"},Sn={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},An={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"},kn={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Nn=parseFloat,Tn=parseInt,jn="object"==typeof t&&t&&t.Object===Object&&t,Rn="object"==typeof self&&self&&self.Object===Object&&self,Pn=jn||Rn||Function("return this")(),$n="object"==typeof e&&e&&!e.nodeType&&e,Dn=$n&&"object"==typeof r&&r&&!r.nodeType&&r,Ln=Dn&&Dn.exports===$n,In=Ln&&jn.process,Mn=function(){try{return In&&In.binding&&In.binding("util")}catch(t){}}(),Un=Mn&&Mn.isArrayBuffer,Bn=Mn&&Mn.isDate,Vn=Mn&&Mn.isMap,Fn=Mn&&Mn.isRegExp,qn=Mn&&Mn.isSet,zn=Mn&&Mn.isTypedArray,Hn=k("length"),Jn=N(Cn),Wn=N(Sn),Yn=N(An),Kn=function t(e){function n(t){if(ou(t)&&!mp(t)&&!(t instanceof b)){if(t instanceof i)return t;if(mf.call(t,"__wrapped__"))return na(t)}return new i(t)}function r(){}function i(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=it}function b(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Lt,this.__views__=[]}function N(){var t=new b(this.__wrapped__);return t.__actions__=Ii(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ii(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ii(this.__views__),t}function Z(){if(this.__filtered__){var t=new b(this);t.__dir__=-1,t.__filtered__=!0}else t=this.clone(),t.__dir__*=-1;return t}function et(){var t=this.__wrapped__.value(),e=this.__dir__,n=mp(t),r=e<0,i=n?t.length:0,o=Ao(0,i,this.__views__),a=o.start,s=o.end,u=s-a,c=r?s:a-1,f=this.__iteratees__,l=f.length,p=0,h=Wf(u,this.__takeCount__);if(!n||!r&&i==u&&h==u)return yi(t,this.__actions__);var d=[];t:for(;u--&&p<h;){c+=e;for(var v=-1,g=t[c];++v<l;){var m=f[v],y=m.iteratee,_=m.type,b=y(g);if(_==jt)g=b;else if(!b){if(_==Tt)continue t;break t}}d[p++]=g}return d}function nt(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Be(){this.__data__=rl?rl(null):{},this.size=0}function Xe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}function Qe(t){var e=this.__data__;if(rl){var n=e[t];return n===ut?it:n}return mf.call(e,t)?e[t]:it}function tn(t){var e=this.__data__;return rl?e[t]!==it:mf.call(e,t)}function en(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=rl&&e===it?ut:e,this}function nn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function rn(){this.__data__=[],this.size=0}function on(t){var e=this.__data__,n=Gn(e,t);return!(n<0)&&(n==e.length-1?e.pop():jf.call(e,n,1),--this.size,!0)}function an(t){var e=this.__data__,n=Gn(e,t);return n<0?it:e[n][1]}function sn(t){return Gn(this.__data__,t)>-1}function un(t,e){var n=this.__data__,r=Gn(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}function cn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function fn(){this.size=0,this.__data__={hash:new nt,map:new(Qf||nn),string:new nt}}function ln(t){var e=Eo(this,t).delete(t);return this.size-=e?1:0,e}function pn(t){return Eo(this,t).get(t)}function hn(t){return Eo(this,t).has(t)}function dn(t,e){var n=Eo(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this}function mn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new cn;++e<n;)this.add(t[e])}function yn(t){return this.__data__.set(t,ut),this}function _n(t){return this.__data__.has(t)}function bn(t){var e=this.__data__=new nn(t);this.size=e.size}function Cn(){this.__data__=new nn,this.size=0}function Sn(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}function An(t){return this.__data__.get(t)}function kn(t){return this.__data__.has(t)}function jn(t,e){var n=this.__data__;if(n instanceof nn){var r=n.__data__;if(!Qf||r.length<ot-1)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new cn(r)}return n.set(t,e),this.size=n.size,this}function Rn(t,e){var n=mp(t),r=!n&&gp(t),i=!n&&!r&&_p(t),o=!n&&!r&&!i&&Op(t),a=n||r||i||o,s=a?P(t.length,ff):[],u=s.length;for(var c in t)!e&&!mf.call(t,c)||a&&("length"==c||i&&("offset"==c||"parent"==c)||o&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||Do(c,u))||s.push(c);return s}function $n(t){var e=t.length;return e?t[Qr(0,e-1)]:it}function Dn(t,e){return Xo(Ii(t),nr(e,0,t.length))}function In(t){return Xo(Ii(t))}function Mn(t,e,n){(n===it||Hs(t[e],n))&&(n!==it||e in t)||tr(t,e,n)}function Hn(t,e,n){var r=t[e];mf.call(t,e)&&Hs(r,n)&&(n!==it||e in t)||tr(t,e,n)}function Gn(t,e){for(var n=t.length;n--;)if(Hs(t[n][0],e))return n;return-1}function Zn(t,e,n,r){return vl(t,function(t,i,o){e(r,t,n(t),o)}),r}function Xn(t,e){return t&&Mi(e,Bu(e),t)}function Qn(t,e){return t&&Mi(e,Vu(e),t)}function tr(t,e,n){"__proto__"==e&&Df?Df(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function er(t,e){for(var n=-1,r=e.length,i=nf(r),o=null==t;++n<r;)i[n]=o?it:Iu(t,e[n]);return i}function nr(t,e,n){return t===t&&(n!==it&&(t=t<=n?t:n),e!==it&&(t=t>=e?t:e)),t}function rr(t,e,n,r,i,o){var a,s=e&lt,u=e&pt,f=e&ht;if(n&&(a=i?n(t,r,i,o):n(t)),a!==it)return a;if(!iu(t))return t;var l=mp(t);if(l){if(a=To(t),!s)return Ii(t,a)}else{var p=Al(t),h=p==Wt||p==Yt;if(_p(t))return Ci(t,s);if(p==Xt||p==Bt||h&&!i){if(a=u||h?{}:jo(t),!s)return u?Bi(t,Qn(a,t)):Ui(t,Xn(a,t))}else{if(!On[p])return i?t:{};a=Ro(t,p,rr,s)}}o||(o=new bn);var d=o.get(t);if(d)return d;o.set(t,a);var v=f?u?_o:yo:u?Vu:Bu,g=l?it:v(t);return c(g||t,function(r,i){g&&(i=r,r=t[i]),Hn(a,i,rr(r,e,n,i,t,o))}),a}function ir(t){var e=Bu(t);return function(n){return or(n,t,e)}}function or(t,e,n){var r=n.length;if(null==t)return!r;for(t=uf(t);r--;){var i=n[r],o=e[i],a=t[i];if(a===it&&!(i in t)||!o(a))return!1}return!0}function ar(t,e,n){if("function"!=typeof t)throw new lf(st);return Tl(function(){t.apply(it,n)},e)}function sr(t,e,n,r){var i=-1,o=h,a=!0,s=t.length,u=[],c=e.length;if(!s)return u;n&&(e=v(e,D(n))),r?(o=d,a=!1):e.length>=ot&&(o=I,a=!1,e=new mn(e));t:for(;++i<s;){var f=t[i],l=null==n?f:n(f);if(f=r||0!==f?f:0,a&&l===l){for(var p=c;p--;)if(e[p]===l)continue t;u.push(f)}else o(e,l,r)||u.push(f)}return u}function ur(t,e){var n=!0;return vl(t,function(t,r,i){return n=!!e(t,r,i)}),n}function cr(t,e,n){for(var r=-1,i=t.length;++r<i;){var o=t[r],a=e(o);if(null!=a&&(s===it?a===a&&!gu(a):n(a,s)))var s=a,u=o}return u}function fr(t,e,n,r){var i=t.length;for(n=xu(n),n<0&&(n=-n>i?0:i+n),r=r===it||r>i?i:xu(r),r<0&&(r+=i),r=n>r?0:Eu(r);n<r;)t[n++]=e;return t}function lr(t,e){var n=[];return vl(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function pr(t,e,n,r,i){var o=-1,a=t.length;for(n||(n=$o),i||(i=[]);++o<a;){var s=t[o];e>0&&n(s)?e>1?pr(s,e-1,n,r,i):g(i,s):r||(i[i.length]=s)}return i}function hr(t,e){return t&&ml(t,e,Bu)}function dr(t,e){return t&&yl(t,e,Bu)}function vr(t,e){return p(e,function(e){return eu(t[e])})}function gr(t,e){e=Ei(e,t);for(var n=0,r=e.length;null!=t&&n<r;)t=t[Qo(e[n++])];return n&&n==r?t:it}function mr(t,e,n){var r=e(t);return mp(t)?r:g(r,n(t))}function yr(t){return null==t?t===it?ie:Zt:$f&&$f in uf(t)?So(t):Jo(t)}function _r(t,e){return t>e}function br(t,e){return null!=t&&mf.call(t,e)}function wr(t,e){return null!=t&&e in uf(t)}function xr(t,e,n){return t>=Wf(e,n)&&t<Jf(e,n)}function Er(t,e,n){for(var r=n?d:h,i=t[0].length,o=t.length,a=o,s=nf(o),u=1/0,c=[];a--;){var f=t[a];a&&e&&(f=v(f,D(e))),u=Wf(f.length,u),s[a]=!n&&(e||i>=120&&f.length>=120)?new mn(a&&f):it}f=t[0];var l=-1,p=s[0];t:for(;++l<i&&c.length<u;){var g=f[l],m=e?e(g):g;if(g=n||0!==g?g:0,!(p?I(p,m):r(c,m,n))){for(a=o;--a;){var y=s[a];if(!(y?I(y,m):r(t[a],m,n)))continue t}p&&p.push(m),c.push(g)}}return c}function Or(t,e,n,r){return hr(t,function(t,i,o){e(r,n(t),i,o)}),r}function Cr(t,e,n){e=Ei(e,t),t=Yo(t,e);var r=null==t?t:t[Qo(wa(e))];return null==r?it:s(r,t,n)}function Sr(t){return ou(t)&&yr(t)==Bt}function Ar(t){return ou(t)&&yr(t)==se}function kr(t){return ou(t)&&yr(t)==zt}function Nr(t,e,n,r,i){return t===e||(null==t||null==e||!ou(t)&&!ou(e)?t!==t&&e!==e:Tr(t,e,n,r,Nr,i))}function Tr(t,e,n,r,i,o){var a=mp(t),s=mp(e),u=a?Vt:Al(t),c=s?Vt:Al(e);u=u==Bt?Xt:u,c=c==Bt?Xt:c;var f=u==Xt,l=c==Xt,p=u==c;if(p&&_p(t)){if(!_p(e))return!1;a=!0,f=!1}if(p&&!f)return o||(o=new bn),a||Op(t)?ho(t,e,n,r,i,o):vo(t,e,u,n,r,i,o);if(!(n&dt)){var h=f&&mf.call(t,"__wrapped__"),d=l&&mf.call(e,"__wrapped__");if(h||d){var v=h?t.value():t,g=d?e.value():e;return o||(o=new bn),i(v,g,n,r,o)}}return!!p&&(o||(o=new bn),go(t,e,n,r,i,o))}function jr(t){return ou(t)&&Al(t)==Kt}function Rr(t,e,n,r){var i=n.length,o=i,a=!r;if(null==t)return!o;for(t=uf(t);i--;){var s=n[i];if(a&&s[2]?s[1]!==t[s[0]]:!(s[0]in t))return!1}for(;++i<o;){s=n[i];var u=s[0],c=t[u],f=s[1];if(a&&s[2]){if(c===it&&!(u in t))return!1}else{var l=new bn;if(r)var p=r(c,f,u,t,e,l);if(!(p===it?Nr(f,c,dt|vt,r,l):p))return!1}}return!0}function Pr(t){return!(!iu(t)||Bo(t))&&(eu(t)?Ef:Je).test(ta(t))}function $r(t){return ou(t)&&yr(t)==te}function Dr(t){return ou(t)&&Al(t)==ee}function Lr(t){return ou(t)&&ru(t.length)&&!!En[yr(t)]}function Ir(t){return"function"==typeof t?t:null==t?Tc:"object"==typeof t?mp(t)?qr(t[0],t[1]):Fr(t):Mc(t)}function Mr(t){if(!Vo(t))return Hf(t);var e=[];for(var n in uf(t))mf.call(t,n)&&"constructor"!=n&&e.push(n);return e}function Ur(t){if(!iu(t))return Ho(t);var e=Vo(t),n=[];for(var r in t)("constructor"!=r||!e&&mf.call(t,r))&&n.push(r);return n}function Br(t,e){return t<e}function Vr(t,e){var n=-1,r=Js(t)?nf(t.length):[];return vl(t,function(t,i,o){r[++n]=e(t,i,o)}),r}function Fr(t){var e=Oo(t);return 1==e.length&&e[0][2]?qo(e[0][0],e[0][1]):function(n){return n===t||Rr(n,t,e)}}function qr(t,e){return Io(t)&&Fo(e)?qo(Qo(t),e):function(n){var r=Iu(n,t);return r===it&&r===e?Uu(n,t):Nr(e,r,dt|vt)}}function zr(t,e,n,r,i){t!==e&&ml(e,function(o,a){if(iu(o))i||(i=new bn),Hr(t,e,a,n,zr,r,i);else{var s=r?r(t[a],o,a+"",t,e,i):it;s===it&&(s=o),Mn(t,a,s)}},Vu)}function Hr(t,e,n,r,i,o,a){var s=t[n],u=e[n],c=a.get(u);if(c)return void Mn(t,n,c);var f=o?o(s,u,n+"",t,e,a):it,l=f===it;if(l){var p=mp(u),h=!p&&_p(u),d=!p&&!h&&Op(u);f=u,p||h||d?mp(s)?f=s:Ws(s)?f=Ii(s):h?(l=!1,f=Ci(u,!0)):d?(l=!1,f=Ri(u,!0)):f=[]:hu(u)||gp(u)?(f=s,gp(s)?f=Cu(s):(!iu(s)||r&&eu(s))&&(f=jo(u))):l=!1}l&&(a.set(u,f),i(f,u,r,o,a),a.delete(u)),Mn(t,n,f)}function Jr(t,e){var n=t.length;if(n)return e+=e<0?n:0,Do(e,n)?t[e]:it}function Wr(t,e,n){var r=-1;return e=v(e.length?e:[Tc],D(xo())),j(Vr(t,function(t,n,i){return{criteria:v(e,function(e){return e(t)}),index:++r,value:t}}),function(t,e){return $i(t,e,n)})}function Yr(t,e){return Kr(t,e,function(e,n){return Uu(t,n)})}function Kr(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var a=e[r],s=gr(t,a);n(s,a)&&oi(o,Ei(a,t),s)}return o}function Gr(t){return function(e){return gr(e,t)}}function Zr(t,e,n,r){var i=r?C:O,o=-1,a=e.length,s=t;for(t===e&&(e=Ii(e)),n&&(s=v(t,D(n)));++o<a;)for(var u=0,c=e[o],f=n?n(c):c;(u=i(s,f,u,r))>-1;)s!==t&&jf.call(s,u,1),jf.call(t,u,1);return t}function Xr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;Do(i)?jf.call(t,i,1):vi(t,i)}}return t}function Qr(t,e){return t+Bf(Gf()*(e-t+1))}function ti(t,e,n,r){for(var i=-1,o=Jf(Uf((e-t)/(n||1)),0),a=nf(o);o--;)a[r?o:++i]=t,t+=n;return a}function ei(t,e){var n="";if(!t||e<1||e>Pt)return n;do{e%2&&(n+=t),(e=Bf(e/2))&&(t+=t)}while(e);return n}function ni(t,e){return jl(Wo(t,e,Tc),t+"")}function ri(t){return $n(Qu(t))}function ii(t,e){var n=Qu(t);return Xo(n,nr(e,0,n.length))}function oi(t,e,n,r){if(!iu(t))return t;e=Ei(e,t);for(var i=-1,o=e.length,a=o-1,s=t;null!=s&&++i<o;){var u=Qo(e[i]),c=n;if(i!=a){var f=s[u];c=r?r(f,u,s):it,c===it&&(c=iu(f)?f:Do(e[i+1])?[]:{})}Hn(s,u,c),s=s[u]}return t}function ai(t){return Xo(Qu(t))}function si(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),n=n>i?i:n,n<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=nf(i);++r<i;)o[r]=t[r+e];return o}function ui(t,e){var n;return vl(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function ci(t,e,n){var r=0,i=null==t?r:t.length;if("number"==typeof e&&e===e&&i<=Mt){for(;r<i;){var o=r+i>>>1,a=t[o];null!==a&&!gu(a)&&(n?a<=e:a<e)?r=o+1:i=o}return i}return fi(t,e,Tc,n)}function fi(t,e,n,r){e=n(e);for(var i=0,o=null==t?0:t.length,a=e!==e,s=null===e,u=gu(e),c=e===it;i<o;){var f=Bf((i+o)/2),l=n(t[f]),p=l!==it,h=null===l,d=l===l,v=gu(l);if(a)var g=r||d;else g=c?d&&(r||p):s?d&&p&&(r||!h):u?d&&p&&!h&&(r||!v):!h&&!v&&(r?l<=e:l<e);g?i=f+1:o=f}return Wf(o,It)}function li(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n],s=e?e(a):a;if(!n||!Hs(s,u)){var u=s;o[i++]=0===a?0:a}}return o}function pi(t){return"number"==typeof t?t:gu(t)?Dt:+t}function hi(t){if("string"==typeof t)return t;if(mp(t))return v(t,hi)+"";if(gu(t))return hl?hl.call(t):"";var e=t+"";return"0"==e&&1/t==-Rt?"-0":e}function di(t,e,n){var r=-1,i=h,o=t.length,a=!0,s=[],u=s;if(n)a=!1,i=d;else if(o>=ot){var c=e?null:El(t);if(c)return K(c);a=!1,i=I,u=new mn}else u=e?[]:s;t:for(;++r<o;){var f=t[r],l=e?e(f):f;if(f=n||0!==f?f:0,a&&l===l){for(var p=u.length;p--;)if(u[p]===l)continue t;e&&u.push(l),s.push(f)}else i(u,l,n)||(u!==s&&u.push(l),s.push(f))}return s}function vi(t,e){return e=Ei(e,t),null==(t=Yo(t,e))||delete t[Qo(wa(e))]}function gi(t,e,n,r){return oi(t,e,n(gr(t,e)),r)}function mi(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?si(t,r?0:o,r?o+1:i):si(t,r?o+1:0,r?i:o)}function yi(t,e){var n=t;return n instanceof b&&(n=n.value()),m(e,function(t,e){return e.func.apply(e.thisArg,g([t],e.args))},n)}function _i(t,e,n){var r=t.length;if(r<2)return r?di(t[0]):[];for(var i=-1,o=nf(r);++i<r;)for(var a=t[i],s=-1;++s<r;)s!=i&&(o[i]=sr(o[i]||a,t[s],e,n));return di(pr(o,1),e,n)}function bi(t,e,n){for(var r=-1,i=t.length,o=e.length,a={};++r<i;){var s=r<o?e[r]:it;n(a,t[r],s)}return a}function wi(t){return Ws(t)?t:[]}function xi(t){return"function"==typeof t?t:Tc}function Ei(t,e){return mp(t)?t:Io(t,e)?[t]:Rl(Au(t))}function Oi(t,e,n){var r=t.length;return n=n===it?r:n,!e&&n>=r?t:si(t,e,n)}function Ci(t,e){if(e)return t.slice();var n=t.length,r=Af?Af(n):new t.constructor(n);return t.copy(r),r}function Si(t){var e=new t.constructor(t.byteLength);return new Sf(e).set(new Sf(t)),e}function Ai(t,e){var n=e?Si(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}function ki(t,e,n){return m(e?n(J(t),lt):J(t),o,new t.constructor)}function Ni(t){var e=new t.constructor(t.source,qe.exec(t));return e.lastIndex=t.lastIndex,e}function Ti(t,e,n){return m(e?n(K(t),lt):K(t),a,new t.constructor)}function ji(t){return pl?uf(pl.call(t)):{}}function Ri(t,e){var n=e?Si(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Pi(t,e){if(t!==e){var n=t!==it,r=null===t,i=t===t,o=gu(t),a=e!==it,s=null===e,u=e===e,c=gu(e);if(!s&&!c&&!o&&t>e||o&&a&&u&&!s&&!c||r&&a&&u||!n&&u||!i)return 1;if(!r&&!o&&!c&&t<e||c&&n&&i&&!r&&!o||s&&n&&i||!a&&i||!u)return-1}return 0}function $i(t,e,n){for(var r=-1,i=t.criteria,o=e.criteria,a=i.length,s=n.length;++r<a;){var u=Pi(i[r],o[r]);if(u){if(r>=s)return u;return u*("desc"==n[r]?-1:1)}}return t.index-e.index}function Di(t,e,n,r){for(var i=-1,o=t.length,a=n.length,s=-1,u=e.length,c=Jf(o-a,0),f=nf(u+c),l=!r;++s<u;)f[s]=e[s];for(;++i<a;)(l||i<o)&&(f[n[i]]=t[i]);for(;c--;)f[s++]=t[i++];return f}function Li(t,e,n,r){for(var i=-1,o=t.length,a=-1,s=n.length,u=-1,c=e.length,f=Jf(o-s,0),l=nf(f+c),p=!r;++i<f;)l[i]=t[i];for(var h=i;++u<c;)l[h+u]=e[u];for(;++a<s;)(p||i<o)&&(l[h+n[a]]=t[i++]);return l}function Ii(t,e){var n=-1,r=t.length;for(e||(e=nf(r));++n<r;)e[n]=t[n];return e}function Mi(t,e,n,r){var i=!n;n||(n={});for(var o=-1,a=e.length;++o<a;){var s=e[o],u=r?r(n[s],t[s],s,n,t):it;u===it&&(u=t[s]),i?tr(n,s,u):Hn(n,s,u)}return n}function Ui(t,e){return Mi(t,Cl(t),e)}function Bi(t,e){return Mi(t,Sl(t),e)}function Vi(t,e){return function(n,r){var i=mp(n)?u:Zn,o=e?e():{};return i(n,t,xo(r,2),o)}}function Fi(t){return ni(function(e,n){var r=-1,i=n.length,o=i>1?n[i-1]:it,a=i>2?n[2]:it;for(o=t.length>3&&"function"==typeof o?(i--,o):it,a&&Lo(n[0],n[1],a)&&(o=i<3?it:o,i=1),e=uf(e);++r<i;){var s=n[r];s&&t(e,s,r,o)}return e})}function qi(t,e){return function(n,r){if(null==n)return n;if(!Js(n))return t(n,r);for(var i=n.length,o=e?i:-1,a=uf(n);(e?o--:++o<i)&&!1!==r(a[o],o,a););return n}}function zi(t){return function(e,n,r){for(var i=-1,o=uf(e),a=r(e),s=a.length;s--;){var u=a[t?s:++i];if(!1===n(o[u],u,o))break}return e}}function Hi(t,e,n){function r(){return(this&&this!==Pn&&this instanceof r?o:t).apply(i?n:this,arguments)}var i=e&gt,o=Yi(t);return r}function Ji(t){return function(e){e=Au(e);var n=q(e)?tt(e):it,r=n?n[0]:e.charAt(0),i=n?Oi(n,1).join(""):e.slice(1);return r[t]()+i}}function Wi(t){return function(e){return m(Cc(oc(e).replace(vn,"")),t,"")}}function Yi(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=dl(t.prototype),r=t.apply(n,e);return iu(r)?r:n}}function Ki(t,e,n){function r(){for(var o=arguments.length,a=nf(o),u=o,c=wo(r);u--;)a[u]=arguments[u];var f=o<3&&a[0]!==c&&a[o-1]!==c?[]:Y(a,c);return(o-=f.length)<n?ao(t,e,Xi,r.placeholder,it,a,f,it,it,n-o):s(this&&this!==Pn&&this instanceof r?i:t,this,a)}var i=Yi(t);return r}function Gi(t){return function(e,n,r){var i=uf(e);if(!Js(e)){var o=xo(n,3);e=Bu(e),n=function(t){return o(i[t],t,i)}}var a=t(e,n,r);return a>-1?i[o?e[a]:a]:it}}function Zi(t){return mo(function(e){var n=e.length,r=n,o=i.prototype.thru;for(t&&e.reverse();r--;){var a=e[r];if("function"!=typeof a)throw new lf(st);if(o&&!s&&"wrapper"==bo(a))var s=new i([],!0)}for(r=s?r:n;++r<n;){a=e[r];var u=bo(a),c="wrapper"==u?Ol(a):it;s=c&&Uo(c[0])&&c[1]==(Et|_t|wt|Ot)&&!c[4].length&&1==c[9]?s[bo(c[0])].apply(s,c[3]):1==a.length&&Uo(a)?s[u]():s.thru(a)}return function(){var t=arguments,r=t[0];if(s&&1==t.length&&mp(r))return s.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}})}function Xi(t,e,n,r,i,o,a,s,u,c){function f(){for(var m=arguments.length,y=nf(m),_=m;_--;)y[_]=arguments[_];if(d)var b=wo(f),w=B(y,b);if(r&&(y=Di(y,r,i,d)),o&&(y=Li(y,o,a,d)),m-=w,d&&m<c){var x=Y(y,b);return ao(t,e,Xi,f.placeholder,n,y,x,s,u,c-m)}var E=p?n:this,O=h?E[t]:t;return m=y.length,s?y=Ko(y,s):v&&m>1&&y.reverse(),l&&u<m&&(y.length=u),this&&this!==Pn&&this instanceof f&&(O=g||Yi(O)),O.apply(E,y)}var l=e&Et,p=e&gt,h=e&mt,d=e&(_t|bt),v=e&Ct,g=h?it:Yi(t);return f}function Qi(t,e){return function(n,r){return Or(n,t,e(r),{})}}function to(t,e){return function(n,r){var i;if(n===it&&r===it)return e;if(n!==it&&(i=n),r!==it){if(i===it)return r;"string"==typeof n||"string"==typeof r?(n=hi(n),r=hi(r)):(n=pi(n),r=pi(r)),i=t(n,r)}return i}}function eo(t){return mo(function(e){return e=v(e,D(xo())),ni(function(n){var r=this;return t(e,function(t){return s(t,r,n)})})})}function no(t,e){e=e===it?" ":hi(e);var n=e.length;if(n<2)return n?ei(e,t):e;var r=ei(e,Uf(t/Q(e)));return q(e)?Oi(tt(r),0,t).join(""):r.slice(0,t)}function ro(t,e,n,r){function i(){for(var e=-1,u=arguments.length,c=-1,f=r.length,l=nf(f+u),p=this&&this!==Pn&&this instanceof i?a:t;++c<f;)l[c]=r[c];for(;u--;)l[c++]=arguments[++e];return s(p,o?n:this,l)}var o=e&gt,a=Yi(t);return i}function io(t){return function(e,n,r){return r&&"number"!=typeof r&&Lo(e,n,r)&&(n=r=it),e=wu(e),n===it?(n=e,e=0):n=wu(n),r=r===it?e<n?1:-1:wu(r),ti(e,n,r,t)}}function oo(t){return function(e,n){return"string"==typeof e&&"string"==typeof n||(e=Ou(e),n=Ou(n)),t(e,n)}}function ao(t,e,n,r,i,o,a,s,u,c){var f=e&_t,l=f?a:it,p=f?it:a,h=f?o:it,d=f?it:o;e|=f?wt:xt,(e&=~(f?xt:wt))&yt||(e&=~(gt|mt));var v=[t,e,i,h,l,d,p,s,u,c],g=n.apply(it,v);return Uo(t)&&Nl(g,v),g.placeholder=r,Go(g,t,e)}function so(t){var e=sf[t];return function(t,n){if(t=Ou(t),n=null==n?0:Wf(xu(n),292)){var r=(Au(t)+"e").split("e");return r=(Au(e(r[0]+"e"+(+r[1]+n)))+"e").split("e"),+(r[0]+"e"+(+r[1]-n))}return e(t)}}function uo(t){return function(e){var n=Al(e);return n==Kt?J(e):n==ee?G(e):$(e,t(e))}}function co(t,e,n,r,i,o,a,s){var u=e&mt;if(!u&&"function"!=typeof t)throw new lf(st);var c=r?r.length:0;if(c||(e&=~(wt|xt),r=i=it),a=a===it?a:Jf(xu(a),0),s=s===it?s:xu(s),c-=i?i.length:0,e&xt){var f=r,l=i;r=i=it}var p=u?it:Ol(t),h=[t,e,n,r,i,f,l,o,a,s];if(p&&zo(h,p),t=h[0],e=h[1],n=h[2],r=h[3],i=h[4],s=h[9]=h[9]===it?u?0:t.length:Jf(h[9]-c,0),!s&&e&(_t|bt)&&(e&=~(_t|bt)),e&&e!=gt)d=e==_t||e==bt?Ki(t,e,s):e!=wt&&e!=(gt|wt)||i.length?Xi.apply(it,h):ro(t,e,n,r);else var d=Hi(t,e,n);return Go((p?_l:Nl)(d,h),t,e)}function fo(t,e,n,r){return t===it||Hs(t,df[n])&&!mf.call(r,n)?e:t}function lo(t,e,n,r,i,o){return iu(t)&&iu(e)&&(o.set(e,t),zr(t,e,it,lo,o),o.delete(e)),t}function po(t){return hu(t)?it:t}function ho(t,e,n,r,i,o){var a=n&dt,s=t.length,u=e.length;if(s!=u&&!(a&&u>s))return!1;var c=o.get(t);if(c&&o.get(e))return c==e;var f=-1,l=!0,p=n&vt?new mn:it;for(o.set(t,e),o.set(e,t);++f<s;){var h=t[f],d=e[f];if(r)var v=a?r(d,h,f,e,t,o):r(h,d,f,t,e,o);if(v!==it){if(v)continue;l=!1;break}if(p){if(!_(e,function(t,e){if(!I(p,e)&&(h===t||i(h,t,n,r,o)))return p.push(e)})){l=!1;break}}else if(h!==d&&!i(h,d,n,r,o)){l=!1;break}}return o.delete(t),o.delete(e),l}function vo(t,e,n,r,i,o,a){switch(n){case ue:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case se:return!(t.byteLength!=e.byteLength||!o(new Sf(t),new Sf(e)));case qt:case zt:case Gt:return Hs(+t,+e);case Jt:return t.name==e.name&&t.message==e.message;case te:case ne:return t==e+"";case Kt:var s=J;case ee:var u=r&dt;if(s||(s=K),t.size!=e.size&&!u)return!1;var c=a.get(t);if(c)return c==e;r|=vt,a.set(t,e);var f=ho(s(t),s(e),r,i,o,a);return a.delete(t),f;case re:if(pl)return pl.call(t)==pl.call(e)}return!1}function go(t,e,n,r,i,o){var a=n&dt,s=yo(t),u=s.length;if(u!=yo(e).length&&!a)return!1;for(var c=u;c--;){var f=s[c];if(!(a?f in e:mf.call(e,f)))return!1}var l=o.get(t);if(l&&o.get(e))return l==e;var p=!0;o.set(t,e),o.set(e,t);for(var h=a;++c<u;){f=s[c];var d=t[f],v=e[f];if(r)var g=a?r(v,d,f,e,t,o):r(d,v,f,t,e,o);if(!(g===it?d===v||i(d,v,n,r,o):g)){p=!1;break}h||(h="constructor"==f)}if(p&&!h){var m=t.constructor,y=e.constructor;m!=y&&"constructor"in t&&"constructor"in e&&!("function"==typeof m&&m instanceof m&&"function"==typeof y&&y instanceof y)&&(p=!1)}return o.delete(t),o.delete(e),p}function mo(t){return jl(Wo(t,it,ha),t+"")}function yo(t){return mr(t,Bu,Cl)}function _o(t){return mr(t,Vu,Sl)}function bo(t){for(var e=t.name+"",n=ol[e],r=mf.call(ol,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function wo(t){return(mf.call(n,"placeholder")?n:t).placeholder}function xo(){var t=n.iteratee||jc;return t=t===jc?Ir:t,arguments.length?t(arguments[0],arguments[1]):t}function Eo(t,e){var n=t.__data__;return Mo(e)?n["string"==typeof e?"string":"hash"]:n.map}function Oo(t){for(var e=Bu(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,Fo(i)]}return e}function Co(t,e){var n=F(t,e);return Pr(n)?n:it}function So(t){var e=mf.call(t,$f),n=t[$f];try{t[$f]=it;var r=!0}catch(t){}var i=bf.call(t);return r&&(e?t[$f]=n:delete t[$f]),i}function Ao(t,e,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],a=o.size;switch(o.type){case"drop":t+=a;break;case"dropRight":e-=a;break;case"take":e=Wf(e,t+a);break;case"takeRight":t=Jf(t,e-a)}}return{start:t,end:e}}function ko(t){var e=t.match(Me);return e?e[1].split(Ue):[]}function No(t,e,n){e=Ei(e,t);for(var r=-1,i=e.length,o=!1;++r<i;){var a=Qo(e[r]);if(!(o=null!=t&&n(t,a)))break;t=t[a]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&ru(i)&&Do(a,i)&&(mp(t)||gp(t))}function To(t){var e=t.length,n=t.constructor(e);return e&&"string"==typeof t[0]&&mf.call(t,"index")&&(n.index=t.index,n.input=t.input),n}function jo(t){return"function"!=typeof t.constructor||Vo(t)?{}:dl(kf(t))}function Ro(t,e,n,r){var i=t.constructor;switch(e){case se:return Si(t);case qt:case zt:return new i(+t);case ue:return Ai(t,r);case ce:case fe:case le:case pe:case he:case de:case ve:case ge:case me:return Ri(t,r);case Kt:return ki(t,r,n);case Gt:case ne:return new i(t);case te:return Ni(t);case ee:return Ti(t,r,n);case re:return ji(t)}}function Po(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(Ie,"{\n/* [wrapped with "+e+"] */\n")}function $o(t){return mp(t)||gp(t)||!!(Rf&&t&&t[Rf])}function Do(t,e){return!!(e=null==e?Pt:e)&&("number"==typeof t||Ye.test(t))&&t>-1&&t%1==0&&t<e}function Lo(t,e,n){if(!iu(n))return!1;var r=typeof e;return!!("number"==r?Js(n)&&Do(e,n.length):"string"==r&&e in n)&&Hs(n[e],t)}function Io(t,e){if(mp(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!gu(t))||(Ne.test(t)||!ke.test(t)||null!=e&&t in uf(e))}function Mo(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}function Uo(t){var e=bo(t),r=n[e];if("function"!=typeof r||!(e in b.prototype))return!1;if(t===r)return!0;var i=Ol(r);return!!i&&t===i[0]}function Bo(t){return!!_f&&_f in t}function Vo(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||df)}function Fo(t){return t===t&&!iu(t)}function qo(t,e){return function(n){return null!=n&&(n[t]===e&&(e!==it||t in uf(n)))}}function zo(t,e){var n=t[1],r=e[1],i=n|r,o=i<(gt|mt|Et),a=r==Et&&n==_t||r==Et&&n==Ot&&t[7].length<=e[8]||r==(Et|Ot)&&e[7].length<=e[8]&&n==_t;if(!o&&!a)return t;r&gt&&(t[2]=e[2],i|=n&gt?0:yt);var s=e[3];if(s){var u=t[3];t[3]=u?Di(u,s,e[4]):s,t[4]=u?Y(t[3],ft):e[4]}return s=e[5],s&&(u=t[5],t[5]=u?Li(u,s,e[6]):s,t[6]=u?Y(t[5],ft):e[6]),s=e[7],s&&(t[7]=s),r&Et&&(t[8]=null==t[8]?e[8]:Wf(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i,t}function Ho(t){var e=[];if(null!=t)for(var n in uf(t))e.push(n);return e}function Jo(t){return bf.call(t)}function Wo(t,e,n){return e=Jf(e===it?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=Jf(r.length-e,0),a=nf(o);++i<o;)a[i]=r[e+i];i=-1;for(var u=nf(e+1);++i<e;)u[i]=r[i];return u[e]=n(a),s(t,this,u)}}function Yo(t,e){return e.length<2?t:gr(t,si(e,0,-1))}function Ko(t,e){for(var n=t.length,r=Wf(e.length,n),i=Ii(t);r--;){var o=e[r];t[r]=Do(o,n)?i[o]:it}return t}function Go(t,e,n){var r=e+"";return jl(t,Po(r,ea(ko(r),n)))}function Zo(t){var e=0,n=0;return function(){var r=Yf(),i=Nt-(r-n);if(n=r,i>0){if(++e>=kt)return arguments[0]}else e=0;return t.apply(it,arguments)}}function Xo(t,e){var n=-1,r=t.length,i=r-1;for(e=e===it?r:e;++n<e;){var o=Qr(n,i),a=t[o];t[o]=t[n],t[n]=a}return t.length=e,t}function Qo(t){if("string"==typeof t||gu(t))return t;var e=t+"";return"0"==e&&1/t==-Rt?"-0":e}function ta(t){if(null!=t){try{return gf.call(t)}catch(t){}try{return t+""}catch(t){}}return""}function ea(t,e){return c(Ut,function(n){var r="_."+n[0];e&n[1]&&!h(t,r)&&t.push(r)}),t.sort()}function na(t){if(t instanceof b)return t.clone();var e=new i(t.__wrapped__,t.__chain__);return e.__actions__=Ii(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}function ra(t,e,n){e=(n?Lo(t,e,n):e===it)?1:Jf(xu(e),0);var r=null==t?0:t.length;if(!r||e<1)return[];for(var i=0,o=0,a=nf(Uf(r/e));i<r;)a[o++]=si(t,i,i+=e);return a}function ia(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i}function oa(){var t=arguments.length;if(!t)return[];for(var e=nf(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return g(mp(n)?Ii(n):[n],pr(e,1))}function aa(t,e,n){var r=null==t?0:t.length;return r?(e=n||e===it?1:xu(e),si(t,e<0?0:e,r)):[]}function sa(t,e,n){var r=null==t?0:t.length;return r?(e=n||e===it?1:xu(e),e=r-e,si(t,0,e<0?0:e)):[]}function ua(t,e){return t&&t.length?mi(t,xo(e,3),!0,!0):[]}function ca(t,e){return t&&t.length?mi(t,xo(e,3),!0):[]}function fa(t,e,n,r){var i=null==t?0:t.length;return i?(n&&"number"!=typeof n&&Lo(t,e,n)&&(n=0,r=i),fr(t,e,n,r)):[]}function la(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:xu(n);return i<0&&(i=Jf(r+i,0)),E(t,xo(e,3),i)}function pa(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=r-1;return n!==it&&(i=xu(n),i=n<0?Jf(r+i,0):Wf(i,r-1)),E(t,xo(e,3),i,!0)}function ha(t){return(null==t?0:t.length)?pr(t,1):[]}function da(t){return(null==t?0:t.length)?pr(t,Rt):[]}function va(t,e){return(null==t?0:t.length)?(e=e===it?1:xu(e),pr(t,e)):[]}function ga(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];r[i[0]]=i[1]}return r}function ma(t){return t&&t.length?t[0]:it}function ya(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:xu(n);return i<0&&(i=Jf(r+i,0)),O(t,e,i)}function _a(t){return(null==t?0:t.length)?si(t,0,-1):[]}function ba(t,e){return null==t?"":zf.call(t,e)}function wa(t){var e=null==t?0:t.length;return e?t[e-1]:it}function xa(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=r;return n!==it&&(i=xu(n),i=i<0?Jf(r+i,0):Wf(i,r-1)),e===e?X(t,e,i):E(t,S,i,!0)}function Ea(t,e){return t&&t.length?Jr(t,xu(e)):it}function Oa(t,e){return t&&t.length&&e&&e.length?Zr(t,e):t}function Ca(t,e,n){return t&&t.length&&e&&e.length?Zr(t,e,xo(n,2)):t}function Sa(t,e,n){return t&&t.length&&e&&e.length?Zr(t,e,it,n):t}function Aa(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=xo(e,3);++r<o;){var a=t[r];e(a,r,t)&&(n.push(a),i.push(r))}return Xr(t,i),n}function ka(t){return null==t?t:Zf.call(t)}function Na(t,e,n){var r=null==t?0:t.length;return r?(n&&"number"!=typeof n&&Lo(t,e,n)?(e=0,n=r):(e=null==e?0:xu(e),n=n===it?r:xu(n)),si(t,e,n)):[]}function Ta(t,e){return ci(t,e)}function ja(t,e,n){return fi(t,e,xo(n,2))}function Ra(t,e){var n=null==t?0:t.length;if(n){var r=ci(t,e);if(r<n&&Hs(t[r],e))return r}return-1}function Pa(t,e){return ci(t,e,!0)}function $a(t,e,n){return fi(t,e,xo(n,2),!0)}function Da(t,e){if(null==t?0:t.length){var n=ci(t,e,!0)-1;if(Hs(t[n],e))return n}return-1}function La(t){return t&&t.length?li(t):[]}function Ia(t,e){return t&&t.length?li(t,xo(e,2)):[]}function Ma(t){var e=null==t?0:t.length;return e?si(t,1,e):[]}function Ua(t,e,n){return t&&t.length?(e=n||e===it?1:xu(e),si(t,0,e<0?0:e)):[]}function Ba(t,e,n){var r=null==t?0:t.length;return r?(e=n||e===it?1:xu(e),e=r-e,si(t,e<0?0:e,r)):[]}function Va(t,e){return t&&t.length?mi(t,xo(e,3),!1,!0):[]}function Fa(t,e){return t&&t.length?mi(t,xo(e,3)):[]}function qa(t){return t&&t.length?di(t):[]}function za(t,e){return t&&t.length?di(t,xo(e,2)):[]}function Ha(t,e){return e="function"==typeof e?e:it,t&&t.length?di(t,it,e):[]}function Ja(t){if(!t||!t.length)return[];var e=0;return t=p(t,function(t){if(Ws(t))return e=Jf(t.length,e),!0}),P(e,function(e){return v(t,k(e))})}function Wa(t,e){if(!t||!t.length)return[];var n=Ja(t);return null==e?n:v(n,function(t){return s(e,it,t)})}function Ya(t,e){return bi(t||[],e||[],Hn)}function Ka(t,e){return bi(t||[],e||[],oi)}function Ga(t){var e=n(t);return e.__chain__=!0,e}function Za(t,e){return e(t),t}function Xa(t,e){return e(t)}function Qa(){return Ga(this)}function ts(){return new i(this.value(),this.__chain__)}function es(){this.__values__===it&&(this.__values__=bu(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?it:this.__values__[this.__index__++]}}function ns(){return this}function rs(t){for(var e,n=this;n instanceof r;){var i=na(n);i.__index__=0,i.__values__=it,e?o.__wrapped__=i:e=i;var o=i;n=n.__wrapped__}return o.__wrapped__=t,e}function is(){var t=this.__wrapped__;if(t instanceof b){var e=t;return this.__actions__.length&&(e=new b(this)),e=e.reverse(),e.__actions__.push({func:Xa,args:[ka],thisArg:it}),new i(e,this.__chain__)}return this.thru(ka)}function os(){return yi(this.__wrapped__,this.__actions__)}function as(t,e,n){var r=mp(t)?l:ur;return n&&Lo(t,e,n)&&(e=it),r(t,xo(e,3))}function ss(t,e){return(mp(t)?p:lr)(t,xo(e,3))}function us(t,e){return pr(ds(t,e),1)}function cs(t,e){return pr(ds(t,e),Rt)}function fs(t,e,n){return n=n===it?1:xu(n),pr(ds(t,e),n)}function ls(t,e){return(mp(t)?c:vl)(t,xo(e,3))}function ps(t,e){return(mp(t)?f:gl)(t,xo(e,3))}function hs(t,e,n,r){t=Js(t)?t:Qu(t),n=n&&!r?xu(n):0;var i=t.length;return n<0&&(n=Jf(i+n,0)),vu(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&O(t,e,n)>-1}function ds(t,e){return(mp(t)?v:Vr)(t,xo(e,3))}function vs(t,e,n,r){return null==t?[]:(mp(e)||(e=null==e?[]:[e]),n=r?it:n,mp(n)||(n=null==n?[]:[n]),Wr(t,e,n))}function gs(t,e,n){var r=mp(t)?m:T,i=arguments.length<3;return r(t,xo(e,4),n,i,vl)}function ms(t,e,n){var r=mp(t)?y:T,i=arguments.length<3;return r(t,xo(e,4),n,i,gl)}function ys(t,e){return(mp(t)?p:lr)(t,Rs(xo(e,3)))}function _s(t){return(mp(t)?$n:ri)(t)}function bs(t,e,n){return e=(n?Lo(t,e,n):e===it)?1:xu(e),(mp(t)?Dn:ii)(t,e)}function ws(t){return(mp(t)?In:ai)(t)}function xs(t){if(null==t)return 0;if(Js(t))return vu(t)?Q(t):t.length;var e=Al(t);return e==Kt||e==ee?t.size:Mr(t).length}function Es(t,e,n){var r=mp(t)?_:ui;return n&&Lo(t,e,n)&&(e=it),r(t,xo(e,3))}function Os(t,e){if("function"!=typeof e)throw new lf(st);return t=xu(t),function(){if(--t<1)return e.apply(this,arguments)}}function Cs(t,e,n){return e=n?it:e,e=t&&null==e?t.length:e,co(t,Et,it,it,it,it,e)}function Ss(t,e){var n;if("function"!=typeof e)throw new lf(st);return t=xu(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=it),n}}function As(t,e,n){e=n?it:e;var r=co(t,_t,it,it,it,it,it,e);return r.placeholder=As.placeholder,r}function ks(t,e,n){e=n?it:e;var r=co(t,bt,it,it,it,it,it,e);return r.placeholder=ks.placeholder,r}function Ns(t,e,n){function r(e){var n=p,r=h;return p=h=it,y=e,v=t.apply(r,n)}function i(t){return y=t,g=Tl(s,e),_?r(t):v}function o(t){var n=t-m,r=t-y,i=e-n;return b?Wf(i,d-r):i}function a(t){var n=t-m,r=t-y;return m===it||n>=e||n<0||b&&r>=d}function s(){var t=op();if(a(t))return u(t);g=Tl(s,o(t))}function u(t){return g=it,w&&p?r(t):(p=h=it,v)}function c(){g!==it&&xl(g),y=0,p=m=h=g=it}function f(){return g===it?v:u(op())}function l(){var t=op(),n=a(t);if(p=arguments,h=this,m=t,n){if(g===it)return i(m);if(b)return g=Tl(s,e),r(m)}return g===it&&(g=Tl(s,e)),v}var p,h,d,v,g,m,y=0,_=!1,b=!1,w=!0;if("function"!=typeof t)throw new lf(st);return e=Ou(e)||0,iu(n)&&(_=!!n.leading,b="maxWait"in n,d=b?Jf(Ou(n.maxWait)||0,e):d,w="trailing"in n?!!n.trailing:w),l.cancel=c,l.flush=f,l}function Ts(t){return co(t,Ct)}function js(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new lf(st);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(js.Cache||cn),n}function Rs(t){if("function"!=typeof t)throw new lf(st);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}function Ps(t){return Ss(2,t)}function $s(t,e){if("function"!=typeof t)throw new lf(st);return e=e===it?e:xu(e),ni(t,e)}function Ds(t,e){if("function"!=typeof t)throw new lf(st);return e=null==e?0:Jf(xu(e),0),ni(function(n){var r=n[e],i=Oi(n,0,e);return r&&g(i,r),s(t,this,i)})}function Ls(t,e,n){var r=!0,i=!0;if("function"!=typeof t)throw new lf(st);return iu(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),Ns(t,e,{leading:r,maxWait:e,trailing:i})}function Is(t){return Cs(t,1)}function Ms(t,e){return lp(xi(e),t)}function Us(){if(!arguments.length)return[];var t=arguments[0];return mp(t)?t:[t]}function Bs(t){return rr(t,ht)}function Vs(t,e){return e="function"==typeof e?e:it,rr(t,ht,e)}function Fs(t){return rr(t,lt|ht)}function qs(t,e){return e="function"==typeof e?e:it,rr(t,lt|ht,e)}function zs(t,e){return null==e||or(t,e,Bu(e))}function Hs(t,e){return t===e||t!==t&&e!==e}function Js(t){return null!=t&&ru(t.length)&&!eu(t)}function Ws(t){return ou(t)&&Js(t)}function Ys(t){return!0===t||!1===t||ou(t)&&yr(t)==qt}function Ks(t){return ou(t)&&1===t.nodeType&&!hu(t)}function Gs(t){if(null==t)return!0;if(Js(t)&&(mp(t)||"string"==typeof t||"function"==typeof t.splice||_p(t)||Op(t)||gp(t)))return!t.length;var e=Al(t);if(e==Kt||e==ee)return!t.size;if(Vo(t))return!Mr(t).length;for(var n in t)if(mf.call(t,n))return!1;return!0}function Zs(t,e){return Nr(t,e)}function Xs(t,e,n){n="function"==typeof n?n:it;var r=n?n(t,e):it;return r===it?Nr(t,e,it,n):!!r}function Qs(t){if(!ou(t))return!1;var e=yr(t);return e==Jt||e==Ht||"string"==typeof t.message&&"string"==typeof t.name&&!hu(t)}function tu(t){return"number"==typeof t&&qf(t)}function eu(t){if(!iu(t))return!1;var e=yr(t);return e==Wt||e==Yt||e==Ft||e==Qt}function nu(t){return"number"==typeof t&&t==xu(t)}function ru(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=Pt}function iu(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function ou(t){return null!=t&&"object"==typeof t}function au(t,e){return t===e||Rr(t,e,Oo(e))}function su(t,e,n){return n="function"==typeof n?n:it,Rr(t,e,Oo(e),n)}function uu(t){return pu(t)&&t!=+t}function cu(t){if(kl(t))throw new of(at);return Pr(t)}function fu(t){return null===t}function lu(t){return null==t}function pu(t){return"number"==typeof t||ou(t)&&yr(t)==Gt}function hu(t){if(!ou(t)||yr(t)!=Xt)return!1;var e=kf(t);if(null===e)return!0;var n=mf.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&gf.call(n)==wf}function du(t){return nu(t)&&t>=-Pt&&t<=Pt}function vu(t){return"string"==typeof t||!mp(t)&&ou(t)&&yr(t)==ne}function gu(t){return"symbol"==typeof t||ou(t)&&yr(t)==re}function mu(t){return t===it}function yu(t){return ou(t)&&Al(t)==oe}function _u(t){return ou(t)&&yr(t)==ae}function bu(t){if(!t)return[];if(Js(t))return vu(t)?tt(t):Ii(t);if(Pf&&t[Pf])return H(t[Pf]());var e=Al(t);return(e==Kt?J:e==ee?K:Qu)(t)}function wu(t){if(!t)return 0===t?t:0;if((t=Ou(t))===Rt||t===-Rt){return(t<0?-1:1)*$t}return t===t?t:0}function xu(t){var e=wu(t),n=e%1;return e===e?n?e-n:e:0}function Eu(t){return t?nr(xu(t),0,Lt):0}function Ou(t){if("number"==typeof t)return t;if(gu(t))return Dt;if(iu(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=iu(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace($e,"");var n=He.test(t);return n||We.test(t)?Tn(t.slice(2),n?2:8):ze.test(t)?Dt:+t}function Cu(t){return Mi(t,Vu(t))}function Su(t){return t?nr(xu(t),-Pt,Pt):0===t?t:0}function Au(t){return null==t?"":hi(t)}function ku(t,e){var n=dl(t);return null==e?n:Xn(n,e)}function Nu(t,e){return x(t,xo(e,3),hr)}function Tu(t,e){return x(t,xo(e,3),dr)}function ju(t,e){return null==t?t:ml(t,xo(e,3),Vu)}function Ru(t,e){return null==t?t:yl(t,xo(e,3),Vu)}function Pu(t,e){return t&&hr(t,xo(e,3))}function $u(t,e){return t&&dr(t,xo(e,3))}function Du(t){return null==t?[]:vr(t,Bu(t))}function Lu(t){return null==t?[]:vr(t,Vu(t))}function Iu(t,e,n){var r=null==t?it:gr(t,e);return r===it?n:r}function Mu(t,e){return null!=t&&No(t,e,br)}function Uu(t,e){return null!=t&&No(t,e,wr)}function Bu(t){return Js(t)?Rn(t):Mr(t)}function Vu(t){return Js(t)?Rn(t,!0):Ur(t)}function Fu(t,e){var n={};return e=xo(e,3),hr(t,function(t,r,i){tr(n,e(t,r,i),t)}),n}function qu(t,e){var n={};return e=xo(e,3),hr(t,function(t,r,i){tr(n,r,e(t,r,i))}),n}function zu(t,e){return Hu(t,Rs(xo(e)))}function Hu(t,e){if(null==t)return{};var n=v(_o(t),function(t){return[t]});return e=xo(e),Kr(t,n,function(t,n){return e(t,n[0])})}function Ju(t,e,n){e=Ei(e,t);var r=-1,i=e.length;for(i||(i=1,t=it);++r<i;){var o=null==t?it:t[Qo(e[r])];o===it&&(r=i,o=n),t=eu(o)?o.call(t):o}return t}function Wu(t,e,n){return null==t?t:oi(t,e,n)}function Yu(t,e,n,r){return r="function"==typeof r?r:it,null==t?t:oi(t,e,n,r)}function Ku(t,e,n){var r=mp(t),i=r||_p(t)||Op(t);if(e=xo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:iu(t)&&eu(o)?dl(kf(t)):{}}return(i?c:hr)(t,function(t,r,i){return e(n,t,r,i)}),n}function Gu(t,e){return null==t||vi(t,e)}function Zu(t,e,n){return null==t?t:gi(t,e,xi(n))}function Xu(t,e,n,r){return r="function"==typeof r?r:it,null==t?t:gi(t,e,xi(n),r)}function Qu(t){return null==t?[]:L(t,Bu(t))}function tc(t){return null==t?[]:L(t,Vu(t))}function ec(t,e,n){return n===it&&(n=e,e=it),n!==it&&(n=Ou(n),n=n===n?n:0),e!==it&&(e=Ou(e),e=e===e?e:0),nr(Ou(t),e,n)}function nc(t,e,n){return e=wu(e),n===it?(n=e,e=0):n=wu(n),t=Ou(t),xr(t,e,n)}function rc(t,e,n){if(n&&"boolean"!=typeof n&&Lo(t,e,n)&&(e=n=it),n===it&&("boolean"==typeof e?(n=e,e=it):"boolean"==typeof t&&(n=t,t=it)),t===it&&e===it?(t=0,e=1):(t=wu(t),e===it?(e=t,t=0):e=wu(e)),t>e){var r=t;t=e,e=r}if(n||t%1||e%1){var i=Gf();return Wf(t+i*(e-t+Nn("1e-"+((i+"").length-1))),e)}return Qr(t,e)}function ic(t){return Gp(Au(t).toLowerCase())}function oc(t){return(t=Au(t))&&t.replace(Ke,Jn).replace(gn,"")}function ac(t,e,n){t=Au(t),e=hi(e);var r=t.length;n=n===it?r:nr(xu(n),0,r);var i=n;return(n-=e.length)>=0&&t.slice(n,i)==e}function sc(t){return t=Au(t),t&&Oe.test(t)?t.replace(xe,Wn):t}function uc(t){return t=Au(t),t&&Pe.test(t)?t.replace(Re,"\\$&"):t}function cc(t,e,n){t=Au(t),e=xu(e);var r=e?Q(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return no(Bf(i),n)+t+no(Uf(i),n)}function fc(t,e,n){t=Au(t),e=xu(e);var r=e?Q(t):0;return e&&r<e?t+no(e-r,n):t}function lc(t,e,n){t=Au(t),e=xu(e);var r=e?Q(t):0;return e&&r<e?no(e-r,n)+t:t}function pc(t,e,n){return n||null==e?e=0:e&&(e=+e),Kf(Au(t).replace(De,""),e||0)}function hc(t,e,n){return e=(n?Lo(t,e,n):e===it)?1:xu(e),ei(Au(t),e)}function dc(){var t=arguments,e=Au(t[0]);return t.length<3?e:e.replace(t[1],t[2])}function vc(t,e,n){return n&&"number"!=typeof n&&Lo(t,e,n)&&(e=n=it),(n=n===it?Lt:n>>>0)?(t=Au(t),t&&("string"==typeof e||null!=e&&!xp(e))&&!(e=hi(e))&&q(t)?Oi(tt(t),0,n):t.split(e,n)):[]}function gc(t,e,n){return t=Au(t),n=null==n?0:nr(xu(n),0,t.length),e=hi(e),t.slice(n,n+e.length)==e}function mc(t,e,r){var i=n.templateSettings;r&&Lo(t,e,r)&&(e=it),t=Au(t),e=Np({},e,i,fo);var o,a,s=Np({},e.imports,i.imports,fo),u=Bu(s),c=L(s,u),f=0,l=e.interpolate||Ge,p="__p += '",h=cf((e.escape||Ge).source+"|"+l.source+"|"+(l===Ae?Fe:Ge).source+"|"+(e.evaluate||Ge).source+"|$","g"),d="//# sourceURL="+("sourceURL"in e?e.sourceURL:"lodash.templateSources["+ ++xn+"]")+"\n";t.replace(h,function(e,n,r,i,s,u){return r||(r=i),p+=t.slice(f,u).replace(Ze,V),n&&(o=!0,p+="' +\n__e("+n+") +\n'"),s&&(a=!0,p+="';\n"+s+";\n__p += '"),r&&(p+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),f=u+e.length,e}),p+="';\n";var v=e.variable;v||(p="with (obj) {\n"+p+"\n}\n"),p=(a?p.replace(ye,""):p).replace(_e,"$1").replace(be,"$1;"),p="function("+(v||"obj")+") {\n"+(v?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(o?", __e = _.escape":"")+(a?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+p+"return __p\n}";var g=Zp(function(){return af(u,d+"return "+p).apply(it,c)});if(g.source=p,Qs(g))throw g;return g}function yc(t){return Au(t).toLowerCase()}function _c(t){return Au(t).toUpperCase()}function bc(t,e,n){if((t=Au(t))&&(n||e===it))return t.replace($e,"");if(!t||!(e=hi(e)))return t;var r=tt(t),i=tt(e);return Oi(r,M(r,i),U(r,i)+1).join("")}function wc(t,e,n){if((t=Au(t))&&(n||e===it))return t.replace(Le,"");if(!t||!(e=hi(e)))return t;var r=tt(t);return Oi(r,0,U(r,tt(e))+1).join("")}function xc(t,e,n){if((t=Au(t))&&(n||e===it))return t.replace(De,"");if(!t||!(e=hi(e)))return t;var r=tt(t);return Oi(r,M(r,tt(e))).join("")}function Ec(t,e){var n=St,r=At;if(iu(e)){var i="separator"in e?e.separator:i;n="length"in e?xu(e.length):n,r="omission"in e?hi(e.omission):r}t=Au(t);var o=t.length;if(q(t)){var a=tt(t);o=a.length}if(n>=o)return t;var s=n-Q(r);if(s<1)return r;var u=a?Oi(a,0,s).join(""):t.slice(0,s);if(i===it)return u+r;if(a&&(s+=u.length-s),xp(i)){if(t.slice(s).search(i)){var c,f=u;for(i.global||(i=cf(i.source,Au(qe.exec(i))+"g")),i.lastIndex=0;c=i.exec(f);)var l=c.index;u=u.slice(0,l===it?s:l)}}else if(t.indexOf(hi(i),s)!=s){var p=u.lastIndexOf(i);p>-1&&(u=u.slice(0,p))}return u+r}function Oc(t){return t=Au(t),t&&Ee.test(t)?t.replace(we,Yn):t}function Cc(t,e,n){return t=Au(t),e=n?it:e,e===it?z(t)?rt(t):w(t):t.match(e)||[]}function Sc(t){var e=null==t?0:t.length,n=xo();return t=e?v(t,function(t){if("function"!=typeof t[1])throw new lf(st);return[n(t[0]),t[1]]}):[],ni(function(n){for(var r=-1;++r<e;){var i=t[r];if(s(i[0],this,n))return s(i[1],this,n)}})}function Ac(t){return ir(rr(t,lt))}function kc(t){return function(){return t}}function Nc(t,e){return null==t||t!==t?e:t}function Tc(t){return t}function jc(t){return Ir("function"==typeof t?t:rr(t,lt))}function Rc(t){return Fr(rr(t,lt))}function Pc(t,e){return qr(t,rr(e,lt))}function $c(t,e,n){var r=Bu(e),i=vr(e,r);null!=n||iu(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=vr(e,Bu(e)));var o=!(iu(n)&&"chain"in n&&!n.chain),a=eu(t);return c(i,function(n){var r=e[n];t[n]=r,a&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=Ii(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,g([this.value()],arguments))})}),t}function Dc(){return Pn._===this&&(Pn._=xf),this}function Lc(){}function Ic(t){return t=xu(t),ni(function(e){return Jr(e,t)})}function Mc(t){return Io(t)?k(Qo(t)):Gr(t)}function Uc(t){return function(e){return null==t?it:gr(t,e)}}function Bc(){return[]}function Vc(){return!1}function Fc(){return{}}function qc(){return""}function zc(){return!0}function Hc(t,e){if((t=xu(t))<1||t>Pt)return[];var n=Lt,r=Wf(t,Lt);e=xo(e),t-=Lt;for(var i=P(r,e);++n<t;)e(n);return i}function Jc(t){return mp(t)?v(t,Qo):gu(t)?[t]:Ii(Rl(Au(t)))}function Wc(t){var e=++yf;return Au(t)+e}function Yc(t){return t&&t.length?cr(t,Tc,_r):it}function Kc(t,e){return t&&t.length?cr(t,xo(e,2),_r):it}function Gc(t){return A(t,Tc)}function Zc(t,e){return A(t,xo(e,2))}function Xc(t){return t&&t.length?cr(t,Tc,Br):it}function Qc(t,e){return t&&t.length?cr(t,xo(e,2),Br):it}function tf(t){return t&&t.length?R(t,Tc):0}function ef(t,e){return t&&t.length?R(t,xo(e,2)):0}e=null==e?Pn:Kn.defaults(Pn.Object(),e,Kn.pick(Pn,wn));var nf=e.Array,rf=e.Date,of=e.Error,af=e.Function,sf=e.Math,uf=e.Object,cf=e.RegExp,ff=e.String,lf=e.TypeError,pf=nf.prototype,hf=af.prototype,df=uf.prototype,vf=e["__core-js_shared__"],gf=hf.toString,mf=df.hasOwnProperty,yf=0,_f=function(){var t=/[^.]+$/.exec(vf&&vf.keys&&vf.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),bf=df.toString,wf=gf.call(uf),xf=Pn._,Ef=cf("^"+gf.call(mf).replace(Re,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Of=Ln?e.Buffer:it,Cf=e.Symbol,Sf=e.Uint8Array,Af=Of?Of.allocUnsafe:it,kf=W(uf.getPrototypeOf,uf),Nf=uf.create,Tf=df.propertyIsEnumerable,jf=pf.splice,Rf=Cf?Cf.isConcatSpreadable:it,Pf=Cf?Cf.iterator:it,$f=Cf?Cf.toStringTag:it,Df=function(){try{var t=Co(uf,"defineProperty");return t({},"",{}),t}catch(t){}}(),Lf=e.clearTimeout!==Pn.clearTimeout&&e.clearTimeout,If=rf&&rf.now!==Pn.Date.now&&rf.now,Mf=e.setTimeout!==Pn.setTimeout&&e.setTimeout,Uf=sf.ceil,Bf=sf.floor,Vf=uf.getOwnPropertySymbols,Ff=Of?Of.isBuffer:it,qf=e.isFinite,zf=pf.join,Hf=W(uf.keys,uf),Jf=sf.max,Wf=sf.min,Yf=rf.now,Kf=e.parseInt,Gf=sf.random,Zf=pf.reverse,Xf=Co(e,"DataView"),Qf=Co(e,"Map"),tl=Co(e,"Promise"),el=Co(e,"Set"),nl=Co(e,"WeakMap"),rl=Co(uf,"create"),il=nl&&new nl,ol={},al=ta(Xf),sl=ta(Qf),ul=ta(tl),cl=ta(el),fl=ta(nl),ll=Cf?Cf.prototype:it,pl=ll?ll.valueOf:it,hl=ll?ll.toString:it,dl=function(){function t(){}return function(e){if(!iu(e))return{};if(Nf)return Nf(e);t.prototype=e;var n=new t;return t.prototype=it,n}}();n.templateSettings={escape:Ce,evaluate:Se,interpolate:Ae,variable:"",imports:{_:n}},n.prototype=r.prototype,n.prototype.constructor=n,i.prototype=dl(r.prototype),i.prototype.constructor=i,b.prototype=dl(r.prototype),b.prototype.constructor=b,nt.prototype.clear=Be,nt.prototype.delete=Xe,nt.prototype.get=Qe,nt.prototype.has=tn,nt.prototype.set=en,nn.prototype.clear=rn,nn.prototype.delete=on,nn.prototype.get=an,nn.prototype.has=sn,nn.prototype.set=un,cn.prototype.clear=fn,cn.prototype.delete=ln,cn.prototype.get=pn,cn.prototype.has=hn,cn.prototype.set=dn,mn.prototype.add=mn.prototype.push=yn,mn.prototype.has=_n,bn.prototype.clear=Cn,bn.prototype.delete=Sn,bn.prototype.get=An,bn.prototype.has=kn,bn.prototype.set=jn;var vl=qi(hr),gl=qi(dr,!0),ml=zi(),yl=zi(!0),_l=il?function(t,e){return il.set(t,e),t}:Tc,bl=Df?function(t,e){return Df(t,"toString",{configurable:!0,enumerable:!1,value:kc(e),writable:!0})}:Tc,wl=ni,xl=Lf||function(t){return Pn.clearTimeout(t)},El=el&&1/K(new el([,-0]))[1]==Rt?function(t){return new el(t)}:Lc,Ol=il?function(t){return il.get(t)}:Lc,Cl=Vf?function(t){return null==t?[]:(t=uf(t),p(Vf(t),function(e){return Tf.call(t,e)}))}:Bc,Sl=Vf?function(t){for(var e=[];t;)g(e,Cl(t)),t=kf(t);return e}:Bc,Al=yr;(Xf&&Al(new Xf(new ArrayBuffer(1)))!=ue||Qf&&Al(new Qf)!=Kt||tl&&"[object Promise]"!=Al(tl.resolve())||el&&Al(new el)!=ee||nl&&Al(new nl)!=oe)&&(Al=function(t){var e=yr(t),n=e==Xt?t.constructor:it,r=n?ta(n):"";if(r)switch(r){case al:return ue;case sl:return Kt;case ul:return"[object Promise]";case cl:return ee;case fl:return oe}return e});var kl=vf?eu:Vc,Nl=Zo(_l),Tl=Mf||function(t,e){return Pn.setTimeout(t,e)},jl=Zo(bl),Rl=function(t){var e=js(t,function(t){return n.size===ct&&n.clear(),t}),n=e.cache;return e}(function(t){var e=[];return Te.test(t)&&e.push(""),t.replace(je,function(t,n,r,i){e.push(r?i.replace(Ve,"$1"):n||t)}),e}),Pl=ni(function(t,e){return Ws(t)?sr(t,pr(e,1,Ws,!0)):[]}),$l=ni(function(t,e){var n=wa(e);return Ws(n)&&(n=it),Ws(t)?sr(t,pr(e,1,Ws,!0),xo(n,2)):[]}),Dl=ni(function(t,e){var n=wa(e);return Ws(n)&&(n=it),Ws(t)?sr(t,pr(e,1,Ws,!0),it,n):[]}),Ll=ni(function(t){var e=v(t,wi);return e.length&&e[0]===t[0]?Er(e):[]}),Il=ni(function(t){var e=wa(t),n=v(t,wi);return e===wa(n)?e=it:n.pop(),n.length&&n[0]===t[0]?Er(n,xo(e,2)):[]}),Ml=ni(function(t){var e=wa(t),n=v(t,wi);return e="function"==typeof e?e:it,e&&n.pop(),n.length&&n[0]===t[0]?Er(n,it,e):[]}),Ul=ni(Oa),Bl=mo(function(t,e){var n=null==t?0:t.length,r=er(t,e);return Xr(t,v(e,function(t){return Do(t,n)?+t:t}).sort(Pi)),r}),Vl=ni(function(t){return di(pr(t,1,Ws,!0))}),Fl=ni(function(t){var e=wa(t);return Ws(e)&&(e=it),di(pr(t,1,Ws,!0),xo(e,2))}),ql=ni(function(t){var e=wa(t);return e="function"==typeof e?e:it,di(pr(t,1,Ws,!0),it,e)}),zl=ni(function(t,e){return Ws(t)?sr(t,e):[]}),Hl=ni(function(t){return _i(p(t,Ws))}),Jl=ni(function(t){var e=wa(t);return Ws(e)&&(e=it),_i(p(t,Ws),xo(e,2))}),Wl=ni(function(t){var e=wa(t);return e="function"==typeof e?e:it,_i(p(t,Ws),it,e)}),Yl=ni(Ja),Kl=ni(function(t){var e=t.length,n=e>1?t[e-1]:it;return n="function"==typeof n?(t.pop(),n):it,Wa(t,n)}),Gl=mo(function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,o=function(e){return er(e,t)};return!(e>1||this.__actions__.length)&&r instanceof b&&Do(n)?(r=r.slice(n,+n+(e?1:0)),r.__actions__.push({func:Xa,args:[o],thisArg:it}),new i(r,this.__chain__).thru(function(t){return e&&!t.length&&t.push(it),t})):this.thru(o)}),Zl=Vi(function(t,e,n){mf.call(t,n)?++t[n]:tr(t,n,1)}),Xl=Gi(la),Ql=Gi(pa),tp=Vi(function(t,e,n){mf.call(t,n)?t[n].push(e):tr(t,n,[e])}),ep=ni(function(t,e,n){var r=-1,i="function"==typeof e,o=Js(t)?nf(t.length):[];return vl(t,function(t){o[++r]=i?s(e,t,n):Cr(t,e,n)}),o}),np=Vi(function(t,e,n){tr(t,n,e)}),rp=Vi(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),ip=ni(function(t,e){if(null==t)return[];var n=e.length;return n>1&&Lo(t,e[0],e[1])?e=[]:n>2&&Lo(e[0],e[1],e[2])&&(e=[e[0]]),Wr(t,pr(e,1),[])}),op=If||function(){return Pn.Date.now()},ap=ni(function(t,e,n){var r=gt;if(n.length){var i=Y(n,wo(ap));r|=wt}return co(t,r,e,n,i)}),sp=ni(function(t,e,n){var r=gt|mt;if(n.length){var i=Y(n,wo(sp));r|=wt}return co(e,r,t,n,i)}),up=ni(function(t,e){return ar(t,1,e)}),cp=ni(function(t,e,n){return ar(t,Ou(e)||0,n)});js.Cache=cn;var fp=wl(function(t,e){e=1==e.length&&mp(e[0])?v(e[0],D(xo())):v(pr(e,1),D(xo()));var n=e.length;return ni(function(r){for(var i=-1,o=Wf(r.length,n);++i<o;)r[i]=e[i].call(this,r[i]);return s(t,this,r)})}),lp=ni(function(t,e){var n=Y(e,wo(lp));return co(t,wt,it,e,n)}),pp=ni(function(t,e){var n=Y(e,wo(pp));return co(t,xt,it,e,n)}),hp=mo(function(t,e){return co(t,Ot,it,it,it,e)}),dp=oo(_r),vp=oo(function(t,e){return t>=e}),gp=Sr(function(){return arguments}())?Sr:function(t){return ou(t)&&mf.call(t,"callee")&&!Tf.call(t,"callee")},mp=nf.isArray,yp=Un?D(Un):Ar,_p=Ff||Vc,bp=Bn?D(Bn):kr,wp=Vn?D(Vn):jr,xp=Fn?D(Fn):$r,Ep=qn?D(qn):Dr,Op=zn?D(zn):Lr,Cp=oo(Br),Sp=oo(function(t,e){return t<=e}),Ap=Fi(function(t,e){if(Vo(e)||Js(e))return void Mi(e,Bu(e),t);for(var n in e)mf.call(e,n)&&Hn(t,n,e[n])}),kp=Fi(function(t,e){Mi(e,Vu(e),t)}),Np=Fi(function(t,e,n,r){Mi(e,Vu(e),t,r)}),Tp=Fi(function(t,e,n,r){Mi(e,Bu(e),t,r)}),jp=mo(er),Rp=ni(function(t){return t.push(it,fo),s(Np,it,t)}),Pp=ni(function(t){return t.push(it,lo),s(Mp,it,t)}),$p=Qi(function(t,e,n){t[e]=n},kc(Tc)),Dp=Qi(function(t,e,n){mf.call(t,e)?t[e].push(n):t[e]=[n]},xo),Lp=ni(Cr),Ip=Fi(function(t,e,n){zr(t,e,n)}),Mp=Fi(function(t,e,n,r){zr(t,e,n,r)}),Up=mo(function(t,e){var n={};if(null==t)return n;var r=!1;e=v(e,function(e){return e=Ei(e,t),r||(r=e.length>1),e}),Mi(t,_o(t),n),r&&(n=rr(n,lt|pt|ht,po));for(var i=e.length;i--;)vi(n,e[i]);return n}),Bp=mo(function(t,e){return null==t?{}:Yr(t,e)}),Vp=uo(Bu),Fp=uo(Vu),qp=Wi(function(t,e,n){return e=e.toLowerCase(),t+(n?ic(e):e)}),zp=Wi(function(t,e,n){return t+(n?"-":"")+e.toLowerCase()}),Hp=Wi(function(t,e,n){return t+(n?" ":"")+e.toLowerCase()}),Jp=Ji("toLowerCase"),Wp=Wi(function(t,e,n){return t+(n?"_":"")+e.toLowerCase()}),Yp=Wi(function(t,e,n){return t+(n?" ":"")+Gp(e)}),Kp=Wi(function(t,e,n){return t+(n?" ":"")+e.toUpperCase()}),Gp=Ji("toUpperCase"),Zp=ni(function(t,e){try{return s(t,it,e)}catch(t){return Qs(t)?t:new of(t)}}),Xp=mo(function(t,e){return c(e,function(e){e=Qo(e),tr(t,e,ap(t[e],t))}),t}),Qp=Zi(),th=Zi(!0),eh=ni(function(t,e){return function(n){return Cr(n,t,e)}}),nh=ni(function(t,e){return function(n){return Cr(t,n,e)}}),rh=eo(v),ih=eo(l),oh=eo(_),ah=io(),sh=io(!0),uh=to(function(t,e){return t+e},0),ch=so("ceil"),fh=to(function(t,e){return t/e},1),lh=so("floor"),ph=to(function(t,e){return t*e},1),hh=so("round"),dh=to(function(t,e){return t-e},0);return n.after=Os,n.ary=Cs,n.assign=Ap,n.assignIn=kp,n.assignInWith=Np,n.assignWith=Tp,n.at=jp,n.before=Ss,n.bind=ap,n.bindAll=Xp,n.bindKey=sp,n.castArray=Us,n.chain=Ga,n.chunk=ra,n.compact=ia,n.concat=oa,n.cond=Sc,n.conforms=Ac,n.constant=kc,n.countBy=Zl,n.create=ku,n.curry=As,n.curryRight=ks,n.debounce=Ns,n.defaults=Rp,n.defaultsDeep=Pp,n.defer=up,n.delay=cp,n.difference=Pl,n.differenceBy=$l,n.differenceWith=Dl,n.drop=aa,n.dropRight=sa,n.dropRightWhile=ua,n.dropWhile=ca,n.fill=fa,n.filter=ss,n.flatMap=us,n.flatMapDeep=cs,n.flatMapDepth=fs,n.flatten=ha,n.flattenDeep=da,n.flattenDepth=va,n.flip=Ts,n.flow=Qp,n.flowRight=th,n.fromPairs=ga,n.functions=Du,n.functionsIn=Lu,n.groupBy=tp,n.initial=_a,n.intersection=Ll,n.intersectionBy=Il,n.intersectionWith=Ml,n.invert=$p,n.invertBy=Dp,n.invokeMap=ep,n.iteratee=jc,n.keyBy=np,n.keys=Bu,n.keysIn=Vu,n.map=ds,n.mapKeys=Fu,n.mapValues=qu,n.matches=Rc,n.matchesProperty=Pc,n.memoize=js,n.merge=Ip,n.mergeWith=Mp,n.method=eh,n.methodOf=nh,n.mixin=$c,n.negate=Rs,n.nthArg=Ic,n.omit=Up,n.omitBy=zu,n.once=Ps,n.orderBy=vs,n.over=rh,n.overArgs=fp,n.overEvery=ih,n.overSome=oh,n.partial=lp,n.partialRight=pp,n.partition=rp,n.pick=Bp,n.pickBy=Hu,n.property=Mc,n.propertyOf=Uc,n.pull=Ul,n.pullAll=Oa,n.pullAllBy=Ca,n.pullAllWith=Sa,n.pullAt=Bl,n.range=ah,n.rangeRight=sh,n.rearg=hp,n.reject=ys,n.remove=Aa,n.rest=$s,n.reverse=ka,n.sampleSize=bs,n.set=Wu,n.setWith=Yu,n.shuffle=ws,n.slice=Na,n.sortBy=ip,n.sortedUniq=La,n.sortedUniqBy=Ia,n.split=vc,n.spread=Ds,n.tail=Ma,n.take=Ua,n.takeRight=Ba,n.takeRightWhile=Va,n.takeWhile=Fa,n.tap=Za,n.throttle=Ls,n.thru=Xa,n.toArray=bu,n.toPairs=Vp,n.toPairsIn=Fp,n.toPath=Jc,n.toPlainObject=Cu,n.transform=Ku,n.unary=Is,n.union=Vl,n.unionBy=Fl,n.unionWith=ql,n.uniq=qa,n.uniqBy=za,n.uniqWith=Ha,n.unset=Gu,n.unzip=Ja,n.unzipWith=Wa,n.update=Zu,n.updateWith=Xu,n.values=Qu,n.valuesIn=tc,n.without=zl,n.words=Cc,n.wrap=Ms,n.xor=Hl,n.xorBy=Jl,n.xorWith=Wl,n.zip=Yl,n.zipObject=Ya,n.zipObjectDeep=Ka,n.zipWith=Kl,n.entries=Vp,n.entriesIn=Fp,n.extend=kp,n.extendWith=Np,$c(n,n),n.add=uh,n.attempt=Zp,n.camelCase=qp,n.capitalize=ic,n.ceil=ch,n.clamp=ec,n.clone=Bs,n.cloneDeep=Fs,n.cloneDeepWith=qs,n.cloneWith=Vs,n.conformsTo=zs,n.deburr=oc,n.defaultTo=Nc,n.divide=fh,n.endsWith=ac,n.eq=Hs,n.escape=sc,n.escapeRegExp=uc,n.every=as,n.find=Xl,n.findIndex=la,n.findKey=Nu,n.findLast=Ql,n.findLastIndex=pa,n.findLastKey=Tu,n.floor=lh,n.forEach=ls,n.forEachRight=ps,n.forIn=ju,n.forInRight=Ru,n.forOwn=Pu,n.forOwnRight=$u,n.get=Iu,n.gt=dp,n.gte=vp,n.has=Mu,n.hasIn=Uu,n.head=ma,n.identity=Tc,n.includes=hs,n.indexOf=ya,n.inRange=nc,n.invoke=Lp,n.isArguments=gp,n.isArray=mp,n.isArrayBuffer=yp,n.isArrayLike=Js,n.isArrayLikeObject=Ws,n.isBoolean=Ys,n.isBuffer=_p,n.isDate=bp,n.isElement=Ks,n.isEmpty=Gs,n.isEqual=Zs,n.isEqualWith=Xs,n.isError=Qs,n.isFinite=tu,n.isFunction=eu,n.isInteger=nu,n.isLength=ru,n.isMap=wp,n.isMatch=au,n.isMatchWith=su,n.isNaN=uu,n.isNative=cu,n.isNil=lu,n.isNull=fu,n.isNumber=pu,n.isObject=iu,n.isObjectLike=ou,n.isPlainObject=hu,n.isRegExp=xp,n.isSafeInteger=du,n.isSet=Ep,n.isString=vu,n.isSymbol=gu,n.isTypedArray=Op,n.isUndefined=mu,n.isWeakMap=yu,n.isWeakSet=_u,n.join=ba,n.kebabCase=zp,n.last=wa,n.lastIndexOf=xa,n.lowerCase=Hp,n.lowerFirst=Jp,n.lt=Cp,n.lte=Sp,n.max=Yc,n.maxBy=Kc,n.mean=Gc,n.meanBy=Zc,n.min=Xc,n.minBy=Qc,n.stubArray=Bc,n.stubFalse=Vc,n.stubObject=Fc,n.stubString=qc,n.stubTrue=zc,n.multiply=ph,n.nth=Ea,n.noConflict=Dc,n.noop=Lc,n.now=op,n.pad=cc,n.padEnd=fc,n.padStart=lc,n.parseInt=pc,n.random=rc,n.reduce=gs,n.reduceRight=ms,n.repeat=hc,n.replace=dc,n.result=Ju,n.round=hh,n.runInContext=t,n.sample=_s,n.size=xs,n.snakeCase=Wp,n.some=Es,n.sortedIndex=Ta,n.sortedIndexBy=ja,n.sortedIndexOf=Ra,n.sortedLastIndex=Pa,n.sortedLastIndexBy=$a,n.sortedLastIndexOf=Da,n.startCase=Yp,n.startsWith=gc,n.subtract=dh,n.sum=tf,n.sumBy=ef,n.template=mc,n.times=Hc,n.toFinite=wu,n.toInteger=xu,n.toLength=Eu,n.toLower=yc,n.toNumber=Ou,n.toSafeInteger=Su,n.toString=Au,n.toUpper=_c,n.trim=bc,n.trimEnd=wc,n.trimStart=xc,n.truncate=Ec,n.unescape=Oc,n.uniqueId=Wc,n.upperCase=Kp,n.upperFirst=Gp,n.each=ls,n.eachRight=ps,n.first=ma,$c(n,function(){var t={};return hr(n,function(e,r){mf.call(n.prototype,r)||(t[r]=e)}),t}(),{chain:!1}),n.VERSION="4.17.4",c(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){n[t].placeholder=n}),c(["drop","take"],function(t,e){b.prototype[t]=function(n){n=n===it?1:Jf(xu(n),0);var r=this.__filtered__&&!e?new b(this):this.clone();return r.__filtered__?r.__takeCount__=Wf(n,r.__takeCount__):r.__views__.push({size:Wf(n,Lt),type:t+(r.__dir__<0?"Right":"")}),r},b.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}}),c(["filter","map","takeWhile"],function(t,e){var n=e+1,r=n==Tt||3==n;b.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:xo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),c(["head","last"],function(t,e){var n="take"+(e?"Right":"");b.prototype[t]=function(){return this[n](1).value()[0]}}),c(["initial","tail"],function(t,e){var n="drop"+(e?"":"Right");b.prototype[t]=function(){return this.__filtered__?new b(this):this[n](1)}}),b.prototype.compact=function(){return this.filter(Tc)},b.prototype.find=function(t){return this.filter(t).head()},b.prototype.findLast=function(t){return this.reverse().find(t)},b.prototype.invokeMap=ni(function(t,e){return"function"==typeof t?new b(this):this.map(function(n){return Cr(n,t,e)})}),b.prototype.reject=function(t){return this.filter(Rs(xo(t)))},b.prototype.slice=function(t,e){t=xu(t);var n=this;return n.__filtered__&&(t>0||e<0)?new b(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==it&&(e=xu(e),n=e<0?n.dropRight(-e):n.take(e-t)),n)},b.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},b.prototype.toArray=function(){return this.take(Lt)},hr(b.prototype,function(t,e){var r=/^(?:filter|find|map|reject)|While$/.test(e),o=/^(?:head|last)$/.test(e),a=n[o?"take"+("last"==e?"Right":""):e],s=o||/^find/.test(e);a&&(n.prototype[e]=function(){var e=this.__wrapped__,u=o?[1]:arguments,c=e instanceof b,f=u[0],l=c||mp(e),p=function(t){var e=a.apply(n,g([t],u));return o&&h?e[0]:e};l&&r&&"function"==typeof f&&1!=f.length&&(c=l=!1);var h=this.__chain__,d=!!this.__actions__.length,v=s&&!h,m=c&&!d;if(!s&&l){e=m?e:new b(this);var y=t.apply(e,u);return y.__actions__.push({func:Xa,args:[p],thisArg:it}),new i(y,h)}return v&&m?t.apply(this,u):(y=this.thru(p),v?o?y.value()[0]:y.value():y)})}),c(["pop","push","shift","sort","splice","unshift"],function(t){var e=pf[t],r=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",i=/^(?:pop|shift)$/.test(t);n.prototype[t]=function(){var t=arguments;if(i&&!this.__chain__){var n=this.value();return e.apply(mp(n)?n:[],t)}return this[r](function(n){return e.apply(mp(n)?n:[],t)})}}),hr(b.prototype,function(t,e){var r=n[e];if(r){var i=r.name+"";(ol[i]||(ol[i]=[])).push({name:e,func:r})}}),ol[Xi(it,mt).name]=[{name:"wrapper",func:it}],b.prototype.clone=N,b.prototype.reverse=Z,b.prototype.value=et,n.prototype.at=Gl,n.prototype.chain=Qa,n.prototype.commit=ts,n.prototype.next=es,n.prototype.plant=rs,n.prototype.reverse=is,n.prototype.toJSON=n.prototype.valueOf=n.prototype.value=os,n.prototype.first=n.prototype.head,Pf&&(n.prototype[Pf]=ns),n}();Pn._=Kn,(i=function(){return Kn}.call(e,n,e,r))!==it&&(r.exports=i)}).call(this)}).call(e,n(1),n(12)(t))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){"use strict";var r=n(0),i=n(34),o={token:"",baseUrl:"https://www.flex.io/api/v1",insecure:!1,debug:!1},a={_init:function(){this.connections=n(61).getConnectionsObject(this),this.pipes=n(62).getPipesObject(this),this.util=n(5).getUtilObject(this),this._http=null,this.version=this.util.isNodeJs()?n(63).version:"1.20.2";var t=n(64).getPipeConstructor;this.pipe=t(this);var e=n(65).getConnectionConstructor;this.connection=e(this)},setup:function(t,e){return o=r.assign(o,{token:t},e),this._http=null,this._createHttp(),this},getConfig:function(){return r.assign({},o)},http:function(){return this._http||this._createHttp(),this._http},task:i,_createHttp:function(){var t={baseURL:o.baseUrl,headers:{Authorization:"Bearer "+o.token},insecure:!0===o.insecure};this._http=n(66).create(t)}};a._init(),t.exports=a},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e,n){(function(t){function n(){if(void 0!==o)return o;if(t.XMLHttpRequest){o=new t.XMLHttpRequest;try{o.open("GET",t.XDomainRequest?"/":"https://example.com")}catch(t){o=null}}else o=null;return o}function r(t){var e=n();if(!e)return!1;try{return e.responseType=t,e.responseType===t}catch(t){}return!1}function i(t){return"function"==typeof t}e.fetch=i(t.fetch)&&i(t.ReadableStream),e.blobConstructor=!1;try{new Blob([new ArrayBuffer(1)]),e.blobConstructor=!0}catch(t){}var o,a=void 0!==t.ArrayBuffer,s=a&&i(t.ArrayBuffer.prototype.slice);e.arraybuffer=e.fetch||a&&r("arraybuffer"),e.msstream=!e.fetch&&s&&r("ms-stream"),e.mozchunkedarraybuffer=!e.fetch&&a&&r("moz-chunked-arraybuffer"),e.overrideMimeType=e.fetch||!!n()&&i(n().overrideMimeType),e.vbArray=i(t.VBArray),o=null}).call(e,n(1))},function(t,e,n){e=t.exports=n(17),e.Stream=e,e.Readable=e,e.Writable=n(21),e.Duplex=n(6),e.Transform=n(23),e.PassThrough=n(77)},function(t,e,n){"use strict";(function(e,r){function i(t){return I.from(t)}function o(t){return I.isBuffer(t)||t instanceof M}function a(t,e,n){if("function"==typeof t.prependListener)return t.prependListener(e,n);t._events&&t._events[e]?$(t._events[e])?t._events[e].unshift(n):t._events[e]=[n,t._events[e]]:t.on(e,n)}function s(t,e){P=P||n(6),t=t||{},this.objectMode=!!t.objectMode,e instanceof P&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var r=t.highWaterMark,i=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:i,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new q,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(F||(F=n(22).StringDecoder),this.decoder=new F(t.encoding),this.encoding=t.encoding)}function u(t){if(P=P||n(6),!(this instanceof u))return new u(t);this._readableState=new s(t,this),this.readable=!0,t&&("function"==typeof t.read&&(this._read=t.read),"function"==typeof t.destroy&&(this._destroy=t.destroy)),L.call(this)}function c(t,e,n,r,o){var a=t._readableState;if(null===e)a.reading=!1,v(t,a);else{var s;o||(s=l(a,e)),s?t.emit("error",s):a.objectMode||e&&e.length>0?("string"==typeof e||a.objectMode||Object.getPrototypeOf(e)===I.prototype||(e=i(e)),r?a.endEmitted?t.emit("error",new Error("stream.unshift() after end event")):f(t,a,e,!0):a.ended?t.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!n?(e=a.decoder.write(e),a.objectMode||0!==e.length?f(t,a,e,!1):y(t,a)):f(t,a,e,!1))):r||(a.reading=!1)}return p(a)}function f(t,e,n,r){e.flowing&&0===e.length&&!e.sync?(t.emit("data",n),t.read(0)):(e.length+=e.objectMode?1:n.length,r?e.buffer.unshift(n):e.buffer.push(n),e.needReadable&&g(t)),y(t,e)}function l(t,e){var n;return o(e)||"string"==typeof e||void 0===e||t.objectMode||(n=new TypeError("Invalid non-string/buffer chunk")),n}function p(t){return!t.ended&&(t.needReadable||t.length<t.highWaterMark||0===t.length)}function h(t){return t>=J?t=J:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function d(t,e){return t<=0||0===e.length&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=h(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function v(t,e){if(!e.ended){if(e.decoder){var n=e.decoder.end();n&&n.length&&(e.buffer.push(n),e.length+=e.objectMode?1:n.length)}e.ended=!0,g(t)}}function g(t){var e=t._readableState;e.needReadable=!1,e.emittedReadable||(V("emitReadable",e.flowing),e.emittedReadable=!0,e.sync?R(m,t):m(t))}function m(t){V("emit readable"),t.emit("readable"),O(t)}function y(t,e){e.readingMore||(e.readingMore=!0,R(_,t,e))}function _(t,e){for(var n=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length<e.highWaterMark&&(V("maybeReadMore read 0"),t.read(0),n!==e.length);)n=e.length;e.readingMore=!1}function b(t){return function(){var e=t._readableState;V("pipeOnDrain",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,0===e.awaitDrain&&D(t,"data")&&(e.flowing=!0,O(t))}}function w(t){V("readable nexttick read 0"),t.read(0)}function x(t,e){e.resumeScheduled||(e.resumeScheduled=!0,R(E,t,e))}function E(t,e){e.reading||(V("resume read 0"),t.read(0)),e.resumeScheduled=!1,e.awaitDrain=0,t.emit("resume"),O(t),e.flowing&&!e.reading&&t.read(0)}function O(t){var e=t._readableState;for(V("flow",e.flowing);e.flowing&&null!==t.read(););}function C(t,e){if(0===e.length)return null;var n;return e.objectMode?n=e.buffer.shift():!t||t>=e.length?(n=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.head.data:e.buffer.concat(e.length),e.buffer.clear()):n=S(t,e.buffer,e.decoder),n}function S(t,e,n){var r;return t<e.head.data.length?(r=e.head.data.slice(0,t),e.head.data=e.head.data.slice(t)):r=t===e.head.data.length?e.shift():n?A(t,e):k(t,e),r}function A(t,e){var n=e.head,r=1,i=n.data;for(t-=i.length;n=n.next;){var o=n.data,a=t>o.length?o.length:t;if(a===o.length?i+=o:i+=o.slice(0,t),0===(t-=a)){a===o.length?(++r,n.next?e.head=n.next:e.head=e.tail=null):(e.head=n,n.data=o.slice(a));break}++r}return e.length-=r,i}function k(t,e){var n=I.allocUnsafe(t),r=e.head,i=1;for(r.data.copy(n),t-=r.data.length;r=r.next;){var o=r.data,a=t>o.length?o.length:t;if(o.copy(n,n.length-t,0,a),0===(t-=a)){a===o.length?(++i,r.next?e.head=r.next:e.head=e.tail=null):(e.head=r,r.data=o.slice(a));break}++i}return e.length-=i,n}function N(t){var e=t._readableState;if(e.length>0)throw new Error('"endReadable()" called on non-empty stream');e.endEmitted||(e.ended=!0,R(T,e,t))}function T(t,e){t.endEmitted||0!==t.length||(t.endEmitted=!0,e.readable=!1,e.emit("end"))}function j(t,e){for(var n=0,r=t.length;n<r;n++)if(t[n]===e)return n;return-1}var R=n(8);t.exports=u;var P,$=n(14);u.ReadableState=s;var D=(n(18).EventEmitter,function(t,e){return t.listeners(e).length}),L=n(19),I=n(9).Buffer,M=e.Uint8Array||function(){},U=n(7);U.inherits=n(4);var B=n(72),V=void 0;V=B&&B.debuglog?B.debuglog("stream"):function(){};var F,q=n(73),z=n(20);U.inherits(u,L);var H=["error","close","destroy","pause","resume"];Object.defineProperty(u.prototype,"destroyed",{get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(t){this._readableState&&(this._readableState.destroyed=t)}}),u.prototype.destroy=z.destroy,u.prototype._undestroy=z.undestroy,u.prototype._destroy=function(t,e){this.push(null),e(t)},u.prototype.push=function(t,e){var n,r=this._readableState;return r.objectMode?n=!0:"string"==typeof t&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=I.from(t,e),e=""),n=!0),c(this,t,e,!1,n)},u.prototype.unshift=function(t){return c(this,t,null,!0,!1)},u.prototype.isPaused=function(){return!1===this._readableState.flowing},u.prototype.setEncoding=function(t){return F||(F=n(22).StringDecoder),this._readableState.decoder=new F(t),this._readableState.encoding=t,this};var J=8388608;u.prototype.read=function(t){V("read",t),t=parseInt(t,10);var e=this._readableState,n=t;if(0!==t&&(e.emittedReadable=!1),0===t&&e.needReadable&&(e.length>=e.highWaterMark||e.ended))return V("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?N(this):g(this),null;if(0===(t=d(t,e))&&e.ended)return 0===e.length&&N(this),null;var r=e.needReadable;V("need readable",r),(0===e.length||e.length-t<e.highWaterMark)&&(r=!0,V("length less than watermark",r)),e.ended||e.reading?(r=!1,V("reading or ended",r)):r&&(V("do read"),e.reading=!0,e.sync=!0,0===e.length&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(t=d(n,e)));var i;return i=t>0?C(t,e):null,null===i?(e.needReadable=!0,t=0):e.length-=t,0===e.length&&(e.ended||(e.needReadable=!0),n!==t&&e.ended&&N(this)),null!==i&&this.emit("data",i),i},u.prototype._read=function(t){this.emit("error",new Error("_read() is not implemented"))},u.prototype.pipe=function(t,e){function n(t,e){V("onunpipe"),t===p&&e&&!1===e.hasUnpiped&&(e.hasUnpiped=!0,o())}function i(){V("onend"),t.end()}function o(){V("cleanup"),t.removeListener("close",c),t.removeListener("finish",f),t.removeListener("drain",g),t.removeListener("error",u),t.removeListener("unpipe",n),p.removeListener("end",i),p.removeListener("end",l),p.removeListener("data",s),m=!0,!h.awaitDrain||t._writableState&&!t._writableState.needDrain||g()}function s(e){V("ondata"),y=!1,!1!==t.write(e)||y||((1===h.pipesCount&&h.pipes===t||h.pipesCount>1&&-1!==j(h.pipes,t))&&!m&&(V("false write response, pause",p._readableState.awaitDrain),p._readableState.awaitDrain++,y=!0),p.pause())}function u(e){V("onerror",e),l(),t.removeListener("error",u),0===D(t,"error")&&t.emit("error",e)}function c(){t.removeListener("finish",f),l()}function f(){V("onfinish"),t.removeListener("close",c),l()}function l(){V("unpipe"),p.unpipe(t)}var p=this,h=this._readableState;switch(h.pipesCount){case 0:h.pipes=t;break;case 1:h.pipes=[h.pipes,t];break;default:h.pipes.push(t)}h.pipesCount+=1,V("pipe count=%d opts=%j",h.pipesCount,e);var d=(!e||!1!==e.end)&&t!==r.stdout&&t!==r.stderr,v=d?i:l;h.endEmitted?R(v):p.once("end",v),t.on("unpipe",n);var g=b(p);t.on("drain",g);var m=!1,y=!1;return p.on("data",s),a(t,"error",u),t.once("close",c),t.once("finish",f),t.emit("pipe",p),h.flowing||(V("pipe resume"),p.resume()),t},u.prototype.unpipe=function(t){var e=this._readableState,n={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,n),this);if(!t){var r=e.pipes,i=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var o=0;o<i;o++)r[o].emit("unpipe",this,n);return this}var a=j(e.pipes,t);return-1===a?this:(e.pipes.splice(a,1),e.pipesCount-=1,1===e.pipesCount&&(e.pipes=e.pipes[0]),t.emit("unpipe",this,n),this)},u.prototype.on=function(t,e){var n=L.prototype.on.call(this,t,e);if("data"===t)!1!==this._readableState.flowing&&this.resume();else if("readable"===t){var r=this._readableState;r.endEmitted||r.readableListening||(r.readableListening=r.needReadable=!0,r.emittedReadable=!1,r.reading?r.length&&g(this):R(w,this))}return n},u.prototype.addListener=u.prototype.on,u.prototype.resume=function(){var t=this._readableState;return t.flowing||(V("resume"),t.flowing=!0,x(this,t)),this},u.prototype.pause=function(){return V("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(V("pause"),this._readableState.flowing=!1,this.emit("pause")),this},u.prototype.wrap=function(t){var e=this._readableState,n=!1,r=this;t.on("end",function(){if(V("wrapped end"),e.decoder&&!e.ended){var t=e.decoder.end();t&&t.length&&r.push(t)}r.push(null)}),t.on("data",function(i){if(V("wrapped data"),e.decoder&&(i=e.decoder.write(i)),(!e.objectMode||null!==i&&void 0!==i)&&(e.objectMode||i&&i.length)){r.push(i)||(n=!0,t.pause())}});for(var i in t)void 0===this[i]&&"function"==typeof t[i]&&(this[i]=function(e){return function(){return t[e].apply(t,arguments)}}(i));for(var o=0;o<H.length;o++)t.on(H[o],r.emit.bind(r,H[o]));return r._read=function(e){V("wrapped _read",e),n&&(n=!1,t.resume())},r},u._fromList=C}).call(e,n(1),n(2))},function(t,e){function n(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(t){return"function"==typeof t}function i(t){return"number"==typeof t}function o(t){return"object"==typeof t&&null!==t}function a(t){return void 0===t}t.exports=n,n.EventEmitter=n,n.prototype._events=void 0,n.prototype._maxListeners=void 0,n.defaultMaxListeners=10,n.prototype.setMaxListeners=function(t){if(!i(t)||t<0||isNaN(t))throw TypeError("n must be a positive number");return this._maxListeners=t,this},n.prototype.emit=function(t){var e,n,i,s,u,c;if(this._events||(this._events={}),"error"===t&&(!this._events.error||o(this._events.error)&&!this._events.error.length)){if((e=arguments[1])instanceof Error)throw e;var f=new Error('Uncaught, unspecified "error" event. ('+e+")");throw f.context=e,f}if(n=this._events[t],a(n))return!1;if(r(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:s=Array.prototype.slice.call(arguments,1),n.apply(this,s)}else if(o(n))for(s=Array.prototype.slice.call(arguments,1),c=n.slice(),i=c.length,u=0;u<i;u++)c[u].apply(this,s);return!0},n.prototype.addListener=function(t,e){var i;if(!r(e))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",t,r(e.listener)?e.listener:e),this._events[t]?o(this._events[t])?this._events[t].push(e):this._events[t]=[this._events[t],e]:this._events[t]=e,o(this._events[t])&&!this._events[t].warned&&(i=a(this._maxListeners)?n.defaultMaxListeners:this._maxListeners)&&i>0&&this._events[t].length>i&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace()),this},n.prototype.on=n.prototype.addListener,n.prototype.once=function(t,e){function n(){this.removeListener(t,n),i||(i=!0,e.apply(this,arguments))}if(!r(e))throw TypeError("listener must be a function");var i=!1;return n.listener=e,this.on(t,n),this},n.prototype.removeListener=function(t,e){var n,i,a,s;if(!r(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(n=this._events[t],a=n.length,i=-1,n===e||r(n.listener)&&n.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(o(n)){for(s=a;s-- >0;)if(n[s]===e||n[s].listener&&n[s].listener===e){i=s;break}if(i<0)return this;1===n.length?(n.length=0,delete this._events[t]):n.splice(i,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},n.prototype.removeAllListeners=function(t){var e,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(n=this._events[t],r(n))this.removeListener(t,n);else if(n)for(;n.length;)this.removeListener(t,n[n.length-1]);return delete this._events[t],this},n.prototype.listeners=function(t){return this._events&&this._events[t]?r(this._events[t])?[this._events[t]]:this._events[t].slice():[]},n.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(r(e))return 1;if(e)return e.length}return 0},n.listenerCount=function(t,e){return t.listenerCount(e)}},function(t,e,n){t.exports=n(18).EventEmitter},function(t,e,n){"use strict";function r(t,e){var n=this,r=this._readableState&&this._readableState.destroyed,i=this._writableState&&this._writableState.destroyed;if(r||i)return void(e?e(t):!t||this._writableState&&this._writableState.errorEmitted||a(o,this,t));this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(t){!e&&t?(a(o,n,t),n._writableState&&(n._writableState.errorEmitted=!0)):e&&e(t)})}function i(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function o(t,e){t.emit("error",e)}var a=n(8);t.exports={destroy:r,undestroy:i}},function(t,e,n){"use strict";(function(e,r,i){function o(t){var e=this;this.next=null,this.entry=null,this.finish=function(){A(e,t)}}function a(t){return $.from(t)}function s(t){return $.isBuffer(t)||t instanceof D}function u(){}function c(t,e){N=N||n(6),t=t||{},this.objectMode=!!t.objectMode,e instanceof N&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var r=t.highWaterMark,i=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:i,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var a=!1===t.decodeStrings;this.decodeStrings=!a,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(t){y(e,t)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new o(this)}function f(t){if(N=N||n(6),!(I.call(f,this)||this instanceof N))return new f(t);this._writableState=new c(t,this),this.writable=!0,t&&("function"==typeof t.write&&(this._write=t.write),"function"==typeof t.writev&&(this._writev=t.writev),"function"==typeof t.destroy&&(this._destroy=t.destroy),"function"==typeof t.final&&(this._final=t.final)),P.call(this)}function l(t,e){var n=new Error("write after end");t.emit("error",n),k(e,n)}function p(t,e,n,r){var i=!0,o=!1;return null===n?o=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||e.objectMode||(o=new TypeError("Invalid non-string/buffer chunk")),o&&(t.emit("error",o),k(r,o),i=!1),i}function h(t,e,n){return t.objectMode||!1===t.decodeStrings||"string"!=typeof e||(e=$.from(e,n)),e}function d(t,e,n,r,i,o){if(!n){var a=h(e,r,i);r!==a&&(n=!0,i="buffer",r=a)}var s=e.objectMode?1:r.length;e.length+=s;var u=e.length<e.highWaterMark;if(u||(e.needDrain=!0),e.writing||e.corked){var c=e.lastBufferedRequest;e.lastBufferedRequest={chunk:r,encoding:i,isBuf:n,callback:o,next:null},c?c.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else v(t,e,!1,s,r,i,o);return u}function v(t,e,n,r,i,o,a){e.writelen=r,e.writecb=a,e.writing=!0,e.sync=!0,n?t._writev(i,e.onwrite):t._write(i,o,e.onwrite),e.sync=!1}function g(t,e,n,r,i){--e.pendingcb,n?(k(i,r),k(C,t,e),t._writableState.errorEmitted=!0,t.emit("error",r)):(i(r),t._writableState.errorEmitted=!0,t.emit("error",r),C(t,e))}function m(t){t.writing=!1,t.writecb=null,t.length-=t.writelen,t.writelen=0}function y(t,e){var n=t._writableState,r=n.sync,i=n.writecb;if(m(n),e)g(t,n,r,e,i);else{var o=x(n);o||n.corked||n.bufferProcessing||!n.bufferedRequest||w(t,n),r?T(_,t,n,o,i):_(t,n,o,i)}}function _(t,e,n,r){n||b(t,e),e.pendingcb--,r(),C(t,e)}function b(t,e){0===e.length&&e.needDrain&&(e.needDrain=!1,t.emit("drain"))}function w(t,e){e.bufferProcessing=!0;var n=e.bufferedRequest;if(t._writev&&n&&n.next){var r=e.bufferedRequestCount,i=new Array(r),a=e.corkedRequestsFree;a.entry=n;for(var s=0,u=!0;n;)i[s]=n,n.isBuf||(u=!1),n=n.next,s+=1;i.allBuffers=u,v(t,e,!0,e.length,i,"",a.finish),e.pendingcb++,e.lastBufferedRequest=null,a.next?(e.corkedRequestsFree=a.next,a.next=null):e.corkedRequestsFree=new o(e)}else{for(;n;){var c=n.chunk,f=n.encoding,l=n.callback;if(v(t,e,!1,e.objectMode?1:c.length,c,f,l),n=n.next,e.writing)break}null===n&&(e.lastBufferedRequest=null)}e.bufferedRequestCount=0,e.bufferedRequest=n,e.bufferProcessing=!1}function x(t){return t.ending&&0===t.length&&null===t.bufferedRequest&&!t.finished&&!t.writing}function E(t,e){t._final(function(n){e.pendingcb--,n&&t.emit("error",n),e.prefinished=!0,t.emit("prefinish"),C(t,e)})}function O(t,e){e.prefinished||e.finalCalled||("function"==typeof t._final?(e.pendingcb++,e.finalCalled=!0,k(E,t,e)):(e.prefinished=!0,t.emit("prefinish")))}function C(t,e){var n=x(e);return n&&(O(t,e),0===e.pendingcb&&(e.finished=!0,t.emit("finish"))),n}function S(t,e,n){e.ending=!0,C(t,e),n&&(e.finished?k(n):t.once("finish",n)),e.ended=!0,t.writable=!1}function A(t,e,n){var r=t.entry;for(t.entry=null;r;){var i=r.callback;e.pendingcb--,i(n),r=r.next}e.corkedRequestsFree?e.corkedRequestsFree.next=t:e.corkedRequestsFree=t}var k=n(8);t.exports=f;var N,T=!e.browser&&["v0.10","v0.9."].indexOf(e.version.slice(0,5))>-1?r:k;f.WritableState=c;var j=n(7);j.inherits=n(4);var R={deprecate:n(76)},P=n(19),$=n(9).Buffer,D=i.Uint8Array||function(){},L=n(20);j.inherits(f,P),c.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(c.prototype,"buffer",{get:R.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(t){}}();var I;"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(I=Function.prototype[Symbol.hasInstance],Object.defineProperty(f,Symbol.hasInstance,{value:function(t){return!!I.call(this,t)||t&&t._writableState instanceof c}})):I=function(t){return t instanceof this},f.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},f.prototype.write=function(t,e,n){var r=this._writableState,i=!1,o=s(t)&&!r.objectMode;return o&&!$.isBuffer(t)&&(t=a(t)),"function"==typeof e&&(n=e,e=null),o?e="buffer":e||(e=r.defaultEncoding),"function"!=typeof n&&(n=u),r.ended?l(this,n):(o||p(this,r,t,n))&&(r.pendingcb++,i=d(this,r,o,t,e,n)),i},f.prototype.cork=function(){this._writableState.corked++},f.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,t.writing||t.corked||t.finished||t.bufferProcessing||!t.bufferedRequest||w(this,t))},f.prototype.setDefaultEncoding=function(t){if("string"==typeof t&&(t=t.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((t+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+t);return this._writableState.defaultEncoding=t,this},f.prototype._write=function(t,e,n){n(new Error("_write() is not implemented"))},f.prototype._writev=null,f.prototype.end=function(t,e,n){var r=this._writableState;"function"==typeof t?(n=t,t=null,e=null):"function"==typeof e&&(n=e,e=null),null!==t&&void 0!==t&&this.write(t,e),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||S(this,r,n)},Object.defineProperty(f.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(t){this._writableState&&(this._writableState.destroyed=t)}}),f.prototype.destroy=L.destroy,f.prototype._undestroy=L.undestroy,f.prototype._destroy=function(t,e){this.end(),e(t)}}).call(e,n(2),n(74).setImmediate,n(1))},function(t,e,n){function r(t){if(t&&!u(t))throw new Error("Unknown encoding: "+t)}function i(t){return t.toString(this.encoding)}function o(t){this.charReceived=t.length%2,this.charLength=this.charReceived?2:0}function a(t){this.charReceived=t.length%3,this.charLength=this.charReceived?3:0}var s=n(3).Buffer,u=s.isEncoding||function(t){switch(t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}},c=e.StringDecoder=function(t){switch(this.encoding=(t||"utf8").toLowerCase().replace(/[-_]/,""),r(t),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=o;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=a;break;default:return void(this.write=i)}this.charBuffer=new s(6),this.charReceived=0,this.charLength=0};c.prototype.write=function(t){for(var e="";this.charLength;){var n=t.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:t.length;if(t.copy(this.charBuffer,this.charReceived,0,n),this.charReceived+=n,this.charReceived<this.charLength)return"";t=t.slice(n,t.length),e=this.charBuffer.slice(0,this.charLength).toString(this.encoding);var r=e.charCodeAt(e.length-1);if(!(r>=55296&&r<=56319)){if(this.charReceived=this.charLength=0,0===t.length)return e;break}this.charLength+=this.surrogateSize,e=""}this.detectIncompleteChar(t);var i=t.length;this.charLength&&(t.copy(this.charBuffer,0,t.length-this.charReceived,i),i-=this.charReceived),e+=t.toString(this.encoding,0,i);var i=e.length-1,r=e.charCodeAt(i);if(r>=55296&&r<=56319){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),t.copy(this.charBuffer,0,0,o),e.substring(0,i)}return e},c.prototype.detectIncompleteChar=function(t){for(var e=t.length>=3?3:t.length;e>0;e--){var n=t[t.length-e];if(1==e&&n>>5==6){this.charLength=2;break}if(e<=2&&n>>4==14){this.charLength=3;break}if(e<=3&&n>>3==30){this.charLength=4;break}}this.charReceived=e},c.prototype.end=function(t){var e="";if(t&&t.length&&(e=this.write(t)),this.charReceived){var n=this.charReceived,r=this.charBuffer,i=this.encoding;e+=r.slice(0,n).toString(i)}return e}},function(t,e,n){"use strict";function r(t){this.afterTransform=function(e,n){return i(t,e,n)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null,this.writeencoding=null}function i(t,e,n){var r=t._transformState;r.transforming=!1;var i=r.writecb;if(!i)return t.emit("error",new Error("write callback called multiple times"));r.writechunk=null,r.writecb=null,null!==n&&void 0!==n&&t.push(n),i(e);var o=t._readableState;o.reading=!1,(o.needReadable||o.length<o.highWaterMark)&&t._read(o.highWaterMark)}function o(t){if(!(this instanceof o))return new o(t);s.call(this,t),this._transformState=new r(this);var e=this;this._readableState.needReadable=!0,this._readableState.sync=!1,t&&("function"==typeof t.transform&&(this._transform=t.transform),"function"==typeof t.flush&&(this._flush=t.flush)),this.once("prefinish",function(){"function"==typeof this._flush?this._flush(function(t,n){a(e,t,n)}):a(e)})}function a(t,e,n){if(e)return t.emit("error",e);null!==n&&void 0!==n&&t.push(n);var r=t._writableState,i=t._transformState;if(r.length)throw new Error("Calling transform done when ws.length != 0");if(i.transforming)throw new Error("Calling transform done when still transforming");return t.push(null)}t.exports=o;var s=n(6),u=n(7);u.inherits=n(4),u.inherits(o,s),o.prototype.push=function(t,e){return this._transformState.needTransform=!1,s.prototype.push.call(this,t,e)},o.prototype._transform=function(t,e,n){throw new Error("_transform() is not implemented")},o.prototype._write=function(t,e,n){var r=this._transformState;if(r.writecb=n,r.writechunk=t,r.writeencoding=e,!r.transforming){var i=this._readableState;(r.needTransform||i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}},o.prototype._read=function(t){var e=this._transformState;null!==e.writechunk&&e.writecb&&!e.transforming?(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform)):e.needTransform=!0},o.prototype._destroy=function(t,e){var n=this;s.prototype._destroy.call(this,t,function(t){e(t),n.emit("close")})}},function(t,e,n){"use strict";function r(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function i(t,e,n){if(t&&c.isObject(t)&&t instanceof r)return t;var i=new r;return i.parse(t,e,n),i}function o(t){return c.isString(t)&&(t=i(t)),t instanceof r?t.format():r.prototype.format.call(t)}function a(t,e){return i(t,!1,!0).resolve(e)}function s(t,e){return t?i(t,!1,!0).resolveObject(e):e}var u=n(81),c=n(82);e.parse=i,e.resolve=a,e.resolveObject=s,e.format=o,e.Url=r;var f=/^([a-z0-9.+-]+:)/i,l=/:[0-9]*$/,p=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,h=["<",">",'"',"`"," ","\r","\n","\t"],d=["{","}","|","\\","^","`"].concat(h),v=["'"].concat(d),g=["%","/","?",";","#"].concat(v),m=["/","?","#"],y=/^[+a-z0-9A-Z_-]{0,63}$/,_=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,b={javascript:!0,"javascript:":!0},w={javascript:!0,"javascript:":!0},x={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},E=n(83);r.prototype.parse=function(t,e,n){if(!c.isString(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var r=t.indexOf("?"),i=-1!==r&&r<t.indexOf("#")?"?":"#",o=t.split(i),a=/\\/g;o[0]=o[0].replace(a,"/"),t=o.join(i);var s=t;if(s=s.trim(),!n&&1===t.split("#").length){var l=p.exec(s);if(l)return this.path=s,this.href=s,this.pathname=l[1],l[2]?(this.search=l[2],this.query=e?E.parse(this.search.substr(1)):this.search.substr(1)):e&&(this.search="",this.query={}),this}var h=f.exec(s);if(h){h=h[0];var d=h.toLowerCase();this.protocol=d,s=s.substr(h.length)}if(n||h||s.match(/^\/\/[^@\/]+@[^@\/]+/)){var O="//"===s.substr(0,2);!O||h&&w[h]||(s=s.substr(2),this.slashes=!0)}if(!w[h]&&(O||h&&!x[h])){for(var C=-1,S=0;S<m.length;S++){var A=s.indexOf(m[S]);-1!==A&&(-1===C||A<C)&&(C=A)}var k,N;N=-1===C?s.lastIndexOf("@"):s.lastIndexOf("@",C),-1!==N&&(k=s.slice(0,N),s=s.slice(N+1),this.auth=decodeURIComponent(k)),C=-1;for(var S=0;S<g.length;S++){var A=s.indexOf(g[S]);-1!==A&&(-1===C||A<C)&&(C=A)}-1===C&&(C=s.length),this.host=s.slice(0,C),s=s.slice(C),this.parseHost(),this.hostname=this.hostname||"";var T="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!T)for(var j=this.hostname.split(/\./),S=0,R=j.length;S<R;S++){var P=j[S];if(P&&!P.match(y)){for(var $="",D=0,L=P.length;D<L;D++)P.charCodeAt(D)>127?$+="x":$+=P[D];if(!$.match(y)){var I=j.slice(0,S),M=j.slice(S+1),U=P.match(_);U&&(I.push(U[1]),M.unshift(U[2])),M.length&&(s="/"+M.join(".")+s),this.hostname=I.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),T||(this.hostname=u.toASCII(this.hostname));var B=this.port?":"+this.port:"",V=this.hostname||"";this.host=V+B,this.href+=this.host,T&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==s[0]&&(s="/"+s))}if(!b[d])for(var S=0,R=v.length;S<R;S++){var F=v[S];if(-1!==s.indexOf(F)){var q=encodeURIComponent(F);q===F&&(q=escape(F)),s=s.split(F).join(q)}}var z=s.indexOf("#");-1!==z&&(this.hash=s.substr(z),s=s.slice(0,z));var H=s.indexOf("?");if(-1!==H?(this.search=s.substr(H),this.query=s.substr(H+1),e&&(this.query=E.parse(this.query)),s=s.slice(0,H)):e&&(this.search="",this.query={}),s&&(this.pathname=s),x[d]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var B=this.pathname||"",J=this.search||"";this.path=B+J}return this.href=this.format(),this},r.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",n=this.pathname||"",r=this.hash||"",i=!1,o="";this.host?i=t+this.host:this.hostname&&(i=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(i+=":"+this.port)),this.query&&c.isObject(this.query)&&Object.keys(this.query).length&&(o=E.stringify(this.query));var a=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||x[e])&&!1!==i?(i="//"+(i||""),n&&"/"!==n.charAt(0)&&(n="/"+n)):i||(i=""),r&&"#"!==r.charAt(0)&&(r="#"+r),a&&"?"!==a.charAt(0)&&(a="?"+a),n=n.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),a=a.replace("#","%23"),e+i+n+a+r},r.prototype.resolve=function(t){return this.resolveObject(i(t,!1,!0)).format()},r.prototype.resolveObject=function(t){if(c.isString(t)){var e=new r;e.parse(t,!1,!0),t=e}for(var n=new r,i=Object.keys(this),o=0;o<i.length;o++){var a=i[o];n[a]=this[a]}if(n.hash=t.hash,""===t.href)return n.href=n.format(),n;if(t.slashes&&!t.protocol){for(var s=Object.keys(t),u=0;u<s.length;u++){var f=s[u];"protocol"!==f&&(n[f]=t[f])}return x[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname="/"),n.href=n.format(),n}if(t.protocol&&t.protocol!==n.protocol){if(!x[t.protocol]){for(var l=Object.keys(t),p=0;p<l.length;p++){var h=l[p];n[h]=t[h]}return n.href=n.format(),n}if(n.protocol=t.protocol,t.host||w[t.protocol])n.pathname=t.pathname;else{for(var d=(t.pathname||"").split("/");d.length&&!(t.host=d.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==d[0]&&d.unshift(""),d.length<2&&d.unshift(""),n.pathname=d.join("/")}if(n.search=t.search,n.query=t.query,n.host=t.host||"",n.auth=t.auth,n.hostname=t.hostname||t.host,n.port=t.port,n.pathname||n.search){var v=n.pathname||"",g=n.search||"";n.path=v+g}return n.slashes=n.slashes||t.slashes,n.href=n.format(),n}var m=n.pathname&&"/"===n.pathname.charAt(0),y=t.host||t.pathname&&"/"===t.pathname.charAt(0),_=y||m||n.host&&t.pathname,b=_,E=n.pathname&&n.pathname.split("/")||[],d=t.pathname&&t.pathname.split("/")||[],O=n.protocol&&!x[n.protocol];if(O&&(n.hostname="",n.port=null,n.host&&(""===E[0]?E[0]=n.host:E.unshift(n.host)),n.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===d[0]?d[0]=t.host:d.unshift(t.host)),t.host=null),_=_&&(""===d[0]||""===E[0])),y)n.host=t.host||""===t.host?t.host:n.host,n.hostname=t.hostname||""===t.hostname?t.hostname:n.hostname,n.search=t.search,n.query=t.query,E=d;else if(d.length)E||(E=[]),E.pop(),E=E.concat(d),n.search=t.search,n.query=t.query;else if(!c.isNullOrUndefined(t.search)){if(O){n.hostname=n.host=E.shift();var C=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@");C&&(n.auth=C.shift(),n.host=n.hostname=C.shift())}return n.search=t.search,n.query=t.query,c.isNull(n.pathname)&&c.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!E.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var S=E.slice(-1)[0],A=(n.host||t.host||E.length>1)&&("."===S||".."===S)||""===S,k=0,N=E.length;N>=0;N--)S=E[N],"."===S?E.splice(N,1):".."===S?(E.splice(N,1),k++):k&&(E.splice(N,1),k--);if(!_&&!b)for(;k--;k)E.unshift("..");!_||""===E[0]||E[0]&&"/"===E[0].charAt(0)||E.unshift(""),A&&"/"!==E.join("/").substr(-1)&&E.push("");var T=""===E[0]||E[0]&&"/"===E[0].charAt(0);if(O){n.hostname=n.host=T?"":E.length?E.shift():"";var C=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@");C&&(n.auth=C.shift(),n.host=n.hostname=C.shift())}return _=_||n.host&&E.length,_&&!T&&E.unshift(""),E.length?n.pathname=E.join("/"):(n.pathname=null,n.path=null),c.isNull(n.pathname)&&c.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=t.auth||n.auth,n.slashes=n.slashes||t.slashes,n.href=n.format(),n},r.prototype.parseHost=function(){var t=this.host,e=l.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}var i=n(26),o=r(i),a=n(27),s=r(a);new o.default({el:"#app",render:function(t){return t(s.default)}})},function(t,e,n){"use strict";(function(e,n){/*!
+var G=n(42),Z=n(43),X=n(14);e.Buffer=o,e.SlowBuffer=v,e.INSPECT_MAX_BYTES=50,o.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}(),e.kMaxLength=r(),o.poolSize=8192,o._augment=function(t){return t.__proto__=o.prototype,t},o.from=function(t,e,n){return a(null,t,e,n)},o.TYPED_ARRAY_SUPPORT&&(o.prototype.__proto__=Uint8Array.prototype,o.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&o[Symbol.species]===o&&Object.defineProperty(o,Symbol.species,{value:null,configurable:!0})),o.alloc=function(t,e,n){return u(null,t,e,n)},o.allocUnsafe=function(t){return c(null,t)},o.allocUnsafeSlow=function(t){return c(null,t)},o.isBuffer=function(t){return!(null==t||!t._isBuffer)},o.compare=function(t,e){if(!o.isBuffer(t)||!o.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,r=e.length,i=0,a=Math.min(n,r);i<a;++i)if(t[i]!==e[i]){n=t[i],r=e[i];break}return n<r?-1:r<n?1:0},o.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},o.concat=function(t,e){if(!X(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return o.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var r=o.allocUnsafe(e),i=0;for(n=0;n<t.length;++n){var a=t[n];if(!o.isBuffer(a))throw new TypeError('"list" argument must be an Array of Buffers');a.copy(r,i),i+=a.length}return r},o.byteLength=g,o.prototype._isBuffer=!0,o.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)y(this,e,e+1);return this},o.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)y(this,e,e+3),y(this,e+1,e+2);return this},o.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)y(this,e,e+7),y(this,e+1,e+6),y(this,e+2,e+5),y(this,e+3,e+4);return this},o.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?k(this,0,t):m.apply(this,arguments)},o.prototype.equals=function(t){if(!o.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===o.compare(this,t)},o.prototype.inspect=function(){var t="",n=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),"<Buffer "+t+">"},o.prototype.compare=function(t,e,n,r,i){if(!o.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),e<0||n>t.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&e>=n)return 0;if(r>=i)return-1;if(e>=n)return 1;if(e>>>=0,n>>>=0,r>>>=0,i>>>=0,this===t)return 0;for(var a=i-r,s=n-e,u=Math.min(a,s),c=this.slice(r,i),f=t.slice(e,n),l=0;l<u;++l)if(c[l]!==f[l]){a=c[l],s=f[l];break}return a<s?-1:s<a?1:0},o.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},o.prototype.indexOf=function(t,e,n){return _(this,t,e,n,!0)},o.prototype.lastIndexOf=function(t,e,n){return _(this,t,e,n,!1)},o.prototype.write=function(t,e,n,r){if(void 0===e)r="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)r=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(n)?(n|=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var i=this.length-e;if((void 0===n||n>i)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return w(this,t,e,n);case"utf8":case"utf-8":return x(this,t,e,n);case"ascii":return E(this,t,e,n);case"latin1":case"binary":return O(this,t,e,n);case"base64":return C(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Q=4096;o.prototype.slice=function(t,e){var n=this.length;t=~~t,e=void 0===e?n:~~e,t<0?(t+=n)<0&&(t=0):t>n&&(t=n),e<0?(e+=n)<0&&(e=0):e>n&&(e=n),e<t&&(e=t);var r;if(o.TYPED_ARRAY_SUPPORT)r=this.subarray(t,e),r.__proto__=o.prototype;else{var i=e-t;r=new o(i,void 0);for(var a=0;a<i;++a)r[a]=this[a+t]}return r},o.prototype.readUIntLE=function(t,e,n){t|=0,e|=0,n||$(t,e,this.length);for(var r=this[t],i=1,o=0;++o<e&&(i*=256);)r+=this[t+o]*i;return r},o.prototype.readUIntBE=function(t,e,n){t|=0,e|=0,n||$(t,e,this.length);for(var r=this[t+--e],i=1;e>0&&(i*=256);)r+=this[t+--e]*i;return r},o.prototype.readUInt8=function(t,e){return e||$(t,1,this.length),this[t]},o.prototype.readUInt16LE=function(t,e){return e||$(t,2,this.length),this[t]|this[t+1]<<8},o.prototype.readUInt16BE=function(t,e){return e||$(t,2,this.length),this[t]<<8|this[t+1]},o.prototype.readUInt32LE=function(t,e){return e||$(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},o.prototype.readUInt32BE=function(t,e){return e||$(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},o.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||$(t,e,this.length);for(var r=this[t],i=1,o=0;++o<e&&(i*=256);)r+=this[t+o]*i;return i*=128,r>=i&&(r-=Math.pow(2,8*e)),r},o.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||$(t,e,this.length);for(var r=e,i=1,o=this[t+--r];r>0&&(i*=256);)o+=this[t+--r]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},o.prototype.readInt8=function(t,e){return e||$(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},o.prototype.readInt16LE=function(t,e){e||$(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},o.prototype.readInt16BE=function(t,e){e||$(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},o.prototype.readInt32LE=function(t,e){return e||$(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},o.prototype.readInt32BE=function(t,e){return e||$(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},o.prototype.readFloatLE=function(t,e){return e||$(t,4,this.length),Z.read(this,t,!0,23,4)},o.prototype.readFloatBE=function(t,e){return e||$(t,4,this.length),Z.read(this,t,!1,23,4)},o.prototype.readDoubleLE=function(t,e){return e||$(t,8,this.length),Z.read(this,t,!0,52,8)},o.prototype.readDoubleBE=function(t,e){return e||$(t,8,this.length),Z.read(this,t,!1,52,8)},o.prototype.writeUIntLE=function(t,e,n,r){if(t=+t,e|=0,n|=0,!r){D(this,t,e,n,Math.pow(2,8*n)-1,0)}var i=1,o=0;for(this[e]=255&t;++o<n&&(i*=256);)this[e+o]=t/i&255;return e+n},o.prototype.writeUIntBE=function(t,e,n,r){if(t=+t,e|=0,n|=0,!r){D(this,t,e,n,Math.pow(2,8*n)-1,0)}var i=n-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+n},o.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,1,255,0),o.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},o.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,2,65535,0),o.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):L(this,t,e,!0),e+2},o.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,2,65535,0),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):L(this,t,e,!1),e+2},o.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,4,4294967295,0),o.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):I(this,t,e,!0),e+4},o.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,4,4294967295,0),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):I(this,t,e,!1),e+4},o.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);D(this,t,e,n,i-1,-i)}var o=0,a=1,s=0;for(this[e]=255&t;++o<n&&(a*=256);)t<0&&0===s&&0!==this[e+o-1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+n},o.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);D(this,t,e,n,i-1,-i)}var o=n-1,a=1,s=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+n},o.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,1,127,-128),o.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},o.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,2,32767,-32768),o.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):L(this,t,e,!0),e+2},o.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,2,32767,-32768),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):L(this,t,e,!1),e+2},o.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,4,2147483647,-2147483648),o.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):I(this,t,e,!0),e+4},o.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||D(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):I(this,t,e,!1),e+4},o.prototype.writeFloatLE=function(t,e,n){return U(this,t,e,!0,n)},o.prototype.writeFloatBE=function(t,e,n){return U(this,t,e,!1,n)},o.prototype.writeDoubleLE=function(t,e,n){return B(this,t,e,!0,n)},o.prototype.writeDoubleBE=function(t,e,n){return B(this,t,e,!1,n)},o.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e<r-n&&(r=t.length-e+n);var i,a=r-n;if(this===t&&n<e&&e<r)for(i=a-1;i>=0;--i)t[i+e]=this[i+n];else if(a<1e3||!o.TYPED_ARRAY_SUPPORT)for(i=0;i<a;++i)t[i+e]=this[i+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+a),e);return a},o.prototype.fill=function(t,e,n,r){if("string"==typeof t){if("string"==typeof e?(r=e,e=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!o.isEncoding(r))throw new TypeError("Unknown encoding: "+r)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<n)throw new RangeError("Out of range index");if(n<=e)return this;e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0);var a;if("number"==typeof t)for(a=e;a<n;++a)this[a]=t;else{var s=o.isBuffer(t)?t:z(new o(t,r).toString()),u=s.length;for(a=0;a<n-e;++a)this[a+e]=s[a%u]}return this};var tt=/[^+\/0-9A-Za-z-_]/g}).call(e,n(1))},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}},function(t,e,n){"use strict";(function(e,n){var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i={};t.exports=i,i.isPipeObject=function(t){return"object"===(void 0===t?"undefined":r(t))&&t.hasOwnProperty("pipe")&&"object"===r(t.pipe)},i.isPipeJson=function(t){return"object"===(void 0===t?"undefined":r(t))&&t.hasOwnProperty("op")&&t.hasOwnProperty("params")},i.isNodeJs=function(){return"[object process]"===Object.prototype.toString.call(void 0!==e?e:0)},i.arrayBufferToString=function(t){if(this.isNodeJs())return t instanceof n?t.toString("utf-8"):n.from(t).toString("utf-8");if("TextDecoder"in window)return new TextDecoder("utf-8").decode(t);var e,r=new Uint8Array(t),i="",o=r.length;for(e=0;e<o;++e)i+=String.fromCharCode(r[e]);return decodeURIComponent(escape(i))},i.callbackAdapter=function(t,e,n,r,i){"function"==typeof i?i(t,e):t?r(t):n(e)},t.exports.getUtilObject=function(t){return new function(){for(var e in i)i.hasOwnProperty(e)&&(this[e]=i[e]);this.debug=function(e){if(t.getConfig().debug){var e="flexio-sdk-js: "+e;console.log(e)}return this}}}}).call(e,n(2),n(3).Buffer)},function(t,e,n){"use strict";function r(t){if(!(this instanceof r))return new r(t);c.call(this,t),f.call(this,t),t&&!1===t.readable&&(this.readable=!1),t&&!1===t.writable&&(this.writable=!1),this.allowHalfOpen=!0,t&&!1===t.allowHalfOpen&&(this.allowHalfOpen=!1),this.once("end",i)}function i(){this.allowHalfOpen||this._writableState.ended||a(o,this)}function o(t){t.end()}var a=n(8),s=Object.keys||function(t){var e=[];for(var n in t)e.push(n);return e};t.exports=r;var u=n(7);u.inherits=n(4);var c=n(17),f=n(21);u.inherits(r,c);for(var l=s(f.prototype),p=0;p<l.length;p++){var h=l[p];r.prototype[h]||(r.prototype[h]=f.prototype[h])}Object.defineProperty(r.prototype,"destroyed",{get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed&&this._writableState.destroyed)},set:function(t){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=t,this._writableState.destroyed=t)}}),r.prototype._destroy=function(t,e){this.push(null),this.end(),a(e,t)}},function(t,e,n){(function(t){function n(t){return Array.isArray?Array.isArray(t):"[object Array]"===g(t)}function r(t){return"boolean"==typeof t}function i(t){return null===t}function o(t){return null==t}function a(t){return"number"==typeof t}function s(t){return"string"==typeof t}function u(t){return"symbol"==typeof t}function c(t){return void 0===t}function f(t){return"[object RegExp]"===g(t)}function l(t){return"object"==typeof t&&null!==t}function p(t){return"[object Date]"===g(t)}function h(t){return"[object Error]"===g(t)||t instanceof Error}function d(t){return"function"==typeof t}function v(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||void 0===t}function g(t){return Object.prototype.toString.call(t)}e.isArray=n,e.isBoolean=r,e.isNull=i,e.isNullOrUndefined=o,e.isNumber=a,e.isString=s,e.isSymbol=u,e.isUndefined=c,e.isRegExp=f,e.isObject=l,e.isDate=p,e.isError=h,e.isFunction=d,e.isPrimitive=v,e.isBuffer=t.isBuffer}).call(e,n(3).Buffer)},function(t,e,n){"use strict";(function(e){function n(t,n,r,i){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var o,a,s=arguments.length;switch(s){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick(function(){t.call(null,n)});case 3:return e.nextTick(function(){t.call(null,n,r)});case 4:return e.nextTick(function(){t.call(null,n,r,i)});default:for(o=new Array(s-1),a=0;a<o.length;)o[a++]=arguments[a];return e.nextTick(function(){t.apply(null,o)})}}!e.version||0===e.version.indexOf("v0.")||0===e.version.indexOf("v1.")&&0!==e.version.indexOf("v1.8.")?t.exports=n:t.exports=e.nextTick}).call(e,n(2))},function(t,e,n){function r(t,e){for(var n in t)e[n]=t[n]}function i(t,e,n){return a(t,e,n)}var o=n(3),a=o.Buffer;a.from&&a.alloc&&a.allocUnsafe&&a.allocUnsafeSlow?t.exports=o:(r(o,e),e.Buffer=i),r(a,i),i.from=function(t,e,n){if("number"==typeof t)throw new TypeError("Argument must not be a number");return a(t,e,n)},i.alloc=function(t,e,n){if("number"!=typeof t)throw new TypeError("Argument must be a number");var r=a(t);return void 0!==e?"string"==typeof n?r.fill(e,n):r.fill(e):r.fill(0),r},i.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return a(t)},i.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return o.SlowBuffer(t)}},function(t,e){t.exports=function(t,e,n,r,i){var o,a=t=t||{},s=typeof t.default;"object"!==s&&"function"!==s||(o=t,a=t.default);var u="function"==typeof a?a.options:a;e&&(u.render=e.render,u.staticRenderFns=e.staticRenderFns),r&&(u._scopeId=r);var c;if(i?(c=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),n&&n.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(i)},u._ssrRegister=c):n&&(c=n),c){var f=u.functional,l=f?u.render:u.beforeCreate;f?u.render=function(t,e){return c.call(e),l(t,e)}:u.beforeCreate=l?[].concat(l,c):[c]}return{esModule:o,exports:a,options:u}}},function(t,e,n){(function(t,r){var i;(function(){function o(t,e){return t.set(e[0],e[1]),t}function a(t,e){return t.add(e),t}function s(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function u(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var a=t[i];e(r,a,n(a),t)}return r}function c(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function f(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function l(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function p(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var a=t[n];e(a,n,t)&&(o[i++]=a)}return o}function h(t,e){return!!(null==t?0:t.length)&&O(t,e,0)>-1}function d(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function v(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function g(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function m(t,e,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function y(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function _(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}function b(t){return t.split("")}function w(t){return t.match(Be)||[]}function x(t,e,n){var r;return n(t,function(t,n,i){if(e(t,n,i))return r=n,!1}),r}function E(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function O(t,e,n){return e===e?Z(t,e,n):E(t,S,n)}function C(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function S(t){return t!==t}function A(t,e){var n=null==t?0:t.length;return n?R(t,e)/n:Dt}function k(t){return function(e){return null==e?it:e[t]}}function N(t){return function(e){return null==t?it:t[e]}}function T(t,e,n,r,i){return i(t,function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)}),n}function j(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}function R(t,e){for(var n,r=-1,i=t.length;++r<i;){var o=e(t[r]);o!==it&&(n=n===it?o:n+o)}return n}function P(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function $(t,e){return v(e,function(e){return[e,t[e]]})}function D(t){return function(e){return t(e)}}function L(t,e){return v(e,function(e){return t[e]})}function I(t,e){return t.has(e)}function M(t,e){for(var n=-1,r=t.length;++n<r&&O(e,t[n],0)>-1;);return n}function U(t,e){for(var n=t.length;n--&&O(e,t[n],0)>-1;);return n}function B(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}function V(t){return"\\"+kn[t]}function F(t,e){return null==t?it:t[e]}function q(t){return _n.test(t)}function z(t){return bn.test(t)}function H(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}function J(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function W(t,e){return function(n){return t(e(n))}}function Y(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n];a!==e&&a!==ft||(t[n]=ft,o[i++]=n)}return o}function K(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function G(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=[t,t]}),n}function Z(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}function X(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}function Q(t){return q(t)?et(t):Hn(t)}function tt(t){return q(t)?nt(t):b(t)}function et(t){for(var e=mn.lastIndex=0;mn.test(t);)++e;return e}function nt(t){return t.match(mn)||[]}function rt(t){return t.match(yn)||[]}var it,ot=200,at="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",st="Expected a function",ut="__lodash_hash_undefined__",ct=500,ft="__lodash_placeholder__",lt=1,pt=2,ht=4,dt=1,vt=2,gt=1,mt=2,yt=4,_t=8,bt=16,wt=32,xt=64,Et=128,Ot=256,Ct=512,St=30,At="...",kt=800,Nt=16,Tt=1,jt=2,Rt=1/0,Pt=9007199254740991,$t=1.7976931348623157e308,Dt=NaN,Lt=4294967295,It=Lt-1,Mt=Lt>>>1,Ut=[["ary",Et],["bind",gt],["bindKey",mt],["curry",_t],["curryRight",bt],["flip",Ct],["partial",wt],["partialRight",xt],["rearg",Ot]],Bt="[object Arguments]",Vt="[object Array]",Ft="[object AsyncFunction]",qt="[object Boolean]",zt="[object Date]",Ht="[object DOMException]",Jt="[object Error]",Wt="[object Function]",Yt="[object GeneratorFunction]",Kt="[object Map]",Gt="[object Number]",Zt="[object Null]",Xt="[object Object]",Qt="[object Proxy]",te="[object RegExp]",ee="[object Set]",ne="[object String]",re="[object Symbol]",ie="[object Undefined]",oe="[object WeakMap]",ae="[object WeakSet]",se="[object ArrayBuffer]",ue="[object DataView]",ce="[object Float32Array]",fe="[object Float64Array]",le="[object Int8Array]",pe="[object Int16Array]",he="[object Int32Array]",de="[object Uint8Array]",ve="[object Uint8ClampedArray]",ge="[object Uint16Array]",me="[object Uint32Array]",ye=/\b__p \+= '';/g,_e=/\b(__p \+=) '' \+/g,be=/(__e\(.*?\)|\b__t\)) \+\n'';/g,we=/&(?:amp|lt|gt|quot|#39);/g,xe=/[&<>"']/g,Ee=RegExp(we.source),Oe=RegExp(xe.source),Ce=/<%-([\s\S]+?)%>/g,Se=/<%([\s\S]+?)%>/g,Ae=/<%=([\s\S]+?)%>/g,ke=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ne=/^\w*$/,Te=/^\./,je=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Re=/[\\^$.*+?()[\]{}|]/g,Pe=RegExp(Re.source),$e=/^\s+|\s+$/g,De=/^\s+/,Le=/\s+$/,Ie=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Me=/\{\n\/\* \[wrapped with (.+)\] \*/,Ue=/,? & /,Be=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Ve=/\\(\\)?/g,Fe=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,qe=/\w*$/,ze=/^[-+]0x[0-9a-f]+$/i,He=/^0b[01]+$/i,Je=/^\[object .+?Constructor\]$/,We=/^0o[0-7]+$/i,Ye=/^(?:0|[1-9]\d*)$/,Ke=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ge=/($^)/,Ze=/['\n\r\u2028\u2029\\]/g,Xe="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Qe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\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",tn="["+Qe+"]",en="["+Xe+"]",nn="[a-z\\xdf-\\xf6\\xf8-\\xff]",rn="[^\\ud800-\\udfff"+Qe+"\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",on="\\ud83c[\\udffb-\\udfff]",an="(?:\\ud83c[\\udde6-\\uddff]){2}",sn="[\\ud800-\\udbff][\\udc00-\\udfff]",un="[A-Z\\xc0-\\xd6\\xd8-\\xde]",cn="(?:"+nn+"|"+rn+")",fn="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",ln="(?:\\u200d(?:"+["[^\\ud800-\\udfff]",an,sn].join("|")+")[\\ufe0e\\ufe0f]?"+fn+")*",pn="[\\ufe0e\\ufe0f]?"+fn+ln,hn="(?:"+["[\\u2700-\\u27bf]",an,sn].join("|")+")"+pn,dn="(?:"+["[^\\ud800-\\udfff]"+en+"?",en,an,sn,"[\\ud800-\\udfff]"].join("|")+")",vn=RegExp("['’]","g"),gn=RegExp(en,"g"),mn=RegExp(on+"(?="+on+")|"+dn+pn,"g"),yn=RegExp([un+"?"+nn+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[tn,un,"$"].join("|")+")","(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\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\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[tn,un+cn,"$"].join("|")+")",un+"?"+cn+"+(?:['’](?:d|ll|m|re|s|t|ve))?",un+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)","\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)","\\d+",hn].join("|"),"g"),_n=RegExp("[\\u200d\\ud800-\\udfff"+Xe+"\\ufe0e\\ufe0f]"),bn=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,wn=["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"],xn=-1,En={};En[ce]=En[fe]=En[le]=En[pe]=En[he]=En[de]=En[ve]=En[ge]=En[me]=!0,En[Bt]=En[Vt]=En[se]=En[qt]=En[ue]=En[zt]=En[Jt]=En[Wt]=En[Kt]=En[Gt]=En[Xt]=En[te]=En[ee]=En[ne]=En[oe]=!1;var On={};On[Bt]=On[Vt]=On[se]=On[ue]=On[qt]=On[zt]=On[ce]=On[fe]=On[le]=On[pe]=On[he]=On[Kt]=On[Gt]=On[Xt]=On[te]=On[ee]=On[ne]=On[re]=On[de]=On[ve]=On[ge]=On[me]=!0,On[Jt]=On[Wt]=On[oe]=!1;var Cn={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"},Sn={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},An={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"},kn={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Nn=parseFloat,Tn=parseInt,jn="object"==typeof t&&t&&t.Object===Object&&t,Rn="object"==typeof self&&self&&self.Object===Object&&self,Pn=jn||Rn||Function("return this")(),$n="object"==typeof e&&e&&!e.nodeType&&e,Dn=$n&&"object"==typeof r&&r&&!r.nodeType&&r,Ln=Dn&&Dn.exports===$n,In=Ln&&jn.process,Mn=function(){try{return In&&In.binding&&In.binding("util")}catch(t){}}(),Un=Mn&&Mn.isArrayBuffer,Bn=Mn&&Mn.isDate,Vn=Mn&&Mn.isMap,Fn=Mn&&Mn.isRegExp,qn=Mn&&Mn.isSet,zn=Mn&&Mn.isTypedArray,Hn=k("length"),Jn=N(Cn),Wn=N(Sn),Yn=N(An),Kn=function t(e){function n(t){if(ou(t)&&!mp(t)&&!(t instanceof b)){if(t instanceof i)return t;if(mf.call(t,"__wrapped__"))return na(t)}return new i(t)}function r(){}function i(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=it}function b(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Lt,this.__views__=[]}function N(){var t=new b(this.__wrapped__);return t.__actions__=Ii(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ii(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ii(this.__views__),t}function Z(){if(this.__filtered__){var t=new b(this);t.__dir__=-1,t.__filtered__=!0}else t=this.clone(),t.__dir__*=-1;return t}function et(){var t=this.__wrapped__.value(),e=this.__dir__,n=mp(t),r=e<0,i=n?t.length:0,o=Ao(0,i,this.__views__),a=o.start,s=o.end,u=s-a,c=r?s:a-1,f=this.__iteratees__,l=f.length,p=0,h=Wf(u,this.__takeCount__);if(!n||!r&&i==u&&h==u)return yi(t,this.__actions__);var d=[];t:for(;u--&&p<h;){c+=e;for(var v=-1,g=t[c];++v<l;){var m=f[v],y=m.iteratee,_=m.type,b=y(g);if(_==jt)g=b;else if(!b){if(_==Tt)continue t;break t}}d[p++]=g}return d}function nt(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Be(){this.__data__=rl?rl(null):{},this.size=0}function Xe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}function Qe(t){var e=this.__data__;if(rl){var n=e[t];return n===ut?it:n}return mf.call(e,t)?e[t]:it}function tn(t){var e=this.__data__;return rl?e[t]!==it:mf.call(e,t)}function en(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=rl&&e===it?ut:e,this}function nn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function rn(){this.__data__=[],this.size=0}function on(t){var e=this.__data__,n=Gn(e,t);return!(n<0)&&(n==e.length-1?e.pop():jf.call(e,n,1),--this.size,!0)}function an(t){var e=this.__data__,n=Gn(e,t);return n<0?it:e[n][1]}function sn(t){return Gn(this.__data__,t)>-1}function un(t,e){var n=this.__data__,r=Gn(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}function cn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function fn(){this.size=0,this.__data__={hash:new nt,map:new(Qf||nn),string:new nt}}function ln(t){var e=Eo(this,t).delete(t);return this.size-=e?1:0,e}function pn(t){return Eo(this,t).get(t)}function hn(t){return Eo(this,t).has(t)}function dn(t,e){var n=Eo(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this}function mn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new cn;++e<n;)this.add(t[e])}function yn(t){return this.__data__.set(t,ut),this}function _n(t){return this.__data__.has(t)}function bn(t){var e=this.__data__=new nn(t);this.size=e.size}function Cn(){this.__data__=new nn,this.size=0}function Sn(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}function An(t){return this.__data__.get(t)}function kn(t){return this.__data__.has(t)}function jn(t,e){var n=this.__data__;if(n instanceof nn){var r=n.__data__;if(!Qf||r.length<ot-1)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new cn(r)}return n.set(t,e),this.size=n.size,this}function Rn(t,e){var n=mp(t),r=!n&&gp(t),i=!n&&!r&&_p(t),o=!n&&!r&&!i&&Op(t),a=n||r||i||o,s=a?P(t.length,ff):[],u=s.length;for(var c in t)!e&&!mf.call(t,c)||a&&("length"==c||i&&("offset"==c||"parent"==c)||o&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||Do(c,u))||s.push(c);return s}function $n(t){var e=t.length;return e?t[Qr(0,e-1)]:it}function Dn(t,e){return Xo(Ii(t),nr(e,0,t.length))}function In(t){return Xo(Ii(t))}function Mn(t,e,n){(n===it||Hs(t[e],n))&&(n!==it||e in t)||tr(t,e,n)}function Hn(t,e,n){var r=t[e];mf.call(t,e)&&Hs(r,n)&&(n!==it||e in t)||tr(t,e,n)}function Gn(t,e){for(var n=t.length;n--;)if(Hs(t[n][0],e))return n;return-1}function Zn(t,e,n,r){return vl(t,function(t,i,o){e(r,t,n(t),o)}),r}function Xn(t,e){return t&&Mi(e,Bu(e),t)}function Qn(t,e){return t&&Mi(e,Vu(e),t)}function tr(t,e,n){"__proto__"==e&&Df?Df(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function er(t,e){for(var n=-1,r=e.length,i=nf(r),o=null==t;++n<r;)i[n]=o?it:Iu(t,e[n]);return i}function nr(t,e,n){return t===t&&(n!==it&&(t=t<=n?t:n),e!==it&&(t=t>=e?t:e)),t}function rr(t,e,n,r,i,o){var a,s=e&lt,u=e&pt,f=e&ht;if(n&&(a=i?n(t,r,i,o):n(t)),a!==it)return a;if(!iu(t))return t;var l=mp(t);if(l){if(a=To(t),!s)return Ii(t,a)}else{var p=Al(t),h=p==Wt||p==Yt;if(_p(t))return Ci(t,s);if(p==Xt||p==Bt||h&&!i){if(a=u||h?{}:jo(t),!s)return u?Bi(t,Qn(a,t)):Ui(t,Xn(a,t))}else{if(!On[p])return i?t:{};a=Ro(t,p,rr,s)}}o||(o=new bn);var d=o.get(t);if(d)return d;o.set(t,a);var v=f?u?_o:yo:u?Vu:Bu,g=l?it:v(t);return c(g||t,function(r,i){g&&(i=r,r=t[i]),Hn(a,i,rr(r,e,n,i,t,o))}),a}function ir(t){var e=Bu(t);return function(n){return or(n,t,e)}}function or(t,e,n){var r=n.length;if(null==t)return!r;for(t=uf(t);r--;){var i=n[r],o=e[i],a=t[i];if(a===it&&!(i in t)||!o(a))return!1}return!0}function ar(t,e,n){if("function"!=typeof t)throw new lf(st);return Tl(function(){t.apply(it,n)},e)}function sr(t,e,n,r){var i=-1,o=h,a=!0,s=t.length,u=[],c=e.length;if(!s)return u;n&&(e=v(e,D(n))),r?(o=d,a=!1):e.length>=ot&&(o=I,a=!1,e=new mn(e));t:for(;++i<s;){var f=t[i],l=null==n?f:n(f);if(f=r||0!==f?f:0,a&&l===l){for(var p=c;p--;)if(e[p]===l)continue t;u.push(f)}else o(e,l,r)||u.push(f)}return u}function ur(t,e){var n=!0;return vl(t,function(t,r,i){return n=!!e(t,r,i)}),n}function cr(t,e,n){for(var r=-1,i=t.length;++r<i;){var o=t[r],a=e(o);if(null!=a&&(s===it?a===a&&!gu(a):n(a,s)))var s=a,u=o}return u}function fr(t,e,n,r){var i=t.length;for(n=xu(n),n<0&&(n=-n>i?0:i+n),r=r===it||r>i?i:xu(r),r<0&&(r+=i),r=n>r?0:Eu(r);n<r;)t[n++]=e;return t}function lr(t,e){var n=[];return vl(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function pr(t,e,n,r,i){var o=-1,a=t.length;for(n||(n=$o),i||(i=[]);++o<a;){var s=t[o];e>0&&n(s)?e>1?pr(s,e-1,n,r,i):g(i,s):r||(i[i.length]=s)}return i}function hr(t,e){return t&&ml(t,e,Bu)}function dr(t,e){return t&&yl(t,e,Bu)}function vr(t,e){return p(e,function(e){return eu(t[e])})}function gr(t,e){e=Ei(e,t);for(var n=0,r=e.length;null!=t&&n<r;)t=t[Qo(e[n++])];return n&&n==r?t:it}function mr(t,e,n){var r=e(t);return mp(t)?r:g(r,n(t))}function yr(t){return null==t?t===it?ie:Zt:$f&&$f in uf(t)?So(t):Jo(t)}function _r(t,e){return t>e}function br(t,e){return null!=t&&mf.call(t,e)}function wr(t,e){return null!=t&&e in uf(t)}function xr(t,e,n){return t>=Wf(e,n)&&t<Jf(e,n)}function Er(t,e,n){for(var r=n?d:h,i=t[0].length,o=t.length,a=o,s=nf(o),u=1/0,c=[];a--;){var f=t[a];a&&e&&(f=v(f,D(e))),u=Wf(f.length,u),s[a]=!n&&(e||i>=120&&f.length>=120)?new mn(a&&f):it}f=t[0];var l=-1,p=s[0];t:for(;++l<i&&c.length<u;){var g=f[l],m=e?e(g):g;if(g=n||0!==g?g:0,!(p?I(p,m):r(c,m,n))){for(a=o;--a;){var y=s[a];if(!(y?I(y,m):r(t[a],m,n)))continue t}p&&p.push(m),c.push(g)}}return c}function Or(t,e,n,r){return hr(t,function(t,i,o){e(r,n(t),i,o)}),r}function Cr(t,e,n){e=Ei(e,t),t=Yo(t,e);var r=null==t?t:t[Qo(wa(e))];return null==r?it:s(r,t,n)}function Sr(t){return ou(t)&&yr(t)==Bt}function Ar(t){return ou(t)&&yr(t)==se}function kr(t){return ou(t)&&yr(t)==zt}function Nr(t,e,n,r,i){return t===e||(null==t||null==e||!ou(t)&&!ou(e)?t!==t&&e!==e:Tr(t,e,n,r,Nr,i))}function Tr(t,e,n,r,i,o){var a=mp(t),s=mp(e),u=a?Vt:Al(t),c=s?Vt:Al(e);u=u==Bt?Xt:u,c=c==Bt?Xt:c;var f=u==Xt,l=c==Xt,p=u==c;if(p&&_p(t)){if(!_p(e))return!1;a=!0,f=!1}if(p&&!f)return o||(o=new bn),a||Op(t)?ho(t,e,n,r,i,o):vo(t,e,u,n,r,i,o);if(!(n&dt)){var h=f&&mf.call(t,"__wrapped__"),d=l&&mf.call(e,"__wrapped__");if(h||d){var v=h?t.value():t,g=d?e.value():e;return o||(o=new bn),i(v,g,n,r,o)}}return!!p&&(o||(o=new bn),go(t,e,n,r,i,o))}function jr(t){return ou(t)&&Al(t)==Kt}function Rr(t,e,n,r){var i=n.length,o=i,a=!r;if(null==t)return!o;for(t=uf(t);i--;){var s=n[i];if(a&&s[2]?s[1]!==t[s[0]]:!(s[0]in t))return!1}for(;++i<o;){s=n[i];var u=s[0],c=t[u],f=s[1];if(a&&s[2]){if(c===it&&!(u in t))return!1}else{var l=new bn;if(r)var p=r(c,f,u,t,e,l);if(!(p===it?Nr(f,c,dt|vt,r,l):p))return!1}}return!0}function Pr(t){return!(!iu(t)||Bo(t))&&(eu(t)?Ef:Je).test(ta(t))}function $r(t){return ou(t)&&yr(t)==te}function Dr(t){return ou(t)&&Al(t)==ee}function Lr(t){return ou(t)&&ru(t.length)&&!!En[yr(t)]}function Ir(t){return"function"==typeof t?t:null==t?Tc:"object"==typeof t?mp(t)?qr(t[0],t[1]):Fr(t):Mc(t)}function Mr(t){if(!Vo(t))return Hf(t);var e=[];for(var n in uf(t))mf.call(t,n)&&"constructor"!=n&&e.push(n);return e}function Ur(t){if(!iu(t))return Ho(t);var e=Vo(t),n=[];for(var r in t)("constructor"!=r||!e&&mf.call(t,r))&&n.push(r);return n}function Br(t,e){return t<e}function Vr(t,e){var n=-1,r=Js(t)?nf(t.length):[];return vl(t,function(t,i,o){r[++n]=e(t,i,o)}),r}function Fr(t){var e=Oo(t);return 1==e.length&&e[0][2]?qo(e[0][0],e[0][1]):function(n){return n===t||Rr(n,t,e)}}function qr(t,e){return Io(t)&&Fo(e)?qo(Qo(t),e):function(n){var r=Iu(n,t);return r===it&&r===e?Uu(n,t):Nr(e,r,dt|vt)}}function zr(t,e,n,r,i){t!==e&&ml(e,function(o,a){if(iu(o))i||(i=new bn),Hr(t,e,a,n,zr,r,i);else{var s=r?r(t[a],o,a+"",t,e,i):it;s===it&&(s=o),Mn(t,a,s)}},Vu)}function Hr(t,e,n,r,i,o,a){var s=t[n],u=e[n],c=a.get(u);if(c)return void Mn(t,n,c);var f=o?o(s,u,n+"",t,e,a):it,l=f===it;if(l){var p=mp(u),h=!p&&_p(u),d=!p&&!h&&Op(u);f=u,p||h||d?mp(s)?f=s:Ws(s)?f=Ii(s):h?(l=!1,f=Ci(u,!0)):d?(l=!1,f=Ri(u,!0)):f=[]:hu(u)||gp(u)?(f=s,gp(s)?f=Cu(s):(!iu(s)||r&&eu(s))&&(f=jo(u))):l=!1}l&&(a.set(u,f),i(f,u,r,o,a),a.delete(u)),Mn(t,n,f)}function Jr(t,e){var n=t.length;if(n)return e+=e<0?n:0,Do(e,n)?t[e]:it}function Wr(t,e,n){var r=-1;return e=v(e.length?e:[Tc],D(xo())),j(Vr(t,function(t,n,i){return{criteria:v(e,function(e){return e(t)}),index:++r,value:t}}),function(t,e){return $i(t,e,n)})}function Yr(t,e){return Kr(t,e,function(e,n){return Uu(t,n)})}function Kr(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var a=e[r],s=gr(t,a);n(s,a)&&oi(o,Ei(a,t),s)}return o}function Gr(t){return function(e){return gr(e,t)}}function Zr(t,e,n,r){var i=r?C:O,o=-1,a=e.length,s=t;for(t===e&&(e=Ii(e)),n&&(s=v(t,D(n)));++o<a;)for(var u=0,c=e[o],f=n?n(c):c;(u=i(s,f,u,r))>-1;)s!==t&&jf.call(s,u,1),jf.call(t,u,1);return t}function Xr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;Do(i)?jf.call(t,i,1):vi(t,i)}}return t}function Qr(t,e){return t+Bf(Gf()*(e-t+1))}function ti(t,e,n,r){for(var i=-1,o=Jf(Uf((e-t)/(n||1)),0),a=nf(o);o--;)a[r?o:++i]=t,t+=n;return a}function ei(t,e){var n="";if(!t||e<1||e>Pt)return n;do{e%2&&(n+=t),(e=Bf(e/2))&&(t+=t)}while(e);return n}function ni(t,e){return jl(Wo(t,e,Tc),t+"")}function ri(t){return $n(Qu(t))}function ii(t,e){var n=Qu(t);return Xo(n,nr(e,0,n.length))}function oi(t,e,n,r){if(!iu(t))return t;e=Ei(e,t);for(var i=-1,o=e.length,a=o-1,s=t;null!=s&&++i<o;){var u=Qo(e[i]),c=n;if(i!=a){var f=s[u];c=r?r(f,u,s):it,c===it&&(c=iu(f)?f:Do(e[i+1])?[]:{})}Hn(s,u,c),s=s[u]}return t}function ai(t){return Xo(Qu(t))}function si(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),n=n>i?i:n,n<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=nf(i);++r<i;)o[r]=t[r+e];return o}function ui(t,e){var n;return vl(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function ci(t,e,n){var r=0,i=null==t?r:t.length;if("number"==typeof e&&e===e&&i<=Mt){for(;r<i;){var o=r+i>>>1,a=t[o];null!==a&&!gu(a)&&(n?a<=e:a<e)?r=o+1:i=o}return i}return fi(t,e,Tc,n)}function fi(t,e,n,r){e=n(e);for(var i=0,o=null==t?0:t.length,a=e!==e,s=null===e,u=gu(e),c=e===it;i<o;){var f=Bf((i+o)/2),l=n(t[f]),p=l!==it,h=null===l,d=l===l,v=gu(l);if(a)var g=r||d;else g=c?d&&(r||p):s?d&&p&&(r||!h):u?d&&p&&!h&&(r||!v):!h&&!v&&(r?l<=e:l<e);g?i=f+1:o=f}return Wf(o,It)}function li(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n],s=e?e(a):a;if(!n||!Hs(s,u)){var u=s;o[i++]=0===a?0:a}}return o}function pi(t){return"number"==typeof t?t:gu(t)?Dt:+t}function hi(t){if("string"==typeof t)return t;if(mp(t))return v(t,hi)+"";if(gu(t))return hl?hl.call(t):"";var e=t+"";return"0"==e&&1/t==-Rt?"-0":e}function di(t,e,n){var r=-1,i=h,o=t.length,a=!0,s=[],u=s;if(n)a=!1,i=d;else if(o>=ot){var c=e?null:El(t);if(c)return K(c);a=!1,i=I,u=new mn}else u=e?[]:s;t:for(;++r<o;){var f=t[r],l=e?e(f):f;if(f=n||0!==f?f:0,a&&l===l){for(var p=u.length;p--;)if(u[p]===l)continue t;e&&u.push(l),s.push(f)}else i(u,l,n)||(u!==s&&u.push(l),s.push(f))}return s}function vi(t,e){return e=Ei(e,t),null==(t=Yo(t,e))||delete t[Qo(wa(e))]}function gi(t,e,n,r){return oi(t,e,n(gr(t,e)),r)}function mi(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?si(t,r?0:o,r?o+1:i):si(t,r?o+1:0,r?i:o)}function yi(t,e){var n=t;return n instanceof b&&(n=n.value()),m(e,function(t,e){return e.func.apply(e.thisArg,g([t],e.args))},n)}function _i(t,e,n){var r=t.length;if(r<2)return r?di(t[0]):[];for(var i=-1,o=nf(r);++i<r;)for(var a=t[i],s=-1;++s<r;)s!=i&&(o[i]=sr(o[i]||a,t[s],e,n));return di(pr(o,1),e,n)}function bi(t,e,n){for(var r=-1,i=t.length,o=e.length,a={};++r<i;){var s=r<o?e[r]:it;n(a,t[r],s)}return a}function wi(t){return Ws(t)?t:[]}function xi(t){return"function"==typeof t?t:Tc}function Ei(t,e){return mp(t)?t:Io(t,e)?[t]:Rl(Au(t))}function Oi(t,e,n){var r=t.length;return n=n===it?r:n,!e&&n>=r?t:si(t,e,n)}function Ci(t,e){if(e)return t.slice();var n=t.length,r=Af?Af(n):new t.constructor(n);return t.copy(r),r}function Si(t){var e=new t.constructor(t.byteLength);return new Sf(e).set(new Sf(t)),e}function Ai(t,e){var n=e?Si(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}function ki(t,e,n){return m(e?n(J(t),lt):J(t),o,new t.constructor)}function Ni(t){var e=new t.constructor(t.source,qe.exec(t));return e.lastIndex=t.lastIndex,e}function Ti(t,e,n){return m(e?n(K(t),lt):K(t),a,new t.constructor)}function ji(t){return pl?uf(pl.call(t)):{}}function Ri(t,e){var n=e?Si(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Pi(t,e){if(t!==e){var n=t!==it,r=null===t,i=t===t,o=gu(t),a=e!==it,s=null===e,u=e===e,c=gu(e);if(!s&&!c&&!o&&t>e||o&&a&&u&&!s&&!c||r&&a&&u||!n&&u||!i)return 1;if(!r&&!o&&!c&&t<e||c&&n&&i&&!r&&!o||s&&n&&i||!a&&i||!u)return-1}return 0}function $i(t,e,n){for(var r=-1,i=t.criteria,o=e.criteria,a=i.length,s=n.length;++r<a;){var u=Pi(i[r],o[r]);if(u){if(r>=s)return u;return u*("desc"==n[r]?-1:1)}}return t.index-e.index}function Di(t,e,n,r){for(var i=-1,o=t.length,a=n.length,s=-1,u=e.length,c=Jf(o-a,0),f=nf(u+c),l=!r;++s<u;)f[s]=e[s];for(;++i<a;)(l||i<o)&&(f[n[i]]=t[i]);for(;c--;)f[s++]=t[i++];return f}function Li(t,e,n,r){for(var i=-1,o=t.length,a=-1,s=n.length,u=-1,c=e.length,f=Jf(o-s,0),l=nf(f+c),p=!r;++i<f;)l[i]=t[i];for(var h=i;++u<c;)l[h+u]=e[u];for(;++a<s;)(p||i<o)&&(l[h+n[a]]=t[i++]);return l}function Ii(t,e){var n=-1,r=t.length;for(e||(e=nf(r));++n<r;)e[n]=t[n];return e}function Mi(t,e,n,r){var i=!n;n||(n={});for(var o=-1,a=e.length;++o<a;){var s=e[o],u=r?r(n[s],t[s],s,n,t):it;u===it&&(u=t[s]),i?tr(n,s,u):Hn(n,s,u)}return n}function Ui(t,e){return Mi(t,Cl(t),e)}function Bi(t,e){return Mi(t,Sl(t),e)}function Vi(t,e){return function(n,r){var i=mp(n)?u:Zn,o=e?e():{};return i(n,t,xo(r,2),o)}}function Fi(t){return ni(function(e,n){var r=-1,i=n.length,o=i>1?n[i-1]:it,a=i>2?n[2]:it;for(o=t.length>3&&"function"==typeof o?(i--,o):it,a&&Lo(n[0],n[1],a)&&(o=i<3?it:o,i=1),e=uf(e);++r<i;){var s=n[r];s&&t(e,s,r,o)}return e})}function qi(t,e){return function(n,r){if(null==n)return n;if(!Js(n))return t(n,r);for(var i=n.length,o=e?i:-1,a=uf(n);(e?o--:++o<i)&&!1!==r(a[o],o,a););return n}}function zi(t){return function(e,n,r){for(var i=-1,o=uf(e),a=r(e),s=a.length;s--;){var u=a[t?s:++i];if(!1===n(o[u],u,o))break}return e}}function Hi(t,e,n){function r(){return(this&&this!==Pn&&this instanceof r?o:t).apply(i?n:this,arguments)}var i=e&gt,o=Yi(t);return r}function Ji(t){return function(e){e=Au(e);var n=q(e)?tt(e):it,r=n?n[0]:e.charAt(0),i=n?Oi(n,1).join(""):e.slice(1);return r[t]()+i}}function Wi(t){return function(e){return m(Cc(oc(e).replace(vn,"")),t,"")}}function Yi(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=dl(t.prototype),r=t.apply(n,e);return iu(r)?r:n}}function Ki(t,e,n){function r(){for(var o=arguments.length,a=nf(o),u=o,c=wo(r);u--;)a[u]=arguments[u];var f=o<3&&a[0]!==c&&a[o-1]!==c?[]:Y(a,c);return(o-=f.length)<n?ao(t,e,Xi,r.placeholder,it,a,f,it,it,n-o):s(this&&this!==Pn&&this instanceof r?i:t,this,a)}var i=Yi(t);return r}function Gi(t){return function(e,n,r){var i=uf(e);if(!Js(e)){var o=xo(n,3);e=Bu(e),n=function(t){return o(i[t],t,i)}}var a=t(e,n,r);return a>-1?i[o?e[a]:a]:it}}function Zi(t){return mo(function(e){var n=e.length,r=n,o=i.prototype.thru;for(t&&e.reverse();r--;){var a=e[r];if("function"!=typeof a)throw new lf(st);if(o&&!s&&"wrapper"==bo(a))var s=new i([],!0)}for(r=s?r:n;++r<n;){a=e[r];var u=bo(a),c="wrapper"==u?Ol(a):it;s=c&&Uo(c[0])&&c[1]==(Et|_t|wt|Ot)&&!c[4].length&&1==c[9]?s[bo(c[0])].apply(s,c[3]):1==a.length&&Uo(a)?s[u]():s.thru(a)}return function(){var t=arguments,r=t[0];if(s&&1==t.length&&mp(r))return s.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}})}function Xi(t,e,n,r,i,o,a,s,u,c){function f(){for(var m=arguments.length,y=nf(m),_=m;_--;)y[_]=arguments[_];if(d)var b=wo(f),w=B(y,b);if(r&&(y=Di(y,r,i,d)),o&&(y=Li(y,o,a,d)),m-=w,d&&m<c){var x=Y(y,b);return ao(t,e,Xi,f.placeholder,n,y,x,s,u,c-m)}var E=p?n:this,O=h?E[t]:t;return m=y.length,s?y=Ko(y,s):v&&m>1&&y.reverse(),l&&u<m&&(y.length=u),this&&this!==Pn&&this instanceof f&&(O=g||Yi(O)),O.apply(E,y)}var l=e&Et,p=e&gt,h=e&mt,d=e&(_t|bt),v=e&Ct,g=h?it:Yi(t);return f}function Qi(t,e){return function(n,r){return Or(n,t,e(r),{})}}function to(t,e){return function(n,r){var i;if(n===it&&r===it)return e;if(n!==it&&(i=n),r!==it){if(i===it)return r;"string"==typeof n||"string"==typeof r?(n=hi(n),r=hi(r)):(n=pi(n),r=pi(r)),i=t(n,r)}return i}}function eo(t){return mo(function(e){return e=v(e,D(xo())),ni(function(n){var r=this;return t(e,function(t){return s(t,r,n)})})})}function no(t,e){e=e===it?" ":hi(e);var n=e.length;if(n<2)return n?ei(e,t):e;var r=ei(e,Uf(t/Q(e)));return q(e)?Oi(tt(r),0,t).join(""):r.slice(0,t)}function ro(t,e,n,r){function i(){for(var e=-1,u=arguments.length,c=-1,f=r.length,l=nf(f+u),p=this&&this!==Pn&&this instanceof i?a:t;++c<f;)l[c]=r[c];for(;u--;)l[c++]=arguments[++e];return s(p,o?n:this,l)}var o=e&gt,a=Yi(t);return i}function io(t){return function(e,n,r){return r&&"number"!=typeof r&&Lo(e,n,r)&&(n=r=it),e=wu(e),n===it?(n=e,e=0):n=wu(n),r=r===it?e<n?1:-1:wu(r),ti(e,n,r,t)}}function oo(t){return function(e,n){return"string"==typeof e&&"string"==typeof n||(e=Ou(e),n=Ou(n)),t(e,n)}}function ao(t,e,n,r,i,o,a,s,u,c){var f=e&_t,l=f?a:it,p=f?it:a,h=f?o:it,d=f?it:o;e|=f?wt:xt,(e&=~(f?xt:wt))&yt||(e&=~(gt|mt));var v=[t,e,i,h,l,d,p,s,u,c],g=n.apply(it,v);return Uo(t)&&Nl(g,v),g.placeholder=r,Go(g,t,e)}function so(t){var e=sf[t];return function(t,n){if(t=Ou(t),n=null==n?0:Wf(xu(n),292)){var r=(Au(t)+"e").split("e");return r=(Au(e(r[0]+"e"+(+r[1]+n)))+"e").split("e"),+(r[0]+"e"+(+r[1]-n))}return e(t)}}function uo(t){return function(e){var n=Al(e);return n==Kt?J(e):n==ee?G(e):$(e,t(e))}}function co(t,e,n,r,i,o,a,s){var u=e&mt;if(!u&&"function"!=typeof t)throw new lf(st);var c=r?r.length:0;if(c||(e&=~(wt|xt),r=i=it),a=a===it?a:Jf(xu(a),0),s=s===it?s:xu(s),c-=i?i.length:0,e&xt){var f=r,l=i;r=i=it}var p=u?it:Ol(t),h=[t,e,n,r,i,f,l,o,a,s];if(p&&zo(h,p),t=h[0],e=h[1],n=h[2],r=h[3],i=h[4],s=h[9]=h[9]===it?u?0:t.length:Jf(h[9]-c,0),!s&&e&(_t|bt)&&(e&=~(_t|bt)),e&&e!=gt)d=e==_t||e==bt?Ki(t,e,s):e!=wt&&e!=(gt|wt)||i.length?Xi.apply(it,h):ro(t,e,n,r);else var d=Hi(t,e,n);return Go((p?_l:Nl)(d,h),t,e)}function fo(t,e,n,r){return t===it||Hs(t,df[n])&&!mf.call(r,n)?e:t}function lo(t,e,n,r,i,o){return iu(t)&&iu(e)&&(o.set(e,t),zr(t,e,it,lo,o),o.delete(e)),t}function po(t){return hu(t)?it:t}function ho(t,e,n,r,i,o){var a=n&dt,s=t.length,u=e.length;if(s!=u&&!(a&&u>s))return!1;var c=o.get(t);if(c&&o.get(e))return c==e;var f=-1,l=!0,p=n&vt?new mn:it;for(o.set(t,e),o.set(e,t);++f<s;){var h=t[f],d=e[f];if(r)var v=a?r(d,h,f,e,t,o):r(h,d,f,t,e,o);if(v!==it){if(v)continue;l=!1;break}if(p){if(!_(e,function(t,e){if(!I(p,e)&&(h===t||i(h,t,n,r,o)))return p.push(e)})){l=!1;break}}else if(h!==d&&!i(h,d,n,r,o)){l=!1;break}}return o.delete(t),o.delete(e),l}function vo(t,e,n,r,i,o,a){switch(n){case ue:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case se:return!(t.byteLength!=e.byteLength||!o(new Sf(t),new Sf(e)));case qt:case zt:case Gt:return Hs(+t,+e);case Jt:return t.name==e.name&&t.message==e.message;case te:case ne:return t==e+"";case Kt:var s=J;case ee:var u=r&dt;if(s||(s=K),t.size!=e.size&&!u)return!1;var c=a.get(t);if(c)return c==e;r|=vt,a.set(t,e);var f=ho(s(t),s(e),r,i,o,a);return a.delete(t),f;case re:if(pl)return pl.call(t)==pl.call(e)}return!1}function go(t,e,n,r,i,o){var a=n&dt,s=yo(t),u=s.length;if(u!=yo(e).length&&!a)return!1;for(var c=u;c--;){var f=s[c];if(!(a?f in e:mf.call(e,f)))return!1}var l=o.get(t);if(l&&o.get(e))return l==e;var p=!0;o.set(t,e),o.set(e,t);for(var h=a;++c<u;){f=s[c];var d=t[f],v=e[f];if(r)var g=a?r(v,d,f,e,t,o):r(d,v,f,t,e,o);if(!(g===it?d===v||i(d,v,n,r,o):g)){p=!1;break}h||(h="constructor"==f)}if(p&&!h){var m=t.constructor,y=e.constructor;m!=y&&"constructor"in t&&"constructor"in e&&!("function"==typeof m&&m instanceof m&&"function"==typeof y&&y instanceof y)&&(p=!1)}return o.delete(t),o.delete(e),p}function mo(t){return jl(Wo(t,it,ha),t+"")}function yo(t){return mr(t,Bu,Cl)}function _o(t){return mr(t,Vu,Sl)}function bo(t){for(var e=t.name+"",n=ol[e],r=mf.call(ol,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function wo(t){return(mf.call(n,"placeholder")?n:t).placeholder}function xo(){var t=n.iteratee||jc;return t=t===jc?Ir:t,arguments.length?t(arguments[0],arguments[1]):t}function Eo(t,e){var n=t.__data__;return Mo(e)?n["string"==typeof e?"string":"hash"]:n.map}function Oo(t){for(var e=Bu(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,Fo(i)]}return e}function Co(t,e){var n=F(t,e);return Pr(n)?n:it}function So(t){var e=mf.call(t,$f),n=t[$f];try{t[$f]=it;var r=!0}catch(t){}var i=bf.call(t);return r&&(e?t[$f]=n:delete t[$f]),i}function Ao(t,e,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],a=o.size;switch(o.type){case"drop":t+=a;break;case"dropRight":e-=a;break;case"take":e=Wf(e,t+a);break;case"takeRight":t=Jf(t,e-a)}}return{start:t,end:e}}function ko(t){var e=t.match(Me);return e?e[1].split(Ue):[]}function No(t,e,n){e=Ei(e,t);for(var r=-1,i=e.length,o=!1;++r<i;){var a=Qo(e[r]);if(!(o=null!=t&&n(t,a)))break;t=t[a]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&ru(i)&&Do(a,i)&&(mp(t)||gp(t))}function To(t){var e=t.length,n=t.constructor(e);return e&&"string"==typeof t[0]&&mf.call(t,"index")&&(n.index=t.index,n.input=t.input),n}function jo(t){return"function"!=typeof t.constructor||Vo(t)?{}:dl(kf(t))}function Ro(t,e,n,r){var i=t.constructor;switch(e){case se:return Si(t);case qt:case zt:return new i(+t);case ue:return Ai(t,r);case ce:case fe:case le:case pe:case he:case de:case ve:case ge:case me:return Ri(t,r);case Kt:return ki(t,r,n);case Gt:case ne:return new i(t);case te:return Ni(t);case ee:return Ti(t,r,n);case re:return ji(t)}}function Po(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(Ie,"{\n/* [wrapped with "+e+"] */\n")}function $o(t){return mp(t)||gp(t)||!!(Rf&&t&&t[Rf])}function Do(t,e){return!!(e=null==e?Pt:e)&&("number"==typeof t||Ye.test(t))&&t>-1&&t%1==0&&t<e}function Lo(t,e,n){if(!iu(n))return!1;var r=typeof e;return!!("number"==r?Js(n)&&Do(e,n.length):"string"==r&&e in n)&&Hs(n[e],t)}function Io(t,e){if(mp(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!gu(t))||(Ne.test(t)||!ke.test(t)||null!=e&&t in uf(e))}function Mo(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}function Uo(t){var e=bo(t),r=n[e];if("function"!=typeof r||!(e in b.prototype))return!1;if(t===r)return!0;var i=Ol(r);return!!i&&t===i[0]}function Bo(t){return!!_f&&_f in t}function Vo(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||df)}function Fo(t){return t===t&&!iu(t)}function qo(t,e){return function(n){return null!=n&&(n[t]===e&&(e!==it||t in uf(n)))}}function zo(t,e){var n=t[1],r=e[1],i=n|r,o=i<(gt|mt|Et),a=r==Et&&n==_t||r==Et&&n==Ot&&t[7].length<=e[8]||r==(Et|Ot)&&e[7].length<=e[8]&&n==_t;if(!o&&!a)return t;r&gt&&(t[2]=e[2],i|=n&gt?0:yt);var s=e[3];if(s){var u=t[3];t[3]=u?Di(u,s,e[4]):s,t[4]=u?Y(t[3],ft):e[4]}return s=e[5],s&&(u=t[5],t[5]=u?Li(u,s,e[6]):s,t[6]=u?Y(t[5],ft):e[6]),s=e[7],s&&(t[7]=s),r&Et&&(t[8]=null==t[8]?e[8]:Wf(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i,t}function Ho(t){var e=[];if(null!=t)for(var n in uf(t))e.push(n);return e}function Jo(t){return bf.call(t)}function Wo(t,e,n){return e=Jf(e===it?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=Jf(r.length-e,0),a=nf(o);++i<o;)a[i]=r[e+i];i=-1;for(var u=nf(e+1);++i<e;)u[i]=r[i];return u[e]=n(a),s(t,this,u)}}function Yo(t,e){return e.length<2?t:gr(t,si(e,0,-1))}function Ko(t,e){for(var n=t.length,r=Wf(e.length,n),i=Ii(t);r--;){var o=e[r];t[r]=Do(o,n)?i[o]:it}return t}function Go(t,e,n){var r=e+"";return jl(t,Po(r,ea(ko(r),n)))}function Zo(t){var e=0,n=0;return function(){var r=Yf(),i=Nt-(r-n);if(n=r,i>0){if(++e>=kt)return arguments[0]}else e=0;return t.apply(it,arguments)}}function Xo(t,e){var n=-1,r=t.length,i=r-1;for(e=e===it?r:e;++n<e;){var o=Qr(n,i),a=t[o];t[o]=t[n],t[n]=a}return t.length=e,t}function Qo(t){if("string"==typeof t||gu(t))return t;var e=t+"";return"0"==e&&1/t==-Rt?"-0":e}function ta(t){if(null!=t){try{return gf.call(t)}catch(t){}try{return t+""}catch(t){}}return""}function ea(t,e){return c(Ut,function(n){var r="_."+n[0];e&n[1]&&!h(t,r)&&t.push(r)}),t.sort()}function na(t){if(t instanceof b)return t.clone();var e=new i(t.__wrapped__,t.__chain__);return e.__actions__=Ii(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}function ra(t,e,n){e=(n?Lo(t,e,n):e===it)?1:Jf(xu(e),0);var r=null==t?0:t.length;if(!r||e<1)return[];for(var i=0,o=0,a=nf(Uf(r/e));i<r;)a[o++]=si(t,i,i+=e);return a}function ia(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i}function oa(){var t=arguments.length;if(!t)return[];for(var e=nf(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return g(mp(n)?Ii(n):[n],pr(e,1))}function aa(t,e,n){var r=null==t?0:t.length;return r?(e=n||e===it?1:xu(e),si(t,e<0?0:e,r)):[]}function sa(t,e,n){var r=null==t?0:t.length;return r?(e=n||e===it?1:xu(e),e=r-e,si(t,0,e<0?0:e)):[]}function ua(t,e){return t&&t.length?mi(t,xo(e,3),!0,!0):[]}function ca(t,e){return t&&t.length?mi(t,xo(e,3),!0):[]}function fa(t,e,n,r){var i=null==t?0:t.length;return i?(n&&"number"!=typeof n&&Lo(t,e,n)&&(n=0,r=i),fr(t,e,n,r)):[]}function la(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:xu(n);return i<0&&(i=Jf(r+i,0)),E(t,xo(e,3),i)}function pa(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=r-1;return n!==it&&(i=xu(n),i=n<0?Jf(r+i,0):Wf(i,r-1)),E(t,xo(e,3),i,!0)}function ha(t){return(null==t?0:t.length)?pr(t,1):[]}function da(t){return(null==t?0:t.length)?pr(t,Rt):[]}function va(t,e){return(null==t?0:t.length)?(e=e===it?1:xu(e),pr(t,e)):[]}function ga(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];r[i[0]]=i[1]}return r}function ma(t){return t&&t.length?t[0]:it}function ya(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:xu(n);return i<0&&(i=Jf(r+i,0)),O(t,e,i)}function _a(t){return(null==t?0:t.length)?si(t,0,-1):[]}function ba(t,e){return null==t?"":zf.call(t,e)}function wa(t){var e=null==t?0:t.length;return e?t[e-1]:it}function xa(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=r;return n!==it&&(i=xu(n),i=i<0?Jf(r+i,0):Wf(i,r-1)),e===e?X(t,e,i):E(t,S,i,!0)}function Ea(t,e){return t&&t.length?Jr(t,xu(e)):it}function Oa(t,e){return t&&t.length&&e&&e.length?Zr(t,e):t}function Ca(t,e,n){return t&&t.length&&e&&e.length?Zr(t,e,xo(n,2)):t}function Sa(t,e,n){return t&&t.length&&e&&e.length?Zr(t,e,it,n):t}function Aa(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=xo(e,3);++r<o;){var a=t[r];e(a,r,t)&&(n.push(a),i.push(r))}return Xr(t,i),n}function ka(t){return null==t?t:Zf.call(t)}function Na(t,e,n){var r=null==t?0:t.length;return r?(n&&"number"!=typeof n&&Lo(t,e,n)?(e=0,n=r):(e=null==e?0:xu(e),n=n===it?r:xu(n)),si(t,e,n)):[]}function Ta(t,e){return ci(t,e)}function ja(t,e,n){return fi(t,e,xo(n,2))}function Ra(t,e){var n=null==t?0:t.length;if(n){var r=ci(t,e);if(r<n&&Hs(t[r],e))return r}return-1}function Pa(t,e){return ci(t,e,!0)}function $a(t,e,n){return fi(t,e,xo(n,2),!0)}function Da(t,e){if(null==t?0:t.length){var n=ci(t,e,!0)-1;if(Hs(t[n],e))return n}return-1}function La(t){return t&&t.length?li(t):[]}function Ia(t,e){return t&&t.length?li(t,xo(e,2)):[]}function Ma(t){var e=null==t?0:t.length;return e?si(t,1,e):[]}function Ua(t,e,n){return t&&t.length?(e=n||e===it?1:xu(e),si(t,0,e<0?0:e)):[]}function Ba(t,e,n){var r=null==t?0:t.length;return r?(e=n||e===it?1:xu(e),e=r-e,si(t,e<0?0:e,r)):[]}function Va(t,e){return t&&t.length?mi(t,xo(e,3),!1,!0):[]}function Fa(t,e){return t&&t.length?mi(t,xo(e,3)):[]}function qa(t){return t&&t.length?di(t):[]}function za(t,e){return t&&t.length?di(t,xo(e,2)):[]}function Ha(t,e){return e="function"==typeof e?e:it,t&&t.length?di(t,it,e):[]}function Ja(t){if(!t||!t.length)return[];var e=0;return t=p(t,function(t){if(Ws(t))return e=Jf(t.length,e),!0}),P(e,function(e){return v(t,k(e))})}function Wa(t,e){if(!t||!t.length)return[];var n=Ja(t);return null==e?n:v(n,function(t){return s(e,it,t)})}function Ya(t,e){return bi(t||[],e||[],Hn)}function Ka(t,e){return bi(t||[],e||[],oi)}function Ga(t){var e=n(t);return e.__chain__=!0,e}function Za(t,e){return e(t),t}function Xa(t,e){return e(t)}function Qa(){return Ga(this)}function ts(){return new i(this.value(),this.__chain__)}function es(){this.__values__===it&&(this.__values__=bu(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?it:this.__values__[this.__index__++]}}function ns(){return this}function rs(t){for(var e,n=this;n instanceof r;){var i=na(n);i.__index__=0,i.__values__=it,e?o.__wrapped__=i:e=i;var o=i;n=n.__wrapped__}return o.__wrapped__=t,e}function is(){var t=this.__wrapped__;if(t instanceof b){var e=t;return this.__actions__.length&&(e=new b(this)),e=e.reverse(),e.__actions__.push({func:Xa,args:[ka],thisArg:it}),new i(e,this.__chain__)}return this.thru(ka)}function os(){return yi(this.__wrapped__,this.__actions__)}function as(t,e,n){var r=mp(t)?l:ur;return n&&Lo(t,e,n)&&(e=it),r(t,xo(e,3))}function ss(t,e){return(mp(t)?p:lr)(t,xo(e,3))}function us(t,e){return pr(ds(t,e),1)}function cs(t,e){return pr(ds(t,e),Rt)}function fs(t,e,n){return n=n===it?1:xu(n),pr(ds(t,e),n)}function ls(t,e){return(mp(t)?c:vl)(t,xo(e,3))}function ps(t,e){return(mp(t)?f:gl)(t,xo(e,3))}function hs(t,e,n,r){t=Js(t)?t:Qu(t),n=n&&!r?xu(n):0;var i=t.length;return n<0&&(n=Jf(i+n,0)),vu(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&O(t,e,n)>-1}function ds(t,e){return(mp(t)?v:Vr)(t,xo(e,3))}function vs(t,e,n,r){return null==t?[]:(mp(e)||(e=null==e?[]:[e]),n=r?it:n,mp(n)||(n=null==n?[]:[n]),Wr(t,e,n))}function gs(t,e,n){var r=mp(t)?m:T,i=arguments.length<3;return r(t,xo(e,4),n,i,vl)}function ms(t,e,n){var r=mp(t)?y:T,i=arguments.length<3;return r(t,xo(e,4),n,i,gl)}function ys(t,e){return(mp(t)?p:lr)(t,Rs(xo(e,3)))}function _s(t){return(mp(t)?$n:ri)(t)}function bs(t,e,n){return e=(n?Lo(t,e,n):e===it)?1:xu(e),(mp(t)?Dn:ii)(t,e)}function ws(t){return(mp(t)?In:ai)(t)}function xs(t){if(null==t)return 0;if(Js(t))return vu(t)?Q(t):t.length;var e=Al(t);return e==Kt||e==ee?t.size:Mr(t).length}function Es(t,e,n){var r=mp(t)?_:ui;return n&&Lo(t,e,n)&&(e=it),r(t,xo(e,3))}function Os(t,e){if("function"!=typeof e)throw new lf(st);return t=xu(t),function(){if(--t<1)return e.apply(this,arguments)}}function Cs(t,e,n){return e=n?it:e,e=t&&null==e?t.length:e,co(t,Et,it,it,it,it,e)}function Ss(t,e){var n;if("function"!=typeof e)throw new lf(st);return t=xu(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=it),n}}function As(t,e,n){e=n?it:e;var r=co(t,_t,it,it,it,it,it,e);return r.placeholder=As.placeholder,r}function ks(t,e,n){e=n?it:e;var r=co(t,bt,it,it,it,it,it,e);return r.placeholder=ks.placeholder,r}function Ns(t,e,n){function r(e){var n=p,r=h;return p=h=it,y=e,v=t.apply(r,n)}function i(t){return y=t,g=Tl(s,e),_?r(t):v}function o(t){var n=t-m,r=t-y,i=e-n;return b?Wf(i,d-r):i}function a(t){var n=t-m,r=t-y;return m===it||n>=e||n<0||b&&r>=d}function s(){var t=op();if(a(t))return u(t);g=Tl(s,o(t))}function u(t){return g=it,w&&p?r(t):(p=h=it,v)}function c(){g!==it&&xl(g),y=0,p=m=h=g=it}function f(){return g===it?v:u(op())}function l(){var t=op(),n=a(t);if(p=arguments,h=this,m=t,n){if(g===it)return i(m);if(b)return g=Tl(s,e),r(m)}return g===it&&(g=Tl(s,e)),v}var p,h,d,v,g,m,y=0,_=!1,b=!1,w=!0;if("function"!=typeof t)throw new lf(st);return e=Ou(e)||0,iu(n)&&(_=!!n.leading,b="maxWait"in n,d=b?Jf(Ou(n.maxWait)||0,e):d,w="trailing"in n?!!n.trailing:w),l.cancel=c,l.flush=f,l}function Ts(t){return co(t,Ct)}function js(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new lf(st);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(js.Cache||cn),n}function Rs(t){if("function"!=typeof t)throw new lf(st);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}function Ps(t){return Ss(2,t)}function $s(t,e){if("function"!=typeof t)throw new lf(st);return e=e===it?e:xu(e),ni(t,e)}function Ds(t,e){if("function"!=typeof t)throw new lf(st);return e=null==e?0:Jf(xu(e),0),ni(function(n){var r=n[e],i=Oi(n,0,e);return r&&g(i,r),s(t,this,i)})}function Ls(t,e,n){var r=!0,i=!0;if("function"!=typeof t)throw new lf(st);return iu(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),Ns(t,e,{leading:r,maxWait:e,trailing:i})}function Is(t){return Cs(t,1)}function Ms(t,e){return lp(xi(e),t)}function Us(){if(!arguments.length)return[];var t=arguments[0];return mp(t)?t:[t]}function Bs(t){return rr(t,ht)}function Vs(t,e){return e="function"==typeof e?e:it,rr(t,ht,e)}function Fs(t){return rr(t,lt|ht)}function qs(t,e){return e="function"==typeof e?e:it,rr(t,lt|ht,e)}function zs(t,e){return null==e||or(t,e,Bu(e))}function Hs(t,e){return t===e||t!==t&&e!==e}function Js(t){return null!=t&&ru(t.length)&&!eu(t)}function Ws(t){return ou(t)&&Js(t)}function Ys(t){return!0===t||!1===t||ou(t)&&yr(t)==qt}function Ks(t){return ou(t)&&1===t.nodeType&&!hu(t)}function Gs(t){if(null==t)return!0;if(Js(t)&&(mp(t)||"string"==typeof t||"function"==typeof t.splice||_p(t)||Op(t)||gp(t)))return!t.length;var e=Al(t);if(e==Kt||e==ee)return!t.size;if(Vo(t))return!Mr(t).length;for(var n in t)if(mf.call(t,n))return!1;return!0}function Zs(t,e){return Nr(t,e)}function Xs(t,e,n){n="function"==typeof n?n:it;var r=n?n(t,e):it;return r===it?Nr(t,e,it,n):!!r}function Qs(t){if(!ou(t))return!1;var e=yr(t);return e==Jt||e==Ht||"string"==typeof t.message&&"string"==typeof t.name&&!hu(t)}function tu(t){return"number"==typeof t&&qf(t)}function eu(t){if(!iu(t))return!1;var e=yr(t);return e==Wt||e==Yt||e==Ft||e==Qt}function nu(t){return"number"==typeof t&&t==xu(t)}function ru(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=Pt}function iu(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function ou(t){return null!=t&&"object"==typeof t}function au(t,e){return t===e||Rr(t,e,Oo(e))}function su(t,e,n){return n="function"==typeof n?n:it,Rr(t,e,Oo(e),n)}function uu(t){return pu(t)&&t!=+t}function cu(t){if(kl(t))throw new of(at);return Pr(t)}function fu(t){return null===t}function lu(t){return null==t}function pu(t){return"number"==typeof t||ou(t)&&yr(t)==Gt}function hu(t){if(!ou(t)||yr(t)!=Xt)return!1;var e=kf(t);if(null===e)return!0;var n=mf.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&gf.call(n)==wf}function du(t){return nu(t)&&t>=-Pt&&t<=Pt}function vu(t){return"string"==typeof t||!mp(t)&&ou(t)&&yr(t)==ne}function gu(t){return"symbol"==typeof t||ou(t)&&yr(t)==re}function mu(t){return t===it}function yu(t){return ou(t)&&Al(t)==oe}function _u(t){return ou(t)&&yr(t)==ae}function bu(t){if(!t)return[];if(Js(t))return vu(t)?tt(t):Ii(t);if(Pf&&t[Pf])return H(t[Pf]());var e=Al(t);return(e==Kt?J:e==ee?K:Qu)(t)}function wu(t){if(!t)return 0===t?t:0;if((t=Ou(t))===Rt||t===-Rt){return(t<0?-1:1)*$t}return t===t?t:0}function xu(t){var e=wu(t),n=e%1;return e===e?n?e-n:e:0}function Eu(t){return t?nr(xu(t),0,Lt):0}function Ou(t){if("number"==typeof t)return t;if(gu(t))return Dt;if(iu(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=iu(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace($e,"");var n=He.test(t);return n||We.test(t)?Tn(t.slice(2),n?2:8):ze.test(t)?Dt:+t}function Cu(t){return Mi(t,Vu(t))}function Su(t){return t?nr(xu(t),-Pt,Pt):0===t?t:0}function Au(t){return null==t?"":hi(t)}function ku(t,e){var n=dl(t);return null==e?n:Xn(n,e)}function Nu(t,e){return x(t,xo(e,3),hr)}function Tu(t,e){return x(t,xo(e,3),dr)}function ju(t,e){return null==t?t:ml(t,xo(e,3),Vu)}function Ru(t,e){return null==t?t:yl(t,xo(e,3),Vu)}function Pu(t,e){return t&&hr(t,xo(e,3))}function $u(t,e){return t&&dr(t,xo(e,3))}function Du(t){return null==t?[]:vr(t,Bu(t))}function Lu(t){return null==t?[]:vr(t,Vu(t))}function Iu(t,e,n){var r=null==t?it:gr(t,e);return r===it?n:r}function Mu(t,e){return null!=t&&No(t,e,br)}function Uu(t,e){return null!=t&&No(t,e,wr)}function Bu(t){return Js(t)?Rn(t):Mr(t)}function Vu(t){return Js(t)?Rn(t,!0):Ur(t)}function Fu(t,e){var n={};return e=xo(e,3),hr(t,function(t,r,i){tr(n,e(t,r,i),t)}),n}function qu(t,e){var n={};return e=xo(e,3),hr(t,function(t,r,i){tr(n,r,e(t,r,i))}),n}function zu(t,e){return Hu(t,Rs(xo(e)))}function Hu(t,e){if(null==t)return{};var n=v(_o(t),function(t){return[t]});return e=xo(e),Kr(t,n,function(t,n){return e(t,n[0])})}function Ju(t,e,n){e=Ei(e,t);var r=-1,i=e.length;for(i||(i=1,t=it);++r<i;){var o=null==t?it:t[Qo(e[r])];o===it&&(r=i,o=n),t=eu(o)?o.call(t):o}return t}function Wu(t,e,n){return null==t?t:oi(t,e,n)}function Yu(t,e,n,r){return r="function"==typeof r?r:it,null==t?t:oi(t,e,n,r)}function Ku(t,e,n){var r=mp(t),i=r||_p(t)||Op(t);if(e=xo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:iu(t)&&eu(o)?dl(kf(t)):{}}return(i?c:hr)(t,function(t,r,i){return e(n,t,r,i)}),n}function Gu(t,e){return null==t||vi(t,e)}function Zu(t,e,n){return null==t?t:gi(t,e,xi(n))}function Xu(t,e,n,r){return r="function"==typeof r?r:it,null==t?t:gi(t,e,xi(n),r)}function Qu(t){return null==t?[]:L(t,Bu(t))}function tc(t){return null==t?[]:L(t,Vu(t))}function ec(t,e,n){return n===it&&(n=e,e=it),n!==it&&(n=Ou(n),n=n===n?n:0),e!==it&&(e=Ou(e),e=e===e?e:0),nr(Ou(t),e,n)}function nc(t,e,n){return e=wu(e),n===it?(n=e,e=0):n=wu(n),t=Ou(t),xr(t,e,n)}function rc(t,e,n){if(n&&"boolean"!=typeof n&&Lo(t,e,n)&&(e=n=it),n===it&&("boolean"==typeof e?(n=e,e=it):"boolean"==typeof t&&(n=t,t=it)),t===it&&e===it?(t=0,e=1):(t=wu(t),e===it?(e=t,t=0):e=wu(e)),t>e){var r=t;t=e,e=r}if(n||t%1||e%1){var i=Gf();return Wf(t+i*(e-t+Nn("1e-"+((i+"").length-1))),e)}return Qr(t,e)}function ic(t){return Gp(Au(t).toLowerCase())}function oc(t){return(t=Au(t))&&t.replace(Ke,Jn).replace(gn,"")}function ac(t,e,n){t=Au(t),e=hi(e);var r=t.length;n=n===it?r:nr(xu(n),0,r);var i=n;return(n-=e.length)>=0&&t.slice(n,i)==e}function sc(t){return t=Au(t),t&&Oe.test(t)?t.replace(xe,Wn):t}function uc(t){return t=Au(t),t&&Pe.test(t)?t.replace(Re,"\\$&"):t}function cc(t,e,n){t=Au(t),e=xu(e);var r=e?Q(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return no(Bf(i),n)+t+no(Uf(i),n)}function fc(t,e,n){t=Au(t),e=xu(e);var r=e?Q(t):0;return e&&r<e?t+no(e-r,n):t}function lc(t,e,n){t=Au(t),e=xu(e);var r=e?Q(t):0;return e&&r<e?no(e-r,n)+t:t}function pc(t,e,n){return n||null==e?e=0:e&&(e=+e),Kf(Au(t).replace(De,""),e||0)}function hc(t,e,n){return e=(n?Lo(t,e,n):e===it)?1:xu(e),ei(Au(t),e)}function dc(){var t=arguments,e=Au(t[0]);return t.length<3?e:e.replace(t[1],t[2])}function vc(t,e,n){return n&&"number"!=typeof n&&Lo(t,e,n)&&(e=n=it),(n=n===it?Lt:n>>>0)?(t=Au(t),t&&("string"==typeof e||null!=e&&!xp(e))&&!(e=hi(e))&&q(t)?Oi(tt(t),0,n):t.split(e,n)):[]}function gc(t,e,n){return t=Au(t),n=null==n?0:nr(xu(n),0,t.length),e=hi(e),t.slice(n,n+e.length)==e}function mc(t,e,r){var i=n.templateSettings;r&&Lo(t,e,r)&&(e=it),t=Au(t),e=Np({},e,i,fo);var o,a,s=Np({},e.imports,i.imports,fo),u=Bu(s),c=L(s,u),f=0,l=e.interpolate||Ge,p="__p += '",h=cf((e.escape||Ge).source+"|"+l.source+"|"+(l===Ae?Fe:Ge).source+"|"+(e.evaluate||Ge).source+"|$","g"),d="//# sourceURL="+("sourceURL"in e?e.sourceURL:"lodash.templateSources["+ ++xn+"]")+"\n";t.replace(h,function(e,n,r,i,s,u){return r||(r=i),p+=t.slice(f,u).replace(Ze,V),n&&(o=!0,p+="' +\n__e("+n+") +\n'"),s&&(a=!0,p+="';\n"+s+";\n__p += '"),r&&(p+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),f=u+e.length,e}),p+="';\n";var v=e.variable;v||(p="with (obj) {\n"+p+"\n}\n"),p=(a?p.replace(ye,""):p).replace(_e,"$1").replace(be,"$1;"),p="function("+(v||"obj")+") {\n"+(v?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(o?", __e = _.escape":"")+(a?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+p+"return __p\n}";var g=Zp(function(){return af(u,d+"return "+p).apply(it,c)});if(g.source=p,Qs(g))throw g;return g}function yc(t){return Au(t).toLowerCase()}function _c(t){return Au(t).toUpperCase()}function bc(t,e,n){if((t=Au(t))&&(n||e===it))return t.replace($e,"");if(!t||!(e=hi(e)))return t;var r=tt(t),i=tt(e);return Oi(r,M(r,i),U(r,i)+1).join("")}function wc(t,e,n){if((t=Au(t))&&(n||e===it))return t.replace(Le,"");if(!t||!(e=hi(e)))return t;var r=tt(t);return Oi(r,0,U(r,tt(e))+1).join("")}function xc(t,e,n){if((t=Au(t))&&(n||e===it))return t.replace(De,"");if(!t||!(e=hi(e)))return t;var r=tt(t);return Oi(r,M(r,tt(e))).join("")}function Ec(t,e){var n=St,r=At;if(iu(e)){var i="separator"in e?e.separator:i;n="length"in e?xu(e.length):n,r="omission"in e?hi(e.omission):r}t=Au(t);var o=t.length;if(q(t)){var a=tt(t);o=a.length}if(n>=o)return t;var s=n-Q(r);if(s<1)return r;var u=a?Oi(a,0,s).join(""):t.slice(0,s);if(i===it)return u+r;if(a&&(s+=u.length-s),xp(i)){if(t.slice(s).search(i)){var c,f=u;for(i.global||(i=cf(i.source,Au(qe.exec(i))+"g")),i.lastIndex=0;c=i.exec(f);)var l=c.index;u=u.slice(0,l===it?s:l)}}else if(t.indexOf(hi(i),s)!=s){var p=u.lastIndexOf(i);p>-1&&(u=u.slice(0,p))}return u+r}function Oc(t){return t=Au(t),t&&Ee.test(t)?t.replace(we,Yn):t}function Cc(t,e,n){return t=Au(t),e=n?it:e,e===it?z(t)?rt(t):w(t):t.match(e)||[]}function Sc(t){var e=null==t?0:t.length,n=xo();return t=e?v(t,function(t){if("function"!=typeof t[1])throw new lf(st);return[n(t[0]),t[1]]}):[],ni(function(n){for(var r=-1;++r<e;){var i=t[r];if(s(i[0],this,n))return s(i[1],this,n)}})}function Ac(t){return ir(rr(t,lt))}function kc(t){return function(){return t}}function Nc(t,e){return null==t||t!==t?e:t}function Tc(t){return t}function jc(t){return Ir("function"==typeof t?t:rr(t,lt))}function Rc(t){return Fr(rr(t,lt))}function Pc(t,e){return qr(t,rr(e,lt))}function $c(t,e,n){var r=Bu(e),i=vr(e,r);null!=n||iu(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=vr(e,Bu(e)));var o=!(iu(n)&&"chain"in n&&!n.chain),a=eu(t);return c(i,function(n){var r=e[n];t[n]=r,a&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=Ii(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,g([this.value()],arguments))})}),t}function Dc(){return Pn._===this&&(Pn._=xf),this}function Lc(){}function Ic(t){return t=xu(t),ni(function(e){return Jr(e,t)})}function Mc(t){return Io(t)?k(Qo(t)):Gr(t)}function Uc(t){return function(e){return null==t?it:gr(t,e)}}function Bc(){return[]}function Vc(){return!1}function Fc(){return{}}function qc(){return""}function zc(){return!0}function Hc(t,e){if((t=xu(t))<1||t>Pt)return[];var n=Lt,r=Wf(t,Lt);e=xo(e),t-=Lt;for(var i=P(r,e);++n<t;)e(n);return i}function Jc(t){return mp(t)?v(t,Qo):gu(t)?[t]:Ii(Rl(Au(t)))}function Wc(t){var e=++yf;return Au(t)+e}function Yc(t){return t&&t.length?cr(t,Tc,_r):it}function Kc(t,e){return t&&t.length?cr(t,xo(e,2),_r):it}function Gc(t){return A(t,Tc)}function Zc(t,e){return A(t,xo(e,2))}function Xc(t){return t&&t.length?cr(t,Tc,Br):it}function Qc(t,e){return t&&t.length?cr(t,xo(e,2),Br):it}function tf(t){return t&&t.length?R(t,Tc):0}function ef(t,e){return t&&t.length?R(t,xo(e,2)):0}e=null==e?Pn:Kn.defaults(Pn.Object(),e,Kn.pick(Pn,wn));var nf=e.Array,rf=e.Date,of=e.Error,af=e.Function,sf=e.Math,uf=e.Object,cf=e.RegExp,ff=e.String,lf=e.TypeError,pf=nf.prototype,hf=af.prototype,df=uf.prototype,vf=e["__core-js_shared__"],gf=hf.toString,mf=df.hasOwnProperty,yf=0,_f=function(){var t=/[^.]+$/.exec(vf&&vf.keys&&vf.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),bf=df.toString,wf=gf.call(uf),xf=Pn._,Ef=cf("^"+gf.call(mf).replace(Re,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Of=Ln?e.Buffer:it,Cf=e.Symbol,Sf=e.Uint8Array,Af=Of?Of.allocUnsafe:it,kf=W(uf.getPrototypeOf,uf),Nf=uf.create,Tf=df.propertyIsEnumerable,jf=pf.splice,Rf=Cf?Cf.isConcatSpreadable:it,Pf=Cf?Cf.iterator:it,$f=Cf?Cf.toStringTag:it,Df=function(){try{var t=Co(uf,"defineProperty");return t({},"",{}),t}catch(t){}}(),Lf=e.clearTimeout!==Pn.clearTimeout&&e.clearTimeout,If=rf&&rf.now!==Pn.Date.now&&rf.now,Mf=e.setTimeout!==Pn.setTimeout&&e.setTimeout,Uf=sf.ceil,Bf=sf.floor,Vf=uf.getOwnPropertySymbols,Ff=Of?Of.isBuffer:it,qf=e.isFinite,zf=pf.join,Hf=W(uf.keys,uf),Jf=sf.max,Wf=sf.min,Yf=rf.now,Kf=e.parseInt,Gf=sf.random,Zf=pf.reverse,Xf=Co(e,"DataView"),Qf=Co(e,"Map"),tl=Co(e,"Promise"),el=Co(e,"Set"),nl=Co(e,"WeakMap"),rl=Co(uf,"create"),il=nl&&new nl,ol={},al=ta(Xf),sl=ta(Qf),ul=ta(tl),cl=ta(el),fl=ta(nl),ll=Cf?Cf.prototype:it,pl=ll?ll.valueOf:it,hl=ll?ll.toString:it,dl=function(){function t(){}return function(e){if(!iu(e))return{};if(Nf)return Nf(e);t.prototype=e;var n=new t;return t.prototype=it,n}}();n.templateSettings={escape:Ce,evaluate:Se,interpolate:Ae,variable:"",imports:{_:n}},n.prototype=r.prototype,n.prototype.constructor=n,i.prototype=dl(r.prototype),i.prototype.constructor=i,b.prototype=dl(r.prototype),b.prototype.constructor=b,nt.prototype.clear=Be,nt.prototype.delete=Xe,nt.prototype.get=Qe,nt.prototype.has=tn,nt.prototype.set=en,nn.prototype.clear=rn,nn.prototype.delete=on,nn.prototype.get=an,nn.prototype.has=sn,nn.prototype.set=un,cn.prototype.clear=fn,cn.prototype.delete=ln,cn.prototype.get=pn,cn.prototype.has=hn,cn.prototype.set=dn,mn.prototype.add=mn.prototype.push=yn,mn.prototype.has=_n,bn.prototype.clear=Cn,bn.prototype.delete=Sn,bn.prototype.get=An,bn.prototype.has=kn,bn.prototype.set=jn;var vl=qi(hr),gl=qi(dr,!0),ml=zi(),yl=zi(!0),_l=il?function(t,e){return il.set(t,e),t}:Tc,bl=Df?function(t,e){return Df(t,"toString",{configurable:!0,enumerable:!1,value:kc(e),writable:!0})}:Tc,wl=ni,xl=Lf||function(t){return Pn.clearTimeout(t)},El=el&&1/K(new el([,-0]))[1]==Rt?function(t){return new el(t)}:Lc,Ol=il?function(t){return il.get(t)}:Lc,Cl=Vf?function(t){return null==t?[]:(t=uf(t),p(Vf(t),function(e){return Tf.call(t,e)}))}:Bc,Sl=Vf?function(t){for(var e=[];t;)g(e,Cl(t)),t=kf(t);return e}:Bc,Al=yr;(Xf&&Al(new Xf(new ArrayBuffer(1)))!=ue||Qf&&Al(new Qf)!=Kt||tl&&"[object Promise]"!=Al(tl.resolve())||el&&Al(new el)!=ee||nl&&Al(new nl)!=oe)&&(Al=function(t){var e=yr(t),n=e==Xt?t.constructor:it,r=n?ta(n):"";if(r)switch(r){case al:return ue;case sl:return Kt;case ul:return"[object Promise]";case cl:return ee;case fl:return oe}return e});var kl=vf?eu:Vc,Nl=Zo(_l),Tl=Mf||function(t,e){return Pn.setTimeout(t,e)},jl=Zo(bl),Rl=function(t){var e=js(t,function(t){return n.size===ct&&n.clear(),t}),n=e.cache;return e}(function(t){var e=[];return Te.test(t)&&e.push(""),t.replace(je,function(t,n,r,i){e.push(r?i.replace(Ve,"$1"):n||t)}),e}),Pl=ni(function(t,e){return Ws(t)?sr(t,pr(e,1,Ws,!0)):[]}),$l=ni(function(t,e){var n=wa(e);return Ws(n)&&(n=it),Ws(t)?sr(t,pr(e,1,Ws,!0),xo(n,2)):[]}),Dl=ni(function(t,e){var n=wa(e);return Ws(n)&&(n=it),Ws(t)?sr(t,pr(e,1,Ws,!0),it,n):[]}),Ll=ni(function(t){var e=v(t,wi);return e.length&&e[0]===t[0]?Er(e):[]}),Il=ni(function(t){var e=wa(t),n=v(t,wi);return e===wa(n)?e=it:n.pop(),n.length&&n[0]===t[0]?Er(n,xo(e,2)):[]}),Ml=ni(function(t){var e=wa(t),n=v(t,wi);return e="function"==typeof e?e:it,e&&n.pop(),n.length&&n[0]===t[0]?Er(n,it,e):[]}),Ul=ni(Oa),Bl=mo(function(t,e){var n=null==t?0:t.length,r=er(t,e);return Xr(t,v(e,function(t){return Do(t,n)?+t:t}).sort(Pi)),r}),Vl=ni(function(t){return di(pr(t,1,Ws,!0))}),Fl=ni(function(t){var e=wa(t);return Ws(e)&&(e=it),di(pr(t,1,Ws,!0),xo(e,2))}),ql=ni(function(t){var e=wa(t);return e="function"==typeof e?e:it,di(pr(t,1,Ws,!0),it,e)}),zl=ni(function(t,e){return Ws(t)?sr(t,e):[]}),Hl=ni(function(t){return _i(p(t,Ws))}),Jl=ni(function(t){var e=wa(t);return Ws(e)&&(e=it),_i(p(t,Ws),xo(e,2))}),Wl=ni(function(t){var e=wa(t);return e="function"==typeof e?e:it,_i(p(t,Ws),it,e)}),Yl=ni(Ja),Kl=ni(function(t){var e=t.length,n=e>1?t[e-1]:it;return n="function"==typeof n?(t.pop(),n):it,Wa(t,n)}),Gl=mo(function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,o=function(e){return er(e,t)};return!(e>1||this.__actions__.length)&&r instanceof b&&Do(n)?(r=r.slice(n,+n+(e?1:0)),r.__actions__.push({func:Xa,args:[o],thisArg:it}),new i(r,this.__chain__).thru(function(t){return e&&!t.length&&t.push(it),t})):this.thru(o)}),Zl=Vi(function(t,e,n){mf.call(t,n)?++t[n]:tr(t,n,1)}),Xl=Gi(la),Ql=Gi(pa),tp=Vi(function(t,e,n){mf.call(t,n)?t[n].push(e):tr(t,n,[e])}),ep=ni(function(t,e,n){var r=-1,i="function"==typeof e,o=Js(t)?nf(t.length):[];return vl(t,function(t){o[++r]=i?s(e,t,n):Cr(t,e,n)}),o}),np=Vi(function(t,e,n){tr(t,n,e)}),rp=Vi(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),ip=ni(function(t,e){if(null==t)return[];var n=e.length;return n>1&&Lo(t,e[0],e[1])?e=[]:n>2&&Lo(e[0],e[1],e[2])&&(e=[e[0]]),Wr(t,pr(e,1),[])}),op=If||function(){return Pn.Date.now()},ap=ni(function(t,e,n){var r=gt;if(n.length){var i=Y(n,wo(ap));r|=wt}return co(t,r,e,n,i)}),sp=ni(function(t,e,n){var r=gt|mt;if(n.length){var i=Y(n,wo(sp));r|=wt}return co(e,r,t,n,i)}),up=ni(function(t,e){return ar(t,1,e)}),cp=ni(function(t,e,n){return ar(t,Ou(e)||0,n)});js.Cache=cn;var fp=wl(function(t,e){e=1==e.length&&mp(e[0])?v(e[0],D(xo())):v(pr(e,1),D(xo()));var n=e.length;return ni(function(r){for(var i=-1,o=Wf(r.length,n);++i<o;)r[i]=e[i].call(this,r[i]);return s(t,this,r)})}),lp=ni(function(t,e){var n=Y(e,wo(lp));return co(t,wt,it,e,n)}),pp=ni(function(t,e){var n=Y(e,wo(pp));return co(t,xt,it,e,n)}),hp=mo(function(t,e){return co(t,Ot,it,it,it,e)}),dp=oo(_r),vp=oo(function(t,e){return t>=e}),gp=Sr(function(){return arguments}())?Sr:function(t){return ou(t)&&mf.call(t,"callee")&&!Tf.call(t,"callee")},mp=nf.isArray,yp=Un?D(Un):Ar,_p=Ff||Vc,bp=Bn?D(Bn):kr,wp=Vn?D(Vn):jr,xp=Fn?D(Fn):$r,Ep=qn?D(qn):Dr,Op=zn?D(zn):Lr,Cp=oo(Br),Sp=oo(function(t,e){return t<=e}),Ap=Fi(function(t,e){if(Vo(e)||Js(e))return void Mi(e,Bu(e),t);for(var n in e)mf.call(e,n)&&Hn(t,n,e[n])}),kp=Fi(function(t,e){Mi(e,Vu(e),t)}),Np=Fi(function(t,e,n,r){Mi(e,Vu(e),t,r)}),Tp=Fi(function(t,e,n,r){Mi(e,Bu(e),t,r)}),jp=mo(er),Rp=ni(function(t){return t.push(it,fo),s(Np,it,t)}),Pp=ni(function(t){return t.push(it,lo),s(Mp,it,t)}),$p=Qi(function(t,e,n){t[e]=n},kc(Tc)),Dp=Qi(function(t,e,n){mf.call(t,e)?t[e].push(n):t[e]=[n]},xo),Lp=ni(Cr),Ip=Fi(function(t,e,n){zr(t,e,n)}),Mp=Fi(function(t,e,n,r){zr(t,e,n,r)}),Up=mo(function(t,e){var n={};if(null==t)return n;var r=!1;e=v(e,function(e){return e=Ei(e,t),r||(r=e.length>1),e}),Mi(t,_o(t),n),r&&(n=rr(n,lt|pt|ht,po));for(var i=e.length;i--;)vi(n,e[i]);return n}),Bp=mo(function(t,e){return null==t?{}:Yr(t,e)}),Vp=uo(Bu),Fp=uo(Vu),qp=Wi(function(t,e,n){return e=e.toLowerCase(),t+(n?ic(e):e)}),zp=Wi(function(t,e,n){return t+(n?"-":"")+e.toLowerCase()}),Hp=Wi(function(t,e,n){return t+(n?" ":"")+e.toLowerCase()}),Jp=Ji("toLowerCase"),Wp=Wi(function(t,e,n){return t+(n?"_":"")+e.toLowerCase()}),Yp=Wi(function(t,e,n){return t+(n?" ":"")+Gp(e)}),Kp=Wi(function(t,e,n){return t+(n?" ":"")+e.toUpperCase()}),Gp=Ji("toUpperCase"),Zp=ni(function(t,e){try{return s(t,it,e)}catch(t){return Qs(t)?t:new of(t)}}),Xp=mo(function(t,e){return c(e,function(e){e=Qo(e),tr(t,e,ap(t[e],t))}),t}),Qp=Zi(),th=Zi(!0),eh=ni(function(t,e){return function(n){return Cr(n,t,e)}}),nh=ni(function(t,e){return function(n){return Cr(t,n,e)}}),rh=eo(v),ih=eo(l),oh=eo(_),ah=io(),sh=io(!0),uh=to(function(t,e){return t+e},0),ch=so("ceil"),fh=to(function(t,e){return t/e},1),lh=so("floor"),ph=to(function(t,e){return t*e},1),hh=so("round"),dh=to(function(t,e){return t-e},0);return n.after=Os,n.ary=Cs,n.assign=Ap,n.assignIn=kp,n.assignInWith=Np,n.assignWith=Tp,n.at=jp,n.before=Ss,n.bind=ap,n.bindAll=Xp,n.bindKey=sp,n.castArray=Us,n.chain=Ga,n.chunk=ra,n.compact=ia,n.concat=oa,n.cond=Sc,n.conforms=Ac,n.constant=kc,n.countBy=Zl,n.create=ku,n.curry=As,n.curryRight=ks,n.debounce=Ns,n.defaults=Rp,n.defaultsDeep=Pp,n.defer=up,n.delay=cp,n.difference=Pl,n.differenceBy=$l,n.differenceWith=Dl,n.drop=aa,n.dropRight=sa,n.dropRightWhile=ua,n.dropWhile=ca,n.fill=fa,n.filter=ss,n.flatMap=us,n.flatMapDeep=cs,n.flatMapDepth=fs,n.flatten=ha,n.flattenDeep=da,n.flattenDepth=va,n.flip=Ts,n.flow=Qp,n.flowRight=th,n.fromPairs=ga,n.functions=Du,n.functionsIn=Lu,n.groupBy=tp,n.initial=_a,n.intersection=Ll,n.intersectionBy=Il,n.intersectionWith=Ml,n.invert=$p,n.invertBy=Dp,n.invokeMap=ep,n.iteratee=jc,n.keyBy=np,n.keys=Bu,n.keysIn=Vu,n.map=ds,n.mapKeys=Fu,n.mapValues=qu,n.matches=Rc,n.matchesProperty=Pc,n.memoize=js,n.merge=Ip,n.mergeWith=Mp,n.method=eh,n.methodOf=nh,n.mixin=$c,n.negate=Rs,n.nthArg=Ic,n.omit=Up,n.omitBy=zu,n.once=Ps,n.orderBy=vs,n.over=rh,n.overArgs=fp,n.overEvery=ih,n.overSome=oh,n.partial=lp,n.partialRight=pp,n.partition=rp,n.pick=Bp,n.pickBy=Hu,n.property=Mc,n.propertyOf=Uc,n.pull=Ul,n.pullAll=Oa,n.pullAllBy=Ca,n.pullAllWith=Sa,n.pullAt=Bl,n.range=ah,n.rangeRight=sh,n.rearg=hp,n.reject=ys,n.remove=Aa,n.rest=$s,n.reverse=ka,n.sampleSize=bs,n.set=Wu,n.setWith=Yu,n.shuffle=ws,n.slice=Na,n.sortBy=ip,n.sortedUniq=La,n.sortedUniqBy=Ia,n.split=vc,n.spread=Ds,n.tail=Ma,n.take=Ua,n.takeRight=Ba,n.takeRightWhile=Va,n.takeWhile=Fa,n.tap=Za,n.throttle=Ls,n.thru=Xa,n.toArray=bu,n.toPairs=Vp,n.toPairsIn=Fp,n.toPath=Jc,n.toPlainObject=Cu,n.transform=Ku,n.unary=Is,n.union=Vl,n.unionBy=Fl,n.unionWith=ql,n.uniq=qa,n.uniqBy=za,n.uniqWith=Ha,n.unset=Gu,n.unzip=Ja,n.unzipWith=Wa,n.update=Zu,n.updateWith=Xu,n.values=Qu,n.valuesIn=tc,n.without=zl,n.words=Cc,n.wrap=Ms,n.xor=Hl,n.xorBy=Jl,n.xorWith=Wl,n.zip=Yl,n.zipObject=Ya,n.zipObjectDeep=Ka,n.zipWith=Kl,n.entries=Vp,n.entriesIn=Fp,n.extend=kp,n.extendWith=Np,$c(n,n),n.add=uh,n.attempt=Zp,n.camelCase=qp,n.capitalize=ic,n.ceil=ch,n.clamp=ec,n.clone=Bs,n.cloneDeep=Fs,n.cloneDeepWith=qs,n.cloneWith=Vs,n.conformsTo=zs,n.deburr=oc,n.defaultTo=Nc,n.divide=fh,n.endsWith=ac,n.eq=Hs,n.escape=sc,n.escapeRegExp=uc,n.every=as,n.find=Xl,n.findIndex=la,n.findKey=Nu,n.findLast=Ql,n.findLastIndex=pa,n.findLastKey=Tu,n.floor=lh,n.forEach=ls,n.forEachRight=ps,n.forIn=ju,n.forInRight=Ru,n.forOwn=Pu,n.forOwnRight=$u,n.get=Iu,n.gt=dp,n.gte=vp,n.has=Mu,n.hasIn=Uu,n.head=ma,n.identity=Tc,n.includes=hs,n.indexOf=ya,n.inRange=nc,n.invoke=Lp,n.isArguments=gp,n.isArray=mp,n.isArrayBuffer=yp,n.isArrayLike=Js,n.isArrayLikeObject=Ws,n.isBoolean=Ys,n.isBuffer=_p,n.isDate=bp,n.isElement=Ks,n.isEmpty=Gs,n.isEqual=Zs,n.isEqualWith=Xs,n.isError=Qs,n.isFinite=tu,n.isFunction=eu,n.isInteger=nu,n.isLength=ru,n.isMap=wp,n.isMatch=au,n.isMatchWith=su,n.isNaN=uu,n.isNative=cu,n.isNil=lu,n.isNull=fu,n.isNumber=pu,n.isObject=iu,n.isObjectLike=ou,n.isPlainObject=hu,n.isRegExp=xp,n.isSafeInteger=du,n.isSet=Ep,n.isString=vu,n.isSymbol=gu,n.isTypedArray=Op,n.isUndefined=mu,n.isWeakMap=yu,n.isWeakSet=_u,n.join=ba,n.kebabCase=zp,n.last=wa,n.lastIndexOf=xa,n.lowerCase=Hp,n.lowerFirst=Jp,n.lt=Cp,n.lte=Sp,n.max=Yc,n.maxBy=Kc,n.mean=Gc,n.meanBy=Zc,n.min=Xc,n.minBy=Qc,n.stubArray=Bc,n.stubFalse=Vc,n.stubObject=Fc,n.stubString=qc,n.stubTrue=zc,n.multiply=ph,n.nth=Ea,n.noConflict=Dc,n.noop=Lc,n.now=op,n.pad=cc,n.padEnd=fc,n.padStart=lc,n.parseInt=pc,n.random=rc,n.reduce=gs,n.reduceRight=ms,n.repeat=hc,n.replace=dc,n.result=Ju,n.round=hh,n.runInContext=t,n.sample=_s,n.size=xs,n.snakeCase=Wp,n.some=Es,n.sortedIndex=Ta,n.sortedIndexBy=ja,n.sortedIndexOf=Ra,n.sortedLastIndex=Pa,n.sortedLastIndexBy=$a,n.sortedLastIndexOf=Da,n.startCase=Yp,n.startsWith=gc,n.subtract=dh,n.sum=tf,n.sumBy=ef,n.template=mc,n.times=Hc,n.toFinite=wu,n.toInteger=xu,n.toLength=Eu,n.toLower=yc,n.toNumber=Ou,n.toSafeInteger=Su,n.toString=Au,n.toUpper=_c,n.trim=bc,n.trimEnd=wc,n.trimStart=xc,n.truncate=Ec,n.unescape=Oc,n.uniqueId=Wc,n.upperCase=Kp,n.upperFirst=Gp,n.each=ls,n.eachRight=ps,n.first=ma,$c(n,function(){var t={};return hr(n,function(e,r){mf.call(n.prototype,r)||(t[r]=e)}),t}(),{chain:!1}),n.VERSION="4.17.4",c(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){n[t].placeholder=n}),c(["drop","take"],function(t,e){b.prototype[t]=function(n){n=n===it?1:Jf(xu(n),0);var r=this.__filtered__&&!e?new b(this):this.clone();return r.__filtered__?r.__takeCount__=Wf(n,r.__takeCount__):r.__views__.push({size:Wf(n,Lt),type:t+(r.__dir__<0?"Right":"")}),r},b.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}}),c(["filter","map","takeWhile"],function(t,e){var n=e+1,r=n==Tt||3==n;b.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:xo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),c(["head","last"],function(t,e){var n="take"+(e?"Right":"");b.prototype[t]=function(){return this[n](1).value()[0]}}),c(["initial","tail"],function(t,e){var n="drop"+(e?"":"Right");b.prototype[t]=function(){return this.__filtered__?new b(this):this[n](1)}}),b.prototype.compact=function(){return this.filter(Tc)},b.prototype.find=function(t){return this.filter(t).head()},b.prototype.findLast=function(t){return this.reverse().find(t)},b.prototype.invokeMap=ni(function(t,e){return"function"==typeof t?new b(this):this.map(function(n){return Cr(n,t,e)})}),b.prototype.reject=function(t){return this.filter(Rs(xo(t)))},b.prototype.slice=function(t,e){t=xu(t);var n=this;return n.__filtered__&&(t>0||e<0)?new b(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==it&&(e=xu(e),n=e<0?n.dropRight(-e):n.take(e-t)),n)},b.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},b.prototype.toArray=function(){return this.take(Lt)},hr(b.prototype,function(t,e){var r=/^(?:filter|find|map|reject)|While$/.test(e),o=/^(?:head|last)$/.test(e),a=n[o?"take"+("last"==e?"Right":""):e],s=o||/^find/.test(e);a&&(n.prototype[e]=function(){var e=this.__wrapped__,u=o?[1]:arguments,c=e instanceof b,f=u[0],l=c||mp(e),p=function(t){var e=a.apply(n,g([t],u));return o&&h?e[0]:e};l&&r&&"function"==typeof f&&1!=f.length&&(c=l=!1);var h=this.__chain__,d=!!this.__actions__.length,v=s&&!h,m=c&&!d;if(!s&&l){e=m?e:new b(this);var y=t.apply(e,u);return y.__actions__.push({func:Xa,args:[p],thisArg:it}),new i(y,h)}return v&&m?t.apply(this,u):(y=this.thru(p),v?o?y.value()[0]:y.value():y)})}),c(["pop","push","shift","sort","splice","unshift"],function(t){var e=pf[t],r=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",i=/^(?:pop|shift)$/.test(t);n.prototype[t]=function(){var t=arguments;if(i&&!this.__chain__){var n=this.value();return e.apply(mp(n)?n:[],t)}return this[r](function(n){return e.apply(mp(n)?n:[],t)})}}),hr(b.prototype,function(t,e){var r=n[e];if(r){var i=r.name+"";(ol[i]||(ol[i]=[])).push({name:e,func:r})}}),ol[Xi(it,mt).name]=[{name:"wrapper",func:it}],b.prototype.clone=N,b.prototype.reverse=Z,b.prototype.value=et,n.prototype.at=Gl,n.prototype.chain=Qa,n.prototype.commit=ts,n.prototype.next=es,n.prototype.plant=rs,n.prototype.reverse=is,n.prototype.toJSON=n.prototype.valueOf=n.prototype.value=os,n.prototype.first=n.prototype.head,Pf&&(n.prototype[Pf]=ns),n}();Pn._=Kn,(i=function(){return Kn}.call(e,n,e,r))!==it&&(r.exports=i)}).call(this)}).call(e,n(1),n(12)(t))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){"use strict";var r=n(0),i=n(34),o={token:"",baseUrl:"https://www.flex.io/api/v1",insecure:!1,debug:!1},a={_init:function(){this.connections=n(61).getConnectionsObject(this),this.pipes=n(62).getPipesObject(this),this.util=n(5).getUtilObject(this),this._http=null,this.version=this.util.isNodeJs()?n(63).version:"1.21.0";var t=n(64).getPipeConstructor;this.pipe=t(this);var e=n(65).getConnectionConstructor;this.connection=e(this)},setup:function(t,e){return o=r.assign(o,{token:t},e),this._http=null,this._createHttp(),this},getConfig:function(){return r.assign({},o)},http:function(){return this._http||this._createHttp(),this._http},task:i,_createHttp:function(){var t={baseURL:o.baseUrl,headers:{Authorization:"Bearer "+o.token},insecure:!0===o.insecure};this._http=n(66).create(t)}};a._init(),t.exports=a},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e,n){(function(t){function n(){if(void 0!==o)return o;if(t.XMLHttpRequest){o=new t.XMLHttpRequest;try{o.open("GET",t.XDomainRequest?"/":"https://example.com")}catch(t){o=null}}else o=null;return o}function r(t){var e=n();if(!e)return!1;try{return e.responseType=t,e.responseType===t}catch(t){}return!1}function i(t){return"function"==typeof t}e.fetch=i(t.fetch)&&i(t.ReadableStream),e.blobConstructor=!1;try{new Blob([new ArrayBuffer(1)]),e.blobConstructor=!0}catch(t){}var o,a=void 0!==t.ArrayBuffer,s=a&&i(t.ArrayBuffer.prototype.slice);e.arraybuffer=e.fetch||a&&r("arraybuffer"),e.msstream=!e.fetch&&s&&r("ms-stream"),e.mozchunkedarraybuffer=!e.fetch&&a&&r("moz-chunked-arraybuffer"),e.overrideMimeType=e.fetch||!!n()&&i(n().overrideMimeType),e.vbArray=i(t.VBArray),o=null}).call(e,n(1))},function(t,e,n){e=t.exports=n(17),e.Stream=e,e.Readable=e,e.Writable=n(21),e.Duplex=n(6),e.Transform=n(23),e.PassThrough=n(77)},function(t,e,n){"use strict";(function(e,r){function i(t){return I.from(t)}function o(t){return I.isBuffer(t)||t instanceof M}function a(t,e,n){if("function"==typeof t.prependListener)return t.prependListener(e,n);t._events&&t._events[e]?$(t._events[e])?t._events[e].unshift(n):t._events[e]=[n,t._events[e]]:t.on(e,n)}function s(t,e){P=P||n(6),t=t||{},this.objectMode=!!t.objectMode,e instanceof P&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var r=t.highWaterMark,i=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:i,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new q,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(F||(F=n(22).StringDecoder),this.decoder=new F(t.encoding),this.encoding=t.encoding)}function u(t){if(P=P||n(6),!(this instanceof u))return new u(t);this._readableState=new s(t,this),this.readable=!0,t&&("function"==typeof t.read&&(this._read=t.read),"function"==typeof t.destroy&&(this._destroy=t.destroy)),L.call(this)}function c(t,e,n,r,o){var a=t._readableState;if(null===e)a.reading=!1,v(t,a);else{var s;o||(s=l(a,e)),s?t.emit("error",s):a.objectMode||e&&e.length>0?("string"==typeof e||a.objectMode||Object.getPrototypeOf(e)===I.prototype||(e=i(e)),r?a.endEmitted?t.emit("error",new Error("stream.unshift() after end event")):f(t,a,e,!0):a.ended?t.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!n?(e=a.decoder.write(e),a.objectMode||0!==e.length?f(t,a,e,!1):y(t,a)):f(t,a,e,!1))):r||(a.reading=!1)}return p(a)}function f(t,e,n,r){e.flowing&&0===e.length&&!e.sync?(t.emit("data",n),t.read(0)):(e.length+=e.objectMode?1:n.length,r?e.buffer.unshift(n):e.buffer.push(n),e.needReadable&&g(t)),y(t,e)}function l(t,e){var n;return o(e)||"string"==typeof e||void 0===e||t.objectMode||(n=new TypeError("Invalid non-string/buffer chunk")),n}function p(t){return!t.ended&&(t.needReadable||t.length<t.highWaterMark||0===t.length)}function h(t){return t>=J?t=J:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function d(t,e){return t<=0||0===e.length&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=h(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function v(t,e){if(!e.ended){if(e.decoder){var n=e.decoder.end();n&&n.length&&(e.buffer.push(n),e.length+=e.objectMode?1:n.length)}e.ended=!0,g(t)}}function g(t){var e=t._readableState;e.needReadable=!1,e.emittedReadable||(V("emitReadable",e.flowing),e.emittedReadable=!0,e.sync?R(m,t):m(t))}function m(t){V("emit readable"),t.emit("readable"),O(t)}function y(t,e){e.readingMore||(e.readingMore=!0,R(_,t,e))}function _(t,e){for(var n=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length<e.highWaterMark&&(V("maybeReadMore read 0"),t.read(0),n!==e.length);)n=e.length;e.readingMore=!1}function b(t){return function(){var e=t._readableState;V("pipeOnDrain",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,0===e.awaitDrain&&D(t,"data")&&(e.flowing=!0,O(t))}}function w(t){V("readable nexttick read 0"),t.read(0)}function x(t,e){e.resumeScheduled||(e.resumeScheduled=!0,R(E,t,e))}function E(t,e){e.reading||(V("resume read 0"),t.read(0)),e.resumeScheduled=!1,e.awaitDrain=0,t.emit("resume"),O(t),e.flowing&&!e.reading&&t.read(0)}function O(t){var e=t._readableState;for(V("flow",e.flowing);e.flowing&&null!==t.read(););}function C(t,e){if(0===e.length)return null;var n;return e.objectMode?n=e.buffer.shift():!t||t>=e.length?(n=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.head.data:e.buffer.concat(e.length),e.buffer.clear()):n=S(t,e.buffer,e.decoder),n}function S(t,e,n){var r;return t<e.head.data.length?(r=e.head.data.slice(0,t),e.head.data=e.head.data.slice(t)):r=t===e.head.data.length?e.shift():n?A(t,e):k(t,e),r}function A(t,e){var n=e.head,r=1,i=n.data;for(t-=i.length;n=n.next;){var o=n.data,a=t>o.length?o.length:t;if(a===o.length?i+=o:i+=o.slice(0,t),0===(t-=a)){a===o.length?(++r,n.next?e.head=n.next:e.head=e.tail=null):(e.head=n,n.data=o.slice(a));break}++r}return e.length-=r,i}function k(t,e){var n=I.allocUnsafe(t),r=e.head,i=1;for(r.data.copy(n),t-=r.data.length;r=r.next;){var o=r.data,a=t>o.length?o.length:t;if(o.copy(n,n.length-t,0,a),0===(t-=a)){a===o.length?(++i,r.next?e.head=r.next:e.head=e.tail=null):(e.head=r,r.data=o.slice(a));break}++i}return e.length-=i,n}function N(t){var e=t._readableState;if(e.length>0)throw new Error('"endReadable()" called on non-empty stream');e.endEmitted||(e.ended=!0,R(T,e,t))}function T(t,e){t.endEmitted||0!==t.length||(t.endEmitted=!0,e.readable=!1,e.emit("end"))}function j(t,e){for(var n=0,r=t.length;n<r;n++)if(t[n]===e)return n;return-1}var R=n(8);t.exports=u;var P,$=n(14);u.ReadableState=s;var D=(n(18).EventEmitter,function(t,e){return t.listeners(e).length}),L=n(19),I=n(9).Buffer,M=e.Uint8Array||function(){},U=n(7);U.inherits=n(4);var B=n(72),V=void 0;V=B&&B.debuglog?B.debuglog("stream"):function(){};var F,q=n(73),z=n(20);U.inherits(u,L);var H=["error","close","destroy","pause","resume"];Object.defineProperty(u.prototype,"destroyed",{get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(t){this._readableState&&(this._readableState.destroyed=t)}}),u.prototype.destroy=z.destroy,u.prototype._undestroy=z.undestroy,u.prototype._destroy=function(t,e){this.push(null),e(t)},u.prototype.push=function(t,e){var n,r=this._readableState;return r.objectMode?n=!0:"string"==typeof t&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=I.from(t,e),e=""),n=!0),c(this,t,e,!1,n)},u.prototype.unshift=function(t){return c(this,t,null,!0,!1)},u.prototype.isPaused=function(){return!1===this._readableState.flowing},u.prototype.setEncoding=function(t){return F||(F=n(22).StringDecoder),this._readableState.decoder=new F(t),this._readableState.encoding=t,this};var J=8388608;u.prototype.read=function(t){V("read",t),t=parseInt(t,10);var e=this._readableState,n=t;if(0!==t&&(e.emittedReadable=!1),0===t&&e.needReadable&&(e.length>=e.highWaterMark||e.ended))return V("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?N(this):g(this),null;if(0===(t=d(t,e))&&e.ended)return 0===e.length&&N(this),null;var r=e.needReadable;V("need readable",r),(0===e.length||e.length-t<e.highWaterMark)&&(r=!0,V("length less than watermark",r)),e.ended||e.reading?(r=!1,V("reading or ended",r)):r&&(V("do read"),e.reading=!0,e.sync=!0,0===e.length&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(t=d(n,e)));var i;return i=t>0?C(t,e):null,null===i?(e.needReadable=!0,t=0):e.length-=t,0===e.length&&(e.ended||(e.needReadable=!0),n!==t&&e.ended&&N(this)),null!==i&&this.emit("data",i),i},u.prototype._read=function(t){this.emit("error",new Error("_read() is not implemented"))},u.prototype.pipe=function(t,e){function n(t,e){V("onunpipe"),t===p&&e&&!1===e.hasUnpiped&&(e.hasUnpiped=!0,o())}function i(){V("onend"),t.end()}function o(){V("cleanup"),t.removeListener("close",c),t.removeListener("finish",f),t.removeListener("drain",g),t.removeListener("error",u),t.removeListener("unpipe",n),p.removeListener("end",i),p.removeListener("end",l),p.removeListener("data",s),m=!0,!h.awaitDrain||t._writableState&&!t._writableState.needDrain||g()}function s(e){V("ondata"),y=!1,!1!==t.write(e)||y||((1===h.pipesCount&&h.pipes===t||h.pipesCount>1&&-1!==j(h.pipes,t))&&!m&&(V("false write response, pause",p._readableState.awaitDrain),p._readableState.awaitDrain++,y=!0),p.pause())}function u(e){V("onerror",e),l(),t.removeListener("error",u),0===D(t,"error")&&t.emit("error",e)}function c(){t.removeListener("finish",f),l()}function f(){V("onfinish"),t.removeListener("close",c),l()}function l(){V("unpipe"),p.unpipe(t)}var p=this,h=this._readableState;switch(h.pipesCount){case 0:h.pipes=t;break;case 1:h.pipes=[h.pipes,t];break;default:h.pipes.push(t)}h.pipesCount+=1,V("pipe count=%d opts=%j",h.pipesCount,e);var d=(!e||!1!==e.end)&&t!==r.stdout&&t!==r.stderr,v=d?i:l;h.endEmitted?R(v):p.once("end",v),t.on("unpipe",n);var g=b(p);t.on("drain",g);var m=!1,y=!1;return p.on("data",s),a(t,"error",u),t.once("close",c),t.once("finish",f),t.emit("pipe",p),h.flowing||(V("pipe resume"),p.resume()),t},u.prototype.unpipe=function(t){var e=this._readableState,n={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,n),this);if(!t){var r=e.pipes,i=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var o=0;o<i;o++)r[o].emit("unpipe",this,n);return this}var a=j(e.pipes,t);return-1===a?this:(e.pipes.splice(a,1),e.pipesCount-=1,1===e.pipesCount&&(e.pipes=e.pipes[0]),t.emit("unpipe",this,n),this)},u.prototype.on=function(t,e){var n=L.prototype.on.call(this,t,e);if("data"===t)!1!==this._readableState.flowing&&this.resume();else if("readable"===t){var r=this._readableState;r.endEmitted||r.readableListening||(r.readableListening=r.needReadable=!0,r.emittedReadable=!1,r.reading?r.length&&g(this):R(w,this))}return n},u.prototype.addListener=u.prototype.on,u.prototype.resume=function(){var t=this._readableState;return t.flowing||(V("resume"),t.flowing=!0,x(this,t)),this},u.prototype.pause=function(){return V("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(V("pause"),this._readableState.flowing=!1,this.emit("pause")),this},u.prototype.wrap=function(t){var e=this._readableState,n=!1,r=this;t.on("end",function(){if(V("wrapped end"),e.decoder&&!e.ended){var t=e.decoder.end();t&&t.length&&r.push(t)}r.push(null)}),t.on("data",function(i){if(V("wrapped data"),e.decoder&&(i=e.decoder.write(i)),(!e.objectMode||null!==i&&void 0!==i)&&(e.objectMode||i&&i.length)){r.push(i)||(n=!0,t.pause())}});for(var i in t)void 0===this[i]&&"function"==typeof t[i]&&(this[i]=function(e){return function(){return t[e].apply(t,arguments)}}(i));for(var o=0;o<H.length;o++)t.on(H[o],r.emit.bind(r,H[o]));return r._read=function(e){V("wrapped _read",e),n&&(n=!1,t.resume())},r},u._fromList=C}).call(e,n(1),n(2))},function(t,e){function n(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(t){return"function"==typeof t}function i(t){return"number"==typeof t}function o(t){return"object"==typeof t&&null!==t}function a(t){return void 0===t}t.exports=n,n.EventEmitter=n,n.prototype._events=void 0,n.prototype._maxListeners=void 0,n.defaultMaxListeners=10,n.prototype.setMaxListeners=function(t){if(!i(t)||t<0||isNaN(t))throw TypeError("n must be a positive number");return this._maxListeners=t,this},n.prototype.emit=function(t){var e,n,i,s,u,c;if(this._events||(this._events={}),"error"===t&&(!this._events.error||o(this._events.error)&&!this._events.error.length)){if((e=arguments[1])instanceof Error)throw e;var f=new Error('Uncaught, unspecified "error" event. ('+e+")");throw f.context=e,f}if(n=this._events[t],a(n))return!1;if(r(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:s=Array.prototype.slice.call(arguments,1),n.apply(this,s)}else if(o(n))for(s=Array.prototype.slice.call(arguments,1),c=n.slice(),i=c.length,u=0;u<i;u++)c[u].apply(this,s);return!0},n.prototype.addListener=function(t,e){var i;if(!r(e))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",t,r(e.listener)?e.listener:e),this._events[t]?o(this._events[t])?this._events[t].push(e):this._events[t]=[this._events[t],e]:this._events[t]=e,o(this._events[t])&&!this._events[t].warned&&(i=a(this._maxListeners)?n.defaultMaxListeners:this._maxListeners)&&i>0&&this._events[t].length>i&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace()),this},n.prototype.on=n.prototype.addListener,n.prototype.once=function(t,e){function n(){this.removeListener(t,n),i||(i=!0,e.apply(this,arguments))}if(!r(e))throw TypeError("listener must be a function");var i=!1;return n.listener=e,this.on(t,n),this},n.prototype.removeListener=function(t,e){var n,i,a,s;if(!r(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(n=this._events[t],a=n.length,i=-1,n===e||r(n.listener)&&n.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(o(n)){for(s=a;s-- >0;)if(n[s]===e||n[s].listener&&n[s].listener===e){i=s;break}if(i<0)return this;1===n.length?(n.length=0,delete this._events[t]):n.splice(i,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},n.prototype.removeAllListeners=function(t){var e,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(n=this._events[t],r(n))this.removeListener(t,n);else if(n)for(;n.length;)this.removeListener(t,n[n.length-1]);return delete this._events[t],this},n.prototype.listeners=function(t){return this._events&&this._events[t]?r(this._events[t])?[this._events[t]]:this._events[t].slice():[]},n.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(r(e))return 1;if(e)return e.length}return 0},n.listenerCount=function(t,e){return t.listenerCount(e)}},function(t,e,n){t.exports=n(18).EventEmitter},function(t,e,n){"use strict";function r(t,e){var n=this,r=this._readableState&&this._readableState.destroyed,i=this._writableState&&this._writableState.destroyed;if(r||i)return void(e?e(t):!t||this._writableState&&this._writableState.errorEmitted||a(o,this,t));this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(t){!e&&t?(a(o,n,t),n._writableState&&(n._writableState.errorEmitted=!0)):e&&e(t)})}function i(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function o(t,e){t.emit("error",e)}var a=n(8);t.exports={destroy:r,undestroy:i}},function(t,e,n){"use strict";(function(e,r,i){function o(t){var e=this;this.next=null,this.entry=null,this.finish=function(){A(e,t)}}function a(t){return $.from(t)}function s(t){return $.isBuffer(t)||t instanceof D}function u(){}function c(t,e){N=N||n(6),t=t||{},this.objectMode=!!t.objectMode,e instanceof N&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var r=t.highWaterMark,i=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:i,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var a=!1===t.decodeStrings;this.decodeStrings=!a,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(t){y(e,t)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new o(this)}function f(t){if(N=N||n(6),!(I.call(f,this)||this instanceof N))return new f(t);this._writableState=new c(t,this),this.writable=!0,t&&("function"==typeof t.write&&(this._write=t.write),"function"==typeof t.writev&&(this._writev=t.writev),"function"==typeof t.destroy&&(this._destroy=t.destroy),"function"==typeof t.final&&(this._final=t.final)),P.call(this)}function l(t,e){var n=new Error("write after end");t.emit("error",n),k(e,n)}function p(t,e,n,r){var i=!0,o=!1;return null===n?o=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||e.objectMode||(o=new TypeError("Invalid non-string/buffer chunk")),o&&(t.emit("error",o),k(r,o),i=!1),i}function h(t,e,n){return t.objectMode||!1===t.decodeStrings||"string"!=typeof e||(e=$.from(e,n)),e}function d(t,e,n,r,i,o){if(!n){var a=h(e,r,i);r!==a&&(n=!0,i="buffer",r=a)}var s=e.objectMode?1:r.length;e.length+=s;var u=e.length<e.highWaterMark;if(u||(e.needDrain=!0),e.writing||e.corked){var c=e.lastBufferedRequest;e.lastBufferedRequest={chunk:r,encoding:i,isBuf:n,callback:o,next:null},c?c.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else v(t,e,!1,s,r,i,o);return u}function v(t,e,n,r,i,o,a){e.writelen=r,e.writecb=a,e.writing=!0,e.sync=!0,n?t._writev(i,e.onwrite):t._write(i,o,e.onwrite),e.sync=!1}function g(t,e,n,r,i){--e.pendingcb,n?(k(i,r),k(C,t,e),t._writableState.errorEmitted=!0,t.emit("error",r)):(i(r),t._writableState.errorEmitted=!0,t.emit("error",r),C(t,e))}function m(t){t.writing=!1,t.writecb=null,t.length-=t.writelen,t.writelen=0}function y(t,e){var n=t._writableState,r=n.sync,i=n.writecb;if(m(n),e)g(t,n,r,e,i);else{var o=x(n);o||n.corked||n.bufferProcessing||!n.bufferedRequest||w(t,n),r?T(_,t,n,o,i):_(t,n,o,i)}}function _(t,e,n,r){n||b(t,e),e.pendingcb--,r(),C(t,e)}function b(t,e){0===e.length&&e.needDrain&&(e.needDrain=!1,t.emit("drain"))}function w(t,e){e.bufferProcessing=!0;var n=e.bufferedRequest;if(t._writev&&n&&n.next){var r=e.bufferedRequestCount,i=new Array(r),a=e.corkedRequestsFree;a.entry=n;for(var s=0,u=!0;n;)i[s]=n,n.isBuf||(u=!1),n=n.next,s+=1;i.allBuffers=u,v(t,e,!0,e.length,i,"",a.finish),e.pendingcb++,e.lastBufferedRequest=null,a.next?(e.corkedRequestsFree=a.next,a.next=null):e.corkedRequestsFree=new o(e)}else{for(;n;){var c=n.chunk,f=n.encoding,l=n.callback;if(v(t,e,!1,e.objectMode?1:c.length,c,f,l),n=n.next,e.writing)break}null===n&&(e.lastBufferedRequest=null)}e.bufferedRequestCount=0,e.bufferedRequest=n,e.bufferProcessing=!1}function x(t){return t.ending&&0===t.length&&null===t.bufferedRequest&&!t.finished&&!t.writing}function E(t,e){t._final(function(n){e.pendingcb--,n&&t.emit("error",n),e.prefinished=!0,t.emit("prefinish"),C(t,e)})}function O(t,e){e.prefinished||e.finalCalled||("function"==typeof t._final?(e.pendingcb++,e.finalCalled=!0,k(E,t,e)):(e.prefinished=!0,t.emit("prefinish")))}function C(t,e){var n=x(e);return n&&(O(t,e),0===e.pendingcb&&(e.finished=!0,t.emit("finish"))),n}function S(t,e,n){e.ending=!0,C(t,e),n&&(e.finished?k(n):t.once("finish",n)),e.ended=!0,t.writable=!1}function A(t,e,n){var r=t.entry;for(t.entry=null;r;){var i=r.callback;e.pendingcb--,i(n),r=r.next}e.corkedRequestsFree?e.corkedRequestsFree.next=t:e.corkedRequestsFree=t}var k=n(8);t.exports=f;var N,T=!e.browser&&["v0.10","v0.9."].indexOf(e.version.slice(0,5))>-1?r:k;f.WritableState=c;var j=n(7);j.inherits=n(4);var R={deprecate:n(76)},P=n(19),$=n(9).Buffer,D=i.Uint8Array||function(){},L=n(20);j.inherits(f,P),c.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(c.prototype,"buffer",{get:R.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(t){}}();var I;"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(I=Function.prototype[Symbol.hasInstance],Object.defineProperty(f,Symbol.hasInstance,{value:function(t){return!!I.call(this,t)||t&&t._writableState instanceof c}})):I=function(t){return t instanceof this},f.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},f.prototype.write=function(t,e,n){var r=this._writableState,i=!1,o=s(t)&&!r.objectMode;return o&&!$.isBuffer(t)&&(t=a(t)),"function"==typeof e&&(n=e,e=null),o?e="buffer":e||(e=r.defaultEncoding),"function"!=typeof n&&(n=u),r.ended?l(this,n):(o||p(this,r,t,n))&&(r.pendingcb++,i=d(this,r,o,t,e,n)),i},f.prototype.cork=function(){this._writableState.corked++},f.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,t.writing||t.corked||t.finished||t.bufferProcessing||!t.bufferedRequest||w(this,t))},f.prototype.setDefaultEncoding=function(t){if("string"==typeof t&&(t=t.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((t+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+t);return this._writableState.defaultEncoding=t,this},f.prototype._write=function(t,e,n){n(new Error("_write() is not implemented"))},f.prototype._writev=null,f.prototype.end=function(t,e,n){var r=this._writableState;"function"==typeof t?(n=t,t=null,e=null):"function"==typeof e&&(n=e,e=null),null!==t&&void 0!==t&&this.write(t,e),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||S(this,r,n)},Object.defineProperty(f.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(t){this._writableState&&(this._writableState.destroyed=t)}}),f.prototype.destroy=L.destroy,f.prototype._undestroy=L.undestroy,f.prototype._destroy=function(t,e){this.end(),e(t)}}).call(e,n(2),n(74).setImmediate,n(1))},function(t,e,n){function r(t){if(t&&!u(t))throw new Error("Unknown encoding: "+t)}function i(t){return t.toString(this.encoding)}function o(t){this.charReceived=t.length%2,this.charLength=this.charReceived?2:0}function a(t){this.charReceived=t.length%3,this.charLength=this.charReceived?3:0}var s=n(3).Buffer,u=s.isEncoding||function(t){switch(t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}},c=e.StringDecoder=function(t){switch(this.encoding=(t||"utf8").toLowerCase().replace(/[-_]/,""),r(t),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=o;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=a;break;default:return void(this.write=i)}this.charBuffer=new s(6),this.charReceived=0,this.charLength=0};c.prototype.write=function(t){for(var e="";this.charLength;){var n=t.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:t.length;if(t.copy(this.charBuffer,this.charReceived,0,n),this.charReceived+=n,this.charReceived<this.charLength)return"";t=t.slice(n,t.length),e=this.charBuffer.slice(0,this.charLength).toString(this.encoding);var r=e.charCodeAt(e.length-1);if(!(r>=55296&&r<=56319)){if(this.charReceived=this.charLength=0,0===t.length)return e;break}this.charLength+=this.surrogateSize,e=""}this.detectIncompleteChar(t);var i=t.length;this.charLength&&(t.copy(this.charBuffer,0,t.length-this.charReceived,i),i-=this.charReceived),e+=t.toString(this.encoding,0,i);var i=e.length-1,r=e.charCodeAt(i);if(r>=55296&&r<=56319){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),t.copy(this.charBuffer,0,0,o),e.substring(0,i)}return e},c.prototype.detectIncompleteChar=function(t){for(var e=t.length>=3?3:t.length;e>0;e--){var n=t[t.length-e];if(1==e&&n>>5==6){this.charLength=2;break}if(e<=2&&n>>4==14){this.charLength=3;break}if(e<=3&&n>>3==30){this.charLength=4;break}}this.charReceived=e},c.prototype.end=function(t){var e="";if(t&&t.length&&(e=this.write(t)),this.charReceived){var n=this.charReceived,r=this.charBuffer,i=this.encoding;e+=r.slice(0,n).toString(i)}return e}},function(t,e,n){"use strict";function r(t){this.afterTransform=function(e,n){return i(t,e,n)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null,this.writeencoding=null}function i(t,e,n){var r=t._transformState;r.transforming=!1;var i=r.writecb;if(!i)return t.emit("error",new Error("write callback called multiple times"));r.writechunk=null,r.writecb=null,null!==n&&void 0!==n&&t.push(n),i(e);var o=t._readableState;o.reading=!1,(o.needReadable||o.length<o.highWaterMark)&&t._read(o.highWaterMark)}function o(t){if(!(this instanceof o))return new o(t);s.call(this,t),this._transformState=new r(this);var e=this;this._readableState.needReadable=!0,this._readableState.sync=!1,t&&("function"==typeof t.transform&&(this._transform=t.transform),"function"==typeof t.flush&&(this._flush=t.flush)),this.once("prefinish",function(){"function"==typeof this._flush?this._flush(function(t,n){a(e,t,n)}):a(e)})}function a(t,e,n){if(e)return t.emit("error",e);null!==n&&void 0!==n&&t.push(n);var r=t._writableState,i=t._transformState;if(r.length)throw new Error("Calling transform done when ws.length != 0");if(i.transforming)throw new Error("Calling transform done when still transforming");return t.push(null)}t.exports=o;var s=n(6),u=n(7);u.inherits=n(4),u.inherits(o,s),o.prototype.push=function(t,e){return this._transformState.needTransform=!1,s.prototype.push.call(this,t,e)},o.prototype._transform=function(t,e,n){throw new Error("_transform() is not implemented")},o.prototype._write=function(t,e,n){var r=this._transformState;if(r.writecb=n,r.writechunk=t,r.writeencoding=e,!r.transforming){var i=this._readableState;(r.needTransform||i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}},o.prototype._read=function(t){var e=this._transformState;null!==e.writechunk&&e.writecb&&!e.transforming?(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform)):e.needTransform=!0},o.prototype._destroy=function(t,e){var n=this;s.prototype._destroy.call(this,t,function(t){e(t),n.emit("close")})}},function(t,e,n){"use strict";function r(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function i(t,e,n){if(t&&c.isObject(t)&&t instanceof r)return t;var i=new r;return i.parse(t,e,n),i}function o(t){return c.isString(t)&&(t=i(t)),t instanceof r?t.format():r.prototype.format.call(t)}function a(t,e){return i(t,!1,!0).resolve(e)}function s(t,e){return t?i(t,!1,!0).resolveObject(e):e}var u=n(81),c=n(82);e.parse=i,e.resolve=a,e.resolveObject=s,e.format=o,e.Url=r;var f=/^([a-z0-9.+-]+:)/i,l=/:[0-9]*$/,p=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,h=["<",">",'"',"`"," ","\r","\n","\t"],d=["{","}","|","\\","^","`"].concat(h),v=["'"].concat(d),g=["%","/","?",";","#"].concat(v),m=["/","?","#"],y=/^[+a-z0-9A-Z_-]{0,63}$/,_=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,b={javascript:!0,"javascript:":!0},w={javascript:!0,"javascript:":!0},x={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},E=n(83);r.prototype.parse=function(t,e,n){if(!c.isString(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var r=t.indexOf("?"),i=-1!==r&&r<t.indexOf("#")?"?":"#",o=t.split(i),a=/\\/g;o[0]=o[0].replace(a,"/"),t=o.join(i);var s=t;if(s=s.trim(),!n&&1===t.split("#").length){var l=p.exec(s);if(l)return this.path=s,this.href=s,this.pathname=l[1],l[2]?(this.search=l[2],this.query=e?E.parse(this.search.substr(1)):this.search.substr(1)):e&&(this.search="",this.query={}),this}var h=f.exec(s);if(h){h=h[0];var d=h.toLowerCase();this.protocol=d,s=s.substr(h.length)}if(n||h||s.match(/^\/\/[^@\/]+@[^@\/]+/)){var O="//"===s.substr(0,2);!O||h&&w[h]||(s=s.substr(2),this.slashes=!0)}if(!w[h]&&(O||h&&!x[h])){for(var C=-1,S=0;S<m.length;S++){var A=s.indexOf(m[S]);-1!==A&&(-1===C||A<C)&&(C=A)}var k,N;N=-1===C?s.lastIndexOf("@"):s.lastIndexOf("@",C),-1!==N&&(k=s.slice(0,N),s=s.slice(N+1),this.auth=decodeURIComponent(k)),C=-1;for(var S=0;S<g.length;S++){var A=s.indexOf(g[S]);-1!==A&&(-1===C||A<C)&&(C=A)}-1===C&&(C=s.length),this.host=s.slice(0,C),s=s.slice(C),this.parseHost(),this.hostname=this.hostname||"";var T="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!T)for(var j=this.hostname.split(/\./),S=0,R=j.length;S<R;S++){var P=j[S];if(P&&!P.match(y)){for(var $="",D=0,L=P.length;D<L;D++)P.charCodeAt(D)>127?$+="x":$+=P[D];if(!$.match(y)){var I=j.slice(0,S),M=j.slice(S+1),U=P.match(_);U&&(I.push(U[1]),M.unshift(U[2])),M.length&&(s="/"+M.join(".")+s),this.hostname=I.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),T||(this.hostname=u.toASCII(this.hostname));var B=this.port?":"+this.port:"",V=this.hostname||"";this.host=V+B,this.href+=this.host,T&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==s[0]&&(s="/"+s))}if(!b[d])for(var S=0,R=v.length;S<R;S++){var F=v[S];if(-1!==s.indexOf(F)){var q=encodeURIComponent(F);q===F&&(q=escape(F)),s=s.split(F).join(q)}}var z=s.indexOf("#");-1!==z&&(this.hash=s.substr(z),s=s.slice(0,z));var H=s.indexOf("?");if(-1!==H?(this.search=s.substr(H),this.query=s.substr(H+1),e&&(this.query=E.parse(this.query)),s=s.slice(0,H)):e&&(this.search="",this.query={}),s&&(this.pathname=s),x[d]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var B=this.pathname||"",J=this.search||"";this.path=B+J}return this.href=this.format(),this},r.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",n=this.pathname||"",r=this.hash||"",i=!1,o="";this.host?i=t+this.host:this.hostname&&(i=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(i+=":"+this.port)),this.query&&c.isObject(this.query)&&Object.keys(this.query).length&&(o=E.stringify(this.query));var a=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||x[e])&&!1!==i?(i="//"+(i||""),n&&"/"!==n.charAt(0)&&(n="/"+n)):i||(i=""),r&&"#"!==r.charAt(0)&&(r="#"+r),a&&"?"!==a.charAt(0)&&(a="?"+a),n=n.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),a=a.replace("#","%23"),e+i+n+a+r},r.prototype.resolve=function(t){return this.resolveObject(i(t,!1,!0)).format()},r.prototype.resolveObject=function(t){if(c.isString(t)){var e=new r;e.parse(t,!1,!0),t=e}for(var n=new r,i=Object.keys(this),o=0;o<i.length;o++){var a=i[o];n[a]=this[a]}if(n.hash=t.hash,""===t.href)return n.href=n.format(),n;if(t.slashes&&!t.protocol){for(var s=Object.keys(t),u=0;u<s.length;u++){var f=s[u];"protocol"!==f&&(n[f]=t[f])}return x[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname="/"),n.href=n.format(),n}if(t.protocol&&t.protocol!==n.protocol){if(!x[t.protocol]){for(var l=Object.keys(t),p=0;p<l.length;p++){var h=l[p];n[h]=t[h]}return n.href=n.format(),n}if(n.protocol=t.protocol,t.host||w[t.protocol])n.pathname=t.pathname;else{for(var d=(t.pathname||"").split("/");d.length&&!(t.host=d.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==d[0]&&d.unshift(""),d.length<2&&d.unshift(""),n.pathname=d.join("/")}if(n.search=t.search,n.query=t.query,n.host=t.host||"",n.auth=t.auth,n.hostname=t.hostname||t.host,n.port=t.port,n.pathname||n.search){var v=n.pathname||"",g=n.search||"";n.path=v+g}return n.slashes=n.slashes||t.slashes,n.href=n.format(),n}var m=n.pathname&&"/"===n.pathname.charAt(0),y=t.host||t.pathname&&"/"===t.pathname.charAt(0),_=y||m||n.host&&t.pathname,b=_,E=n.pathname&&n.pathname.split("/")||[],d=t.pathname&&t.pathname.split("/")||[],O=n.protocol&&!x[n.protocol];if(O&&(n.hostname="",n.port=null,n.host&&(""===E[0]?E[0]=n.host:E.unshift(n.host)),n.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===d[0]?d[0]=t.host:d.unshift(t.host)),t.host=null),_=_&&(""===d[0]||""===E[0])),y)n.host=t.host||""===t.host?t.host:n.host,n.hostname=t.hostname||""===t.hostname?t.hostname:n.hostname,n.search=t.search,n.query=t.query,E=d;else if(d.length)E||(E=[]),E.pop(),E=E.concat(d),n.search=t.search,n.query=t.query;else if(!c.isNullOrUndefined(t.search)){if(O){n.hostname=n.host=E.shift();var C=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@");C&&(n.auth=C.shift(),n.host=n.hostname=C.shift())}return n.search=t.search,n.query=t.query,c.isNull(n.pathname)&&c.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!E.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var S=E.slice(-1)[0],A=(n.host||t.host||E.length>1)&&("."===S||".."===S)||""===S,k=0,N=E.length;N>=0;N--)S=E[N],"."===S?E.splice(N,1):".."===S?(E.splice(N,1),k++):k&&(E.splice(N,1),k--);if(!_&&!b)for(;k--;k)E.unshift("..");!_||""===E[0]||E[0]&&"/"===E[0].charAt(0)||E.unshift(""),A&&"/"!==E.join("/").substr(-1)&&E.push("");var T=""===E[0]||E[0]&&"/"===E[0].charAt(0);if(O){n.hostname=n.host=T?"":E.length?E.shift():"";var C=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@");C&&(n.auth=C.shift(),n.host=n.hostname=C.shift())}return _=_||n.host&&E.length,_&&!T&&E.unshift(""),E.length?n.pathname=E.join("/"):(n.pathname=null,n.path=null),c.isNull(n.pathname)&&c.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=t.auth||n.auth,n.slashes=n.slashes||t.slashes,n.href=n.format(),n},r.prototype.parseHost=function(){var t=this.host,e=l.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}var i=n(26),o=r(i),a=n(27),s=r(a);new o.default({el:"#app",render:function(t){return t(s.default)}})},function(t,e,n){"use strict";(function(e,n){/*!
  * Vue.js v2.4.4
  * (c) 2014-2017 Evan You
  * Released under the MIT License.
  */
-function r(t){return void 0===t||null===t}function i(t){return void 0!==t&&null!==t}function o(t){return!0===t}function a(t){return!1===t}function s(t){return"string"==typeof t||"number"==typeof t||"boolean"==typeof t}function u(t){return null!==t&&"object"==typeof t}function c(t){return"[object Object]"===Qi.call(t)}function f(t){return"[object RegExp]"===Qi.call(t)}function l(t){var e=parseFloat(t);return e>=0&&Math.floor(e)===e&&isFinite(t)}function p(t){return null==t?"":"object"==typeof t?JSON.stringify(t,null,2):String(t)}function h(t){var e=parseFloat(t);return isNaN(e)?t:e}function d(t,e){for(var n=Object.create(null),r=t.split(","),i=0;i<r.length;i++)n[r[i]]=!0;return e?function(t){return n[t.toLowerCase()]}:function(t){return n[t]}}function v(t,e){if(t.length){var n=t.indexOf(e);if(n>-1)return t.splice(n,1)}}function g(t,e){return no.call(t,e)}function m(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}function y(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n}function _(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function b(t,e){for(var n in e)t[n]=e[n];return t}function w(t){for(var e={},n=0;n<t.length;n++)t[n]&&b(e,t[n]);return e}function x(t,e,n){}function E(t,e){if(t===e)return!0;var n=u(t),r=u(e);if(!n||!r)return!n&&!r&&String(t)===String(e);try{var i=Array.isArray(t),o=Array.isArray(e);if(i&&o)return t.length===e.length&&t.every(function(t,n){return E(t,e[n])});if(i||o)return!1;var a=Object.keys(t),s=Object.keys(e);return a.length===s.length&&a.every(function(n){return E(t[n],e[n])})}catch(t){return!1}}function O(t,e){for(var n=0;n<t.length;n++)if(E(t[n],e))return n;return-1}function C(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments))}}function S(t){var e=(t+"").charCodeAt(0);return 36===e||95===e}function A(t,e,n,r){Object.defineProperty(t,e,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function k(t){if(!go.test(t)){var e=t.split(".");return function(t){for(var n=0;n<e.length;n++){if(!t)return;t=t[e[n]]}return t}}}function N(t,n,r){if(ho.errorHandler)ho.errorHandler.call(null,t,n,r);else{if("production"!==e.env.NODE_ENV&&mo("Error in "+r+': "'+t.toString()+'"',n),!So||"undefined"==typeof console)throw t;console.error(t)}}function T(t){return"function"==typeof t&&/native code/.test(t.toString())}function j(t){zo.target&&Ho.push(zo.target),zo.target=t}function R(){zo.target=Ho.pop()}function P(t,e,n){t.__proto__=e}function $(t,e,n){for(var r=0,i=n.length;r<i;r++){var o=n[r];A(t,o,e[o])}}function D(t,e){if(u(t)){var n;return g(t,"__ob__")&&t.__ob__ instanceof Go?n=t.__ob__:Ko.shouldConvert&&!Uo()&&(Array.isArray(t)||c(t))&&Object.isExtensible(t)&&!t._isVue&&(n=new Go(t)),e&&n&&n.vmCount++,n}}function L(t,n,r,i,o){var a=new zo,s=Object.getOwnPropertyDescriptor(t,n);if(!s||!1!==s.configurable){var u=s&&s.get,c=s&&s.set,f=!o&&D(r);Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:function(){var e=u?u.call(t):r;return zo.target&&(a.depend(),f&&(f.dep.depend(),Array.isArray(e)&&U(e))),e},set:function(n){var s=u?u.call(t):r;n===s||n!==n&&s!==s||("production"!==e.env.NODE_ENV&&i&&i(),c?c.call(t,n):r=n,f=!o&&D(n),a.notify())}})}}function I(t,n,r){if(Array.isArray(t)&&l(n))return t.length=Math.max(t.length,n),t.splice(n,1,r),r;if(g(t,n))return t[n]=r,r;var i=t.__ob__;return t._isVue||i&&i.vmCount?("production"!==e.env.NODE_ENV&&mo("Avoid adding reactive properties to a Vue instance or its root $data at runtime - declare it upfront in the data option."),r):i?(L(i.value,n,r),i.dep.notify(),r):(t[n]=r,r)}function M(t,n){if(Array.isArray(t)&&l(n))return void t.splice(n,1);var r=t.__ob__;if(t._isVue||r&&r.vmCount)return void("production"!==e.env.NODE_ENV&&mo("Avoid deleting properties on a Vue instance or its root $data - just set it to null."));g(t,n)&&(delete t[n],r&&r.dep.notify())}function U(t){for(var e=void 0,n=0,r=t.length;n<r;n++)e=t[n],e&&e.__ob__&&e.__ob__.dep.depend(),Array.isArray(e)&&U(e)}function B(t,e){if(!e)return t;for(var n,r,i,o=Object.keys(e),a=0;a<o.length;a++)n=o[a],r=t[n],i=e[n],g(t,n)?c(r)&&c(i)&&B(r,i):I(t,n,i);return t}function V(t,e,n){return n?t||e?function(){var r="function"==typeof e?e.call(n):e,i="function"==typeof t?t.call(n):t;return r?B(r,i):i}:void 0:e?t?function(){return B("function"==typeof e?e.call(this):e,"function"==typeof t?t.call(this):t)}:e:t}function F(t,e){return e?t?t.concat(e):Array.isArray(e)?e:[e]:t}function q(t,e){var n=Object.create(t||null);return e?b(n,e):n}function z(t){for(var e in t.components){var n=e.toLowerCase();(to(n)||ho.isReservedTag(n))&&mo("Do not use built-in or reserved HTML elements as component id: "+e)}}function H(t){var n=t.props;if(n){var r,i,o,a={};if(Array.isArray(n))for(r=n.length;r--;)i=n[r],"string"==typeof i?(o=io(i),a[o]={type:null}):"production"!==e.env.NODE_ENV&&mo("props must be strings when using array syntax.");else if(c(n))for(var s in n)i=n[s],o=io(s),a[o]=c(i)?i:{type:i};t.props=a}}function J(t){var e=t.inject;if(Array.isArray(e))for(var n=t.inject={},r=0;r<e.length;r++)n[e[r]]=e[r]}function W(t){var e=t.directives;if(e)for(var n in e){var r=e[n];"function"==typeof r&&(e[n]={bind:r,update:r})}}function Y(t,n,r){function i(e){var i=Zo[e]||ta;c[e]=i(t[e],n[e],r,e)}"production"!==e.env.NODE_ENV&&z(n),"function"==typeof n&&(n=n.options),H(n),J(n),W(n);var o=n.extends;if(o&&(t=Y(t,o,r)),n.mixins)for(var a=0,s=n.mixins.length;a<s;a++)t=Y(t,n.mixins[a],r);var u,c={};for(u in t)i(u);for(u in n)g(t,u)||i(u);return c}function K(t,n,r,i){if("string"==typeof r){var o=t[n];if(g(o,r))return o[r];var a=io(r);if(g(o,a))return o[a];var s=oo(a);if(g(o,s))return o[s];var u=o[r]||o[a]||o[s];return"production"!==e.env.NODE_ENV&&i&&!u&&mo("Failed to resolve "+n.slice(0,-1)+": "+r,t),u}}function G(t,n,r,i){var o=n[t],a=!g(r,t),s=r[t];if(et(Boolean,o.type)&&(a&&!g(o,"default")?s=!1:et(String,o.type)||""!==s&&s!==so(t)||(s=!0)),void 0===s){s=Z(i,o,t);var u=Ko.shouldConvert;Ko.shouldConvert=!0,D(s),Ko.shouldConvert=u}return"production"!==e.env.NODE_ENV&&X(o,t,s,i,a),s}function Z(t,n,r){if(g(n,"default")){var i=n.default;return"production"!==e.env.NODE_ENV&&u(i)&&mo('Invalid default value for prop "'+r+'": Props with type Object/Array must use a factory function to return the default value.',t),t&&t.$options.propsData&&void 0===t.$options.propsData[r]&&void 0!==t._props[r]?t._props[r]:"function"==typeof i&&"Function"!==tt(n.type)?i.call(t):i}}function X(t,e,n,r,i){if(t.required&&i)return void mo('Missing required prop: "'+e+'"',r);if(null!=n||t.required){var o=t.type,a=!o||!0===o,s=[];if(o){Array.isArray(o)||(o=[o]);for(var u=0;u<o.length&&!a;u++){var c=Q(n,o[u]);s.push(c.expectedType||""),a=c.valid}}if(!a)return void mo('Invalid prop: type check failed for prop "'+e+'". Expected '+s.map(oo).join(", ")+", got "+Object.prototype.toString.call(n).slice(8,-1)+".",r);var f=t.validator;f&&(f(n)||mo('Invalid prop: custom validator check failed for prop "'+e+'".',r))}}function Q(t,e){var n,r=tt(e);if(ea.test(r)){var i=typeof t;n=i===r.toLowerCase(),n||"object"!==i||(n=t instanceof e)}else n="Object"===r?c(t):"Array"===r?Array.isArray(t):t instanceof e;return{valid:n,expectedType:r}}function tt(t){var e=t&&t.toString().match(/^\s*function (\w+)/);return e?e[1]:""}function et(t,e){if(!Array.isArray(e))return tt(e)===tt(t);for(var n=0,r=e.length;n<r;n++)if(tt(e[n])===tt(t))return!0;return!1}function nt(t){return new fa(void 0,void 0,void 0,String(t))}function rt(t,e){var n=new fa(t.tag,t.data,t.children,t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return n.ns=t.ns,n.isStatic=t.isStatic,n.key=t.key,n.isComment=t.isComment,n.isCloned=!0,e&&t.children&&(n.children=it(t.children)),n}function it(t,e){for(var n=t.length,r=new Array(n),i=0;i<n;i++)r[i]=rt(t[i],e);return r}function ot(t){function e(){var t=arguments,n=e.fns;if(!Array.isArray(n))return n.apply(null,arguments);for(var r=n.slice(),i=0;i<r.length;i++)r[i].apply(null,t)}return e.fns=t,e}function at(t,e){return t.plain?-1:e.plain?1:0}function st(t,n,i,o,a){var s,u,c,f,l=[],p=!1;for(s in t)u=t[s],c=n[s],f=da(s),f.plain||(p=!0),r(u)?"production"!==e.env.NODE_ENV&&mo('Invalid handler for event "'+f.name+'": got '+String(u),a):r(c)?(r(u.fns)&&(u=t[s]=ot(u)),f.handler=u,l.push(f)):u!==c&&(c.fns=u,t[s]=c);if(l.length){p&&l.sort(at);for(var h=0;h<l.length;h++){var d=l[h];i(d.name,d.handler,d.once,d.capture,d.passive)}}for(s in n)r(t[s])&&(f=da(s),o(f.name,n[s],f.capture))}function ut(t,e,n){function a(){n.apply(this,arguments),v(s.fns,a)}var s,u=t[e];r(u)?s=ot([a]):i(u.fns)&&o(u.merged)?(s=u,s.fns.push(a)):s=ot([u,a]),s.merged=!0,t[e]=s}function ct(t,n,o){var a=n.options.props;if(!r(a)){var s={},u=t.attrs,c=t.props;if(i(u)||i(c))for(var f in a){var l=so(f);if("production"!==e.env.NODE_ENV){var p=f.toLowerCase();f!==p&&u&&g(u,p)&&yo('Prop "'+p+'" is passed to component '+_o(o||n)+', but the declared prop name is "'+f+'". Note that HTML attributes are case-insensitive and camelCased props need to use their kebab-case equivalents when using in-DOM templates. You should probably use "'+l+'" instead of "'+f+'".')}ft(s,c,f,l,!0)||ft(s,u,f,l,!1)}return s}}function ft(t,e,n,r,o){if(i(e)){if(g(e,n))return t[n]=e[n],o||delete e[n],!0;if(g(e,r))return t[n]=e[r],o||delete e[r],!0}return!1}function lt(t){for(var e=0;e<t.length;e++)if(Array.isArray(t[e]))return Array.prototype.concat.apply([],t);return t}function pt(t){return s(t)?[nt(t)]:Array.isArray(t)?dt(t):void 0}function ht(t){return i(t)&&i(t.text)&&a(t.isComment)}function dt(t,e){var n,a,u,c=[];for(n=0;n<t.length;n++)a=t[n],r(a)||"boolean"==typeof a||(u=c[c.length-1],Array.isArray(a)?c.push.apply(c,dt(a,(e||"")+"_"+n)):s(a)?ht(u)?u.text+=String(a):""!==a&&c.push(nt(a)):ht(a)&&ht(u)?c[c.length-1]=nt(u.text+a.text):(o(t._isVList)&&i(a.tag)&&r(a.key)&&i(e)&&(a.key="__vlist"+e+"_"+n+"__"),c.push(a)));return c}function vt(t,e){return t.__esModule&&t.default&&(t=t.default),u(t)?e.extend(t):t}function gt(t,e,n,r,i){var o=ha();return o.asyncFactory=t,o.asyncMeta={data:e,context:n,children:r,tag:i},o}function mt(t,n,a){if(o(t.error)&&i(t.errorComp))return t.errorComp;if(i(t.resolved))return t.resolved;if(o(t.loading)&&i(t.loadingComp))return t.loadingComp;if(!i(t.contexts)){var s=t.contexts=[a],c=!0,f=function(){for(var t=0,e=s.length;t<e;t++)s[t].$forceUpdate()},l=C(function(e){t.resolved=vt(e,n),c||f()}),p=C(function(n){"production"!==e.env.NODE_ENV&&mo("Failed to resolve async component: "+String(t)+(n?"\nReason: "+n:"")),i(t.errorComp)&&(t.error=!0,f())}),h=t(l,p);return u(h)&&("function"==typeof h.then?r(t.resolved)&&h.then(l,p):i(h.component)&&"function"==typeof h.component.then&&(h.component.then(l,p),i(h.error)&&(t.errorComp=vt(h.error,n)),i(h.loading)&&(t.loadingComp=vt(h.loading,n),0===h.delay?t.loading=!0:setTimeout(function(){r(t.resolved)&&r(t.error)&&(t.loading=!0,f())},h.delay||200)),i(h.timeout)&&setTimeout(function(){r(t.resolved)&&p("production"!==e.env.NODE_ENV?"timeout ("+h.timeout+"ms)":null)},h.timeout))),c=!1,t.loading?t.loadingComp:t.resolved}t.contexts.push(a)}function yt(t){return t.isComment&&t.asyncFactory}function _t(t){if(Array.isArray(t))for(var e=0;e<t.length;e++){var n=t[e];if(i(n)&&(i(n.componentOptions)||yt(n)))return n}}function bt(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Et(t,e)}function wt(t,e,n){n?pa.$once(t,e):pa.$on(t,e)}function xt(t,e){pa.$off(t,e)}function Et(t,e,n){pa=t,st(e,n||{},wt,xt,t)}function Ot(t,e){var n={};if(!t)return n;for(var r=[],i=0,o=t.length;i<o;i++){var a=t[i],s=a.data;if(s&&s.attrs&&s.attrs.slot&&delete s.attrs.slot,a.context!==e&&a.functionalContext!==e||!s||null==s.slot)r.push(a);else{var u=a.data.slot,c=n[u]||(n[u]=[]);"template"===a.tag?c.push.apply(c,a.children):c.push(a)}}return r.every(Ct)||(n.default=r),n}function Ct(t){return t.isComment||" "===t.text}function St(t,e){e=e||{};for(var n=0;n<t.length;n++)Array.isArray(t[n])?St(t[n],e):e[t[n].key]=t[n].fn;return e}function At(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}function kt(t,n,r){t.$el=n,t.$options.render||(t.$options.render=ha,"production"!==e.env.NODE_ENV&&(t.$options.template&&"#"!==t.$options.template.charAt(0)||t.$options.el||n?mo("You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.",t):mo("Failed to mount component: template or render function not defined.",t))),Pt(t,"beforeMount");var i;return i="production"!==e.env.NODE_ENV&&ho.performance&&Xo?function(){var e=t._name,n=t._uid,i="vue-perf-start:"+n,o="vue-perf-end:"+n;Xo(i);var a=t._render();Xo(o),Qo(e+" render",i,o),Xo(i),t._update(a,r),Xo(o),Qo(e+" patch",i,o)}:function(){t._update(t._render(),r)},t._watcher=new Sa(t,i,x),r=!1,null==t.$vnode&&(t._isMounted=!0,Pt(t,"mounted")),t}function Nt(t,n,r,i,o){"production"!==e.env.NODE_ENV&&(ga=!0);var a=!!(o||t.$options._renderChildren||i.data.scopedSlots||t.$scopedSlots!==vo);if(t.$options._parentVnode=i,t.$vnode=i,t._vnode&&(t._vnode.parent=i),t.$options._renderChildren=o,t.$attrs=i.data&&i.data.attrs||vo,t.$listeners=r||vo,n&&t.$options.props){Ko.shouldConvert=!1;for(var s=t._props,u=t.$options._propKeys||[],c=0;c<u.length;c++){var f=u[c];s[f]=G(f,t.$options.props,n,t)}Ko.shouldConvert=!0,t.$options.propsData=n}if(r){var l=t.$options._parentListeners;t.$options._parentListeners=r,Et(t,r,l)}a&&(t.$slots=Ot(o,i.context),t.$forceUpdate()),"production"!==e.env.NODE_ENV&&(ga=!1)}function Tt(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}function jt(t,e){if(e){if(t._directInactive=!1,Tt(t))return}else if(t._directInactive)return;if(t._inactive||null===t._inactive){t._inactive=!1;for(var n=0;n<t.$children.length;n++)jt(t.$children[n]);Pt(t,"activated")}}function Rt(t,e){if(!(e&&(t._directInactive=!0,Tt(t))||t._inactive)){t._inactive=!0;for(var n=0;n<t.$children.length;n++)Rt(t.$children[n]);Pt(t,"deactivated")}}function Pt(t,e){var n=t.$options[e];if(n)for(var r=0,i=n.length;r<i;r++)try{n[r].call(t)}catch(n){N(n,t,e+" hook")}t._hasHookEvent&&t.$emit("hook:"+e)}function $t(){Oa=ya.length=_a.length=0,ba={},"production"!==e.env.NODE_ENV&&(wa={}),xa=Ea=!1}function Dt(){Ea=!0;var t,n;for(ya.sort(function(t,e){return t.id-e.id}),Oa=0;Oa<ya.length;Oa++)if(t=ya[Oa],n=t.id,ba[n]=null,t.run(),"production"!==e.env.NODE_ENV&&null!=ba[n]&&(wa[n]=(wa[n]||0)+1,wa[n]>ma)){mo("You may have an infinite update loop "+(t.user?'in watcher with expression "'+t.expression+'"':"in a component render function."),t.vm);break}var r=_a.slice(),i=ya.slice();$t(),Mt(r),Lt(i),Bo&&ho.devtools&&Bo.emit("flush")}function Lt(t){for(var e=t.length;e--;){var n=t[e],r=n.vm;r._watcher===n&&r._isMounted&&Pt(r,"updated")}}function It(t){t._inactive=!1,_a.push(t)}function Mt(t){for(var e=0;e<t.length;e++)t[e]._inactive=!0,jt(t[e],!0)}function Ut(t){var e=t.id;if(null==ba[e]){if(ba[e]=!0,Ea){for(var n=ya.length-1;n>Oa&&ya[n].id>t.id;)n--;ya.splice(n+1,0,t)}else ya.push(t);xa||(xa=!0,Fo(Dt))}}function Bt(t){Aa.clear(),Vt(t,Aa)}function Vt(t,e){var n,r,i=Array.isArray(t);if((i||u(t))&&Object.isExtensible(t)){if(t.__ob__){var o=t.__ob__.dep.id;if(e.has(o))return;e.add(o)}if(i)for(n=t.length;n--;)Vt(t[n],e);else for(r=Object.keys(t),n=r.length;n--;)Vt(t[r[n]],e)}}function Ft(t,e,n){ka.get=function(){return this[e][n]},ka.set=function(t){this[e][n]=t},Object.defineProperty(t,n,ka)}function qt(t){t._watchers=[];var e=t.$options;e.props&&Ht(t,e.props),e.methods&&Zt(t,e.methods),e.data?Jt(t):D(t._data={},!0),e.computed&&Yt(t,e.computed),e.watch&&e.watch!==$o&&Xt(t,e.watch)}function zt(t,e){c(t.$options[e])||mo('component option "'+e+'" should be an object.',t)}function Ht(t,n){var r=t.$options.propsData||{},i=t._props={},o=t.$options._propKeys=[],a=!t.$parent;Ko.shouldConvert=a;for(var s in n)!function(a){o.push(a);var s=G(a,n,r,t);"production"!==e.env.NODE_ENV?((eo(a)||ho.isReservedAttr(a))&&mo('"'+a+'" is a reserved attribute and cannot be used as component prop.',t),L(i,a,s,function(){t.$parent&&!ga&&mo("Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: \""+a+'"',t)})):L(i,a,s),a in t||Ft(t,"_props",a)}(s);Ko.shouldConvert=!0}function Jt(t){var n=t.$options.data;n=t._data="function"==typeof n?Wt(n,t):n||{},c(n)||(n={},"production"!==e.env.NODE_ENV&&mo("data functions should return an object:\nhttps://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function",t));for(var r=Object.keys(n),i=t.$options.props,o=t.$options.methods,a=r.length;a--;){var s=r[a];"production"!==e.env.NODE_ENV&&o&&g(o,s)&&mo('Method "'+s+'" has already been defined as a data property.',t),i&&g(i,s)?"production"!==e.env.NODE_ENV&&mo('The data property "'+s+'" is already declared as a prop. Use prop default value instead.',t):S(s)||Ft(t,"_data",s)}D(n,!0)}function Wt(t,e){try{return t.call(e)}catch(t){return N(t,e,"data()"),{}}}function Yt(t,n){"production"!==e.env.NODE_ENV&&zt(t,"computed");var r=t._computedWatchers=Object.create(null),i=Uo();for(var o in n){var a=n[o],s="function"==typeof a?a:a.get;"production"!==e.env.NODE_ENV&&null==s&&mo('Getter is missing for computed property "'+o+'".',t),i||(r[o]=new Sa(t,s||x,x,Na)),o in t?"production"!==e.env.NODE_ENV&&(o in t.$data?mo('The computed property "'+o+'" is already defined in data.',t):t.$options.props&&o in t.$options.props&&mo('The computed property "'+o+'" is already defined as a prop.',t)):Kt(t,o,a)}}function Kt(t,n,r){var i=!Uo();"function"==typeof r?(ka.get=i?Gt(n):r,ka.set=x):(ka.get=r.get?i&&!1!==r.cache?Gt(n):r.get:x,ka.set=r.set?r.set:x),"production"!==e.env.NODE_ENV&&ka.set===x&&(ka.set=function(){mo('Computed property "'+n+'" was assigned to but it has no setter.',this)}),Object.defineProperty(t,n,ka)}function Gt(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),zo.target&&e.depend(),e.value}}function Zt(t,n){"production"!==e.env.NODE_ENV&&zt(t,"methods");var r=t.$options.props;for(var i in n)"production"!==e.env.NODE_ENV&&(null==n[i]&&mo('Method "'+i+'" has an undefined value in the component definition. Did you reference the function correctly?',t),r&&g(r,i)&&mo('Method "'+i+'" has already been defined as a prop.',t),i in t&&S(i)&&mo('Method "'+i+'" conflicts with an existing Vue instance method. Avoid defining component methods that start with _ or $.')),t[i]=null==n[i]?x:y(n[i],t)}function Xt(t,n){"production"!==e.env.NODE_ENV&&zt(t,"watch");for(var r in n){var i=n[r];if(Array.isArray(i))for(var o=0;o<i.length;o++)Qt(t,r,i[o]);else Qt(t,r,i)}}function Qt(t,e,n,r){return c(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=t[n]),t.$watch(e,n,r)}function te(t){var e=t.$options.provide;e&&(t._provided="function"==typeof e?e.call(t):e)}function ee(t){var n=ne(t.$options.inject,t);n&&(Ko.shouldConvert=!1,Object.keys(n).forEach(function(r){"production"!==e.env.NODE_ENV?L(t,r,n[r],function(){mo('Avoid mutating an injected value directly since the changes will be overwritten whenever the provided component re-renders. injection being mutated: "'+r+'"',t)}):L(t,r,n[r])}),Ko.shouldConvert=!0)}function ne(t,n){if(t){for(var r=Object.create(null),i=Vo?Reflect.ownKeys(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}):Object.keys(t),o=0;o<i.length;o++){for(var a=i[o],s=t[a],u=n;u;){if(u._provided&&s in u._provided){r[a]=u._provided[s];break}u=u.$parent}"production"===e.env.NODE_ENV||u||mo('Injection "'+a+'" not found',n)}return r}}function re(t,e,n,r,o){var a={},s=t.options.props;if(i(s))for(var u in s)a[u]=G(u,s,e||vo);else i(n.attrs)&&ie(a,n.attrs),i(n.props)&&ie(a,n.props);var c=Object.create(r),f=function(t,e,n,r){return fe(c,t,e,n,r,!0)},l=t.options.render.call(null,f,{data:n,props:a,children:o,parent:r,listeners:n.on||vo,injections:ne(t.options.inject,r),slots:function(){return Ot(o,r)}});return l instanceof fa&&(l.functionalContext=r,l.functionalOptions=t.options,n.slot&&((l.data||(l.data={})).slot=n.slot)),l}function ie(t,e){for(var n in e)t[io(n)]=e[n]}function oe(t,n,a,s,c){if(!r(t)){var f=a.$options._base;if(u(t)&&(t=f.extend(t)),"function"!=typeof t)return void("production"!==e.env.NODE_ENV&&mo("Invalid Component definition: "+String(t),a));var l;if(r(t.cid)&&(l=t,void 0===(t=mt(l,f,a))))return gt(l,n,a,s,c);n=n||{},Ce(t),i(n.model)&&ce(t.options,n);var p=ct(n,t,c);if(o(t.options.functional))return re(t,p,n,a,s);var h=n.on;if(n.on=n.nativeOn,o(t.options.abstract)){var d=n.slot;n={},d&&(n.slot=d)}se(n);var v=t.options.name||c;return new fa("vue-component-"+t.cid+(v?"-"+v:""),n,void 0,void 0,void 0,a,{Ctor:t,propsData:p,listeners:h,tag:c,children:s},l)}}function ae(t,e,n,r){var o=t.componentOptions,a={_isComponent:!0,parent:e,propsData:o.propsData,_componentTag:o.tag,_parentVnode:t,_parentListeners:o.listeners,_renderChildren:o.children,_parentElm:n||null,_refElm:r||null},s=t.data.inlineTemplate;return i(s)&&(a.render=s.render,a.staticRenderFns=s.staticRenderFns),new o.Ctor(a)}function se(t){t.hook||(t.hook={});for(var e=0;e<ja.length;e++){var n=ja[e],r=t.hook[n],i=Ta[n];t.hook[n]=r?ue(i,r):i}}function ue(t,e){return function(n,r,i,o){t(n,r,i,o),e(n,r,i,o)}}function ce(t,e){var n=t.model&&t.model.prop||"value",r=t.model&&t.model.event||"input";(e.props||(e.props={}))[n]=e.model.value;var o=e.on||(e.on={});i(o[r])?o[r]=[e.model.callback].concat(o[r]):o[r]=e.model.callback}function fe(t,e,n,r,i,a){return(Array.isArray(n)||s(n))&&(i=r,r=n,n=void 0),o(a)&&(i=Pa),le(t,e,n,r,i)}function le(t,n,r,o,a){if(i(r)&&i(r.__ob__))return"production"!==e.env.NODE_ENV&&mo("Avoid using observed data object as vnode data: "+JSON.stringify(r)+"\nAlways create fresh vnode data objects in each render!",t),ha();if(i(r)&&i(r.is)&&(n=r.is),!n)return ha();"production"!==e.env.NODE_ENV&&i(r)&&i(r.key)&&!s(r.key)&&mo("Avoid using non-primitive value as key, use string/number value instead.",t),Array.isArray(o)&&"function"==typeof o[0]&&(r=r||{},r.scopedSlots={default:o[0]},o.length=0),a===Pa?o=pt(o):a===Ra&&(o=lt(o));var u,c;if("string"==typeof n){var f;c=t.$vnode&&t.$vnode.ns||ho.getTagNamespace(n),u=ho.isReservedTag(n)?new fa(ho.parsePlatformTagName(n),r,o,void 0,void 0,t):i(f=K(t.$options,"components",n))?oe(f,r,t,o,n):new fa(n,r,o,void 0,void 0,t)}else u=oe(n,r,t,o);return i(u)?(c&&pe(u,c),u):ha()}function pe(t,e){if(t.ns=e,"foreignObject"!==t.tag&&i(t.children))for(var n=0,o=t.children.length;n<o;n++){var a=t.children[n];i(a.tag)&&r(a.ns)&&pe(a,e)}}function he(t,e){var n,r,o,a,s;if(Array.isArray(t)||"string"==typeof t)for(n=new Array(t.length),r=0,o=t.length;r<o;r++)n[r]=e(t[r],r);else if("number"==typeof t)for(n=new Array(t),r=0;r<t;r++)n[r]=e(r+1,r);else if(u(t))for(a=Object.keys(t),n=new Array(a.length),r=0,o=a.length;r<o;r++)s=a[r],n[r]=e(t[s],s,r);return i(n)&&(n._isVList=!0),n}function de(t,n,r,i){var o=this.$scopedSlots[t];if(o)return r=r||{},i&&(r=b(b({},i),r)),o(r)||n;var a=this.$slots[t];return a&&"production"!==e.env.NODE_ENV&&(a._rendered&&mo('Duplicate presence of slot "'+t+'" found in the same render tree - this will likely cause render errors.',this),a._rendered=!0),a||n}function ve(t){return K(this.$options,"filters",t,!0)||co}function ge(t,e,n){var r=ho.keyCodes[e]||n;return Array.isArray(r)?-1===r.indexOf(t):r!==t}function me(t,n,r,i,o){if(r)if(u(r)){Array.isArray(r)&&(r=w(r));var a;for(var s in r)!function(e){if("class"===e||"style"===e||eo(e))a=t;else{var s=t.attrs&&t.attrs.type;a=i||ho.mustUseProp(n,s,e)?t.domProps||(t.domProps={}):t.attrs||(t.attrs={})}if(!(e in a)&&(a[e]=r[e],o)){(t.on||(t.on={}))["update:"+e]=function(t){r[e]=t}}}(s)}else"production"!==e.env.NODE_ENV&&mo("v-bind without argument expects an Object or Array value",this);return t}function ye(t,e){var n=this._staticTrees[t];return n&&!e?Array.isArray(n)?it(n):rt(n):(n=this._staticTrees[t]=this.$options.staticRenderFns[t].call(this._renderProxy),be(n,"__static__"+t,!1),n)}function _e(t,e,n){return be(t,"__once__"+e+(n?"_"+n:""),!0),t}function be(t,e,n){if(Array.isArray(t))for(var r=0;r<t.length;r++)t[r]&&"string"!=typeof t[r]&&we(t[r],e+"_"+r,n);else we(t,e,n)}function we(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}function xe(t,n){if(n)if(c(n)){var r=t.on=t.on?b({},t.on):{};for(var i in n){var o=r[i],a=n[i];r[i]=o?[].concat(a,o):a}}else"production"!==e.env.NODE_ENV&&mo("v-on without argument expects an Object value",this);return t}function Ee(t){t._vnode=null,t._staticTrees=null;var n=t.$vnode=t.$options._parentVnode,r=n&&n.context;t.$slots=Ot(t.$options._renderChildren,r),t.$scopedSlots=vo,t._c=function(e,n,r,i){return fe(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return fe(t,e,n,r,i,!0)};var i=n&&n.data;"production"!==e.env.NODE_ENV?(L(t,"$attrs",i&&i.attrs||vo,function(){!ga&&mo("$attrs is readonly.",t)},!0),L(t,"$listeners",t.$options._parentListeners||vo,function(){!ga&&mo("$listeners is readonly.",t)},!0)):(L(t,"$attrs",i&&i.attrs||vo,null,!0),L(t,"$listeners",t.$options._parentListeners||vo,null,!0))}function Oe(t,e){var n=t.$options=Object.create(t.constructor.options);n.parent=e.parent,n.propsData=e.propsData,n._parentVnode=e._parentVnode,n._parentListeners=e._parentListeners,n._renderChildren=e._renderChildren,n._componentTag=e._componentTag,n._parentElm=e._parentElm,n._refElm=e._refElm,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}function Ce(t){var e=t.options;if(t.super){var n=Ce(t.super);if(n!==t.superOptions){t.superOptions=n;var r=Se(t);r&&b(t.extendOptions,r),e=t.options=Y(n,t.extendOptions),e.name&&(e.components[e.name]=t)}}return e}function Se(t){var e,n=t.options,r=t.extendOptions,i=t.sealedOptions;for(var o in n)n[o]!==i[o]&&(e||(e={}),e[o]=Ae(n[o],r[o],i[o]));return e}function Ae(t,e,n){if(Array.isArray(t)){var r=[];n=Array.isArray(n)?n:[n],e=Array.isArray(e)?e:[e];for(var i=0;i<t.length;i++)(e.indexOf(t[i])>=0||n.indexOf(t[i])<0)&&r.push(t[i]);return r}return t}function ke(t){"production"===e.env.NODE_ENV||this instanceof ke||mo("Vue is a constructor and should be called with the `new` keyword"),this._init(t)}function Ne(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=_(arguments,1);return n.unshift(this),"function"==typeof t.install?t.install.apply(t,n):"function"==typeof t&&t.apply(null,n),e.push(t),this}}function Te(t){t.mixin=function(t){return this.options=Y(this.options,t),this}}function je(t){t.cid=0;var n=1;t.extend=function(t){t=t||{};var r=this,i=r.cid,o=t._Ctor||(t._Ctor={});if(o[i])return o[i];var a=t.name||r.options.name;"production"!==e.env.NODE_ENV&&(/^[a-zA-Z][\w-]*$/.test(a)||mo('Invalid component name: "'+a+'". Component names can only contain alphanumeric characters and the hyphen, and must start with a letter.'));var s=function(t){this._init(t)};return s.prototype=Object.create(r.prototype),s.prototype.constructor=s,s.cid=n++,s.options=Y(r.options,t),s.super=r,s.options.props&&Re(s),s.options.computed&&Pe(s),s.extend=r.extend,s.mixin=r.mixin,s.use=r.use,lo.forEach(function(t){s[t]=r[t]}),a&&(s.options.components[a]=s),s.superOptions=r.options,s.extendOptions=t,s.sealedOptions=b({},s.options),o[i]=s,s}}function Re(t){var e=t.options.props;for(var n in e)Ft(t.prototype,"_props",n)}function Pe(t){var e=t.options.computed;for(var n in e)Kt(t.prototype,n,e[n])}function $e(t){lo.forEach(function(n){t[n]=function(t,r){return r?("production"!==e.env.NODE_ENV&&"component"===n&&ho.isReservedTag(t)&&mo("Do not use built-in or reserved HTML elements as component id: "+t),"component"===n&&c(r)&&(r.name=r.name||t,r=this.options._base.extend(r)),"directive"===n&&"function"==typeof r&&(r={bind:r,update:r}),this.options[n+"s"][t]=r,r):this.options[n+"s"][t]}})}function De(t){return t&&(t.Ctor.options.name||t.tag)}function Le(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!f(t)&&t.test(e)}function Ie(t,e,n){for(var r in t){var i=t[r];if(i){var o=De(i.componentOptions);o&&!n(o)&&(i!==e&&Me(i),t[r]=null)}}}function Me(t){t&&t.componentInstance.$destroy()}function Ue(t){for(var e=t.data,n=t,r=t;i(r.componentInstance);)r=r.componentInstance._vnode,r.data&&(e=Be(r.data,e));for(;i(n=n.parent);)n.data&&(e=Be(e,n.data));return Ve(e.staticClass,e.class)}function Be(t,e){return{staticClass:Fe(t.staticClass,e.staticClass),class:i(t.class)?[t.class,e.class]:e.class}}function Ve(t,e){return i(t)||i(e)?Fe(t,qe(e)):""}function Fe(t,e){return t?e?t+" "+e:t:e||""}function qe(t){return Array.isArray(t)?ze(t):u(t)?He(t):"string"==typeof t?t:""}function ze(t){for(var e,n="",r=0,o=t.length;r<o;r++)i(e=qe(t[r]))&&""!==e&&(n&&(n+=" "),n+=e);return n}function He(t){var e="";for(var n in t)t[n]&&(e&&(e+=" "),e+=n);return e}function Je(t){return is(t)?"svg":"math"===t?"math":void 0}function We(t){if(!So)return!0;if(as(t))return!1;if(t=t.toLowerCase(),null!=ss[t])return ss[t];var e=document.createElement(t);return t.indexOf("-")>-1?ss[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:ss[t]=/HTMLUnknownElement/.test(e.toString())}function Ye(t){if("string"==typeof t){var n=document.querySelector(t);return n||("production"!==e.env.NODE_ENV&&mo("Cannot find element: "+t),document.createElement("div"))}return t}function Ke(t,e){var n=document.createElement(t);return"select"!==t?n:(e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n)}function Ge(t,e){return document.createElementNS(ns[t],e)}function Ze(t){return document.createTextNode(t)}function Xe(t){return document.createComment(t)}function Qe(t,e,n){t.insertBefore(e,n)}function tn(t,e){t.removeChild(e)}function en(t,e){t.appendChild(e)}function nn(t){return t.parentNode}function rn(t){return t.nextSibling}function on(t){return t.tagName}function an(t,e){t.textContent=e}function sn(t,e,n){t.setAttribute(e,n)}function un(t,e){var n=t.data.ref;if(n){var r=t.context,i=t.componentInstance||t.elm,o=r.$refs;e?Array.isArray(o[n])?v(o[n],i):o[n]===i&&(o[n]=void 0):t.data.refInFor?Array.isArray(o[n])?o[n].indexOf(i)<0&&o[n].push(i):o[n]=[i]:o[n]=i}}function cn(t,e){return t.key===e.key&&(t.tag===e.tag&&t.isComment===e.isComment&&i(t.data)===i(e.data)&&fn(t,e)||o(t.isAsyncPlaceholder)&&t.asyncFactory===e.asyncFactory&&r(e.asyncFactory.error))}function fn(t,e){if("input"!==t.tag)return!0;var n,r=i(n=t.data)&&i(n=n.attrs)&&n.type,o=i(n=e.data)&&i(n=n.attrs)&&n.type;return r===o||us(r)&&us(o)}function ln(t,e,n){var r,o,a={};for(r=e;r<=n;++r)o=t[r].key,i(o)&&(a[o]=r);return a}function pn(t,e){(t.data.directives||e.data.directives)&&hn(t,e)}function hn(t,e){var n,r,i,o=t===ls,a=e===ls,s=dn(t.data.directives,t.context),u=dn(e.data.directives,e.context),c=[],f=[];for(n in u)r=s[n],i=u[n],r?(i.oldValue=r.value,gn(i,"update",e,t),i.def&&i.def.componentUpdated&&f.push(i)):(gn(i,"bind",e,t),i.def&&i.def.inserted&&c.push(i));if(c.length){var l=function(){for(var n=0;n<c.length;n++)gn(c[n],"inserted",e,t)};o?ut(e.data.hook||(e.data.hook={}),"insert",l):l()}if(f.length&&ut(e.data.hook||(e.data.hook={}),"postpatch",function(){for(var n=0;n<f.length;n++)gn(f[n],"componentUpdated",e,t)}),!o)for(n in s)u[n]||gn(s[n],"unbind",t,t,a)}function dn(t,e){var n=Object.create(null);if(!t)return n;var r,i;for(r=0;r<t.length;r++)i=t[r],i.modifiers||(i.modifiers=ds),n[vn(i)]=i,i.def=K(e.$options,"directives",i.name,!0);return n}function vn(t){return t.rawName||t.name+"."+Object.keys(t.modifiers||{}).join(".")}function gn(t,e,n,r,i){var o=t.def&&t.def[e];if(o)try{o(n.elm,t,n,r,i)}catch(r){N(r,n.context,"directive "+t.name+" "+e+" hook")}}function mn(t,e){var n=e.componentOptions;if(!(i(n)&&!1===n.Ctor.options.inheritAttrs||r(t.data.attrs)&&r(e.data.attrs))){var o,a,s=e.elm,u=t.data.attrs||{},c=e.data.attrs||{};i(c.__ob__)&&(c=e.data.attrs=b({},c));for(o in c)a=c[o],u[o]!==a&&yn(s,o,a);No&&c.value!==u.value&&yn(s,"value",c.value);for(o in u)r(c[o])&&(Qa(o)?s.removeAttributeNS(Xa,ts(o)):Ga(o)||s.removeAttribute(o))}}function yn(t,e,n){Za(e)?es(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):Ga(e)?t.setAttribute(e,es(n)||"false"===n?"false":"true"):Qa(e)?es(n)?t.removeAttributeNS(Xa,ts(e)):t.setAttributeNS(Xa,e,n):es(n)?t.removeAttribute(e):t.setAttribute(e,n)}function _n(t,e){var n=e.elm,o=e.data,a=t.data;if(!(r(o.staticClass)&&r(o.class)&&(r(a)||r(a.staticClass)&&r(a.class)))){var s=Ue(e),u=n._transitionClasses;i(u)&&(s=Fe(s,qe(u))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}function bn(t){function e(){(a||(a=[])).push(t.slice(d,i).trim()),d=i+1}var n,r,i,o,a,s=!1,u=!1,c=!1,f=!1,l=0,p=0,h=0,d=0;for(i=0;i<t.length;i++)if(r=n,n=t.charCodeAt(i),s)39===n&&92!==r&&(s=!1);else if(u)34===n&&92!==r&&(u=!1);else if(c)96===n&&92!==r&&(c=!1);else if(f)47===n&&92!==r&&(f=!1);else if(124!==n||124===t.charCodeAt(i+1)||124===t.charCodeAt(i-1)||l||p||h){switch(n){case 34:u=!0;break;case 39:s=!0;break;case 96:c=!0;break;case 40:h++;break;case 41:h--;break;case 91:p++;break;case 93:p--;break;case 123:l++;break;case 125:l--}if(47===n){for(var v=i-1,g=void 0;v>=0&&" "===(g=t.charAt(v));v--);g&&ys.test(g)||(f=!0)}}else void 0===o?(d=i+1,o=t.slice(0,i).trim()):e();if(void 0===o?o=t.slice(0,i).trim():0!==d&&e(),a)for(i=0;i<a.length;i++)o=wn(o,a[i]);return o}function wn(t,e){var n=e.indexOf("(");return n<0?'_f("'+e+'")('+t+")":'_f("'+e.slice(0,n)+'")('+t+","+e.slice(n+1)}function xn(t){console.error("[Vue compiler]: "+t)}function En(t,e){return t?t.map(function(t){return t[e]}).filter(function(t){return t}):[]}function On(t,e,n){(t.props||(t.props=[])).push({name:e,value:n})}function Cn(t,e,n){(t.attrs||(t.attrs=[])).push({name:e,value:n})}function Sn(t,e,n,r,i,o){(t.directives||(t.directives=[])).push({name:e,rawName:n,value:r,arg:i,modifiers:o})}function An(t,n,r,i,o,a){"production"!==e.env.NODE_ENV&&a&&i&&i.prevent&&i.passive&&a("passive and prevent can't be used together. Passive handler can't prevent default event."),i&&i.capture&&(delete i.capture,n="!"+n),i&&i.once&&(delete i.once,n="~"+n),i&&i.passive&&(delete i.passive,n="&"+n);var s;i&&i.native?(delete i.native,s=t.nativeEvents||(t.nativeEvents={})):s=t.events||(t.events={});var u={value:r,modifiers:i},c=s[n];Array.isArray(c)?o?c.unshift(u):c.push(u):s[n]=c?o?[u,c]:[c,u]:u}function kn(t,e,n){var r=Nn(t,":"+e)||Nn(t,"v-bind:"+e);if(null!=r)return bn(r);if(!1!==n){var i=Nn(t,e);if(null!=i)return JSON.stringify(i)}}function Nn(t,e){var n;if(null!=(n=t.attrsMap[e]))for(var r=t.attrsList,i=0,o=r.length;i<o;i++)if(r[i].name===e){r.splice(i,1);break}return n}function Tn(t,e,n){var r=n||{},i=r.number,o=r.trim,a="$$v";o&&(a="(typeof $$v === 'string'? $$v.trim(): $$v)"),i&&(a="_n("+a+")");var s=jn(e,a);t.model={value:"("+e+")",expression:'"'+e+'"',callback:"function ($$v) {"+s+"}"}}function jn(t,e){var n=Rn(t);return null===n.idx?t+"="+e:"$set("+n.exp+", "+n.idx+", "+e+")"}function Rn(t){if(Ua=t,Ma=Ua.length,Va=Fa=qa=0,t.indexOf("[")<0||t.lastIndexOf("]")<Ma-1)return{exp:t,idx:null};for(;!$n();)Ba=Pn(),Dn(Ba)?In(Ba):91===Ba&&Ln(Ba);return{exp:t.substring(0,Fa),idx:t.substring(Fa+1,qa)}}function Pn(){return Ua.charCodeAt(++Va)}function $n(){return Va>=Ma}function Dn(t){return 34===t||39===t}function Ln(t){var e=1;for(Fa=Va;!$n();)if(t=Pn(),Dn(t))In(t);else if(91===t&&e++,93===t&&e--,0===e){qa=Va;break}}function In(t){for(var e=t;!$n()&&(t=Pn())!==e;);}function Mn(t,n,r){za=r;var i=n.value,o=n.modifiers,a=t.tag,s=t.attrsMap.type;if("production"!==e.env.NODE_ENV){var u=t.attrsMap["v-bind:type"]||t.attrsMap[":type"];"input"===a&&u&&za('<input :type="'+u+'" v-model="'+i+'">:\nv-model does not support dynamic input types. Use v-if branches instead.'),"input"===a&&"file"===s&&za("<"+t.tag+' v-model="'+i+'" type="file">:\nFile inputs are read only. Use a v-on:change listener instead.')}if(t.component)return Tn(t,i,o),!1;if("select"===a)Vn(t,i,o);else if("input"===a&&"checkbox"===s)Un(t,i,o);else if("input"===a&&"radio"===s)Bn(t,i,o);else if("input"===a||"textarea"===a)Fn(t,i,o);else{if(!ho.isReservedTag(a))return Tn(t,i,o),!1;"production"!==e.env.NODE_ENV&&za("<"+t.tag+' v-model="'+i+"\">: v-model is not supported on this element type. If you are working with contenteditable, it's recommended to wrap a library dedicated for that purpose inside a custom component.")}return!0}function Un(t,e,n){var r=n&&n.number,i=kn(t,"value")||"null",o=kn(t,"true-value")||"true",a=kn(t,"false-value")||"false";On(t,"checked","Array.isArray("+e+")?_i("+e+","+i+")>-1"+("true"===o?":("+e+")":":_q("+e+","+o+")")),An(t,bs,"var $$a="+e+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+e+"=$$a.concat([$$v]))}else{$$i>-1&&("+e+"=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{"+jn(e,"$$c")+"}",null,!0)}function Bn(t,e,n){var r=n&&n.number,i=kn(t,"value")||"null";i=r?"_n("+i+")":i,On(t,"checked","_q("+e+","+i+")"),An(t,bs,jn(e,i),null,!0)}function Vn(t,e,n){var r=n&&n.number,i='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(r?"_n(val)":"val")+"})",o="var $$selectedVal = "+i+";";o=o+" "+jn(e,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]"),An(t,"change",o,null,!0)}function Fn(t,e,n){var r=t.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,u=!o&&"range"!==r,c=o?"change":"range"===r?_s:"input",f="$event.target.value";s&&(f="$event.target.value.trim()"),a&&(f="_n("+f+")");var l=jn(e,f);u&&(l="if($event.target.composing)return;"+l),On(t,"value","("+e+")"),An(t,c,l,null,!0),(s||a)&&An(t,"blur","$forceUpdate()")}function qn(t){var e;i(t[_s])&&(e=ko?"change":"input",t[e]=[].concat(t[_s],t[e]||[]),delete t[_s]),i(t[bs])&&(e=Po?"click":"change",t[e]=[].concat(t[bs],t[e]||[]),delete t[bs])}function zn(t,e,n,r,i){if(n){var o=e,a=Ha;e=function(n){null!==(1===arguments.length?o(n):o.apply(null,arguments))&&Hn(t,e,r,a)}}Ha.addEventListener(t,e,Do?{capture:r,passive:i}:r)}function Hn(t,e,n,r){(r||Ha).removeEventListener(t,e,n)}function Jn(t,e){if(!r(t.data.on)||!r(e.data.on)){var n=e.data.on||{},i=t.data.on||{};Ha=e.elm,qn(n),st(n,i,zn,Hn,e.context)}}function Wn(t,e){if(!r(t.data.domProps)||!r(e.data.domProps)){var n,o,a=e.elm,s=t.data.domProps||{},u=e.data.domProps||{};i(u.__ob__)&&(u=e.data.domProps=b({},u));for(n in s)r(u[n])&&(a[n]="");for(n in u)if(o=u[n],"textContent"!==n&&"innerHTML"!==n||(e.children&&(e.children.length=0),o!==s[n]))if("value"===n){a._value=o;var c=r(o)?"":String(o);Yn(a,e,c)&&(a.value=c)}else a[n]=o}}function Yn(t,e,n){return!t.composing&&("option"===e.tag||Kn(t,n)||Gn(t,n))}function Kn(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}function Gn(t,e){var n=t.value,r=t._vModifiers;return i(r)&&r.number?h(n)!==h(e):i(r)&&r.trim?n.trim()!==e.trim():n!==e}function Zn(t){var e=Xn(t.style);return t.staticStyle?b(t.staticStyle,e):e}function Xn(t){return Array.isArray(t)?w(t):"string"==typeof t?Es(t):t}function Qn(t,e){var n,r={};if(e)for(var i=t;i.componentInstance;)i=i.componentInstance._vnode,i.data&&(n=Zn(i.data))&&b(r,n);(n=Zn(t.data))&&b(r,n);for(var o=t;o=o.parent;)o.data&&(n=Zn(o.data))&&b(r,n);return r}function tr(t,e){var n=e.data,o=t.data;if(!(r(n.staticStyle)&&r(n.style)&&r(o.staticStyle)&&r(o.style))){var a,s,u=e.elm,c=o.staticStyle,f=o.normalizedStyle||o.style||{},l=c||f,p=Xn(e.data.style)||{};e.data.normalizedStyle=i(p.__ob__)?b({},p):p;var h=Qn(e,!0);for(s in l)r(h[s])&&Ss(u,s,"");for(s in h)(a=h[s])!==l[s]&&Ss(u,s,null==a?"":a)}}function er(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(/\s+/).forEach(function(e){return t.classList.add(e)}):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function nr(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(/\s+/).forEach(function(e){return t.classList.remove(e)}):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" "+(t.getAttribute("class")||"")+" ",r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");n=n.trim(),n?t.setAttribute("class",n):t.removeAttribute("class")}}function rr(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&b(e,Ts(t.name||"v")),b(e,t),e}return"string"==typeof t?Ts(t):void 0}}function ir(t){Ms(function(){Ms(t)})}function or(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),er(t,e))}function ar(t,e){t._transitionClasses&&v(t._transitionClasses,e),nr(t,e)}function sr(t,e,n){var r=ur(t,e),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===Rs?Ds:Is,u=0,c=function(){t.removeEventListener(s,f),n()},f=function(e){e.target===t&&++u>=a&&c()};setTimeout(function(){u<a&&c()},o+1),t.addEventListener(s,f)}function ur(t,e){var n,r=window.getComputedStyle(t),i=r[$s+"Delay"].split(", "),o=r[$s+"Duration"].split(", "),a=cr(i,o),s=r[Ls+"Delay"].split(", "),u=r[Ls+"Duration"].split(", "),c=cr(s,u),f=0,l=0;return e===Rs?a>0&&(n=Rs,f=a,l=o.length):e===Ps?c>0&&(n=Ps,f=c,l=u.length):(f=Math.max(a,c),n=f>0?a>c?Rs:Ps:null,l=n?n===Rs?o.length:u.length:0),{type:n,timeout:f,propCount:l,hasTransform:n===Rs&&Us.test(r[$s+"Property"])}}function cr(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max.apply(null,e.map(function(e,n){return fr(e)+fr(t[n])}))}function fr(t){return 1e3*Number(t.slice(0,-1))}function lr(t,n){var o=t.elm;i(o._leaveCb)&&(o._leaveCb.cancelled=!0,o._leaveCb());var a=rr(t.data.transition);if(!r(a)&&!i(o._enterCb)&&1===o.nodeType){for(var s=a.css,c=a.type,f=a.enterClass,l=a.enterToClass,p=a.enterActiveClass,d=a.appearClass,v=a.appearToClass,g=a.appearActiveClass,m=a.beforeEnter,y=a.enter,_=a.afterEnter,b=a.enterCancelled,w=a.beforeAppear,x=a.appear,E=a.afterAppear,O=a.appearCancelled,S=a.duration,A=va,k=va.$vnode;k&&k.parent;)k=k.parent,A=k.context;var N=!A._isMounted||!t.isRootInsert;if(!N||x||""===x){var T=N&&d?d:f,j=N&&g?g:p,R=N&&v?v:l,P=N?w||m:m,$=N&&"function"==typeof x?x:y,D=N?E||_:_,L=N?O||b:b,I=h(u(S)?S.enter:S);"production"!==e.env.NODE_ENV&&null!=I&&hr(I,"enter",t);var M=!1!==s&&!No,U=vr($),B=o._enterCb=C(function(){M&&(ar(o,R),ar(o,j)),B.cancelled?(M&&ar(o,T),L&&L(o)):D&&D(o),o._enterCb=null});t.data.show||ut(t.data.hook||(t.data.hook={}),"insert",function(){var e=o.parentNode,n=e&&e._pending&&e._pending[t.key];n&&n.tag===t.tag&&n.elm._leaveCb&&n.elm._leaveCb(),$&&$(o,B)}),P&&P(o),M&&(or(o,T),or(o,j),ir(function(){or(o,R),ar(o,T),B.cancelled||U||(dr(I)?setTimeout(B,I):sr(o,c,B))})),t.data.show&&(n&&n(),$&&$(o,B)),M||U||B()}}}function pr(t,n){function o(){O.cancelled||(t.data.show||((a.parentNode._pending||(a.parentNode._pending={}))[t.key]=t),v&&v(a),w&&(or(a,l),or(a,d),ir(function(){or(a,p),ar(a,l),O.cancelled||x||(dr(E)?setTimeout(O,E):sr(a,f,O))})),g&&g(a,O),w||x||O())}var a=t.elm;i(a._enterCb)&&(a._enterCb.cancelled=!0,a._enterCb());var s=rr(t.data.transition);if(r(s))return n();if(!i(a._leaveCb)&&1===a.nodeType){var c=s.css,f=s.type,l=s.leaveClass,p=s.leaveToClass,d=s.leaveActiveClass,v=s.beforeLeave,g=s.leave,m=s.afterLeave,y=s.leaveCancelled,_=s.delayLeave,b=s.duration,w=!1!==c&&!No,x=vr(g),E=h(u(b)?b.leave:b);"production"!==e.env.NODE_ENV&&i(E)&&hr(E,"leave",t);var O=a._leaveCb=C(function(){a.parentNode&&a.parentNode._pending&&(a.parentNode._pending[t.key]=null),w&&(ar(a,p),ar(a,d)),O.cancelled?(w&&ar(a,l),y&&y(a)):(n(),m&&m(a)),a._leaveCb=null});_?_(o):o()}}function hr(t,e,n){"number"!=typeof t?mo("<transition> explicit "+e+" duration is not a valid number - got "+JSON.stringify(t)+".",n.context):isNaN(t)&&mo("<transition> explicit "+e+" duration is NaN - the duration expression might be incorrect.",n.context)}function dr(t){return"number"==typeof t&&!isNaN(t)}function vr(t){if(r(t))return!1;var e=t.fns;return i(e)?vr(Array.isArray(e)?e[0]:e):(t._length||t.length)>1}function gr(t,e){!0!==e.data.show&&lr(e)}function mr(t,e,n){yr(t,e,n),(ko||To)&&setTimeout(function(){yr(t,e,n)},0)}function yr(t,n,r){var i=n.value,o=t.multiple;if(o&&!Array.isArray(i))return void("production"!==e.env.NODE_ENV&&mo('<select multiple v-model="'+n.expression+'"> expects an Array value for its binding, but got '+Object.prototype.toString.call(i).slice(8,-1),r));for(var a,s,u=0,c=t.options.length;u<c;u++)if(s=t.options[u],o)a=O(i,br(s))>-1,s.selected!==a&&(s.selected=a);else if(E(br(s),i))return void(t.selectedIndex!==u&&(t.selectedIndex=u));o||(t.selectedIndex=-1)}function _r(t,e){return e.every(function(e){return!E(e,t)})}function br(t){return"_value"in t?t._value:t.value}function wr(t){t.target.composing=!0}function xr(t){t.target.composing&&(t.target.composing=!1,Er(t.target,"input"))}function Er(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Or(t){return!t.componentInstance||t.data&&t.data.transition?t:Or(t.componentInstance._vnode)}function Cr(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Cr(_t(e.children)):t}function Sr(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var i=n._parentListeners;for(var o in i)e[io(o)]=i[o];return e}function Ar(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}function kr(t){for(;t=t.parent;)if(t.data.transition)return!0}function Nr(t,e){return e.key===t.key&&e.tag===t.tag}function Tr(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function jr(t){t.data.newPos=t.elm.getBoundingClientRect()}function Rr(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,i=e.top-n.top;if(r||i){t.data.moved=!0;var o=t.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}function Pr(t,e){var n=e?nu(e):tu;if(n.test(t)){for(var r,i,o=[],a=n.lastIndex=0;r=n.exec(t);){i=r.index,i>a&&o.push(JSON.stringify(t.slice(a,i)));var s=bn(r[1].trim());o.push("_s("+s+")"),a=i+r[0].length}return a<t.length&&o.push(JSON.stringify(t.slice(a))),o.join("+")}}function $r(t,n){var r=n.warn||xn,i=Nn(t,"class");if("production"!==e.env.NODE_ENV&&i){Pr(i,n.delimiters)&&r('class="'+i+'": Interpolation inside attributes has been removed. Use v-bind or the colon shorthand instead. For example, instead of <div class="{{ val }}">, use <div :class="val">.')}i&&(t.staticClass=JSON.stringify(i));var o=kn(t,"class",!1);o&&(t.classBinding=o)}function Dr(t){var e="";return t.staticClass&&(e+="staticClass:"+t.staticClass+","),t.classBinding&&(e+="class:"+t.classBinding+","),e}function Lr(t,n){var r=n.warn||xn,i=Nn(t,"style");if(i){if("production"!==e.env.NODE_ENV){Pr(i,n.delimiters)&&r('style="'+i+'": Interpolation inside attributes has been removed. Use v-bind or the colon shorthand instead. For example, instead of <div style="{{ val }}">, use <div :style="val">.')}t.staticStyle=JSON.stringify(Es(i))}var o=kn(t,"style",!1);o&&(t.styleBinding=o)}function Ir(t){var e="";return t.staticStyle&&(e+="staticStyle:"+t.staticStyle+","),t.styleBinding&&(e+="style:("+t.styleBinding+"),"),e}function Mr(t,e){e.value&&On(t,"textContent","_s("+e.value+")")}function Ur(t,e){e.value&&On(t,"innerHTML","_s("+e.value+")")}function Br(t,e){var n=e?Lu:Du;return t.replace(n,function(t){return $u[t]})}function Vr(t,n){function r(e){l+=e,t=t.substring(e)}function i(t,r,i){var o,u;if(null==r&&(r=l),null==i&&(i=l),t&&(u=t.toLowerCase()),t)for(o=s.length-1;o>=0&&s[o].lowerCasedTag!==u;o--);else o=0;if(o>=0){for(var c=s.length-1;c>=o;c--)"production"!==e.env.NODE_ENV&&(c>o||!t)&&n.warn&&n.warn("tag <"+s[c].tag+"> has no matching end tag."),n.end&&n.end(s[c].tag,r,i);s.length=o,a=o&&s[o-1].tag}else"br"===u?n.start&&n.start(t,[],!0,r,i):"p"===u&&(n.start&&n.start(t,[],!1,r,i),n.end&&n.end(t,r,i))}for(var o,a,s=[],u=n.expectHTML,c=n.isUnaryTag||uo,f=n.canBeLeftOpenTag||uo,l=0;t;){if(o=t,a&&Ru(a)){var p=0,h=a.toLowerCase(),d=Pu[h]||(Pu[h]=new RegExp("([\\s\\S]*?)(</"+h+"[^>]*>)","i")),v=t.replace(d,function(t,e,r){return p=r.length,Ru(h)||"noscript"===h||(e=e.replace(/<!--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),Mu(h,e)&&(e=e.slice(1)),n.chars&&n.chars(e),""});l+=t.length-v.length,t=v,i(h,l-p,l)}else{var g=t.indexOf("<");if(0===g){if(_u.test(t)){var m=t.indexOf("--\x3e");if(m>=0){n.shouldKeepComment&&n.comment(t.substring(4,m)),r(m+3);continue}}if(bu.test(t)){var y=t.indexOf("]>");if(y>=0){r(y+2);continue}}var _=t.match(yu);if(_){r(_[0].length);continue}var b=t.match(mu);if(b){var w=l;r(b[0].length),i(b[1],w,l);continue}var x=function(){var e=t.match(vu);if(e){var n={tagName:e[1],attrs:[],start:l};r(e[0].length);for(var i,o;!(i=t.match(gu))&&(o=t.match(pu));)r(o[0].length),n.attrs.push(o);if(i)return n.unarySlash=i[1],r(i[0].length),n.end=l,n}}();if(x){!function(t){var e=t.tagName,r=t.unarySlash;u&&("p"===a&&cu(e)&&i(a),f(e)&&a===e&&i(e));for(var o=c(e)||!!r,l=t.attrs.length,p=new Array(l),h=0;h<l;h++){var d=t.attrs[h];wu&&-1===d[0].indexOf('""')&&(""===d[3]&&delete d[3],""===d[4]&&delete d[4],""===d[5]&&delete d[5]);var v=d[3]||d[4]||d[5]||"";p[h]={name:d[1],value:Br(v,n.shouldDecodeNewlines)}}o||(s.push({tag:e,lowerCasedTag:e.toLowerCase(),attrs:p}),a=e),n.start&&n.start(e,p,o,t.start,t.end)}(x),Mu(a,t)&&r(1);continue}}var E=void 0,O=void 0,C=void 0;if(g>=0){for(O=t.slice(g);!(mu.test(O)||vu.test(O)||_u.test(O)||bu.test(O)||(C=O.indexOf("<",1))<0);)g+=C,O=t.slice(g);E=t.substring(0,g),r(g)}g<0&&(E=t,t=""),n.chars&&E&&n.chars(E)}if(t===o){n.chars&&n.chars(t),"production"!==e.env.NODE_ENV&&!s.length&&n.warn&&n.warn('Mal-formatted tag at end of template: "'+t+'"');break}}i()}function Fr(t,n){function r(t){l||(l=!0,xu(t))}function i(t){t.pre&&(c=!1),Au(t.tag)&&(f=!1)}xu=n.warn||xn,Au=n.isPreTag||uo,ku=n.mustUseProp||uo,Nu=n.getTagNamespace||uo,Ou=En(n.modules,"transformNode"),Cu=En(n.modules,"preTransformNode"),Su=En(n.modules,"postTransformNode"),Eu=n.delimiters;var o,a,s=[],u=!1!==n.preserveWhitespace,c=!1,f=!1,l=!1;return Vr(t,{warn:xu,expectHTML:n.expectHTML,isUnaryTag:n.isUnaryTag,canBeLeftOpenTag:n.canBeLeftOpenTag,shouldDecodeNewlines:n.shouldDecodeNewlines,shouldKeepComment:n.comments,start:function(t,u,l){function p(t){"production"!==e.env.NODE_ENV&&("slot"!==t.tag&&"template"!==t.tag||r("Cannot use <"+t.tag+"> as component root element because it may contain multiple nodes."),t.attrsMap.hasOwnProperty("v-for")&&r("Cannot use v-for on stateful component root element because it renders multiple elements."))}var h=a&&a.ns||Nu(t);ko&&"svg"===h&&(u=si(u));var d={type:1,tag:t,attrsList:u,attrsMap:ii(u),parent:a,children:[]};h&&(d.ns=h),ai(d)&&!Uo()&&(d.forbidden=!0,"production"!==e.env.NODE_ENV&&xu("Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <"+t+">, as they will not be parsed."));for(var v=0;v<Cu.length;v++)Cu[v](d,n);if(c||(qr(d),d.pre&&(c=!0)),Au(d.tag)&&(f=!0),c)zr(d);else{Wr(d),Yr(d),Xr(d),Hr(d),d.plain=!d.key&&!u.length,Jr(d),Qr(d),ti(d);for(var g=0;g<Ou.length;g++)Ou[g](d,n);ei(d)}if(o?s.length||(o.if&&(d.elseif||d.else)?(p(d),Zr(o,{exp:d.elseif,block:d})):"production"!==e.env.NODE_ENV&&r("Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.")):(o=d,p(o)),a&&!d.forbidden)if(d.elseif||d.else)Kr(d,a);else if(d.slotScope){a.plain=!1;var m=d.slotTarget||'"default"';(a.scopedSlots||(a.scopedSlots={}))[m]=d}else a.children.push(d),d.parent=a;l?i(d):(a=d,s.push(d));for(var y=0;y<Su.length;y++)Su[y](d,n)},end:function(){var t=s[s.length-1],e=t.children[t.children.length-1];e&&3===e.type&&" "===e.text&&!f&&t.children.pop(),s.length-=1,a=s[s.length-1],i(t)},chars:function(n){if(!a)return void("production"!==e.env.NODE_ENV&&(n===t?r("Component template requires a root element, rather than just text."):(n=n.trim())&&r('text "'+n+'" outside root element will be ignored.')));if(!ko||"textarea"!==a.tag||a.attrsMap.placeholder!==n){var i=a.children;if(n=f||n.trim()?oi(a)?n:Ju(n):u&&i.length?" ":""){var o;!c&&" "!==n&&(o=Pr(n,Eu))?i.push({type:2,expression:o,text:n}):" "===n&&i.length&&" "===i[i.length-1].text||i.push({type:3,text:n})}}},comment:function(t){a.children.push({type:3,text:t,isComment:!0})}}),o}function qr(t){null!=Nn(t,"v-pre")&&(t.pre=!0)}function zr(t){var e=t.attrsList.length;if(e)for(var n=t.attrs=new Array(e),r=0;r<e;r++)n[r]={name:t.attrsList[r].name,value:JSON.stringify(t.attrsList[r].value)};else t.pre||(t.plain=!0)}function Hr(t){var n=kn(t,"key");n&&("production"!==e.env.NODE_ENV&&"template"===t.tag&&xu("<template> cannot be keyed. Place the key on real elements instead."),t.key=n)}function Jr(t){var e=kn(t,"ref");e&&(t.ref=e,t.refInFor=ni(t))}function Wr(t){var n;if(n=Nn(t,"v-for")){var r=n.match(Vu);if(!r)return void("production"!==e.env.NODE_ENV&&xu("Invalid v-for expression: "+n));t.for=r[2].trim();var i=r[1].trim(),o=i.match(Fu);o?(t.alias=o[1].trim(),t.iterator1=o[2].trim(),o[3]&&(t.iterator2=o[3].trim())):t.alias=i}}function Yr(t){var e=Nn(t,"v-if");if(e)t.if=e,Zr(t,{exp:e,block:t});else{null!=Nn(t,"v-else")&&(t.else=!0);var n=Nn(t,"v-else-if");n&&(t.elseif=n)}}function Kr(t,n){var r=Gr(n.children);r&&r.if?Zr(r,{exp:t.elseif,block:t}):"production"!==e.env.NODE_ENV&&xu("v-"+(t.elseif?'else-if="'+t.elseif+'"':"else")+" used on element <"+t.tag+"> without corresponding v-if.")}function Gr(t){for(var n=t.length;n--;){if(1===t[n].type)return t[n];"production"!==e.env.NODE_ENV&&" "!==t[n].text&&xu('text "'+t[n].text.trim()+'" between v-if and v-else(-if) will be ignored.'),t.pop()}}function Zr(t,e){t.ifConditions||(t.ifConditions=[]),t.ifConditions.push(e)}function Xr(t){null!=Nn(t,"v-once")&&(t.once=!0)}function Qr(t){if("slot"===t.tag)t.slotName=kn(t,"name"),"production"!==e.env.NODE_ENV&&t.key&&xu("`key` does not work on <slot> because slots are abstract outlets and can possibly expand into multiple elements. Use the key on a wrapping element instead.");else{var n=kn(t,"slot");n&&(t.slotTarget='""'===n?'"default"':n,Cn(t,"slot",n)),"template"===t.tag&&(t.slotScope=Nn(t,"scope"))}}function ti(t){var e;(e=kn(t,"is"))&&(t.component=e),null!=Nn(t,"inline-template")&&(t.inlineTemplate=!0)}function ei(t){var n,r,i,o,a,s,u,c=t.attrsList;for(n=0,r=c.length;n<r;n++)if(i=o=c[n].name,a=c[n].value,Bu.test(i))if(t.hasBindings=!0,s=ri(i),s&&(i=i.replace(Hu,"")),zu.test(i))i=i.replace(zu,""),a=bn(a),u=!1,s&&(s.prop&&(u=!0,"innerHtml"===(i=io(i))&&(i="innerHTML")),s.camel&&(i=io(i)),s.sync&&An(t,"update:"+io(i),jn(a,"$event"))),u||!t.component&&ku(t.tag,t.attrsMap.type,i)?On(t,i,a):Cn(t,i,a);else if(Uu.test(i))i=i.replace(Uu,""),An(t,i,a,s,!1,xu);else{i=i.replace(Bu,"");var f=i.match(qu),l=f&&f[1];l&&(i=i.slice(0,-(l.length+1))),Sn(t,i,o,a,l,s),"production"!==e.env.NODE_ENV&&"model"===i&&ui(t,a)}else{if("production"!==e.env.NODE_ENV){var p=Pr(a,Eu);p&&xu(i+'="'+a+'": Interpolation inside attributes has been removed. Use v-bind or the colon shorthand instead. For example, instead of <div id="{{ val }}">, use <div :id="val">.')}Cn(t,i,JSON.stringify(a))}}function ni(t){for(var e=t;e;){if(void 0!==e.for)return!0;e=e.parent}return!1}function ri(t){var e=t.match(Hu);if(e){var n={};return e.forEach(function(t){n[t.slice(1)]=!0}),n}}function ii(t){for(var n={},r=0,i=t.length;r<i;r++)"production"===e.env.NODE_ENV||!n[t[r].name]||ko||To||xu("duplicate attribute: "+t[r].name),n[t[r].name]=t[r].value;return n}function oi(t){return"script"===t.tag||"style"===t.tag}function ai(t){return"style"===t.tag||"script"===t.tag&&(!t.attrsMap.type||"text/javascript"===t.attrsMap.type)}function si(t){for(var e=[],n=0;n<t.length;n++){var r=t[n];Wu.test(r.name)||(r.name=r.name.replace(Yu,""),e.push(r))}return e}function ui(t,e){for(var n=t;n;)n.for&&n.alias===e&&xu("<"+t.tag+' v-model="'+e+'">: You are binding v-model directly to a v-for iteration alias. This will not be able to modify the v-for source array because writing to the alias is like modifying a function local variable. Consider using an array of objects and use v-model on an object property instead.'),n=n.parent}function ci(t,e){t&&(Tu=Ku(e.staticKeys||""),ju=e.isReservedTag||uo,li(t),pi(t,!1))}function fi(t){return d("type,tag,attrsList,attrsMap,plain,parent,children,attrs"+(t?","+t:""))}function li(t){if(t.static=hi(t),1===t.type){if(!ju(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var e=0,n=t.children.length;e<n;e++){var r=t.children[e];li(r),r.static||(t.static=!1)}if(t.ifConditions)for(var i=1,o=t.ifConditions.length;i<o;i++){var a=t.ifConditions[i].block;li(a),a.static||(t.static=!1)}}}function pi(t,e){if(1===t.type){if((t.static||t.once)&&(t.staticInFor=e),t.static&&t.children.length&&(1!==t.children.length||3!==t.children[0].type))return void(t.staticRoot=!0);if(t.staticRoot=!1,t.children)for(var n=0,r=t.children.length;n<r;n++)pi(t.children[n],e||!!t.for);if(t.ifConditions)for(var i=1,o=t.ifConditions.length;i<o;i++)pi(t.ifConditions[i].block,e)}}function hi(t){return 2!==t.type&&(3===t.type||!(!t.pre&&(t.hasBindings||t.if||t.for||to(t.tag)||!ju(t.tag)||di(t)||!Object.keys(t).every(Tu))))}function di(t){for(;t.parent;){if(t=t.parent,"template"!==t.tag)return!1;if(t.for)return!0}return!1}function vi(t,n,r){var i=n?"nativeOn:{":"on:{";for(var o in t){var a=t[o];"production"!==e.env.NODE_ENV&&"click"===o&&a&&a.modifiers&&a.modifiers.right&&r('Use "contextmenu" instead of "click.right" since right clicks do not actually fire "click" events.'),i+='"'+o+'":'+gi(o,a)+","}return i.slice(0,-1)+"}"}function gi(t,e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map(function(e){return gi(t,e)}).join(",")+"]";var n=Zu.test(e.value),r=Gu.test(e.value);if(e.modifiers){var i="",o="",a=[];for(var s in e.modifiers)tc[s]?(o+=tc[s],Xu[s]&&a.push(s)):a.push(s);a.length&&(i+=mi(a)),o&&(i+=o);return"function($event){"+i+(n?e.value+"($event)":r?"("+e.value+")($event)":e.value)+"}"}return n||r?e.value:"function($event){"+e.value+"}"}function mi(t){return"if(!('button' in $event)&&"+t.map(yi).join("&&")+")return null;"}function yi(t){var e=parseInt(t,10);if(e)return"$event.keyCode!=="+e;var n=Xu[t];return"_k($event.keyCode,"+JSON.stringify(t)+(n?","+JSON.stringify(n):"")+")"}function _i(t,n){"production"!==e.env.NODE_ENV&&n.modifiers&&mo("v-on without argument does not support modifiers."),t.wrapListeners=function(t){return"_g("+t+","+n.value+")"}}function bi(t,e){t.wrapData=function(n){return"_b("+n+",'"+t.tag+"',"+e.value+","+(e.modifiers&&e.modifiers.prop?"true":"false")+(e.modifiers&&e.modifiers.sync?",true":"")+")"}}function wi(t,e){var n=new nc(e);return{render:"with(this){return "+(t?xi(t,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function xi(t,e){if(t.staticRoot&&!t.staticProcessed)return Ei(t,e);if(t.once&&!t.onceProcessed)return Oi(t,e);if(t.for&&!t.forProcessed)return Ai(t,e);if(t.if&&!t.ifProcessed)return Ci(t,e);if("template"!==t.tag||t.slotTarget){if("slot"===t.tag)return Bi(t,e);var n;if(t.component)n=Vi(t.component,t,e);else{var r=t.plain?void 0:ki(t,e),i=t.inlineTemplate?null:$i(t,e,!0);n="_c('"+t.tag+"'"+(r?","+r:"")+(i?","+i:"")+")"}for(var o=0;o<e.transforms.length;o++)n=e.transforms[o](t,n);return n}return $i(t,e)||"void 0"}function Ei(t,e){return t.staticProcessed=!0,e.staticRenderFns.push("with(this){return "+xi(t,e)+"}"),"_m("+(e.staticRenderFns.length-1)+(t.staticInFor?",true":"")+")"}function Oi(t,n){if(t.onceProcessed=!0,t.if&&!t.ifProcessed)return Ci(t,n);if(t.staticInFor){for(var r="",i=t.parent;i;){if(i.for){r=i.key;break}i=i.parent}return r?"_o("+xi(t,n)+","+n.onceId+++","+r+")":("production"!==e.env.NODE_ENV&&n.warn("v-once can only be used inside v-for that is keyed. "),xi(t,n))}return Ei(t,n)}function Ci(t,e,n,r){return t.ifProcessed=!0,Si(t.ifConditions.slice(),e,n,r)}function Si(t,e,n,r){function i(t){return n?n(t,e):t.once?Oi(t,e):xi(t,e)}if(!t.length)return r||"_e()";var o=t.shift();return o.exp?"("+o.exp+")?"+i(o.block)+":"+Si(t,e,n,r):""+i(o.block)}function Ai(t,n,r,i){var o=t.for,a=t.alias,s=t.iterator1?","+t.iterator1:"",u=t.iterator2?","+t.iterator2:"";return"production"!==e.env.NODE_ENV&&n.maybeComponent(t)&&"slot"!==t.tag&&"template"!==t.tag&&!t.key&&n.warn("<"+t.tag+' v-for="'+a+" in "+o+'">: component lists rendered with v-for should have explicit keys. See https://vuejs.org/guide/list.html#key for more info.',!0),t.forProcessed=!0,(i||"_l")+"(("+o+"),function("+a+s+u+"){return "+(r||xi)(t,n)+"})"}function ki(t,e){var n="{",r=Ni(t,e);r&&(n+=r+","),t.key&&(n+="key:"+t.key+","),t.ref&&(n+="ref:"+t.ref+","),t.refInFor&&(n+="refInFor:true,"),t.pre&&(n+="pre:true,"),t.component&&(n+='tag:"'+t.tag+'",');for(var i=0;i<e.dataGenFns.length;i++)n+=e.dataGenFns[i](t);if(t.attrs&&(n+="attrs:{"+Fi(t.attrs)+"},"),t.props&&(n+="domProps:{"+Fi(t.props)+"},"),t.events&&(n+=vi(t.events,!1,e.warn)+","),t.nativeEvents&&(n+=vi(t.nativeEvents,!0,e.warn)+","),t.slotTarget&&(n+="slot:"+t.slotTarget+","),t.scopedSlots&&(n+=ji(t.scopedSlots,e)+","),t.model&&(n+="model:{value:"+t.model.value+",callback:"+t.model.callback+",expression:"+t.model.expression+"},"),t.inlineTemplate){var o=Ti(t,e);o&&(n+=o+",")}return n=n.replace(/,$/,"")+"}",t.wrapData&&(n=t.wrapData(n)),t.wrapListeners&&(n=t.wrapListeners(n)),n}function Ni(t,e){var n=t.directives;if(n){var r,i,o,a,s="directives:[",u=!1;for(r=0,i=n.length;r<i;r++){o=n[r],a=!0;var c=e.directives[o.name];c&&(a=!!c(t,o,e.warn)),a&&(u=!0,s+='{name:"'+o.name+'",rawName:"'+o.rawName+'"'+(o.value?",value:("+o.value+"),expression:"+JSON.stringify(o.value):"")+(o.arg?',arg:"'+o.arg+'"':"")+(o.modifiers?",modifiers:"+JSON.stringify(o.modifiers):"")+"},")}return u?s.slice(0,-1)+"]":void 0}}function Ti(t,n){var r=t.children[0];if("production"!==e.env.NODE_ENV&&(t.children.length>1||1!==r.type)&&n.warn("Inline-template components must have exactly one child element."),1===r.type){var i=wi(r,n.options);return"inlineTemplate:{render:function(){"+i.render+"},staticRenderFns:["+i.staticRenderFns.map(function(t){return"function(){"+t+"}"}).join(",")+"]}"}}function ji(t,e){return"scopedSlots:_u(["+Object.keys(t).map(function(n){return Ri(n,t[n],e)}).join(",")+"])"}function Ri(t,e,n){return e.for&&!e.forProcessed?Pi(t,e,n):"{key:"+t+",fn:function("+String(e.attrsMap.scope)+"){return "+("template"===e.tag?$i(e,n)||"void 0":xi(e,n))+"}}"}function Pi(t,e,n){var r=e.for,i=e.alias,o=e.iterator1?","+e.iterator1:"",a=e.iterator2?","+e.iterator2:"";return e.forProcessed=!0,"_l(("+r+"),function("+i+o+a+"){return "+Ri(t,e,n)+"})"}function $i(t,e,n,r,i){var o=t.children;if(o.length){var a=o[0];if(1===o.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag)return(r||xi)(a,e);var s=n?Di(o,e.maybeComponent):0,u=i||Ii;return"["+o.map(function(t){return u(t,e)}).join(",")+"]"+(s?","+s:"")}}function Di(t,e){for(var n=0,r=0;r<t.length;r++){var i=t[r];if(1===i.type){if(Li(i)||i.ifConditions&&i.ifConditions.some(function(t){return Li(t.block)})){n=2;break}(e(i)||i.ifConditions&&i.ifConditions.some(function(t){return e(t.block)}))&&(n=1)}}return n}function Li(t){return void 0!==t.for||"template"===t.tag||"slot"===t.tag}function Ii(t,e){return 1===t.type?xi(t,e):3===t.type&&t.isComment?Ui(t):Mi(t)}function Mi(t){return"_v("+(2===t.type?t.expression:qi(JSON.stringify(t.text)))+")"}function Ui(t){return"_e("+JSON.stringify(t.text)+")"}function Bi(t,e){var n=t.slotName||'"default"',r=$i(t,e),i="_t("+n+(r?","+r:""),o=t.attrs&&"{"+t.attrs.map(function(t){return io(t.name)+":"+t.value}).join(",")+"}",a=t.attrsMap["v-bind"];return!o&&!a||r||(i+=",null"),o&&(i+=","+o),a&&(i+=(o?"":",null")+","+a),i+")"}function Vi(t,e,n){var r=e.inlineTemplate?null:$i(e,n,!0);return"_c("+t+","+ki(e,n)+(r?","+r:"")+")"}function Fi(t){for(var e="",n=0;n<t.length;n++){var r=t[n];e+='"'+r.name+'":'+qi(r.value)+","}return e.slice(0,-1)}function qi(t){return t.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function zi(t){var e=[];return t&&Hi(t,e),e}function Hi(t,e){if(1===t.type){for(var n in t.attrsMap)if(Bu.test(n)){var r=t.attrsMap[n];r&&("v-for"===n?Wi(t,'v-for="'+r+'"',e):Uu.test(n)?Ji(r,n+'="'+r+'"',e):Ki(r,n+'="'+r+'"',e))}if(t.children)for(var i=0;i<t.children.length;i++)Hi(t.children[i],e)}else 2===t.type&&Ki(t.expression,t.text,e)}function Ji(t,e,n){var r=t.replace(ac,""),i=r.match(ic);i&&"$"!==r.charAt(i.index-1)&&n.push('avoid using JavaScript unary operator as property name: "'+i[0]+'" in expression '+e.trim()),Ki(t,e,n)}function Wi(t,e,n){Ki(t.for||"",e,n),Yi(t.alias,"v-for alias",e,n),Yi(t.iterator1,"v-for iterator",e,n),Yi(t.iterator2,"v-for iterator",e,n)}function Yi(t,e,n,r){"string"!=typeof t||oc.test(t)||r.push("invalid "+e+' "'+t+'" in expression: '+n.trim())}function Ki(t,e,n){try{new Function("return "+t)}catch(i){var r=t.replace(ac,"").match(rc);r?n.push('avoid using JavaScript keyword as property name: "'+r[0]+'" in expression '+e.trim()):n.push("invalid expression: "+e.trim())}}function Gi(t,e){try{return new Function(t)}catch(n){return e.push({err:n,code:t}),x}}function Zi(t){var n=Object.create(null);return function(r,i,o){if(i=i||{},"production"!==e.env.NODE_ENV)try{new Function("return 1")}catch(t){t.toString().match(/unsafe-eval|CSP/)&&mo("It seems you are using the standalone build of Vue.js in an environment with Content Security Policy that prohibits unsafe-eval. The template compiler cannot work in this environment. Consider relaxing the policy to allow unsafe-eval or pre-compiling your templates into render functions.")}var a=i.delimiters?String(i.delimiters)+r:r;if(n[a])return n[a];var s=t(r,i);"production"!==e.env.NODE_ENV&&(s.errors&&s.errors.length&&mo("Error compiling template:\n\n"+r+"\n\n"+s.errors.map(function(t){return"- "+t}).join("\n")+"\n",o),s.tips&&s.tips.length&&s.tips.forEach(function(t){return yo(t,o)}));var u={},c=[];return u.render=Gi(s.render,c),u.staticRenderFns=s.staticRenderFns.map(function(t){return Gi(t,c)}),"production"!==e.env.NODE_ENV&&(s.errors&&s.errors.length||!c.length||mo("Failed to generate render function:\n\n"+c.map(function(t){var e=t.err,n=t.code;return e.toString()+" in\n\n"+n+"\n"}).join("\n"),o)),n[a]=u}}function Xi(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}var Qi=Object.prototype.toString,to=d("slot,component",!0),eo=d("key,ref,slot,is"),no=Object.prototype.hasOwnProperty,ro=/-(\w)/g,io=m(function(t){return t.replace(ro,function(t,e){return e?e.toUpperCase():""})}),oo=m(function(t){return t.charAt(0).toUpperCase()+t.slice(1)}),ao=/\B([A-Z])/g,so=m(function(t){return t.replace(ao,"-$1").toLowerCase()}),uo=function(t,e,n){return!1},co=function(t){return t},fo="data-server-rendered",lo=["component","directive","filter"],po=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated"],ho={optionMergeStrategies:Object.create(null),silent:!1,productionTip:"production"!==e.env.NODE_ENV,devtools:"production"!==e.env.NODE_ENV,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:uo,isReservedAttr:uo,isUnknownElement:uo,getTagNamespace:x,parsePlatformTagName:co,mustUseProp:uo,_lifecycleHooks:po},vo=Object.freeze({}),go=/[^\w.$]/,mo=x,yo=x,_o=null;if("production"!==e.env.NODE_ENV){var bo="undefined"!=typeof console,wo=/(?:^|[-_])(\w)/g,xo=function(t){return t.replace(wo,function(t){return t.toUpperCase()}).replace(/[-_]/g,"")};mo=function(t,e){var n=e?Oo(e):"";ho.warnHandler?ho.warnHandler.call(null,t,e,n):bo&&!ho.silent&&console.error("[Vue warn]: "+t+n)},yo=function(t,e){bo&&!ho.silent&&console.warn("[Vue tip]: "+t+(e?Oo(e):""))},_o=function(t,e){if(t.$root===t)return"<Root>";var n="string"==typeof t?t:"function"==typeof t&&t.options?t.options.name:t._isVue?t.$options.name||t.$options._componentTag:t.name,r=t._isVue&&t.$options.__file;if(!n&&r){var i=r.match(/([^\/\\]+)\.vue$/);n=i&&i[1]}return(n?"<"+xo(n)+">":"<Anonymous>")+(r&&!1!==e?" at "+r:"")};var Eo=function(t,e){for(var n="";e;)e%2==1&&(n+=t),e>1&&(t+=t),e>>=1;return n},Oo=function(t){if(t._isVue&&t.$parent){for(var e=[],n=0;t;){if(e.length>0){var r=e[e.length-1];if(r.constructor===t.constructor){n++,t=t.$parent;continue}n>0&&(e[e.length-1]=[r,n],n=0)}e.push(t),t=t.$parent}return"\n\nfound in\n\n"+e.map(function(t,e){return""+(0===e?"---\x3e ":Eo(" ",5+2*e))+(Array.isArray(t)?_o(t[0])+"... ("+t[1]+" recursive calls)":_o(t))}).join("\n")}return"\n\n(found in "+_o(t)+")"}}var Co="__proto__"in{},So="undefined"!=typeof window,Ao=So&&window.navigator.userAgent.toLowerCase(),ko=Ao&&/msie|trident/.test(Ao),No=Ao&&Ao.indexOf("msie 9.0")>0,To=Ao&&Ao.indexOf("edge/")>0,jo=Ao&&Ao.indexOf("android")>0,Ro=Ao&&/iphone|ipad|ipod|ios/.test(Ao),Po=Ao&&/chrome\/\d+/.test(Ao)&&!To,$o={}.watch,Do=!1;if(So)try{var Lo={};Object.defineProperty(Lo,"passive",{get:function(){Do=!0}}),window.addEventListener("test-passive",null,Lo)}catch(t){}var Io,Mo,Uo=function(){return void 0===Io&&(Io=!So&&void 0!==n&&"server"===n.process.env.VUE_ENV),Io},Bo=So&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,Vo="undefined"!=typeof Symbol&&T(Symbol)&&"undefined"!=typeof Reflect&&T(Reflect.ownKeys),Fo=function(){function t(){r=!1;var t=n.slice(0);n.length=0;for(var e=0;e<t.length;e++)t[e]()}var e,n=[],r=!1;if("undefined"!=typeof Promise&&T(Promise)){var i=Promise.resolve(),o=function(t){console.error(t)};e=function(){i.then(t).catch(o),Ro&&setTimeout(x)}}else if(ko||"undefined"==typeof MutationObserver||!T(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())e=function(){setTimeout(t,0)};else{var a=1,s=new MutationObserver(t),u=document.createTextNode(String(a));s.observe(u,{characterData:!0}),e=function(){a=(a+1)%2,u.data=String(a)}}return function(t,i){var o;if(n.push(function(){if(t)try{t.call(i)}catch(t){N(t,i,"nextTick")}else o&&o(i)}),r||(r=!0,e()),!t&&"undefined"!=typeof Promise)return new Promise(function(t,e){o=t})}}();Mo="undefined"!=typeof Set&&T(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var qo=0,zo=function(){this.id=qo++,this.subs=[]};zo.prototype.addSub=function(t){this.subs.push(t)},zo.prototype.removeSub=function(t){v(this.subs,t)},zo.prototype.depend=function(){zo.target&&zo.target.addDep(this)},zo.prototype.notify=function(){for(var t=this.subs.slice(),e=0,n=t.length;e<n;e++)t[e].update()},zo.target=null;var Ho=[],Jo=Array.prototype,Wo=Object.create(Jo);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(t){var e=Jo[t];A(Wo,t,function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];var i,o=e.apply(this,n),a=this.__ob__;switch(t){case"push":case"unshift":i=n;break;case"splice":i=n.slice(2)}return i&&a.observeArray(i),a.dep.notify(),o})});var Yo=Object.getOwnPropertyNames(Wo),Ko={shouldConvert:!0},Go=function(t){if(this.value=t,this.dep=new zo,this.vmCount=0,A(t,"__ob__",this),Array.isArray(t)){(Co?P:$)(t,Wo,Yo),this.observeArray(t)}else this.walk(t)};Go.prototype.walk=function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)L(t,e[n],t[e[n]])},Go.prototype.observeArray=function(t){for(var e=0,n=t.length;e<n;e++)D(t[e])};var Zo=ho.optionMergeStrategies;"production"!==e.env.NODE_ENV&&(Zo.el=Zo.propsData=function(t,e,n,r){return n||mo('option "'+r+'" can only be used during instance creation with the `new` keyword.'),ta(t,e)}),Zo.data=function(t,n,r){return r?V(t,n,r):n&&"function"!=typeof n?("production"!==e.env.NODE_ENV&&mo('The "data" option should be a function that returns a per-instance value in component definitions.',r),t):V.call(this,t,n)},po.forEach(function(t){Zo[t]=F}),lo.forEach(function(t){Zo[t+"s"]=q}),Zo.watch=function(t,e){if(t===$o&&(t=void 0),e===$o&&(e=void 0),!e)return Object.create(t||null);if(!t)return e;var n={};b(n,t);for(var r in e){var i=n[r],o=e[r];i&&!Array.isArray(i)&&(i=[i]),n[r]=i?i.concat(o):Array.isArray(o)?o:[o]}return n},Zo.props=Zo.methods=Zo.inject=Zo.computed=function(t,e){if(!t)return e;var n=Object.create(null);return b(n,t),e&&b(n,e),n},Zo.provide=V;var Xo,Qo,ta=function(t,e){return void 0===e?t:e},ea=/^(String|Number|Boolean|Function|Symbol)$/;if("production"!==e.env.NODE_ENV){var na=So&&window.performance;na&&na.mark&&na.measure&&na.clearMarks&&na.clearMeasures&&(Xo=function(t){return na.mark(t)},Qo=function(t,e,n){na.measure(t,e,n),na.clearMarks(e),na.clearMarks(n),na.clearMeasures(t)})}var ra;if("production"!==e.env.NODE_ENV){var ia=d("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,require"),oa=function(t,e){mo('Property or method "'+e+'" is not defined on the instance but referenced during render. Make sure to declare reactive data properties in the data option.',t)},aa="undefined"!=typeof Proxy&&Proxy.toString().match(/native code/);if(aa){var sa=d("stop,prevent,self,ctrl,shift,alt,meta");ho.keyCodes=new Proxy(ho.keyCodes,{set:function(t,e,n){return sa(e)?(mo("Avoid overwriting built-in modifier in config.keyCodes: ."+e),!1):(t[e]=n,!0)}})}var ua={has:function(t,e){var n=e in t,r=ia(e)||"_"===e.charAt(0);return n||r||oa(t,e),n||!r}},ca={get:function(t,e){return"string"!=typeof e||e in t||oa(t,e),t[e]}};ra=function(t){if(aa){var e=t.$options,n=e.render&&e.render._withStripped?ca:ua;t._renderProxy=new Proxy(t,n)}else t._renderProxy=t}}var fa=function(t,e,n,r,i,o,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=i,this.ns=void 0,this.context=o,this.functionalContext=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},la={child:{}};la.child.get=function(){return this.componentInstance},Object.defineProperties(fa.prototype,la);var pa,ha=function(t){void 0===t&&(t="");var e=new fa;return e.text=t,e.isComment=!0,e},da=m(function(t){var e="&"===t.charAt(0);t=e?t.slice(1):t;var n="~"===t.charAt(0);t=n?t.slice(1):t;var r="!"===t.charAt(0);return t=r?t.slice(1):t,{name:t,plain:!(e||n||r),once:n,capture:r,passive:e}}),va=null,ga=!1,ma=100,ya=[],_a=[],ba={},wa={},xa=!1,Ea=!1,Oa=0,Ca=0,Sa=function(t,n,r,i){this.vm=t,t._watchers.push(this),i?(this.deep=!!i.deep,this.user=!!i.user,this.lazy=!!i.lazy,this.sync=!!i.sync):this.deep=this.user=this.lazy=this.sync=!1,this.cb=r,this.id=++Ca,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new Mo,this.newDepIds=new Mo,this.expression="production"!==e.env.NODE_ENV?n.toString():"","function"==typeof n?this.getter=n:(this.getter=k(n),this.getter||(this.getter=function(){},"production"!==e.env.NODE_ENV&&mo('Failed watching path: "'+n+'" Watcher only accepts simple dot-delimited paths. For full control, use a function instead.',t))),this.value=this.lazy?void 0:this.get()};Sa.prototype.get=function(){j(this);var t,e=this.vm;try{t=this.getter.call(e,e)}catch(t){if(!this.user)throw t;N(t,e,'getter for watcher "'+this.expression+'"')}finally{this.deep&&Bt(t),R(),this.cleanupDeps()}return t},Sa.prototype.addDep=function(t){var e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))},Sa.prototype.cleanupDeps=function(){for(var t=this,e=this.deps.length;e--;){var n=t.deps[e];t.newDepIds.has(n.id)||n.removeSub(t)}var r=this.depIds;this.depIds=this.newDepIds,this.newDepIds=r,this.newDepIds.clear(),r=this.deps,this.deps=this.newDeps,this.newDeps=r,this.newDeps.length=0},Sa.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():Ut(this)},Sa.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||u(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(t){N(t,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,e)}}},Sa.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Sa.prototype.depend=function(){for(var t=this,e=this.deps.length;e--;)t.deps[e].depend()},Sa.prototype.teardown=function(){var t=this;if(this.active){this.vm._isBeingDestroyed||v(this.vm._watchers,this);for(var e=this.deps.length;e--;)t.deps[e].removeSub(t);this.active=!1}};var Aa=new Mo,ka={enumerable:!0,configurable:!0,get:x,set:x},Na={lazy:!0},Ta={init:function(t,e,n,r){if(!t.componentInstance||t.componentInstance._isDestroyed){(t.componentInstance=ae(t,va,n,r)).$mount(e?t.elm:void 0,e)}else if(t.data.keepAlive){var i=t;Ta.prepatch(i,i)}},prepatch:function(t,e){var n=e.componentOptions;Nt(e.componentInstance=t.componentInstance,n.propsData,n.listeners,e,n.children)},insert:function(t){var e=t.context,n=t.componentInstance;n._isMounted||(n._isMounted=!0,Pt(n,"mounted")),t.data.keepAlive&&(e._isMounted?It(n):jt(n,!0))},destroy:function(t){var e=t.componentInstance;e._isDestroyed||(t.data.keepAlive?Rt(e,!0):e.$destroy())}},ja=Object.keys(Ta),Ra=1,Pa=2,$a=0;!function(t){t.prototype._init=function(t){var n=this;n._uid=$a++;var r,i;"production"!==e.env.NODE_ENV&&ho.performance&&Xo&&(r="vue-perf-init:"+n._uid,i="vue-perf-end:"+n._uid,Xo(r)),n._isVue=!0,t&&t._isComponent?Oe(n,t):n.$options=Y(Ce(n.constructor),t||{},n),"production"!==e.env.NODE_ENV?ra(n):n._renderProxy=n,n._self=n,At(n),bt(n),Ee(n),Pt(n,"beforeCreate"),ee(n),qt(n),te(n),Pt(n,"created"),"production"!==e.env.NODE_ENV&&ho.performance&&Xo&&(n._name=_o(n,!1),Xo(i),Qo(n._name+" init",r,i)),n.$options.el&&n.$mount(n.$options.el)}}(ke),function(t){var n={};n.get=function(){return this._data};var r={};r.get=function(){return this._props},"production"!==e.env.NODE_ENV&&(n.set=function(t){mo("Avoid replacing instance root $data. Use nested data properties instead.",this)},r.set=function(){mo("$props is readonly.",this)}),Object.defineProperty(t.prototype,"$data",n),Object.defineProperty(t.prototype,"$props",r),t.prototype.$set=I,t.prototype.$delete=M,t.prototype.$watch=function(t,e,n){var r=this;if(c(e))return Qt(r,t,e,n);n=n||{},n.user=!0;var i=new Sa(r,t,e,n);return n.immediate&&e.call(r,i.value),function(){i.teardown()}}}(ke),function(t){var n=/^hook:/;t.prototype.$on=function(t,e){var r=this,i=this;if(Array.isArray(t))for(var o=0,a=t.length;o<a;o++)r.$on(t[o],e);else(i._events[t]||(i._events[t]=[])).push(e),n.test(t)&&(i._hasHookEvent=!0);return i},t.prototype.$once=function(t,e){function n(){r.$off(t,n),e.apply(r,arguments)}var r=this;return n.fn=e,r.$on(t,n),r},t.prototype.$off=function(t,e){var n=this,r=this;if(!arguments.length)return r._events=Object.create(null),r;if(Array.isArray(t)){for(var i=0,o=t.length;i<o;i++)n.$off(t[i],e);return r}var a=r._events[t];if(!a)return r;if(1===arguments.length)return r._events[t]=null,r;if(e)for(var s,u=a.length;u--;)if((s=a[u])===e||s.fn===e){a.splice(u,1);break}return r},t.prototype.$emit=function(t){var n=this;if("production"!==e.env.NODE_ENV){var r=t.toLowerCase();r!==t&&n._events[r]&&yo('Event "'+r+'" is emitted in component '+_o(n)+' but the handler is registered for "'+t+'". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "'+so(t)+'" instead of "'+t+'".')}var i=n._events[t];if(i){i=i.length>1?_(i):i;for(var o=_(arguments,1),a=0,s=i.length;a<s;a++)try{i[a].apply(n,o)}catch(e){N(e,n,'event handler for "'+t+'"')}}return n}}(ke),function(t){t.prototype._update=function(t,e){var n=this;n._isMounted&&Pt(n,"beforeUpdate");var r=n.$el,i=n._vnode,o=va;va=n,n._vnode=t,i?n.$el=n.__patch__(i,t):(n.$el=n.__patch__(n.$el,t,e,!1,n.$options._parentElm,n.$options._refElm),n.$options._parentElm=n.$options._refElm=null),va=o,r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},t.prototype.$forceUpdate=function(){var t=this;t._watcher&&t._watcher.update()},t.prototype.$destroy=function(){var t=this;if(!t._isBeingDestroyed){Pt(t,"beforeDestroy"),t._isBeingDestroyed=!0;var e=t.$parent;!e||e._isBeingDestroyed||t.$options.abstract||v(e.$children,t),t._watcher&&t._watcher.teardown();for(var n=t._watchers.length;n--;)t._watchers[n].teardown();t._data.__ob__&&t._data.__ob__.vmCount--,t._isDestroyed=!0,t.__patch__(t._vnode,null),Pt(t,"destroyed"),t.$off(),t.$el&&(t.$el.__vue__=null)}}}(ke),function(t){t.prototype.$nextTick=function(t){return Fo(t,this)},t.prototype._render=function(){var t=this,n=t.$options,r=n.render,i=n.staticRenderFns,o=n._parentVnode;if(t._isMounted)for(var a in t.$slots){var s=t.$slots[a];s._rendered&&(t.$slots[a]=it(s,!0))}t.$scopedSlots=o&&o.data.scopedSlots||vo,i&&!t._staticTrees&&(t._staticTrees=[]),t.$vnode=o;var u;try{u=r.call(t._renderProxy,t.$createElement)}catch(n){N(n,t,"render function"),u="production"!==e.env.NODE_ENV&&t.$options.renderError?t.$options.renderError.call(t._renderProxy,t.$createElement,n):t._vnode}return u instanceof fa||("production"!==e.env.NODE_ENV&&Array.isArray(u)&&mo("Multiple root nodes returned from render function. Render function should return a single root node.",t),u=ha()),u.parent=o,u},t.prototype._o=_e,t.prototype._n=h,t.prototype._s=p,t.prototype._l=he,t.prototype._t=de,t.prototype._q=E,t.prototype._i=O,t.prototype._m=ye,t.prototype._f=ve,t.prototype._k=ge,t.prototype._b=me,t.prototype._v=nt,t.prototype._e=ha,t.prototype._u=St,t.prototype._g=xe}(ke);var Da=[String,RegExp,Array],La={name:"keep-alive",abstract:!0,props:{include:Da,exclude:Da},created:function(){this.cache=Object.create(null)},destroyed:function(){var t=this;for(var e in t.cache)Me(t.cache[e])},watch:{include:function(t){Ie(this.cache,this._vnode,function(e){return Le(t,e)})},exclude:function(t){Ie(this.cache,this._vnode,function(e){return!Le(t,e)})}},render:function(){var t=_t(this.$slots.default),e=t&&t.componentOptions;if(e){var n=De(e);if(n&&(this.include&&!Le(this.include,n)||this.exclude&&Le(this.exclude,n)))return t;var r=null==t.key?e.Ctor.cid+(e.tag?"::"+e.tag:""):t.key;this.cache[r]?t.componentInstance=this.cache[r].componentInstance:this.cache[r]=t,t.data.keepAlive=!0}return t}},Ia={KeepAlive:La};!function(t){var n={};n.get=function(){return ho},"production"!==e.env.NODE_ENV&&(n.set=function(){mo("Do not replace the Vue.config object, set individual fields instead.")}),Object.defineProperty(t,"config",n),t.util={warn:mo,extend:b,mergeOptions:Y,defineReactive:L},t.set=I,t.delete=M,t.nextTick=Fo,t.options=Object.create(null),lo.forEach(function(e){t.options[e+"s"]=Object.create(null)}),t.options._base=t,b(t.options.components,Ia),Ne(t),Te(t),je(t),$e(t)}(ke),Object.defineProperty(ke.prototype,"$isServer",{get:Uo}),Object.defineProperty(ke.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),ke.version="2.4.4";var Ma,Ua,Ba,Va,Fa,qa,za,Ha,Ja,Wa=d("style,class"),Ya=d("input,textarea,option,select,progress"),Ka=function(t,e,n){return"value"===n&&Ya(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},Ga=d("contenteditable,draggable,spellcheck"),Za=d("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Xa="http://www.w3.org/1999/xlink",Qa=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},ts=function(t){return Qa(t)?t.slice(6,t.length):""},es=function(t){return null==t||!1===t},ns={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},rs=d("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),is=d("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),os=function(t){return"pre"===t},as=function(t){return rs(t)||is(t)},ss=Object.create(null),us=d("text,number,password,search,email,tel,url"),cs=Object.freeze({createElement:Ke,createElementNS:Ge,createTextNode:Ze,createComment:Xe,insertBefore:Qe,removeChild:tn,appendChild:en,parentNode:nn,nextSibling:rn,tagName:on,setTextContent:an,setAttribute:sn}),fs={create:function(t,e){un(e)},update:function(t,e){t.data.ref!==e.data.ref&&(un(t,!0),un(e))},destroy:function(t){un(t,!0)}},ls=new fa("",{},[]),ps=["create","activate","update","remove","destroy"],hs={create:pn,update:pn,destroy:function(t){pn(t,ls)}},ds=Object.create(null),vs=[fs,hs],gs={create:mn,update:mn},ms={create:_n,update:_n},ys=/[\w).+\-_$\]]/,_s="__r",bs="__c",ws={create:Jn,update:Jn},xs={create:Wn,update:Wn},Es=m(function(t){var e={},n=/;(?![^(]*\))/g,r=/:(.+)/;return t.split(n).forEach(function(t){if(t){var n=t.split(r);n.length>1&&(e[n[0].trim()]=n[1].trim())}}),e}),Os=/^--/,Cs=/\s*!important$/,Ss=function(t,e,n){if(Os.test(e))t.style.setProperty(e,n);else if(Cs.test(n))t.style.setProperty(e,n.replace(Cs,""),"important");else{var r=ks(e);if(Array.isArray(n))for(var i=0,o=n.length;i<o;i++)t.style[r]=n[i];else t.style[r]=n}},As=["Webkit","Moz","ms"],ks=m(function(t){if(Ja=Ja||document.createElement("div").style,"filter"!==(t=io(t))&&t in Ja)return t;for(var e=t.charAt(0).toUpperCase()+t.slice(1),n=0;n<As.length;n++){var r=As[n]+e;if(r in Ja)return r}}),Ns={create:tr,update:tr},Ts=m(function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}}),js=So&&!No,Rs="transition",Ps="animation",$s="transition",Ds="transitionend",Ls="animation",Is="animationend";js&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&($s="WebkitTransition",Ds="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Ls="WebkitAnimation",Is="webkitAnimationEnd"));var Ms=So&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout,Us=/\b(transform|all)(,|$)/,Bs=So?{create:gr,activate:gr,remove:function(t,e){!0!==t.data.show?pr(t,e):e()}}:{},Vs=[gs,ms,ws,xs,Ns,Bs],Fs=Vs.concat(vs),qs=function(t){function n(t){return new fa(P.tagName(t).toLowerCase(),{},[],void 0,t)}function a(t,e){function n(){0==--n.listeners&&u(t)}return n.listeners=e,n}function u(t){var e=P.parentNode(t);i(e)&&P.removeChild(e,t)}function c(t,n,r,a,s){if(t.isRootInsert=!s,!f(t,n,r,a)){var u=t.data,c=t.children,l=t.tag;i(l)?("production"!==e.env.NODE_ENV&&(u&&u.pre&&$++,$||t.ns||ho.ignoredElements.length&&ho.ignoredElements.indexOf(l)>-1||!ho.isUnknownElement(l)||mo("Unknown custom element: <"+l+'> - did you register the component correctly? For recursive components, make sure to provide the "name" option.',t.context)),t.elm=t.ns?P.createElementNS(t.ns,l):P.createElement(l,t),y(t),v(t,c,n),i(u)&&m(t,n),h(r,t.elm,a),"production"!==e.env.NODE_ENV&&u&&u.pre&&$--):o(t.isComment)?(t.elm=P.createComment(t.text),h(r,t.elm,a)):(t.elm=P.createTextNode(t.text),h(r,t.elm,a))}}function f(t,e,n,r){var a=t.data;if(i(a)){var s=i(t.componentInstance)&&a.keepAlive;if(i(a=a.hook)&&i(a=a.init)&&a(t,!1,n,r),i(t.componentInstance))return l(t,e),o(s)&&p(t,e,n,r),!0}}function l(t,e){i(t.data.pendingInsert)&&(e.push.apply(e,t.data.pendingInsert),t.data.pendingInsert=null),t.elm=t.componentInstance.$el,g(t)?(m(t,e),y(t)):(un(t),e.push(t))}function p(t,e,n,r){for(var o,a=t;a.componentInstance;)if(a=a.componentInstance._vnode,i(o=a.data)&&i(o=o.transition)){for(o=0;o<j.activate.length;++o)j.activate[o](ls,a);e.push(a);break}h(n,t.elm,r)}function h(t,e,n){i(t)&&(i(n)?n.parentNode===t&&P.insertBefore(t,e,n):P.appendChild(t,e))}function v(t,e,n){if(Array.isArray(e))for(var r=0;r<e.length;++r)c(e[r],n,t.elm,null,!0);else s(t.text)&&P.appendChild(t.elm,P.createTextNode(t.text))}function g(t){for(;t.componentInstance;)t=t.componentInstance._vnode;return i(t.tag)}function m(t,e){for(var n=0;n<j.create.length;++n)j.create[n](ls,t);N=t.data.hook,i(N)&&(i(N.create)&&N.create(ls,t),i(N.insert)&&e.push(t))}function y(t){for(var e,n=t;n;)i(e=n.context)&&i(e=e.$options._scopeId)&&P.setAttribute(t.elm,e,""),n=n.parent;i(e=va)&&e!==t.context&&i(e=e.$options._scopeId)&&P.setAttribute(t.elm,e,"")}function _(t,e,n,r,i,o){for(;r<=i;++r)c(n[r],o,t,e)}function b(t){var e,n,r=t.data;if(i(r))for(i(e=r.hook)&&i(e=e.destroy)&&e(t),e=0;e<j.destroy.length;++e)j.destroy[e](t);if(i(e=t.children))for(n=0;n<t.children.length;++n)b(t.children[n])}function w(t,e,n,r){for(;n<=r;++n){var o=e[n];i(o)&&(i(o.tag)?(x(o),b(o)):u(o.elm))}}function x(t,e){if(i(e)||i(t.data)){var n,r=j.remove.length+1;for(i(e)?e.listeners+=r:e=a(t.elm,r),i(n=t.componentInstance)&&i(n=n._vnode)&&i(n.data)&&x(n,e),n=0;n<j.remove.length;++n)j.remove[n](t,e);i(n=t.data.hook)&&i(n=n.remove)?n(t,e):e()}else u(t.elm)}function E(t,n,o,a,s){for(var u,f,l,p,h=0,d=0,v=n.length-1,g=n[0],m=n[v],y=o.length-1,b=o[0],x=o[y],E=!s;h<=v&&d<=y;)r(g)?g=n[++h]:r(m)?m=n[--v]:cn(g,b)?(C(g,b,a),g=n[++h],b=o[++d]):cn(m,x)?(C(m,x,a),m=n[--v],x=o[--y]):cn(g,x)?(C(g,x,a),E&&P.insertBefore(t,g.elm,P.nextSibling(m.elm)),g=n[++h],x=o[--y]):cn(m,b)?(C(m,b,a),E&&P.insertBefore(t,m.elm,g.elm),m=n[--v],b=o[++d]):(r(u)&&(u=ln(n,h,v)),f=i(b.key)?u[b.key]:O(b,n,h,v),r(f)?c(b,a,t,g.elm):(l=n[f],"production"===e.env.NODE_ENV||l||mo("It seems there are duplicate keys that is causing an update error. Make sure each v-for item has a unique key."),cn(l,b)?(C(l,b,a),n[f]=void 0,E&&P.insertBefore(t,l.elm,g.elm)):c(b,a,t,g.elm)),b=o[++d]);h>v?(p=r(o[y+1])?null:o[y+1].elm,_(t,p,o,d,y,a)):d>y&&w(t,n,h,v)}function O(t,e,n,r){for(var o=n;o<r;o++){var a=e[o];if(i(a)&&cn(t,a))return o}}function C(t,e,n,a){if(t!==e){var s=e.elm=t.elm;if(o(t.isAsyncPlaceholder))return void(i(e.asyncFactory.resolved)?A(t.elm,e,n):e.isAsyncPlaceholder=!0);if(o(e.isStatic)&&o(t.isStatic)&&e.key===t.key&&(o(e.isCloned)||o(e.isOnce)))return void(e.componentInstance=t.componentInstance);var u,c=e.data;i(c)&&i(u=c.hook)&&i(u=u.prepatch)&&u(t,e);var f=t.children,l=e.children;if(i(c)&&g(e)){for(u=0;u<j.update.length;++u)j.update[u](t,e);i(u=c.hook)&&i(u=u.update)&&u(t,e)}r(e.text)?i(f)&&i(l)?f!==l&&E(s,f,l,n,a):i(l)?(i(t.text)&&P.setTextContent(s,""),_(s,null,l,0,l.length-1,n)):i(f)?w(s,f,0,f.length-1):i(t.text)&&P.setTextContent(s,""):t.text!==e.text&&P.setTextContent(s,e.text),i(c)&&i(u=c.hook)&&i(u=u.postpatch)&&u(t,e)}}function S(t,e,n){if(o(n)&&i(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r<e.length;++r)e[r].data.hook.insert(e[r])}function A(t,n,r){if(o(n.isComment)&&i(n.asyncFactory))return n.elm=t,n.isAsyncPlaceholder=!0,!0;if("production"!==e.env.NODE_ENV&&!k(t,n))return!1;n.elm=t;var a=n.tag,s=n.data,u=n.children;if(i(s)&&(i(N=s.hook)&&i(N=N.init)&&N(n,!0),i(N=n.componentInstance)))return l(n,r),!0;if(i(a)){if(i(u))if(t.hasChildNodes())if(i(N=s)&&i(N=N.domProps)&&i(N=N.innerHTML)){if(N!==t.innerHTML)return"production"===e.env.NODE_ENV||"undefined"==typeof console||D||(D=!0,console.warn("Parent: ",t),console.warn("server innerHTML: ",N),console.warn("client innerHTML: ",t.innerHTML)),!1}else{for(var c=!0,f=t.firstChild,p=0;p<u.length;p++){if(!f||!A(f,u[p],r)){c=!1;break}f=f.nextSibling}if(!c||f)return"production"===e.env.NODE_ENV||"undefined"==typeof console||D||(D=!0,console.warn("Parent: ",t),console.warn("Mismatching childNodes vs. VNodes: ",t.childNodes,u)),!1}else v(n,u,r);if(i(s))for(var h in s)if(!L(h)){m(n,r);break}}else t.data!==n.text&&(t.data=n.text);return!0}function k(t,e){return i(e.tag)?0===e.tag.indexOf("vue-component")||e.tag.toLowerCase()===(t.tagName&&t.tagName.toLowerCase()):t.nodeType===(e.isComment?8:3)}var N,T,j={},R=t.modules,P=t.nodeOps;for(N=0;N<ps.length;++N)for(j[ps[N]]=[],T=0;T<R.length;++T)i(R[T][ps[N]])&&j[ps[N]].push(R[T][ps[N]]);var $=0,D=!1,L=d("attrs,style,class,staticClass,staticStyle,key");return function(t,a,s,u,f,l){if(r(a))return void(i(t)&&b(t));var p=!1,h=[];if(r(t))p=!0,c(a,h,f,l);else{var d=i(t.nodeType);if(!d&&cn(t,a))C(t,a,h,u);else{if(d){if(1===t.nodeType&&t.hasAttribute(fo)&&(t.removeAttribute(fo),s=!0),o(s)){if(A(t,a,h))return S(a,h,!0),t;"production"!==e.env.NODE_ENV&&mo("The client-side rendered virtual DOM tree is not matching server-rendered content. This is likely caused by incorrect HTML markup, for example nesting block-level elements inside <p>, or missing <tbody>. Bailing hydration and performing full client-side render.")}t=n(t)}var v=t.elm,m=P.parentNode(v);if(c(a,h,v._leaveCb?null:m,P.nextSibling(v)),i(a.parent))for(var y=a.parent,_=g(a);y;){for(var x=0;x<j.destroy.length;++x)j.destroy[x](y);if(y.elm=a.elm,_){for(var E=0;E<j.create.length;++E)j.create[E](ls,y);var O=y.data.hook.insert;if(O.merged)for(var k=1;k<O.fns.length;k++)O.fns[k]()}y=y.parent}i(m)?w(m,[t],0,0):i(t.tag)&&b(t)}}return S(a,h,p),a.elm}}({nodeOps:cs,modules:Fs});No&&document.addEventListener("selectionchange",function(){var t=document.activeElement;t&&t.vmodel&&Er(t,"input")});var zs={inserted:function(t,e,n){"select"===n.tag?(mr(t,e,n.context),t._vOptions=[].map.call(t.options,br)):("textarea"===n.tag||us(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("change",xr),jo||(t.addEventListener("compositionstart",wr),t.addEventListener("compositionend",xr)),No&&(t.vmodel=!0)))},componentUpdated:function(t,e,n){if("select"===n.tag){mr(t,e,n.context);var r=t._vOptions,i=t._vOptions=[].map.call(t.options,br);if(i.some(function(t,e){return!E(t,r[e])})){(t.multiple?e.value.some(function(t){return _r(t,i)}):e.value!==e.oldValue&&_r(e.value,i))&&Er(t,"change")}}}},Hs={bind:function(t,e,n){var r=e.value;n=Or(n);var i=n.data&&n.data.transition,o=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&i?(n.data.show=!0,lr(n,function(){t.style.display=o})):t.style.display=r?o:"none"},update:function(t,e,n){var r=e.value;r!==e.oldValue&&(n=Or(n),n.data&&n.data.transition?(n.data.show=!0,r?lr(n,function(){t.style.display=t.__vOriginalDisplay}):pr(n,function(){t.style.display="none"})):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,i){i||(t.style.display=t.__vOriginalDisplay)}},Js={model:zs,show:Hs},Ws={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]},Ys={name:"transition",props:Ws,abstract:!0,render:function(t){var n=this,r=this.$options._renderChildren;if(r&&(r=r.filter(function(t){return t.tag||yt(t)}),r.length)){"production"!==e.env.NODE_ENV&&r.length>1&&mo("<transition> can only be used on a single element. Use <transition-group> for lists.",this.$parent);var i=this.mode;"production"!==e.env.NODE_ENV&&i&&"in-out"!==i&&"out-in"!==i&&mo("invalid <transition> mode: "+i,this.$parent);var o=r[0];if(kr(this.$vnode))return o;var a=Cr(o);if(!a)return o;if(this._leaving)return Ar(t,o);var u="__transition-"+this._uid+"-";a.key=null==a.key?a.isComment?u+"comment":u+a.tag:s(a.key)?0===String(a.key).indexOf(u)?a.key:u+a.key:a.key;var c=(a.data||(a.data={})).transition=Sr(this),f=this._vnode,l=Cr(f);if(a.data.directives&&a.data.directives.some(function(t){return"show"===t.name})&&(a.data.show=!0),l&&l.data&&!Nr(a,l)&&!yt(l)){var p=l&&(l.data.transition=b({},c));if("out-in"===i)return this._leaving=!0,ut(p,"afterLeave",function(){n._leaving=!1,n.$forceUpdate()}),Ar(t,o);if("in-out"===i){if(yt(a))return f;var h,d=function(){h()};ut(c,"afterEnter",d),ut(c,"enterCancelled",d),ut(p,"delayLeave",function(t){h=t})}}return o}}},Ks=b({tag:String,moveClass:String},Ws);delete Ks.mode;var Gs={props:Ks,render:function(t){for(var n=this.tag||this.$vnode.data.tag||"span",r=Object.create(null),i=this.prevChildren=this.children,o=this.$slots.default||[],a=this.children=[],s=Sr(this),u=0;u<o.length;u++){var c=o[u];if(c.tag)if(null!=c.key&&0!==String(c.key).indexOf("__vlist"))a.push(c),r[c.key]=c,(c.data||(c.data={})).transition=s;else if("production"!==e.env.NODE_ENV){var f=c.componentOptions,l=f?f.Ctor.options.name||f.tag||"":c.tag;mo("<transition-group> children must be keyed: <"+l+">")}}if(i){for(var p=[],h=[],d=0;d<i.length;d++){var v=i[d];v.data.transition=s,v.data.pos=v.elm.getBoundingClientRect(),r[v.key]?p.push(v):h.push(v)}this.kept=t(n,null,p),this.removed=h}return t(n,null,a)},beforeUpdate:function(){this.__patch__(this._vnode,this.kept,!1,!0),this._vnode=this.kept},updated:function(){var t=this.prevChildren,e=this.moveClass||(this.name||"v")+"-move";if(t.length&&this.hasMove(t[0].elm,e)){t.forEach(Tr),t.forEach(jr),t.forEach(Rr);var n=document.body;n.offsetHeight;t.forEach(function(t){if(t.data.moved){var n=t.elm,r=n.style;or(n,e),r.transform=r.WebkitTransform=r.transitionDuration="",n.addEventListener(Ds,n._moveCb=function t(r){r&&!/transform$/.test(r.propertyName)||(n.removeEventListener(Ds,t),n._moveCb=null,ar(n,e))})}})}},methods:{hasMove:function(t,e){if(!js)return!1;if(this._hasMove)return this._hasMove;var n=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach(function(t){nr(n,t)}),er(n,e),n.style.display="none",this.$el.appendChild(n);var r=ur(n);return this.$el.removeChild(n),this._hasMove=r.hasTransform}}},Zs={Transition:Ys,TransitionGroup:Gs};ke.config.mustUseProp=Ka,ke.config.isReservedTag=as,ke.config.isReservedAttr=Wa,ke.config.getTagNamespace=Je,ke.config.isUnknownElement=We,b(ke.options.directives,Js),b(ke.options.components,Zs),ke.prototype.__patch__=So?qs:x,ke.prototype.$mount=function(t,e){return t=t&&So?Ye(t):void 0,kt(this,t,e)},setTimeout(function(){ho.devtools&&(Bo?Bo.emit("init",ke):"production"!==e.env.NODE_ENV&&Po&&console[console.info?"info":"log"]("Download the Vue Devtools extension for a better development experience:\nhttps://github.com/vuejs/vue-devtools")),"production"!==e.env.NODE_ENV&&!1!==ho.productionTip&&So&&"undefined"!=typeof console&&console[console.info?"info":"log"]("You are running Vue in development mode.\nMake sure to turn on production mode when deploying for production.\nSee more tips at https://vuejs.org/guide/deployment.html")},0);var Xs,Qs=!!So&&function(t,e){var n=document.createElement("div");return n.innerHTML='<div a="'+t+'"/>',n.innerHTML.indexOf(e)>0}("\n","&#10;"),tu=/\{\{((?:.|\n)+?)\}\}/g,eu=/[-.*+?^${}()|[\]\/\\]/g,nu=m(function(t){var e=t[0].replace(eu,"\\$&"),n=t[1].replace(eu,"\\$&");return new RegExp(e+"((?:.|\\n)+?)"+n,"g")}),ru={staticKeys:["staticClass"],transformNode:$r,genData:Dr},iu={staticKeys:["staticStyle"],transformNode:Lr,genData:Ir},ou=[ru,iu],au={model:Mn,text:Mr,html:Ur},su=d("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),uu=d("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),cu=d("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),fu={expectHTML:!0,modules:ou,directives:au,isPreTag:os,isUnaryTag:su,mustUseProp:Ka,canBeLeftOpenTag:uu,isReservedTag:as,getTagNamespace:Je,staticKeys:function(t){return t.reduce(function(t,e){return t.concat(e.staticKeys||[])},[]).join(",")}(ou)},lu={decode:function(t){return Xs=Xs||document.createElement("div"),Xs.innerHTML=t,Xs.textContent}},pu=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,hu="[a-zA-Z_][\\w\\-\\.]*",du="((?:"+hu+"\\:)?"+hu+")",vu=new RegExp("^<"+du),gu=/^\s*(\/?)>/,mu=new RegExp("^<\\/"+du+"[^>]*>"),yu=/^<!DOCTYPE [^>]+>/i,_u=/^<!--/,bu=/^<!\[/,wu=!1;"x".replace(/x(.)?/g,function(t,e){wu=""===e});var xu,Eu,Ou,Cu,Su,Au,ku,Nu,Tu,ju,Ru=d("script,style,textarea",!0),Pu={},$u={"&lt;":"<","&gt;":">","&quot;":'"',"&amp;":"&","&#10;":"\n"},Du=/&(?:lt|gt|quot|amp);/g,Lu=/&(?:lt|gt|quot|amp|#10);/g,Iu=d("pre,textarea",!0),Mu=function(t,e){return t&&Iu(t)&&"\n"===e[0]},Uu=/^@|^v-on:/,Bu=/^v-|^@|^:/,Vu=/(.*?)\s+(?:in|of)\s+(.*)/,Fu=/\((\{[^}]*\}|[^,]*),([^,]*)(?:,([^,]*))?\)/,qu=/:(.*)$/,zu=/^:|^v-bind:/,Hu=/\.[^.]+/g,Ju=m(lu.decode),Wu=/^xmlns:NS\d+/,Yu=/^NS\d+:/,Ku=m(fi),Gu=/^\s*([\w$_]+|\([^)]*?\))\s*=>|^function\s*\(/,Zu=/^\s*[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['.*?']|\[".*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*\s*$/,Xu={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Qu=function(t){return"if("+t+")return null;"},tc={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Qu("$event.target !== $event.currentTarget"),ctrl:Qu("!$event.ctrlKey"),shift:Qu("!$event.shiftKey"),alt:Qu("!$event.altKey"),meta:Qu("!$event.metaKey"),left:Qu("'button' in $event && $event.button !== 0"),middle:Qu("'button' in $event && $event.button !== 1"),right:Qu("'button' in $event && $event.button !== 2")},ec={on:_i,bind:bi,cloak:x},nc=function(t){this.options=t,this.warn=t.warn||xn,this.transforms=En(t.modules,"transformCode"),this.dataGenFns=En(t.modules,"genData"),this.directives=b(b({},ec),t.directives);var e=t.isReservedTag||uo;this.maybeComponent=function(t){return!e(t.tag)},this.onceId=0,this.staticRenderFns=[]},rc=new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),ic=new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)"),oc=/[A-Za-z_$][\w$]*/,ac=/'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g,sc=function(t){return function(n){function r(r,i){var o=Object.create(n),a=[],s=[];if(o.warn=function(t,e){(e?s:a).push(t)},i){i.modules&&(o.modules=(n.modules||[]).concat(i.modules)),i.directives&&(o.directives=b(Object.create(n.directives),i.directives));for(var u in i)"modules"!==u&&"directives"!==u&&(o[u]=i[u])}var c=t(r,o);return"production"!==e.env.NODE_ENV&&a.push.apply(a,zi(c.ast)),c.errors=a,c.tips=s,c}return{compile:r,compileToFunctions:Zi(r)}}}(function(t,e){var n=Fr(t.trim(),e);ci(n,e);var r=wi(n,e);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}}),uc=sc(fu),cc=uc.compileToFunctions,fc=m(function(t){var e=Ye(t);return e&&e.innerHTML}),lc=ke.prototype.$mount;ke.prototype.$mount=function(t,n){if((t=t&&Ye(t))===document.body||t===document.documentElement)return"production"!==e.env.NODE_ENV&&mo("Do not mount Vue to <html> or <body> - mount to normal elements instead."),this;var r=this.$options;if(!r.render){var i=r.template;if(i)if("string"==typeof i)"#"===i.charAt(0)&&(i=fc(i),"production"===e.env.NODE_ENV||i||mo("Template element not found or is empty: "+r.template,this));else{if(!i.nodeType)return"production"!==e.env.NODE_ENV&&mo("invalid template option:"+i,this),this;i=i.innerHTML}else t&&(i=Xi(t));if(i){"production"!==e.env.NODE_ENV&&ho.performance&&Xo&&Xo("compile");var o=cc(i,{shouldDecodeNewlines:Qs,delimiters:r.delimiters,comments:r.comments},this),a=o.render,s=o.staticRenderFns;r.render=a,r.staticRenderFns=s,"production"!==e.env.NODE_ENV&&ho.performance&&Xo&&(Xo("compile end"),Qo(this._name+" compile","compile","compile end"))}}return lc.call(this,t,n)},ke.compile=cc,t.exports=ke}).call(e,n(2),n(1))},function(t,e,n){"use strict";function r(t){n(28)}Object.defineProperty(e,"__esModule",{value:!0});var i=n(33),o=n.n(i),a=n(91),s=n(10),u=r,c=s(o.a,a.a,u,null,null);e.default=c.exports},function(t,e,n){var r=n(29);"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);n(31)("4055d79c",r,!0)},function(t,e,n){e=t.exports=n(30)(void 0),e.push([t.i,"body,html{font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:100%}pre{font-family:Consolas,monaco,monospace;font-size:13px;margin:0}a,a:active,a:hover,a:visited{color:#357edd;text-decoration:none}a:hover{text-decoration:underline}.flex-fill{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;min-width:0;min-height:0}.darken-10:focus,.darken-10:hover{-webkit-box-shadow:inset 9999px 9999px rgba(0,0,0,.1);box-shadow:inset 9999px 9999px rgba(0,0,0,.1)}.darken-10:active{-webkit-box-shadow:inset 9999px 9999px rgba(0,0,0,.2);box-shadow:inset 9999px 9999px rgba(0,0,0,.2)}.hljs{background-color:#f4f4f4;padding:0 1rem}.box-shadow{-webkit-box-shadow:0 1px 4px -1px rgba(0,0,0,.4);box-shadow:0 1px 4px -1px rgba(0,0,0,.4)}",""])},function(t,e){function n(t,e){var n=t[1]||"",i=t[3];if(!i)return n;if(e&&"function"==typeof btoa){var o=r(i);return[n].concat(i.sources.map(function(t){return"/*# sourceURL="+i.sourceRoot+t+" */"})).concat([o]).join("\n")}return[n].join("\n")}function r(t){return"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t))))+" */"}t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var r=n(e,t);return e[2]?"@media "+e[2]+"{"+r+"}":r}).join("")},e.i=function(t,n){"string"==typeof t&&(t=[[null,t,""]]);for(var r={},i=0;i<this.length;i++){var o=this[i][0];"number"==typeof o&&(r[o]=!0)}for(i=0;i<t.length;i++){var a=t[i];"number"==typeof a[0]&&r[a[0]]||(n&&!a[2]?a[2]=n:n&&(a[2]="("+a[2]+") and ("+n+")"),e.push(a))}},e}},function(t,e,n){function r(t){for(var e=0;e<t.length;e++){var n=t[e],r=f[n.id];if(r){r.refs++;for(var i=0;i<r.parts.length;i++)r.parts[i](n.parts[i]);for(;i<n.parts.length;i++)r.parts.push(o(n.parts[i]));r.parts.length>n.parts.length&&(r.parts.length=n.parts.length)}else{for(var a=[],i=0;i<n.parts.length;i++)a.push(o(n.parts[i]));f[n.id]={id:n.id,refs:1,parts:a}}}}function i(){var t=document.createElement("style");return t.type="text/css",l.appendChild(t),t}function o(t){var e,n,r=document.querySelector('style[data-vue-ssr-id~="'+t.id+'"]');if(r){if(d)return v;r.parentNode.removeChild(r)}if(g){var o=h++;r=p||(p=i()),e=a.bind(null,r,o,!1),n=a.bind(null,r,o,!0)}else r=i(),e=s.bind(null,r),n=function(){r.parentNode.removeChild(r)};return e(t),function(r){if(r){if(r.css===t.css&&r.media===t.media&&r.sourceMap===t.sourceMap)return;e(t=r)}else n()}}function a(t,e,n,r){var i=n?"":r.css;if(t.styleSheet)t.styleSheet.cssText=m(e,i);else{var o=document.createTextNode(i),a=t.childNodes;a[e]&&t.removeChild(a[e]),a.length?t.insertBefore(o,a[e]):t.appendChild(o)}}function s(t,e){var n=e.css,r=e.media,i=e.sourceMap;if(r&&t.setAttribute("media",r),i&&(n+="\n/*# sourceURL="+i.sources[0]+" */",n+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(i))))+" */"),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}var u="undefined"!=typeof document;if("undefined"!=typeof DEBUG&&DEBUG&&!u)throw new Error("vue-style-loader cannot be used in a non-browser environment. Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.");var c=n(32),f={},l=u&&(document.head||document.getElementsByTagName("head")[0]),p=null,h=0,d=!1,v=function(){},g="undefined"!=typeof navigator&&/msie [6-9]\b/.test(navigator.userAgent.toLowerCase());t.exports=function(t,e,n){d=n;var i=c(t,e);return r(i),function(e){for(var n=[],o=0;o<i.length;o++){var a=i[o],s=f[a.id];s.refs--,n.push(s)}e?(i=c(t,e),r(i)):i=[];for(var o=0;o<n.length;o++){var s=n[o];if(0===s.refs){for(var u=0;u<s.parts.length;u++)s.parts[u]();delete f[s.id]}}}};var m=function(){var t=[];return function(e,n){return t[e]=n,t.filter(Boolean).join("\n")}}()},function(t,e){t.exports=function(t,e){for(var n=[],r={},i=0;i<e.length;i++){var o=e[i],a=o[0],s=o[1],u=o[2],c=o[3],f={id:t+":"+i,css:s,media:u,sourceMap:c};r[a]?r[a].parts.push(f):n.push(r[a]={id:a,parts:[f]})}return n}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var i=n(11),o=(r(i),n(13)),a=r(o),s=n(87),u=r(s),c=[],f=[],l=[],p=[],h=a.default.version,d="https://localhost:8080/api/v1";e.default={name:"app",components:{Example:u.default},watch:{api_key:function(t,e){a.default.setup(t,{baseUrl:this.base_url,debug:!0})},base_url:function(t,e){a.default.setup(this.api_key,{baseUrl:t,debug:!0})}},data:function(){return{version:h,api_key:"xtdkxpcjwzkpgkhkcmhx",base_url:d,list_examples:c,connection_examples:f,pipe_examples:l,task_examples:p}},mounted:function(){a.default.setup("xtdkxpcjwzkpgkhkcmhx",{baseUrl:d,debug:!0})}}},function(t,e,n){"use strict";var r=n(0),i=n(35),o=n(36),a=n(37),s=n(38),u=n(39),c=n(40),f=n(41),l=n(44),p=n(45),h=n(46),d=n(47),v=n(48),g=n(49),m=n(50),y=n(51),_=n(52),b=n(53),w=n(54),x=n(55),E=n(56),O=n(57),C=n(58),S=n(59),A=n(60),k=function(t,e){switch(r.get(t,"op","")){default:return C.toCode(t);case"create":return i.toCode(t,e);case"convert":return o.toCode(t,e);case"copy":return a.toCode(t,e);case"dump":return s.toCode(t,e);case"echo":return u.toCode(t,e);case"email":return c.toCode(t,e);case"execute":return f.toCode(t,e);case"filter":return l.toCode(t,e);case"foreach":return p.toCode(t,e);case"insert":return h.toCode(t,e);case"limit":return d.toCode(t,e);case"list":return m.toCode(t,e);case"merge":return v.toCode(t,e);case"mkdir":return g.toCode(t,e);case"read":return y.toCode(t,e);case"render":return _.toCode(t,e);case"request":return b.toCode(t,e);case"select":return w.toCode(t,e);case"sequence":return x.toCode(t,e);case"set":return E.toCode(t,e);case"sleep":return O.toCode(t,e);case"transform":return S.toCode(t,e);case"write":return A.toCode(t,e)}};t.exports={create:i,convert:o,copy:a,dump:s,echo:u,email:c,execute:f.execute,insert:h,filter:l,foreach:p,javascript:f.javascript,limit:d,list:m,merge:v,mkdir:g,python:f.python,read:y,render:_,request:b,select:w,sequence:x,set:E,sleep:O,task:C,transform:S,write:A,toCode:k}},function(t,e,n){"use strict";var r=n(0),i=function(t,e){if(Array.isArray(t))return{op:"create",params:{content_type:"application/vnd.flexio.table",columns:t}};var n={op:"create",params:{path:t}};return void 0!==e&&(Array.isArray(e)?n.params.columns=e:n.params.content_type=e),n};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=JSON.stringify(n.path)||void 0,o=JSON.stringify(n.content_type)||void 0,a=JSON.stringify(n.columns)||void 0;return void 0!==i?void 0!==a?"create("+i+", "+a+")":void 0!==o?"create("+i+", "+o+")":"create("+i+")":void 0!==a?"create("+a+")":void 0!==o?"":void 0},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t,e){return{op:"convert",params:{input:t,output:e}}};i.toCode=function(t,e){var n=r.get(t,"params.input",{}),i=r.get(t,"params.output",{});return"convert("+JSON.stringify(n)+", "+JSON.stringify(i)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t,e,n){var i={op:"copy",params:{from:t,to:e}};return r.isPlainObject(n)&&(i.params.options=n),i};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=JSON.stringify(n.from)||'""',o=JSON.stringify(n.to)||'""',a=n.hasOwnProperty("options")&&r.isPlainObject(n.options)?JSON.stringify(n.options):null,s="copy("+i+", "+o;return null!==a&&(s+=", "+a),s+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"dump",params:{msg:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"dump("+(JSON.stringify(n.msg)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"echo",params:{msg:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"echo("+(JSON.stringify(n.msg)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){if(!r.isPlainObject(t))throw"The first function parameter must be an object";if(!t.hasOwnProperty("to"))throw"The `to` parameter is required";if(!t.hasOwnProperty("body_text"))throw"The `body_text` parameter is required";return{op:"email",params:t}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"email("+JSON.stringify(n,null,2)+")"},t.exports=i},function(t,e,n){"use strict";(function(e,r){var i=n(0),o=function(){return void 0!==e},a=function(t){try{return o()?r(t,"utf8").toString("base64"):btoa(unescape(encodeURIComponent(t)))}catch(t){return t}},s=function(t){try{return o()?r.from(t,"base64").toString("utf8"):decodeURIComponent(escape(atob(t)))}catch(t){return t}},u=function(t){var e;try{e=t.toString(),e=e.substring(e.indexOf("{")+1,e.lastIndexOf("}"))}catch(t){e=""}return e},c=function(t){if(i.isString(t))return t;if(i.isFunction(t)){var e;if(0==t.length)return"exports.flexio_handler = function(context) "+(e=u(t));if(e=t.toString(),"function"==e.substring(0,8))e=e.slice(8);else{var n=e.indexOf("=>"),r=e.indexOf("{");n>=0&&n<r&&(e=e.replace("=>s*{","{"))}return"exports.flexio_handler = function"+e}},f=function(){var t,e,n,r=Array.from(arguments),o=i.get(r,"[0]",null),s=i.get(r,"[1]",null),u=i.get(r,"[2]",null),f={};"python"==o||"javascript"==o?(t=o,e=s,null!==e&&void 0!==e||(e=""),n=u):(t="javascript",e=o,n=s),"javascript"==t&&(e=c(e)),f.lang=t;var l=/^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/;return e.match(l)?f.path=e:f.code=a(e),null!==n&&(f.integrity=n),{op:"execute",params:f}},l=function(){var t=Array.from(arguments);return t.unshift("javascript"),f.apply(this,t)},p=function(){var t=Array.from(arguments);return t.unshift("python"),f.apply(this,t)},h=function(t){var e=i.get(t,"params",{}),n=e.lang||"",r=s(e.code||"");switch(n){case"javascript":return-1!=r.indexOf("exports.flexio_handler")?(r=r.replace("exports.flexio_handler =",""),"javascript("+r.trim()+")"):"javascript("+JSON.stringify(r.trim())+")";case"python":return"python(`\n"+r+"\n`)";default:return"execute("+JSON.stringify(n)+", `\n"+r+"\n`)"}};t.exports={execute:f,javascript:l,python:p,toCode:h}}).call(e,n(2),n(3).Buffer)},function(t,e,n){"use strict";function r(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===t[e-2]?2:"="===t[e-1]?1:0}function i(t){return 3*t.length/4-r(t)}function o(t){var e,n,i,o,a,s=t.length;o=r(t),a=new l(3*s/4-o),n=o>0?s-4:s;var u=0;for(e=0;e<n;e+=4)i=f[t.charCodeAt(e)]<<18|f[t.charCodeAt(e+1)]<<12|f[t.charCodeAt(e+2)]<<6|f[t.charCodeAt(e+3)],a[u++]=i>>16&255,a[u++]=i>>8&255,a[u++]=255&i;return 2===o?(i=f[t.charCodeAt(e)]<<2|f[t.charCodeAt(e+1)]>>4,a[u++]=255&i):1===o&&(i=f[t.charCodeAt(e)]<<10|f[t.charCodeAt(e+1)]<<4|f[t.charCodeAt(e+2)]>>2,a[u++]=i>>8&255,a[u++]=255&i),a}function a(t){return c[t>>18&63]+c[t>>12&63]+c[t>>6&63]+c[63&t]}function s(t,e,n){for(var r,i=[],o=e;o<n;o+=3)r=(t[o]<<16)+(t[o+1]<<8)+t[o+2],i.push(a(r));return i.join("")}function u(t){for(var e,n=t.length,r=n%3,i="",o=[],a=0,u=n-r;a<u;a+=16383)o.push(s(t,a,a+16383>u?u:a+16383));return 1===r?(e=t[n-1],i+=c[e>>2],i+=c[e<<4&63],i+="=="):2===r&&(e=(t[n-2]<<8)+t[n-1],i+=c[e>>10],i+=c[e>>4&63],i+=c[e<<2&63],i+="="),o.push(i),o.join("")}e.byteLength=i,e.toByteArray=o,e.fromByteArray=u;for(var c=[],f=[],l="undefined"!=typeof Uint8Array?Uint8Array:Array,p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=0,d=p.length;h<d;++h)c[h]=p[h],f[p.charCodeAt(h)]=h;f["-".charCodeAt(0)]=62,f["_".charCodeAt(0)]=63},function(t,e){e.read=function(t,e,n,r,i){var o,a,s=8*i-r-1,u=(1<<s)-1,c=u>>1,f=-7,l=n?i-1:0,p=n?-1:1,h=t[e+l];for(l+=p,o=h&(1<<-f)-1,h>>=-f,f+=s;f>0;o=256*o+t[e+l],l+=p,f-=8);for(a=o&(1<<-f)-1,o>>=-f,f+=r;f>0;a=256*a+t[e+l],l+=p,f-=8);if(0===o)o=1-c;else{if(o===u)return a?NaN:1/0*(h?-1:1);a+=Math.pow(2,r),o-=c}return(h?-1:1)*a*Math.pow(2,o-r)},e.write=function(t,e,n,r,i,o){var a,s,u,c=8*o-i-1,f=(1<<c)-1,l=f>>1,p=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,h=r?0:o-1,d=r?1:-1,v=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=f):(a=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-a))<1&&(a--,u*=2),e+=a+l>=1?p/u:p*Math.pow(2,1-l),e*u>=2&&(a++,u/=2),a+l>=f?(s=0,a=f):a+l>=1?(s=(e*u-1)*Math.pow(2,i),a+=l):(s=e*Math.pow(2,l-1)*Math.pow(2,i),a=0));i>=8;t[n+h]=255&s,h+=d,s/=256,i-=8);for(a=a<<i|s,c+=i;c>0;t[n+h]=255&a,h+=d,a/=256,c-=8);t[n+h-d]|=128*v}},function(t,e,n){"use strict";var r=n(0),i=function(t){if(r.isNil(t))throw"The `filter` parameter is required";return{op:"filter",params:{where:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"filter("+(JSON.stringify(n.where)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=n(5),o=function(t,e){var n={op:"foreach",params:{}};return("string"==typeof t||t instanceof String)&&(n.params.spec=t),i.isPipeObject(t)?n.params.run=t.pipe.task:i.isPipeObject(e)&&(n.params.run=e.pipe.task),n};o.toCode=function(t,e){var n=r.get(t,"params",{}),i=[];return n.hasOwnProperty("spec")&&i.push(JSON.stringify(n.spec)),n.hasOwnProperty("run")&&i.push(e.task.toCode(n.run,e)),"foreach("+i.join(", ")+")"},t.exports=o},function(t,e,n){"use strict";var r=n(0),i=function(t,e){var n;return n=Array.isArray(e)?e:[e],{op:"insert",params:{path:t,values:n}}};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=r.get(n,"path",void 0),o=r.get(n,"values",void 0);return Array.isArray(o)||(o=[o]),i=JSON.stringify(i),o=JSON.stringify(o),"insert("+i+", "+o+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"limit",params:{value:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"limit("+(JSON.stringify(n.value)||"")+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){if(Array.isArray(t))var e=t;else for(var e=[],n=0;n<arguments.length;++n)e.push(arguments[n]);return{op:"merge",params:{files:e}}};i.toCode=function(t,e){for(var n=r.get(t,"params",{}),i=r.get(n,"files",[]),o=0;o<i.length;++o)"string"==typeof i[o]||i[o]instanceof String?i[o]=JSON.stringify(i[o]):i[o]=e.merge.toCode(i[o],e);return"merge("+(i.length>=10?"["+i.join(", ")+"]":i.join(", "))+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"mkdir",params:{path:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"mkdir("+(JSON.stringify(n.path)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"list",params:{path:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"list("+(JSON.stringify(n.path)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"read",params:{path:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"read("+(JSON.stringify(n.path)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t,e){var n={};return r.isPlainObject(t)?n=t:r.isString(t)&&(n.url=t),r.isPlainObject(e)&&r.assign(n,e),{op:"render",params:n}};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=JSON.stringify(n.url)||"";return delete n.url,0==Object.keys(n).length?"render("+i+")":"render("+i+", "+JSON.stringify(n,null,2)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(){var t=Array.from(arguments),e=r.get(t,"[0]",""),n=r.get(t,"[1]",{});return n=r.isPlainObject(r.get(t,"[0]",{}))?r.get(t,"[0]",{}):r.assign({},{url:e},n),{op:"request",params:n}};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=r.get(n,"url",""),o=Object.keys(n);return 1==o.length&&"url"==o[0]?"request("+JSON.stringify(i)+")":"request("+JSON.stringify(n,null,2)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(){var t=Array.from(arguments);return 1==t.length&&Array.isArray(r.get(t,"[0]"))&&(t=r.get(t,"[0]",[])),{op:"select",params:{columns:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=JSON.stringify(n.columns)||"";return-1!=i.indexOf("[")&&-1!=i.indexOf("]")&&(i=i.substring(1,i.length-1)),"select("+i+")"},t.exports=i},function(t,e,n){"use strict";var r=(n(0),function(t){return{op:"sequence",params:{steps:t}}});r.toCode=function(t,e){for(var n=[],r=0;r<t.params.items.length;++r){var i=t.params.items[r],o=e.task.toCode(i,e);i.hasOwnProperty("params")&&i.params.hasOwnProperty("lang")&&"python"!=i.params.lang&&(o=o.replace(/\n/g,"\n  ")),n.push(o)}var n=["Flexio.pipe()"].concat(n);return n.join("\n  .")},t.exports=r},function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=n(0),o=n(5),a=function(t,e){return o.isPipeObject(e)&&(e=e.pipe.task),{op:"set",params:{var:t,value:e}}};a.toCode=function(t,e){var n=i.get(t,"params",{}),o=i.get(n,"variable",""),a=i.get(n,"value","");return o=JSON.stringify(o),a="object"===(void 0===a?"undefined":r(a))&&null!==a&&a.hasOwnProperty("op")?e.task.toCode(a,e):JSON.stringify(a),"set("+o+", "+a+")"},t.exports=a},function(t,e,n){"use strict";var r=n(0),i=function(t){return t=r.defaultTo(t,10),{op:"sleep",params:{value:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"sleep("+(JSON.stringify(n.value)||"")+")"},t.exports=i},function(t,e,n){"use strict";var r=(n(0),function(t){return t});r.toCode=function(t,e){return"task("+JSON.stringify(t,null,2)+")"},t.exports=r},function(t,e,n){"use strict";var r=n(0),i=function(t){var e=Array.from(arguments),n={operations:[]},i={},o=[],a=r.get(e,"[0]");return r.isPlainObject(a)?(1==e.length&&r.has(a,"operations")?(i=r.pick(a,["columns","operations"]),i=r.assign(n,i)):(o=[].concat(e),i={operations:o}),{op:"transform",params:i}):{op:"transform",params:{columns:void 0,operations:o}}};i.toCode=function(t,e){var n=t.hasOwnProperty("params")?t.params:{};return!n.hasOwnProperty("columns")&&n.hasOwnProperty("operations")&&Array.isArray(n.operations)&&1==n.operations.length?"transform("+JSON.stringify(n.operations[0])+")":"transform("+JSON.stringify(n)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"write",params:{path:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"write("+(JSON.stringify(n.path)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0);n(5);t.exports={},t.exports.getConnectionsObject=function(t){return new function(){this.create=function(e,n){var i;if(r.isPlainObject(e))i=e;else{if(!(e instanceof t.connection))throw"Unknown connection object type";i=e.connection}return new Promise(function(e,r){t.http().post("/connections",i).then(function(i){t.util.callbackAdapter(null,i.data,e,r,n)}).catch(function(i){t.util.debug("Flexio.connections.create(): Failed."),t.util.callbackAdapter(i,null,e,r,n)})})},this.list=function(e){var n=Array.from(arguments),e=r.get(n,"[0]");return new Promise(function(n,i){t.util.debug("Requesting Connections..."),t.http().get("/connections").then(function(o){var a=r.get(o,"data",[]);t.util.debug("Success!"),t.util.callbackAdapter(null,a,n,i,e)}).catch(function(r){t.util.debug("Failed."),t.util.callbackAdapter(r,null,n,i,e)})})}}}},function(t,e,n){"use strict";var r=n(0);t.exports={},t.exports.getPipesObject=function(t){return new function(){this.create=function(e,n){var i;if(r.isPlainObject(e))i=e;else{if(!(e instanceof t.pipe))throw"Unknown pipe object type";i=e.pipe}return new Promise(function(e,r){t.http().post("/pipes",i).then(function(i){t.util.callbackAdapter(null,i.data,e,r,n)}).catch(function(i){t.util.debug("Flexio.pipes.create(): Failed."),t.util.callbackAdapter(i,null,e,r,n)})})},this.list=function(e){var n=Array.from(arguments),e=r.get(n,"[0]");return new Promise(function(n,i){t.util.debug("Requesting Pipes..."),t.http().get("/pipes").then(function(o){var a=r.get(o,"data",[]);t.util.debug("Success!"),t.util.callbackAdapter(null,a,n,i,e)}).catch(function(r){t.util.debug("Failed."),t.util.callbackAdapter(r,null,n,i,e)})})},this.run=function(){var e=Array.from(arguments);e.push(null,null,null);var n,i,o={},a=null;e[0]instanceof t.pipe?(i=r.get(e[0],"pipe.eid",""),a=r.get(e[0],"pipe.task","")):Array.isArray(e[0])?(i="",a=e[0]):i=e[0],r.isPlainObject(e[1])&&(o=e[1]),n=r.isFunction(e[1])?e[1]:r.isFunction(e[2])?e[2]:null;var s=function(e,n){return{contentType:n,buffer:e,get blob(){return new Blob([this.buffer],{type:n})},get text(){return t.util.arrayBufferToString(this.buffer)},get data(){try{return JSON.parse(t.util.arrayBufferToString(this.buffer))}catch(t){return null}}}};return new Promise(function(e,u){if(t.util.debug("Running Pipe `"+(0==i.length?"[Pipe Object/Task Array]":i)+"`..."),0==i.length){var c={name:"SDK Pipe",description:"SDK Pipe",task:a,process_mode:"R"};t.http().post("/processes",c).then(function(i){var a=r.get(i,"data",{}),c=r.get(a,"eid","");t.util.debug("Created Process.");var f={method:"post",url:"/processes/"+c+"/run",responseType:"arraybuffer"};o.hasOwnProperty("data")&&(f.data=o.data),o.hasOwnProperty("query")&&(f.params=o.query),t.http().request(f).then(function(i){t.util.debug("Process Complete.");var o=r.get(i,"headers.content-type","text/plain"),a=s(i.data,o);t.util.callbackAdapter(null,a,e,u,n)}).catch(function(r){t.util.debug("Process Run Failed. "+r),t.util.callbackAdapter(r,null,e,u,n)})}).catch(function(r){t.util.debug("Process Create Failed. "+r),t.util.callbackAdapter(r,null,e,u,n)})}else{var f={method:"post",url:"/pipes/"+i+"/run",responseType:"arraybuffer"};o.hasOwnProperty("data")&&(f.data=o.data),o.hasOwnProperty("query")&&(f.params=o.query),o.hasOwnProperty("contentType")?f.headers={"Content-Type":o.contentType}:f.hasOwnProperty("data")&&(r.isPlainObject(f.data)||(r.isString(f.data)?f.headers={"Content-Type":"text/plain"}:f.headers={"Content-Type":"application/octet-stream"}));t.http()(f).then(function(i){t.util.debug("Process Complete.");var o=r.get(i,"headers.content-type","text/plain"),a=s(i.data,o);t.util.callbackAdapter(null,a,e,u,n)}).catch(function(r){t.util.debug("Pipe Run Call Failed. "+r),t.util.callbackAdapter(r,null,e,u,n)})}})}}}},function(t,e){t.exports={name:"flexio-sdk-js",version:"1.20.2",description:"Javascript SDK for managing Flex.io resources and services",author:"David Z. Williams <dave@flex.io>","--main":"dist/flexio-node.js",main:"src/main.js","--browser":"src/main.js",browser:"dist/flexio.min.js",scripts:{dev:"cross-env build=development webpack-dev-server --config ./build/webpack.dev.js --open --inline --https --hot","build:debug":"cross-env build=debug webpack --config build/webpack.dist.js","build:release":"cross-env build=production webpack --config build/webpack.dist.js","build:examples":"webpack --config build/webpack.examples.js",build:"npm run build:debug && npm run build:release && npm run build:examples",test:"jest"},repository:{type:"git",url:"git+https://github.com/flexiodata/flexio-sdk-js.git"},keywords:[],license:"Apache-2.0",bugs:{url:"https://github.com/flexiodata/flexio-sdk-js/issues"},homepage:"https://github.com/flexiodata/flexio-sdk-js/",dependencies:{},devDependencies:{autoprefixer:"^7.1.4","babel-core":"^6.26.0","babel-loader":"^7.1.2","babel-plugin-transform-es2015-destructuring":"^6.23.0","babel-plugin-transform-es2015-parameters":"^6.24.1","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-es2015":"^6.24.1","babel-preset-stage-2":"^6.24.1","cross-env":"^5.0.5","css-loader":"^0.28.7","deep-assign":"^2.0.0",jest:"^22.4.2",vue:"^2.4.4","vue-loader":"^13.0.4","vue-simple-spinner":"^1.2.7","vue-style-loader":"^3.0.3","vue-template-compiler":"^2.4.4",webpack:"^3.5.5","webpack-bundle-analyzer":"^2.11.1","webpack-dev-server":"^2.8.2"}}},function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=n(0);t.exports={},t.exports.getPipeConstructor=function(t){return function(e){if(!(this instanceof t.pipe))return new t.pipe(e);var n=i.assign(this,{pipe:{name:"Untitled",description:"",task:{op:"sequence",params:{items:[]}}},processes:[],_params:{},loading:!1,saving:!1,running:!1,getJSON:function(){return i.assign({},this.pipe)},getProcesses:function(){return[].concat(this.processes)},getLastProcess:function(){return i.last(this.processes)},addTask:function(t){return this.pipe.task.params.items.push(t),this},clearTasks:function(){return this.pipe.task.params.items=[],this},getTasks:function(){return this.pipe.task.params.items},load:function(){var e=this,n=arguments,r=Array.from(arguments),o=i.get(r,"[0]"),a=i.get(r,"[1]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){e.load.apply(e,n)},50),this):i.isNil(o)?t.util.debug("The `identifier` parameter is required. Either the pipe's eid or pipe's alias may be used."):(this.loading=!0,t.util.debug("Loading Pipe `"+o+"`..."),t.http().get("/pipes/"+o).then(function(n){var r=i.get(n,"data",{});e.pipe=i.assign({},r),e.loading=!1,t.util.debug("Pipe Loaded."),"function"==typeof a&&a.call(e,null,r)}).catch(function(n){e.loading=!1,t.util.debug("Pipe Load Failed. "),"function"==typeof a&&a.call(e,n,null)}),this)},save:function(){var e=this,n=arguments,r=Array.from(arguments),o=i.get(r,"[0]"),a=i.get(r,"[0]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){e.save.apply(e,n)},50),this):(i.isPlainObject(o)&&(i.assign(this.pipe,i.pick(o,["name","description","ename"])),a=i.get(r,"[1]")),this.saving=!0,t.util.debug("Saving Pipe `"+i.get(this.pipe,"name","Untitled Pipe")+"`..."),t.http().post("/pipes",this.pipe).then(function(n){var r=i.get(n,"data",{});e.pipe=i.assign({},r),e.saving=!1,t.util.debug("Pipe Saved."),"function"==typeof a&&a.call(e,null,e.pipe)}).catch(function(n){e.saving=!1,t.util.debug("Pipe Save Failed."),"function"==typeof a&&a.call(e,n,null)}),this)},run:function(){var e=Array.from(arguments);return e.unshift(this),t.pipes.run.apply(null,e)},params:function(t){return this._params=i.assign({},this.getParams(),t),this},getParams:function(){return i.assign({},this._params)},toCode:function(e){return t.task.toCode(this.pipe.task,t)}});return function(e){for(var n in t.task)t.task.hasOwnProperty(n)&&"toCode"!=n&&e(n,t.task[n])}(function(t,e){n[t]=function(){return n.addTask(e.apply(n,arguments))}}),void 0!==e&&("string"==typeof e||e instanceof String?n.pipe.eid=e:"object"===(void 0===e?"undefined":r(e))&&(e.hasOwnProperty("pipe")?n.pipe=JSON.parse(JSON.stringify(e.pipe)):e.hasOwnProperty("task")?n.pipe=JSON.parse(JSON.stringify(e)):e.hasOwnProperty("op")&&(n.pipe.task=e))),n}}},function(t,e,n){"use strict";var r=n(0),i=["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"],o=["","basic","bearer","oauth2"];t.exports={},t.exports.getConnectionConstructor=function(t){return function(){return this instanceof t.connection?r.assign(this,{connection:{name:"Untitled",description:"",connection_type:"http",connection_info:{method:"",url:"",auth:"",username:"",password:"",token:"",access_token:"",refresh_token:"",expires:"",data:{},headers:{}}},loading:!1,saving:!1,running:!1,getJSON:function(){return r.assign({},this.connection)},name:function(t){return this.connection.name=t,this},description:function(t){return this.connection.description=t,this},method:function(){var t=Array.from(arguments),e=r.get(t,"[0]");if(!r.isString(e))throw"Invalid/empty method";if(-1==i.indexOf(e))throw"Invalid method";return this._setInfo("method",e)},url:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("url",e):this},auth:function(){var t=Array.from(arguments),e=r.get(t,"[0]");if(!r.isString(e))throw"Invalid/empty auth";if(-1==o.indexOf(e))throw"Invalid auth";return"none"==e&&(e=""),this._setInfo("auth",e)},username:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("username",e):this},password:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("password",e):this},token:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("token",e):this},accessToken:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("access_token",e):this},refreshToken:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("refresh_token",e):this},expires:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isNumber(e)&&(e=""+e),r.isString(e)?this._setInfo("expires",e):this},data:function(){var t=Array.from(arguments),e=r.get(t,"[0]");if(!r.isPlainObject(e))return this;var n=this._getInfo("data",{});return e=r.assign({},n,e),this._setInfo("data",e)},headers:function(){var t=Array.from(arguments),e=r.get(t,"[0]");if(!r.isPlainObject(e))return this;var n=this._getInfo("headers",{});return e=r.assign({},n,e),this._setInfo("headers",e)},load:function(){var e=this,n=arguments,i=Array.from(arguments),o=r.get(i,"[0]"),a=r.get(i,"[1]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){e.load.apply(e,n)},50),this):r.isNil(o)?t.util.debug("The `identifier` parameter is required. Either the connection's eid or connection's alias may be used."):(this.loading=!0,t.util.debug("Loading Connection `"+o+"`..."),t.http().get("/connections/"+o).then(function(n){var i=r.get(n,"data",{});e.connection=r.assign({},i),e.loading=!1,t.util.debug("Connection Loaded."),"function"==typeof a&&a.call(e,null,i)}).catch(function(n){e.loading=!1,t.util.debug("Connection Load Failed."),"function"==typeof a&&a.call(e,n,null)}),this)},save:function(){var e=this,n=arguments,i=Array.from(arguments),o=r.get(i,"[0]"),a=r.get(i,"[0]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){e.save.apply(e,n)},50),this):(r.isPlainObject(o)&&(r.assign(this.connection,r.pick(o,["name","description","ename"])),a=r.get(i,"[1]")),this.saving=!0,t.util.debug("Saving Connection `"+r.get(this.connection,"name","Untitled Connection")+"`..."),t.http().post("/connections",this.connection).then(function(n){var i=r.get(n,"data",{});e.connection=r.assign({},i),e.saving=!1,t.util.debug("Connection Saved."),"function"==typeof a&&a.call(e,null,e.connection)}).catch(function(n){e.saving=!1,t.util.debug("Connection Save Failed."),"function"==typeof a&&a.call(e,n,null)}),this)},_getInfo:function(t,e){return r.get(this.connection,"connection_info."+t,e)},_setInfo:function(t,e){return this.connection.hasOwnProperty("connection_info")||(this.connection.connection_info={}),this.connection.connection_info[t]=e,this}}):new t.connection}}},function(t,e,n){"use strict";function r(t){this.options=i.isPlainObject(t)?t:{},this.post=function(t,e,n){return this.request(i.assign(n||{},{method:"POST",url:t,data:e}))},this.get=function(t,e){return this.request(i.assign(e||{},{method:"GET",url:t}))},this.request=function(t){var e=i.get(this.options,"baseURL",""),r=i.get(t,"url","");return-1!=r.indexOf("://")?e=r:(r="/"==r.substr(0,1)?r.substr(1):r,"/"!=e.slice(-1)&&(e+="/"),e+=r),t=i.assign({},t,{url:e}),o.isNodeJs()?n(67).apply(this,[t]):n(86).apply(this,[t])}}var i=n(0),o=n(5);t.exports={create:function(t){return new r(t)}}},function(t,e,n){"use strict";(function(e,r){function i(t){!0===this.options.insecure&&(e.env.NODE_TLS_REJECT_UNAUTHORIZED="0");var i=this.hasOwnProperty("https")?this.https:null;null===i&&(i=this.https=n(68));var a=n(24).URL,s=new a(o.get(t,"url",""),o.get(this.options,"baseUrl",void 0)),u={method:t.hasOwnProperty("method")?t.method.toUpperCase():"GET",port:s.port?s.port:443,host:s.hostname,path:s.pathname,encoding:null},c=o.assign({},o.get(this.options,"headers",{}),o.get(t,"headers",{}));Object.keys(c).length>0&&(u.headers=c);var f=null,l=o.get(t,"data",null);return o.isPlainObject(l)&&(l=JSON.stringify(l),f="application/json"),l&&(u.hasOwnProperty("headers")||(u.headers={}),f&&(u.headers["Content-Type"]=f),u.headers["Content-Length"]=r.byteLength(l)),new Promise(function(e,n){var o=[],a=i.request(u,function(n){var i={status:n.statusCode,statusText:n.statusMessage,headers:n.headers,request:a};n.on("data",function(t){o.push(t)}),n.on("end",function(){if(o=r.concat(o),"arraybuffer"!==t.responseType&&(o=o.toString(t.responseEncoding)),"string"==typeof o)try{o=JSON.parse(o)}catch(t){}i.data=o,e(i)})});a.on("error",function(t){n(response)}),a.end(l)})}var o=n(0);t.exports=i}).call(e,n(2),n(3).Buffer)},function(t,e,n){var r=n(69),i=t.exports;for(var o in r)r.hasOwnProperty(o)&&(i[o]=r[o]);i.request=function(t,e){return t||(t={}),t.scheme="https",t.protocol="https:",r.request.call(this,t,e)}},function(t,e,n){(function(t){var r=n(70),i=n(79),o=n(80),a=n(24),s=e;s.request=function(e,n){e="string"==typeof e?a.parse(e):i(e);var o=-1===t.location.protocol.search(/^https?:$/)?"http:":"",s=e.protocol||o,u=e.hostname||e.host,c=e.port,f=e.path||"/";u&&-1!==u.indexOf(":")&&(u="["+u+"]"),e.url=(u?s+"//"+u:"")+(c?":"+c:"")+f,e.method=(e.method||"GET").toUpperCase(),e.headers=e.headers||{};var l=new r(e);return n&&l.on("response",n),l},s.get=function(t,e){var n=s.request(t,e);return n.end(),n},s.Agent=function(){},s.Agent.defaultMaxSockets=4,s.STATUS_CODES=o,s.METHODS=["CHECKOUT","CONNECT","COPY","DELETE","GET","HEAD","LOCK","M-SEARCH","MERGE","MKACTIVITY","MKCOL","MOVE","NOTIFY","OPTIONS","PATCH","POST","PROPFIND","PROPPATCH","PURGE","PUT","REPORT","SEARCH","SUBSCRIBE","TRACE","UNLOCK","UNSUBSCRIBE"]}).call(e,n(1))},function(t,e,n){(function(e,r,i){function o(t,e){return s.fetch&&e?"fetch":s.mozchunkedarraybuffer?"moz-chunked-arraybuffer":s.msstream?"ms-stream":s.arraybuffer&&t?"arraybuffer":s.vbArray&&t?"text:vbarray":"text"}function a(t){try{var e=t.status;return null!==e&&0!==e}catch(t){return!1}}var s=n(15),u=n(4),c=n(71),f=n(16),l=n(78),p=c.IncomingMessage,h=c.readyStates,d=t.exports=function(t){var n=this;f.Writable.call(n),n._opts=t,n._body=[],n._headers={},t.auth&&n.setHeader("Authorization","Basic "+new e(t.auth).toString("base64")),Object.keys(t.headers).forEach(function(e){n.setHeader(e,t.headers[e])});var r,i=!0;if("disable-fetch"===t.mode||"timeout"in t)i=!1,r=!0;else if("prefer-streaming"===t.mode)r=!1;else if("allow-wrong-content-type"===t.mode)r=!s.overrideMimeType;else{if(t.mode&&"default"!==t.mode&&"prefer-fast"!==t.mode)throw new Error("Invalid value for opts.mode");r=!0}n._mode=o(r,i),n.on("finish",function(){n._onFinish()})};u(d,f.Writable),d.prototype.setHeader=function(t,e){var n=this,r=t.toLowerCase();-1===v.indexOf(r)&&(n._headers[r]={name:t,value:e})},d.prototype.getHeader=function(t){var e=this._headers[t.toLowerCase()];return e?e.value:null},d.prototype.removeHeader=function(t){delete this._headers[t.toLowerCase()]},d.prototype._onFinish=function(){var t=this;if(!t._destroyed){var n=t._opts,o=t._headers,a=null;"GET"!==n.method&&"HEAD"!==n.method&&(a=s.blobConstructor?new r.Blob(t._body.map(function(t){return l(t)}),{type:(o["content-type"]||{}).value||""}):e.concat(t._body).toString());var u=[];if(Object.keys(o).forEach(function(t){var e=o[t].name,n=o[t].value;Array.isArray(n)?n.forEach(function(t){u.push([e,t])}):u.push([e,n])}),"fetch"===t._mode)r.fetch(t._opts.url,{method:t._opts.method,headers:u,body:a||void 0,mode:"cors",credentials:n.withCredentials?"include":"same-origin"}).then(function(e){t._fetchResponse=e,t._connect()},function(e){t.emit("error",e)});else{var c=t._xhr=new r.XMLHttpRequest;try{c.open(t._opts.method,t._opts.url,!0)}catch(e){return void i.nextTick(function(){t.emit("error",e)})}"responseType"in c&&(c.responseType=t._mode.split(":")[0]),"withCredentials"in c&&(c.withCredentials=!!n.withCredentials),"text"===t._mode&&"overrideMimeType"in c&&c.overrideMimeType("text/plain; charset=x-user-defined"),"timeout"in n&&(c.timeout=n.timeout,c.ontimeout=function(){t.emit("timeout")}),u.forEach(function(t){c.setRequestHeader(t[0],t[1])}),t._response=null,c.onreadystatechange=function(){switch(c.readyState){case h.LOADING:case h.DONE:t._onXHRProgress()}},"moz-chunked-arraybuffer"===t._mode&&(c.onprogress=function(){t._onXHRProgress()}),c.onerror=function(){t._destroyed||t.emit("error",new Error("XHR error"))};try{c.send(a)}catch(e){return void i.nextTick(function(){t.emit("error",e)})}}}},d.prototype._onXHRProgress=function(){var t=this;a(t._xhr)&&!t._destroyed&&(t._response||t._connect(),t._response._onXHRProgress())},d.prototype._connect=function(){var t=this;t._destroyed||(t._response=new p(t._xhr,t._fetchResponse,t._mode),t._response.on("error",function(e){t.emit("error",e)}),t.emit("response",t._response))},d.prototype._write=function(t,e,n){this._body.push(t),n()},d.prototype.abort=d.prototype.destroy=function(){var t=this;t._destroyed=!0,t._response&&(t._response._destroyed=!0),t._xhr&&t._xhr.abort()},d.prototype.end=function(t,e,n){var r=this;"function"==typeof t&&(n=t,t=void 0),f.Writable.prototype.end.call(r,t,e,n)},d.prototype.flushHeaders=function(){},d.prototype.setTimeout=function(){},d.prototype.setNoDelay=function(){},d.prototype.setSocketKeepAlive=function(){};var v=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","date","dnt","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"]}).call(e,n(3).Buffer,n(1),n(2))},function(t,e,n){(function(t,r,i){var o=n(15),a=n(4),s=n(16),u=e.readyStates={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},c=e.IncomingMessage=function(e,n,i){function a(){c.read().then(function(t){if(!u._destroyed){if(t.done)return void u.push(null);u.push(new r(t.value)),a()}}).catch(function(t){u.emit("error",t)})}var u=this;if(s.Readable.call(u),u._mode=i,u.headers={},u.rawHeaders=[],u.trailers={},u.rawTrailers=[],u.on("end",function(){t.nextTick(function(){u.emit("close")})}),"fetch"===i){u._fetchResponse=n,u.url=n.url,u.statusCode=n.status,u.statusMessage=n.statusText,n.headers.forEach(function(t,e){u.headers[e.toLowerCase()]=t,u.rawHeaders.push(e,t)});var c=n.body.getReader();a()}else{u._xhr=e,u._pos=0,u.url=e.responseURL,u.statusCode=e.status,u.statusMessage=e.statusText;if(e.getAllResponseHeaders().split(/\r?\n/).forEach(function(t){var e=t.match(/^([^:]+):\s*(.*)/);if(e){var n=e[1].toLowerCase();"set-cookie"===n?(void 0===u.headers[n]&&(u.headers[n]=[]),u.headers[n].push(e[2])):void 0!==u.headers[n]?u.headers[n]+=", "+e[2]:u.headers[n]=e[2],u.rawHeaders.push(e[1],e[2])}}),u._charset="x-user-defined",!o.overrideMimeType){var f=u.rawHeaders["mime-type"];if(f){var l=f.match(/;\s*charset=([^;])(;|$)/);l&&(u._charset=l[1].toLowerCase())}u._charset||(u._charset="utf-8")}}};a(c,s.Readable),c.prototype._read=function(){},c.prototype._onXHRProgress=function(){var t=this,e=t._xhr,n=null;switch(t._mode){case"text:vbarray":if(e.readyState!==u.DONE)break;try{n=new i.VBArray(e.responseBody).toArray()}catch(t){}if(null!==n){t.push(new r(n));break}case"text":try{n=e.responseText}catch(e){t._mode="text:vbarray";break}if(n.length>t._pos){var o=n.substr(t._pos);if("x-user-defined"===t._charset){for(var a=new r(o.length),s=0;s<o.length;s++)a[s]=255&o.charCodeAt(s);t.push(a)}else t.push(o,t._charset);t._pos=n.length}break;case"arraybuffer":if(e.readyState!==u.DONE||!e.response)break;n=e.response,t.push(new r(new Uint8Array(n)));break;case"moz-chunked-arraybuffer":if(n=e.response,e.readyState!==u.LOADING||!n)break;t.push(new r(new Uint8Array(n)));break;case"ms-stream":if(n=e.response,e.readyState!==u.LOADING)break;var c=new i.MSStreamReader;c.onprogress=function(){c.result.byteLength>t._pos&&(t.push(new r(new Uint8Array(c.result.slice(t._pos)))),t._pos=c.result.byteLength)},c.onload=function(){t.push(null)},c.readAsArrayBuffer(n)}t._xhr.readyState===u.DONE&&"ms-stream"!==t._mode&&t.push(null)}}).call(e,n(2),n(3).Buffer,n(1))},function(t,e){},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e,n){t.copy(e,n)}var o=n(9).Buffer;t.exports=function(){function t(){r(this,t),this.head=null,this.tail=null,this.length=0}return t.prototype.push=function(t){var e={data:t,next:null};this.length>0?this.tail.next=e:this.head=e,this.tail=e,++this.length},t.prototype.unshift=function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length},t.prototype.shift=function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}},t.prototype.clear=function(){this.head=this.tail=null,this.length=0},t.prototype.join=function(t){if(0===this.length)return"";for(var e=this.head,n=""+e.data;e=e.next;)n+=t+e.data;return n},t.prototype.concat=function(t){if(0===this.length)return o.alloc(0);if(1===this.length)return this.head.data;for(var e=o.allocUnsafe(t>>>0),n=this.head,r=0;n;)i(n.data,e,r),r+=n.data.length,n=n.next;return e},t}()},function(t,e,n){function r(t,e){this._id=t,this._clearFn=e}var i=Function.prototype.apply;e.setTimeout=function(){return new r(i.call(setTimeout,window,arguments),clearTimeout)},e.setInterval=function(){return new r(i.call(setInterval,window,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t&&t.close()},r.prototype.unref=r.prototype.ref=function(){},r.prototype.close=function(){this._clearFn.call(window,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},n(75),e.setImmediate=setImmediate,e.clearImmediate=clearImmediate},function(t,e,n){(function(t,e){!function(t,n){"use strict";function r(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),n=0;n<e.length;n++)e[n]=arguments[n+1];var r={callback:t,args:e};return c[u]=r,s(u),u++}function i(t){delete c[t]}function o(t){var e=t.callback,r=t.args;switch(r.length){case 0:e();break;case 1:e(r[0]);break;case 2:e(r[0],r[1]);break;case 3:e(r[0],r[1],r[2]);break;default:e.apply(n,r)}}function a(t){if(f)setTimeout(a,0,t);else{var e=c[t];if(e){f=!0;try{o(e)}finally{i(t),f=!1}}}}if(!t.setImmediate){var s,u=1,c={},f=!1,l=t.document,p=Object.getPrototypeOf&&Object.getPrototypeOf(t);p=p&&p.setTimeout?p:t,"[object process]"==={}.toString.call(t.process)?function(){s=function(t){e.nextTick(function(){a(t)})}}():function(){if(t.postMessage&&!t.importScripts){var e=!0,n=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=n,e}}()?function(){var e="setImmediate$"+Math.random()+"$",n=function(n){n.source===t&&"string"==typeof n.data&&0===n.data.indexOf(e)&&a(+n.data.slice(e.length))};t.addEventListener?t.addEventListener("message",n,!1):t.attachEvent("onmessage",n),s=function(n){t.postMessage(e+n,"*")}}():t.MessageChannel?function(){var t=new MessageChannel;t.port1.onmessage=function(t){a(t.data)},s=function(e){t.port2.postMessage(e)}}():l&&"onreadystatechange"in l.createElement("script")?function(){var t=l.documentElement;s=function(e){var n=l.createElement("script");n.onreadystatechange=function(){a(e),n.onreadystatechange=null,t.removeChild(n),n=null},t.appendChild(n)}}():function(){s=function(t){setTimeout(a,0,t)}}(),p.setImmediate=r,p.clearImmediate=i}}("undefined"==typeof self?void 0===t?this:t:self)}).call(e,n(1),n(2))},function(t,e,n){(function(e){function n(t,e){function n(){if(!i){if(r("throwDeprecation"))throw new Error(e);r("traceDeprecation")?console.trace(e):console.warn(e),i=!0}return t.apply(this,arguments)}if(r("noDeprecation"))return t;var i=!1;return n}function r(t){try{if(!e.localStorage)return!1}catch(t){return!1}var n=e.localStorage[t];return null!=n&&"true"===String(n).toLowerCase()}t.exports=n}).call(e,n(1))},function(t,e,n){"use strict";function r(t){if(!(this instanceof r))return new r(t);i.call(this,t)}t.exports=r;var i=n(23),o=n(7);o.inherits=n(4),o.inherits(r,i),r.prototype._transform=function(t,e,n){n(null,t)}},function(t,e,n){var r=n(3).Buffer;t.exports=function(t){if(t instanceof Uint8Array){if(0===t.byteOffset&&t.byteLength===t.buffer.byteLength)return t.buffer;if("function"==typeof t.buffer.slice)return t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}if(r.isBuffer(t)){for(var e=new Uint8Array(t.length),n=t.length,i=0;i<n;i++)e[i]=t[i];return e.buffer}throw new Error("Argument must be a Buffer")}},function(t,e){function n(){for(var t={},e=0;e<arguments.length;e++){var n=arguments[e];for(var i in n)r.call(n,i)&&(t[i]=n[i])}return t}t.exports=n;var r=Object.prototype.hasOwnProperty},function(t,e){t.exports={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",208:"Already Reported",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Payload Too Large",414:"URI Too Long",415:"Unsupported Media Type",416:"Range Not Satisfiable",417:"Expectation Failed",418:"I'm a teapot",421:"Misdirected Request",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Unordered Collection",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",451:"Unavailable For Legal Reasons",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",508:"Loop Detected",509:"Bandwidth Limit Exceeded",510:"Not Extended",511:"Network Authentication Required"}},function(t,e,n){(function(t,r){var i;!function(o){function a(t){throw new RangeError(R[t])}function s(t,e){for(var n=t.length,r=[];n--;)r[n]=e(t[n]);return r}function u(t,e){var n=t.split("@"),r="";return n.length>1&&(r=n[0]+"@",t=n[1]),t=t.replace(j,"."),r+s(t.split("."),e).join(".")}function c(t){for(var e,n,r=[],i=0,o=t.length;i<o;)e=t.charCodeAt(i++),e>=55296&&e<=56319&&i<o?(n=t.charCodeAt(i++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),i--)):r.push(e);return r}function f(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=D(t>>>10&1023|55296),t=56320|1023&t),e+=D(t)}).join("")}function l(t){return t-48<10?t-22:t-65<26?t-65:t-97<26?t-97:w}function p(t,e){return t+22+75*(t<26)-((0!=e)<<5)}function h(t,e,n){var r=0;for(t=n?$(t/C):t>>1,t+=$(t/e);t>P*E>>1;r+=w)t=$(t/P);return $(r+(P+1)*t/(t+O))}function d(t){var e,n,r,i,o,s,u,c,p,d,v=[],g=t.length,m=0,y=A,_=S;for(n=t.lastIndexOf(k),n<0&&(n=0),r=0;r<n;++r)t.charCodeAt(r)>=128&&a("not-basic"),v.push(t.charCodeAt(r));for(i=n>0?n+1:0;i<g;){for(o=m,s=1,u=w;i>=g&&a("invalid-input"),c=l(t.charCodeAt(i++)),(c>=w||c>$((b-m)/s))&&a("overflow"),m+=c*s,p=u<=_?x:u>=_+E?E:u-_,!(c<p);u+=w)d=w-p,s>$(b/d)&&a("overflow"),s*=d;e=v.length+1,_=h(m-o,e,0==o),$(m/e)>b-y&&a("overflow"),y+=$(m/e),m%=e,v.splice(m++,0,y)}return f(v)}function v(t){var e,n,r,i,o,s,u,f,l,d,v,g,m,y,_,O=[];for(t=c(t),g=t.length,e=A,n=0,o=S,s=0;s<g;++s)(v=t[s])<128&&O.push(D(v));for(r=i=O.length,i&&O.push(k);r<g;){for(u=b,s=0;s<g;++s)(v=t[s])>=e&&v<u&&(u=v);for(m=r+1,u-e>$((b-n)/m)&&a("overflow"),n+=(u-e)*m,e=u,s=0;s<g;++s)if(v=t[s],v<e&&++n>b&&a("overflow"),v==e){for(f=n,l=w;d=l<=o?x:l>=o+E?E:l-o,!(f<d);l+=w)_=f-d,y=w-d,O.push(D(p(d+_%y,0))),f=$(_/y);O.push(D(p(f,0))),o=h(n,m,r==i),n=0,++r}++n,++e}return O.join("")}function g(t){return u(t,function(t){return N.test(t)?d(t.slice(4).toLowerCase()):t})}function m(t){return u(t,function(t){return T.test(t)?"xn--"+v(t):t})}var y=("object"==typeof e&&e&&e.nodeType,"object"==typeof t&&t&&t.nodeType,"object"==typeof r&&r);var _,b=2147483647,w=36,x=1,E=26,O=38,C=700,S=72,A=128,k="-",N=/^xn--/,T=/[^\x20-\x7E]/,j=/[\x2E\u3002\uFF0E\uFF61]/g,R={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},P=w-x,$=Math.floor,D=String.fromCharCode;_={version:"1.4.1",ucs2:{decode:c,encode:f},decode:d,encode:v,toASCII:m,toUnicode:g},void 0!==(i=function(){return _}.call(e,n,e,t))&&(t.exports=i)}()}).call(e,n(12)(t),n(1))},function(t,e,n){"use strict";t.exports={isString:function(t){return"string"==typeof t},isObject:function(t){return"object"==typeof t&&null!==t},isNull:function(t){return null===t},isNullOrUndefined:function(t){return null==t}}},function(t,e,n){"use strict";e.decode=e.parse=n(84),e.encode=e.stringify=n(85)},function(t,e,n){"use strict";function r(t,e){return Object.prototype.hasOwnProperty.call(t,e)}t.exports=function(t,e,n,o){e=e||"&",n=n||"=";var a={};if("string"!=typeof t||0===t.length)return a;var s=/\+/g;t=t.split(e);var u=1e3;o&&"number"==typeof o.maxKeys&&(u=o.maxKeys);var c=t.length;u>0&&c>u&&(c=u);for(var f=0;f<c;++f){var l,p,h,d,v=t[f].replace(s,"%20"),g=v.indexOf(n);g>=0?(l=v.substr(0,g),p=v.substr(g+1)):(l=v,p=""),h=decodeURIComponent(l),d=decodeURIComponent(p),r(a,h)?i(a[h])?a[h].push(d):a[h]=[a[h],d]:a[h]=d}return a};var i=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},function(t,e,n){"use strict";function r(t,e){if(t.map)return t.map(e);for(var n=[],r=0;r<t.length;r++)n.push(e(t[r],r));return n}var i=function(t){switch(typeof t){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}};t.exports=function(t,e,n,s){return e=e||"&",n=n||"=",null===t&&(t=void 0),"object"==typeof t?r(a(t),function(a){var s=encodeURIComponent(i(a))+n;return o(t[a])?r(t[a],function(t){return s+encodeURIComponent(i(t))}).join(e):s+encodeURIComponent(i(t[a]))}).join(e):s?encodeURIComponent(i(s))+n+encodeURIComponent(i(t)):""};var o=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},a=Object.keys||function(t){var e=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.push(n);return e}},function(t,e,n){"use strict";function r(t){function e(t){for(var e={},n=t?t.split("\r\n"):[],r=0,i=n.length;r<i;r++){var o=n[r].indexOf(":");o>0&&(e[n[r].substr(0,o).trim()]=n[r].substr(o+1).trim())}return e}var n=i.assign({},i.get(this.options,"headers",{}),i.get(t,"headers",{})),r=i.get(t,"data",null);return"undefined"!=typeof FormData&&r instanceof FormData?delete n["Content-Type"]:i.isPlainObject(r)&&(r=JSON.stringify(r),n["Content-Type"]="application/json"),new Promise(function(i,o){function a(e){var n=t.responseType&&"text"!==t.responseType?e.response:e.responseText;if("string"==typeof n)try{n=JSON.parse(n)}catch(t){}return n}var s=new XMLHttpRequest;if(s.open(t.method.toUpperCase(),t.url,!0),t.responseType&&(s.responseType=t.responseType),Object.keys(n).length>0)for(var u in n)n.hasOwnProperty(u)&&s.setRequestHeader(u,n[u]);s.onload=function(){var n=a(s),r={data:n,status:1223===s.status?204:s.status,statusText:1223===s.status?"No Content":s.statusText,headers:e(s.getAllResponseHeaders()),config:t,request:s};i(r),s=null},s.onerror=function(){var n=a(s),r={data:n,status:s.status,statusText:s.statusText,headers:e(s.getAllResponseHeaders()),config:t,request:s};o(r),s=null},s.send(r)})}var i=n(0);t.exports=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(88),i=n.n(r),o=n(90),a=n(10),s=a(i.a,o.a,null,null,null);e.default=s.exports},function(module,exports,__webpack_require__){"use strict";function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(exports,"__esModule",{value:!0});var _lodash=__webpack_require__(11),_lodash2=_interopRequireDefault(_lodash),_util=__webpack_require__(5),_util2=_interopRequireDefault(_util),_flexio=__webpack_require__(13),_flexio2=_interopRequireDefault(_flexio),_vueSimpleSpinner=__webpack_require__(89),_vueSimpleSpinner2=_interopRequireDefault(_vueSimpleSpinner);exports.default={props:{title:{type:String,default:""},description:{type:String,default:""},code:{type:String,default:""},fn:{type:Function,default:function(){return function(){alert("No function specified!")}}},"is-editable":{type:Boolean,default:!1},"show-run":{type:Boolean,default:!0}},components:{VueSimpleSpinner:_vueSimpleSpinner2.default},data:function(){return{result:"",img_src:"",editable_code:"Flexio.pipe()\n  .echo('Hello, World!')\n  .run(callback)",is_loading:!1}},computed:{has_image_result:function(){return this.img_src.length>0},has_text_result:function(){return this.result.length>0},code_trimmed:function(){return this.code.trim()}},methods:{run:function run(){var _this=this;if("function"==typeof this.fn){this.is_loading=!0;var fn=this.fn;this.isEditable&&(fn=function fn(Flexio,callback){eval(_this.editable_code)}),fn.call(this,_flexio2.default,function(t,e){_this.result="",_this.img_src="";var n=_lodash2.default.get(e,"contentType","");if("image/"==n.substr(0,6)){var r=window.URL||window.webkitURL;_this.img_src=r.createObjectURL(e.blob)}else"application/json"==n?_this.result=JSON.stringify(e.data,null,2):n.length>0&&_lodash2.default.has(e,"buffer")?_this.result=e.text:_this.result=JSON.stringify(e,null,2);_this.is_loading=!1},function(t){_this.is_loading=!1})}}}}},function(t,e,n){/*!
+function r(t){return void 0===t||null===t}function i(t){return void 0!==t&&null!==t}function o(t){return!0===t}function a(t){return!1===t}function s(t){return"string"==typeof t||"number"==typeof t||"boolean"==typeof t}function u(t){return null!==t&&"object"==typeof t}function c(t){return"[object Object]"===Qi.call(t)}function f(t){return"[object RegExp]"===Qi.call(t)}function l(t){var e=parseFloat(t);return e>=0&&Math.floor(e)===e&&isFinite(t)}function p(t){return null==t?"":"object"==typeof t?JSON.stringify(t,null,2):String(t)}function h(t){var e=parseFloat(t);return isNaN(e)?t:e}function d(t,e){for(var n=Object.create(null),r=t.split(","),i=0;i<r.length;i++)n[r[i]]=!0;return e?function(t){return n[t.toLowerCase()]}:function(t){return n[t]}}function v(t,e){if(t.length){var n=t.indexOf(e);if(n>-1)return t.splice(n,1)}}function g(t,e){return no.call(t,e)}function m(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}function y(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n}function _(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function b(t,e){for(var n in e)t[n]=e[n];return t}function w(t){for(var e={},n=0;n<t.length;n++)t[n]&&b(e,t[n]);return e}function x(t,e,n){}function E(t,e){if(t===e)return!0;var n=u(t),r=u(e);if(!n||!r)return!n&&!r&&String(t)===String(e);try{var i=Array.isArray(t),o=Array.isArray(e);if(i&&o)return t.length===e.length&&t.every(function(t,n){return E(t,e[n])});if(i||o)return!1;var a=Object.keys(t),s=Object.keys(e);return a.length===s.length&&a.every(function(n){return E(t[n],e[n])})}catch(t){return!1}}function O(t,e){for(var n=0;n<t.length;n++)if(E(t[n],e))return n;return-1}function C(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments))}}function S(t){var e=(t+"").charCodeAt(0);return 36===e||95===e}function A(t,e,n,r){Object.defineProperty(t,e,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function k(t){if(!go.test(t)){var e=t.split(".");return function(t){for(var n=0;n<e.length;n++){if(!t)return;t=t[e[n]]}return t}}}function N(t,n,r){if(ho.errorHandler)ho.errorHandler.call(null,t,n,r);else{if("production"!==e.env.NODE_ENV&&mo("Error in "+r+': "'+t.toString()+'"',n),!So||"undefined"==typeof console)throw t;console.error(t)}}function T(t){return"function"==typeof t&&/native code/.test(t.toString())}function j(t){zo.target&&Ho.push(zo.target),zo.target=t}function R(){zo.target=Ho.pop()}function P(t,e,n){t.__proto__=e}function $(t,e,n){for(var r=0,i=n.length;r<i;r++){var o=n[r];A(t,o,e[o])}}function D(t,e){if(u(t)){var n;return g(t,"__ob__")&&t.__ob__ instanceof Go?n=t.__ob__:Ko.shouldConvert&&!Uo()&&(Array.isArray(t)||c(t))&&Object.isExtensible(t)&&!t._isVue&&(n=new Go(t)),e&&n&&n.vmCount++,n}}function L(t,n,r,i,o){var a=new zo,s=Object.getOwnPropertyDescriptor(t,n);if(!s||!1!==s.configurable){var u=s&&s.get,c=s&&s.set,f=!o&&D(r);Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:function(){var e=u?u.call(t):r;return zo.target&&(a.depend(),f&&(f.dep.depend(),Array.isArray(e)&&U(e))),e},set:function(n){var s=u?u.call(t):r;n===s||n!==n&&s!==s||("production"!==e.env.NODE_ENV&&i&&i(),c?c.call(t,n):r=n,f=!o&&D(n),a.notify())}})}}function I(t,n,r){if(Array.isArray(t)&&l(n))return t.length=Math.max(t.length,n),t.splice(n,1,r),r;if(g(t,n))return t[n]=r,r;var i=t.__ob__;return t._isVue||i&&i.vmCount?("production"!==e.env.NODE_ENV&&mo("Avoid adding reactive properties to a Vue instance or its root $data at runtime - declare it upfront in the data option."),r):i?(L(i.value,n,r),i.dep.notify(),r):(t[n]=r,r)}function M(t,n){if(Array.isArray(t)&&l(n))return void t.splice(n,1);var r=t.__ob__;if(t._isVue||r&&r.vmCount)return void("production"!==e.env.NODE_ENV&&mo("Avoid deleting properties on a Vue instance or its root $data - just set it to null."));g(t,n)&&(delete t[n],r&&r.dep.notify())}function U(t){for(var e=void 0,n=0,r=t.length;n<r;n++)e=t[n],e&&e.__ob__&&e.__ob__.dep.depend(),Array.isArray(e)&&U(e)}function B(t,e){if(!e)return t;for(var n,r,i,o=Object.keys(e),a=0;a<o.length;a++)n=o[a],r=t[n],i=e[n],g(t,n)?c(r)&&c(i)&&B(r,i):I(t,n,i);return t}function V(t,e,n){return n?t||e?function(){var r="function"==typeof e?e.call(n):e,i="function"==typeof t?t.call(n):t;return r?B(r,i):i}:void 0:e?t?function(){return B("function"==typeof e?e.call(this):e,"function"==typeof t?t.call(this):t)}:e:t}function F(t,e){return e?t?t.concat(e):Array.isArray(e)?e:[e]:t}function q(t,e){var n=Object.create(t||null);return e?b(n,e):n}function z(t){for(var e in t.components){var n=e.toLowerCase();(to(n)||ho.isReservedTag(n))&&mo("Do not use built-in or reserved HTML elements as component id: "+e)}}function H(t){var n=t.props;if(n){var r,i,o,a={};if(Array.isArray(n))for(r=n.length;r--;)i=n[r],"string"==typeof i?(o=io(i),a[o]={type:null}):"production"!==e.env.NODE_ENV&&mo("props must be strings when using array syntax.");else if(c(n))for(var s in n)i=n[s],o=io(s),a[o]=c(i)?i:{type:i};t.props=a}}function J(t){var e=t.inject;if(Array.isArray(e))for(var n=t.inject={},r=0;r<e.length;r++)n[e[r]]=e[r]}function W(t){var e=t.directives;if(e)for(var n in e){var r=e[n];"function"==typeof r&&(e[n]={bind:r,update:r})}}function Y(t,n,r){function i(e){var i=Zo[e]||ta;c[e]=i(t[e],n[e],r,e)}"production"!==e.env.NODE_ENV&&z(n),"function"==typeof n&&(n=n.options),H(n),J(n),W(n);var o=n.extends;if(o&&(t=Y(t,o,r)),n.mixins)for(var a=0,s=n.mixins.length;a<s;a++)t=Y(t,n.mixins[a],r);var u,c={};for(u in t)i(u);for(u in n)g(t,u)||i(u);return c}function K(t,n,r,i){if("string"==typeof r){var o=t[n];if(g(o,r))return o[r];var a=io(r);if(g(o,a))return o[a];var s=oo(a);if(g(o,s))return o[s];var u=o[r]||o[a]||o[s];return"production"!==e.env.NODE_ENV&&i&&!u&&mo("Failed to resolve "+n.slice(0,-1)+": "+r,t),u}}function G(t,n,r,i){var o=n[t],a=!g(r,t),s=r[t];if(et(Boolean,o.type)&&(a&&!g(o,"default")?s=!1:et(String,o.type)||""!==s&&s!==so(t)||(s=!0)),void 0===s){s=Z(i,o,t);var u=Ko.shouldConvert;Ko.shouldConvert=!0,D(s),Ko.shouldConvert=u}return"production"!==e.env.NODE_ENV&&X(o,t,s,i,a),s}function Z(t,n,r){if(g(n,"default")){var i=n.default;return"production"!==e.env.NODE_ENV&&u(i)&&mo('Invalid default value for prop "'+r+'": Props with type Object/Array must use a factory function to return the default value.',t),t&&t.$options.propsData&&void 0===t.$options.propsData[r]&&void 0!==t._props[r]?t._props[r]:"function"==typeof i&&"Function"!==tt(n.type)?i.call(t):i}}function X(t,e,n,r,i){if(t.required&&i)return void mo('Missing required prop: "'+e+'"',r);if(null!=n||t.required){var o=t.type,a=!o||!0===o,s=[];if(o){Array.isArray(o)||(o=[o]);for(var u=0;u<o.length&&!a;u++){var c=Q(n,o[u]);s.push(c.expectedType||""),a=c.valid}}if(!a)return void mo('Invalid prop: type check failed for prop "'+e+'". Expected '+s.map(oo).join(", ")+", got "+Object.prototype.toString.call(n).slice(8,-1)+".",r);var f=t.validator;f&&(f(n)||mo('Invalid prop: custom validator check failed for prop "'+e+'".',r))}}function Q(t,e){var n,r=tt(e);if(ea.test(r)){var i=typeof t;n=i===r.toLowerCase(),n||"object"!==i||(n=t instanceof e)}else n="Object"===r?c(t):"Array"===r?Array.isArray(t):t instanceof e;return{valid:n,expectedType:r}}function tt(t){var e=t&&t.toString().match(/^\s*function (\w+)/);return e?e[1]:""}function et(t,e){if(!Array.isArray(e))return tt(e)===tt(t);for(var n=0,r=e.length;n<r;n++)if(tt(e[n])===tt(t))return!0;return!1}function nt(t){return new fa(void 0,void 0,void 0,String(t))}function rt(t,e){var n=new fa(t.tag,t.data,t.children,t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return n.ns=t.ns,n.isStatic=t.isStatic,n.key=t.key,n.isComment=t.isComment,n.isCloned=!0,e&&t.children&&(n.children=it(t.children)),n}function it(t,e){for(var n=t.length,r=new Array(n),i=0;i<n;i++)r[i]=rt(t[i],e);return r}function ot(t){function e(){var t=arguments,n=e.fns;if(!Array.isArray(n))return n.apply(null,arguments);for(var r=n.slice(),i=0;i<r.length;i++)r[i].apply(null,t)}return e.fns=t,e}function at(t,e){return t.plain?-1:e.plain?1:0}function st(t,n,i,o,a){var s,u,c,f,l=[],p=!1;for(s in t)u=t[s],c=n[s],f=da(s),f.plain||(p=!0),r(u)?"production"!==e.env.NODE_ENV&&mo('Invalid handler for event "'+f.name+'": got '+String(u),a):r(c)?(r(u.fns)&&(u=t[s]=ot(u)),f.handler=u,l.push(f)):u!==c&&(c.fns=u,t[s]=c);if(l.length){p&&l.sort(at);for(var h=0;h<l.length;h++){var d=l[h];i(d.name,d.handler,d.once,d.capture,d.passive)}}for(s in n)r(t[s])&&(f=da(s),o(f.name,n[s],f.capture))}function ut(t,e,n){function a(){n.apply(this,arguments),v(s.fns,a)}var s,u=t[e];r(u)?s=ot([a]):i(u.fns)&&o(u.merged)?(s=u,s.fns.push(a)):s=ot([u,a]),s.merged=!0,t[e]=s}function ct(t,n,o){var a=n.options.props;if(!r(a)){var s={},u=t.attrs,c=t.props;if(i(u)||i(c))for(var f in a){var l=so(f);if("production"!==e.env.NODE_ENV){var p=f.toLowerCase();f!==p&&u&&g(u,p)&&yo('Prop "'+p+'" is passed to component '+_o(o||n)+', but the declared prop name is "'+f+'". Note that HTML attributes are case-insensitive and camelCased props need to use their kebab-case equivalents when using in-DOM templates. You should probably use "'+l+'" instead of "'+f+'".')}ft(s,c,f,l,!0)||ft(s,u,f,l,!1)}return s}}function ft(t,e,n,r,o){if(i(e)){if(g(e,n))return t[n]=e[n],o||delete e[n],!0;if(g(e,r))return t[n]=e[r],o||delete e[r],!0}return!1}function lt(t){for(var e=0;e<t.length;e++)if(Array.isArray(t[e]))return Array.prototype.concat.apply([],t);return t}function pt(t){return s(t)?[nt(t)]:Array.isArray(t)?dt(t):void 0}function ht(t){return i(t)&&i(t.text)&&a(t.isComment)}function dt(t,e){var n,a,u,c=[];for(n=0;n<t.length;n++)a=t[n],r(a)||"boolean"==typeof a||(u=c[c.length-1],Array.isArray(a)?c.push.apply(c,dt(a,(e||"")+"_"+n)):s(a)?ht(u)?u.text+=String(a):""!==a&&c.push(nt(a)):ht(a)&&ht(u)?c[c.length-1]=nt(u.text+a.text):(o(t._isVList)&&i(a.tag)&&r(a.key)&&i(e)&&(a.key="__vlist"+e+"_"+n+"__"),c.push(a)));return c}function vt(t,e){return t.__esModule&&t.default&&(t=t.default),u(t)?e.extend(t):t}function gt(t,e,n,r,i){var o=ha();return o.asyncFactory=t,o.asyncMeta={data:e,context:n,children:r,tag:i},o}function mt(t,n,a){if(o(t.error)&&i(t.errorComp))return t.errorComp;if(i(t.resolved))return t.resolved;if(o(t.loading)&&i(t.loadingComp))return t.loadingComp;if(!i(t.contexts)){var s=t.contexts=[a],c=!0,f=function(){for(var t=0,e=s.length;t<e;t++)s[t].$forceUpdate()},l=C(function(e){t.resolved=vt(e,n),c||f()}),p=C(function(n){"production"!==e.env.NODE_ENV&&mo("Failed to resolve async component: "+String(t)+(n?"\nReason: "+n:"")),i(t.errorComp)&&(t.error=!0,f())}),h=t(l,p);return u(h)&&("function"==typeof h.then?r(t.resolved)&&h.then(l,p):i(h.component)&&"function"==typeof h.component.then&&(h.component.then(l,p),i(h.error)&&(t.errorComp=vt(h.error,n)),i(h.loading)&&(t.loadingComp=vt(h.loading,n),0===h.delay?t.loading=!0:setTimeout(function(){r(t.resolved)&&r(t.error)&&(t.loading=!0,f())},h.delay||200)),i(h.timeout)&&setTimeout(function(){r(t.resolved)&&p("production"!==e.env.NODE_ENV?"timeout ("+h.timeout+"ms)":null)},h.timeout))),c=!1,t.loading?t.loadingComp:t.resolved}t.contexts.push(a)}function yt(t){return t.isComment&&t.asyncFactory}function _t(t){if(Array.isArray(t))for(var e=0;e<t.length;e++){var n=t[e];if(i(n)&&(i(n.componentOptions)||yt(n)))return n}}function bt(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Et(t,e)}function wt(t,e,n){n?pa.$once(t,e):pa.$on(t,e)}function xt(t,e){pa.$off(t,e)}function Et(t,e,n){pa=t,st(e,n||{},wt,xt,t)}function Ot(t,e){var n={};if(!t)return n;for(var r=[],i=0,o=t.length;i<o;i++){var a=t[i],s=a.data;if(s&&s.attrs&&s.attrs.slot&&delete s.attrs.slot,a.context!==e&&a.functionalContext!==e||!s||null==s.slot)r.push(a);else{var u=a.data.slot,c=n[u]||(n[u]=[]);"template"===a.tag?c.push.apply(c,a.children):c.push(a)}}return r.every(Ct)||(n.default=r),n}function Ct(t){return t.isComment||" "===t.text}function St(t,e){e=e||{};for(var n=0;n<t.length;n++)Array.isArray(t[n])?St(t[n],e):e[t[n].key]=t[n].fn;return e}function At(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}function kt(t,n,r){t.$el=n,t.$options.render||(t.$options.render=ha,"production"!==e.env.NODE_ENV&&(t.$options.template&&"#"!==t.$options.template.charAt(0)||t.$options.el||n?mo("You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.",t):mo("Failed to mount component: template or render function not defined.",t))),Pt(t,"beforeMount");var i;return i="production"!==e.env.NODE_ENV&&ho.performance&&Xo?function(){var e=t._name,n=t._uid,i="vue-perf-start:"+n,o="vue-perf-end:"+n;Xo(i);var a=t._render();Xo(o),Qo(e+" render",i,o),Xo(i),t._update(a,r),Xo(o),Qo(e+" patch",i,o)}:function(){t._update(t._render(),r)},t._watcher=new Sa(t,i,x),r=!1,null==t.$vnode&&(t._isMounted=!0,Pt(t,"mounted")),t}function Nt(t,n,r,i,o){"production"!==e.env.NODE_ENV&&(ga=!0);var a=!!(o||t.$options._renderChildren||i.data.scopedSlots||t.$scopedSlots!==vo);if(t.$options._parentVnode=i,t.$vnode=i,t._vnode&&(t._vnode.parent=i),t.$options._renderChildren=o,t.$attrs=i.data&&i.data.attrs||vo,t.$listeners=r||vo,n&&t.$options.props){Ko.shouldConvert=!1;for(var s=t._props,u=t.$options._propKeys||[],c=0;c<u.length;c++){var f=u[c];s[f]=G(f,t.$options.props,n,t)}Ko.shouldConvert=!0,t.$options.propsData=n}if(r){var l=t.$options._parentListeners;t.$options._parentListeners=r,Et(t,r,l)}a&&(t.$slots=Ot(o,i.context),t.$forceUpdate()),"production"!==e.env.NODE_ENV&&(ga=!1)}function Tt(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}function jt(t,e){if(e){if(t._directInactive=!1,Tt(t))return}else if(t._directInactive)return;if(t._inactive||null===t._inactive){t._inactive=!1;for(var n=0;n<t.$children.length;n++)jt(t.$children[n]);Pt(t,"activated")}}function Rt(t,e){if(!(e&&(t._directInactive=!0,Tt(t))||t._inactive)){t._inactive=!0;for(var n=0;n<t.$children.length;n++)Rt(t.$children[n]);Pt(t,"deactivated")}}function Pt(t,e){var n=t.$options[e];if(n)for(var r=0,i=n.length;r<i;r++)try{n[r].call(t)}catch(n){N(n,t,e+" hook")}t._hasHookEvent&&t.$emit("hook:"+e)}function $t(){Oa=ya.length=_a.length=0,ba={},"production"!==e.env.NODE_ENV&&(wa={}),xa=Ea=!1}function Dt(){Ea=!0;var t,n;for(ya.sort(function(t,e){return t.id-e.id}),Oa=0;Oa<ya.length;Oa++)if(t=ya[Oa],n=t.id,ba[n]=null,t.run(),"production"!==e.env.NODE_ENV&&null!=ba[n]&&(wa[n]=(wa[n]||0)+1,wa[n]>ma)){mo("You may have an infinite update loop "+(t.user?'in watcher with expression "'+t.expression+'"':"in a component render function."),t.vm);break}var r=_a.slice(),i=ya.slice();$t(),Mt(r),Lt(i),Bo&&ho.devtools&&Bo.emit("flush")}function Lt(t){for(var e=t.length;e--;){var n=t[e],r=n.vm;r._watcher===n&&r._isMounted&&Pt(r,"updated")}}function It(t){t._inactive=!1,_a.push(t)}function Mt(t){for(var e=0;e<t.length;e++)t[e]._inactive=!0,jt(t[e],!0)}function Ut(t){var e=t.id;if(null==ba[e]){if(ba[e]=!0,Ea){for(var n=ya.length-1;n>Oa&&ya[n].id>t.id;)n--;ya.splice(n+1,0,t)}else ya.push(t);xa||(xa=!0,Fo(Dt))}}function Bt(t){Aa.clear(),Vt(t,Aa)}function Vt(t,e){var n,r,i=Array.isArray(t);if((i||u(t))&&Object.isExtensible(t)){if(t.__ob__){var o=t.__ob__.dep.id;if(e.has(o))return;e.add(o)}if(i)for(n=t.length;n--;)Vt(t[n],e);else for(r=Object.keys(t),n=r.length;n--;)Vt(t[r[n]],e)}}function Ft(t,e,n){ka.get=function(){return this[e][n]},ka.set=function(t){this[e][n]=t},Object.defineProperty(t,n,ka)}function qt(t){t._watchers=[];var e=t.$options;e.props&&Ht(t,e.props),e.methods&&Zt(t,e.methods),e.data?Jt(t):D(t._data={},!0),e.computed&&Yt(t,e.computed),e.watch&&e.watch!==$o&&Xt(t,e.watch)}function zt(t,e){c(t.$options[e])||mo('component option "'+e+'" should be an object.',t)}function Ht(t,n){var r=t.$options.propsData||{},i=t._props={},o=t.$options._propKeys=[],a=!t.$parent;Ko.shouldConvert=a;for(var s in n)!function(a){o.push(a);var s=G(a,n,r,t);"production"!==e.env.NODE_ENV?((eo(a)||ho.isReservedAttr(a))&&mo('"'+a+'" is a reserved attribute and cannot be used as component prop.',t),L(i,a,s,function(){t.$parent&&!ga&&mo("Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: \""+a+'"',t)})):L(i,a,s),a in t||Ft(t,"_props",a)}(s);Ko.shouldConvert=!0}function Jt(t){var n=t.$options.data;n=t._data="function"==typeof n?Wt(n,t):n||{},c(n)||(n={},"production"!==e.env.NODE_ENV&&mo("data functions should return an object:\nhttps://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function",t));for(var r=Object.keys(n),i=t.$options.props,o=t.$options.methods,a=r.length;a--;){var s=r[a];"production"!==e.env.NODE_ENV&&o&&g(o,s)&&mo('Method "'+s+'" has already been defined as a data property.',t),i&&g(i,s)?"production"!==e.env.NODE_ENV&&mo('The data property "'+s+'" is already declared as a prop. Use prop default value instead.',t):S(s)||Ft(t,"_data",s)}D(n,!0)}function Wt(t,e){try{return t.call(e)}catch(t){return N(t,e,"data()"),{}}}function Yt(t,n){"production"!==e.env.NODE_ENV&&zt(t,"computed");var r=t._computedWatchers=Object.create(null),i=Uo();for(var o in n){var a=n[o],s="function"==typeof a?a:a.get;"production"!==e.env.NODE_ENV&&null==s&&mo('Getter is missing for computed property "'+o+'".',t),i||(r[o]=new Sa(t,s||x,x,Na)),o in t?"production"!==e.env.NODE_ENV&&(o in t.$data?mo('The computed property "'+o+'" is already defined in data.',t):t.$options.props&&o in t.$options.props&&mo('The computed property "'+o+'" is already defined as a prop.',t)):Kt(t,o,a)}}function Kt(t,n,r){var i=!Uo();"function"==typeof r?(ka.get=i?Gt(n):r,ka.set=x):(ka.get=r.get?i&&!1!==r.cache?Gt(n):r.get:x,ka.set=r.set?r.set:x),"production"!==e.env.NODE_ENV&&ka.set===x&&(ka.set=function(){mo('Computed property "'+n+'" was assigned to but it has no setter.',this)}),Object.defineProperty(t,n,ka)}function Gt(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),zo.target&&e.depend(),e.value}}function Zt(t,n){"production"!==e.env.NODE_ENV&&zt(t,"methods");var r=t.$options.props;for(var i in n)"production"!==e.env.NODE_ENV&&(null==n[i]&&mo('Method "'+i+'" has an undefined value in the component definition. Did you reference the function correctly?',t),r&&g(r,i)&&mo('Method "'+i+'" has already been defined as a prop.',t),i in t&&S(i)&&mo('Method "'+i+'" conflicts with an existing Vue instance method. Avoid defining component methods that start with _ or $.')),t[i]=null==n[i]?x:y(n[i],t)}function Xt(t,n){"production"!==e.env.NODE_ENV&&zt(t,"watch");for(var r in n){var i=n[r];if(Array.isArray(i))for(var o=0;o<i.length;o++)Qt(t,r,i[o]);else Qt(t,r,i)}}function Qt(t,e,n,r){return c(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=t[n]),t.$watch(e,n,r)}function te(t){var e=t.$options.provide;e&&(t._provided="function"==typeof e?e.call(t):e)}function ee(t){var n=ne(t.$options.inject,t);n&&(Ko.shouldConvert=!1,Object.keys(n).forEach(function(r){"production"!==e.env.NODE_ENV?L(t,r,n[r],function(){mo('Avoid mutating an injected value directly since the changes will be overwritten whenever the provided component re-renders. injection being mutated: "'+r+'"',t)}):L(t,r,n[r])}),Ko.shouldConvert=!0)}function ne(t,n){if(t){for(var r=Object.create(null),i=Vo?Reflect.ownKeys(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}):Object.keys(t),o=0;o<i.length;o++){for(var a=i[o],s=t[a],u=n;u;){if(u._provided&&s in u._provided){r[a]=u._provided[s];break}u=u.$parent}"production"===e.env.NODE_ENV||u||mo('Injection "'+a+'" not found',n)}return r}}function re(t,e,n,r,o){var a={},s=t.options.props;if(i(s))for(var u in s)a[u]=G(u,s,e||vo);else i(n.attrs)&&ie(a,n.attrs),i(n.props)&&ie(a,n.props);var c=Object.create(r),f=function(t,e,n,r){return fe(c,t,e,n,r,!0)},l=t.options.render.call(null,f,{data:n,props:a,children:o,parent:r,listeners:n.on||vo,injections:ne(t.options.inject,r),slots:function(){return Ot(o,r)}});return l instanceof fa&&(l.functionalContext=r,l.functionalOptions=t.options,n.slot&&((l.data||(l.data={})).slot=n.slot)),l}function ie(t,e){for(var n in e)t[io(n)]=e[n]}function oe(t,n,a,s,c){if(!r(t)){var f=a.$options._base;if(u(t)&&(t=f.extend(t)),"function"!=typeof t)return void("production"!==e.env.NODE_ENV&&mo("Invalid Component definition: "+String(t),a));var l;if(r(t.cid)&&(l=t,void 0===(t=mt(l,f,a))))return gt(l,n,a,s,c);n=n||{},Ce(t),i(n.model)&&ce(t.options,n);var p=ct(n,t,c);if(o(t.options.functional))return re(t,p,n,a,s);var h=n.on;if(n.on=n.nativeOn,o(t.options.abstract)){var d=n.slot;n={},d&&(n.slot=d)}se(n);var v=t.options.name||c;return new fa("vue-component-"+t.cid+(v?"-"+v:""),n,void 0,void 0,void 0,a,{Ctor:t,propsData:p,listeners:h,tag:c,children:s},l)}}function ae(t,e,n,r){var o=t.componentOptions,a={_isComponent:!0,parent:e,propsData:o.propsData,_componentTag:o.tag,_parentVnode:t,_parentListeners:o.listeners,_renderChildren:o.children,_parentElm:n||null,_refElm:r||null},s=t.data.inlineTemplate;return i(s)&&(a.render=s.render,a.staticRenderFns=s.staticRenderFns),new o.Ctor(a)}function se(t){t.hook||(t.hook={});for(var e=0;e<ja.length;e++){var n=ja[e],r=t.hook[n],i=Ta[n];t.hook[n]=r?ue(i,r):i}}function ue(t,e){return function(n,r,i,o){t(n,r,i,o),e(n,r,i,o)}}function ce(t,e){var n=t.model&&t.model.prop||"value",r=t.model&&t.model.event||"input";(e.props||(e.props={}))[n]=e.model.value;var o=e.on||(e.on={});i(o[r])?o[r]=[e.model.callback].concat(o[r]):o[r]=e.model.callback}function fe(t,e,n,r,i,a){return(Array.isArray(n)||s(n))&&(i=r,r=n,n=void 0),o(a)&&(i=Pa),le(t,e,n,r,i)}function le(t,n,r,o,a){if(i(r)&&i(r.__ob__))return"production"!==e.env.NODE_ENV&&mo("Avoid using observed data object as vnode data: "+JSON.stringify(r)+"\nAlways create fresh vnode data objects in each render!",t),ha();if(i(r)&&i(r.is)&&(n=r.is),!n)return ha();"production"!==e.env.NODE_ENV&&i(r)&&i(r.key)&&!s(r.key)&&mo("Avoid using non-primitive value as key, use string/number value instead.",t),Array.isArray(o)&&"function"==typeof o[0]&&(r=r||{},r.scopedSlots={default:o[0]},o.length=0),a===Pa?o=pt(o):a===Ra&&(o=lt(o));var u,c;if("string"==typeof n){var f;c=t.$vnode&&t.$vnode.ns||ho.getTagNamespace(n),u=ho.isReservedTag(n)?new fa(ho.parsePlatformTagName(n),r,o,void 0,void 0,t):i(f=K(t.$options,"components",n))?oe(f,r,t,o,n):new fa(n,r,o,void 0,void 0,t)}else u=oe(n,r,t,o);return i(u)?(c&&pe(u,c),u):ha()}function pe(t,e){if(t.ns=e,"foreignObject"!==t.tag&&i(t.children))for(var n=0,o=t.children.length;n<o;n++){var a=t.children[n];i(a.tag)&&r(a.ns)&&pe(a,e)}}function he(t,e){var n,r,o,a,s;if(Array.isArray(t)||"string"==typeof t)for(n=new Array(t.length),r=0,o=t.length;r<o;r++)n[r]=e(t[r],r);else if("number"==typeof t)for(n=new Array(t),r=0;r<t;r++)n[r]=e(r+1,r);else if(u(t))for(a=Object.keys(t),n=new Array(a.length),r=0,o=a.length;r<o;r++)s=a[r],n[r]=e(t[s],s,r);return i(n)&&(n._isVList=!0),n}function de(t,n,r,i){var o=this.$scopedSlots[t];if(o)return r=r||{},i&&(r=b(b({},i),r)),o(r)||n;var a=this.$slots[t];return a&&"production"!==e.env.NODE_ENV&&(a._rendered&&mo('Duplicate presence of slot "'+t+'" found in the same render tree - this will likely cause render errors.',this),a._rendered=!0),a||n}function ve(t){return K(this.$options,"filters",t,!0)||co}function ge(t,e,n){var r=ho.keyCodes[e]||n;return Array.isArray(r)?-1===r.indexOf(t):r!==t}function me(t,n,r,i,o){if(r)if(u(r)){Array.isArray(r)&&(r=w(r));var a;for(var s in r)!function(e){if("class"===e||"style"===e||eo(e))a=t;else{var s=t.attrs&&t.attrs.type;a=i||ho.mustUseProp(n,s,e)?t.domProps||(t.domProps={}):t.attrs||(t.attrs={})}if(!(e in a)&&(a[e]=r[e],o)){(t.on||(t.on={}))["update:"+e]=function(t){r[e]=t}}}(s)}else"production"!==e.env.NODE_ENV&&mo("v-bind without argument expects an Object or Array value",this);return t}function ye(t,e){var n=this._staticTrees[t];return n&&!e?Array.isArray(n)?it(n):rt(n):(n=this._staticTrees[t]=this.$options.staticRenderFns[t].call(this._renderProxy),be(n,"__static__"+t,!1),n)}function _e(t,e,n){return be(t,"__once__"+e+(n?"_"+n:""),!0),t}function be(t,e,n){if(Array.isArray(t))for(var r=0;r<t.length;r++)t[r]&&"string"!=typeof t[r]&&we(t[r],e+"_"+r,n);else we(t,e,n)}function we(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}function xe(t,n){if(n)if(c(n)){var r=t.on=t.on?b({},t.on):{};for(var i in n){var o=r[i],a=n[i];r[i]=o?[].concat(a,o):a}}else"production"!==e.env.NODE_ENV&&mo("v-on without argument expects an Object value",this);return t}function Ee(t){t._vnode=null,t._staticTrees=null;var n=t.$vnode=t.$options._parentVnode,r=n&&n.context;t.$slots=Ot(t.$options._renderChildren,r),t.$scopedSlots=vo,t._c=function(e,n,r,i){return fe(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return fe(t,e,n,r,i,!0)};var i=n&&n.data;"production"!==e.env.NODE_ENV?(L(t,"$attrs",i&&i.attrs||vo,function(){!ga&&mo("$attrs is readonly.",t)},!0),L(t,"$listeners",t.$options._parentListeners||vo,function(){!ga&&mo("$listeners is readonly.",t)},!0)):(L(t,"$attrs",i&&i.attrs||vo,null,!0),L(t,"$listeners",t.$options._parentListeners||vo,null,!0))}function Oe(t,e){var n=t.$options=Object.create(t.constructor.options);n.parent=e.parent,n.propsData=e.propsData,n._parentVnode=e._parentVnode,n._parentListeners=e._parentListeners,n._renderChildren=e._renderChildren,n._componentTag=e._componentTag,n._parentElm=e._parentElm,n._refElm=e._refElm,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}function Ce(t){var e=t.options;if(t.super){var n=Ce(t.super);if(n!==t.superOptions){t.superOptions=n;var r=Se(t);r&&b(t.extendOptions,r),e=t.options=Y(n,t.extendOptions),e.name&&(e.components[e.name]=t)}}return e}function Se(t){var e,n=t.options,r=t.extendOptions,i=t.sealedOptions;for(var o in n)n[o]!==i[o]&&(e||(e={}),e[o]=Ae(n[o],r[o],i[o]));return e}function Ae(t,e,n){if(Array.isArray(t)){var r=[];n=Array.isArray(n)?n:[n],e=Array.isArray(e)?e:[e];for(var i=0;i<t.length;i++)(e.indexOf(t[i])>=0||n.indexOf(t[i])<0)&&r.push(t[i]);return r}return t}function ke(t){"production"===e.env.NODE_ENV||this instanceof ke||mo("Vue is a constructor and should be called with the `new` keyword"),this._init(t)}function Ne(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=_(arguments,1);return n.unshift(this),"function"==typeof t.install?t.install.apply(t,n):"function"==typeof t&&t.apply(null,n),e.push(t),this}}function Te(t){t.mixin=function(t){return this.options=Y(this.options,t),this}}function je(t){t.cid=0;var n=1;t.extend=function(t){t=t||{};var r=this,i=r.cid,o=t._Ctor||(t._Ctor={});if(o[i])return o[i];var a=t.name||r.options.name;"production"!==e.env.NODE_ENV&&(/^[a-zA-Z][\w-]*$/.test(a)||mo('Invalid component name: "'+a+'". Component names can only contain alphanumeric characters and the hyphen, and must start with a letter.'));var s=function(t){this._init(t)};return s.prototype=Object.create(r.prototype),s.prototype.constructor=s,s.cid=n++,s.options=Y(r.options,t),s.super=r,s.options.props&&Re(s),s.options.computed&&Pe(s),s.extend=r.extend,s.mixin=r.mixin,s.use=r.use,lo.forEach(function(t){s[t]=r[t]}),a&&(s.options.components[a]=s),s.superOptions=r.options,s.extendOptions=t,s.sealedOptions=b({},s.options),o[i]=s,s}}function Re(t){var e=t.options.props;for(var n in e)Ft(t.prototype,"_props",n)}function Pe(t){var e=t.options.computed;for(var n in e)Kt(t.prototype,n,e[n])}function $e(t){lo.forEach(function(n){t[n]=function(t,r){return r?("production"!==e.env.NODE_ENV&&"component"===n&&ho.isReservedTag(t)&&mo("Do not use built-in or reserved HTML elements as component id: "+t),"component"===n&&c(r)&&(r.name=r.name||t,r=this.options._base.extend(r)),"directive"===n&&"function"==typeof r&&(r={bind:r,update:r}),this.options[n+"s"][t]=r,r):this.options[n+"s"][t]}})}function De(t){return t&&(t.Ctor.options.name||t.tag)}function Le(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!f(t)&&t.test(e)}function Ie(t,e,n){for(var r in t){var i=t[r];if(i){var o=De(i.componentOptions);o&&!n(o)&&(i!==e&&Me(i),t[r]=null)}}}function Me(t){t&&t.componentInstance.$destroy()}function Ue(t){for(var e=t.data,n=t,r=t;i(r.componentInstance);)r=r.componentInstance._vnode,r.data&&(e=Be(r.data,e));for(;i(n=n.parent);)n.data&&(e=Be(e,n.data));return Ve(e.staticClass,e.class)}function Be(t,e){return{staticClass:Fe(t.staticClass,e.staticClass),class:i(t.class)?[t.class,e.class]:e.class}}function Ve(t,e){return i(t)||i(e)?Fe(t,qe(e)):""}function Fe(t,e){return t?e?t+" "+e:t:e||""}function qe(t){return Array.isArray(t)?ze(t):u(t)?He(t):"string"==typeof t?t:""}function ze(t){for(var e,n="",r=0,o=t.length;r<o;r++)i(e=qe(t[r]))&&""!==e&&(n&&(n+=" "),n+=e);return n}function He(t){var e="";for(var n in t)t[n]&&(e&&(e+=" "),e+=n);return e}function Je(t){return is(t)?"svg":"math"===t?"math":void 0}function We(t){if(!So)return!0;if(as(t))return!1;if(t=t.toLowerCase(),null!=ss[t])return ss[t];var e=document.createElement(t);return t.indexOf("-")>-1?ss[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:ss[t]=/HTMLUnknownElement/.test(e.toString())}function Ye(t){if("string"==typeof t){var n=document.querySelector(t);return n||("production"!==e.env.NODE_ENV&&mo("Cannot find element: "+t),document.createElement("div"))}return t}function Ke(t,e){var n=document.createElement(t);return"select"!==t?n:(e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n)}function Ge(t,e){return document.createElementNS(ns[t],e)}function Ze(t){return document.createTextNode(t)}function Xe(t){return document.createComment(t)}function Qe(t,e,n){t.insertBefore(e,n)}function tn(t,e){t.removeChild(e)}function en(t,e){t.appendChild(e)}function nn(t){return t.parentNode}function rn(t){return t.nextSibling}function on(t){return t.tagName}function an(t,e){t.textContent=e}function sn(t,e,n){t.setAttribute(e,n)}function un(t,e){var n=t.data.ref;if(n){var r=t.context,i=t.componentInstance||t.elm,o=r.$refs;e?Array.isArray(o[n])?v(o[n],i):o[n]===i&&(o[n]=void 0):t.data.refInFor?Array.isArray(o[n])?o[n].indexOf(i)<0&&o[n].push(i):o[n]=[i]:o[n]=i}}function cn(t,e){return t.key===e.key&&(t.tag===e.tag&&t.isComment===e.isComment&&i(t.data)===i(e.data)&&fn(t,e)||o(t.isAsyncPlaceholder)&&t.asyncFactory===e.asyncFactory&&r(e.asyncFactory.error))}function fn(t,e){if("input"!==t.tag)return!0;var n,r=i(n=t.data)&&i(n=n.attrs)&&n.type,o=i(n=e.data)&&i(n=n.attrs)&&n.type;return r===o||us(r)&&us(o)}function ln(t,e,n){var r,o,a={};for(r=e;r<=n;++r)o=t[r].key,i(o)&&(a[o]=r);return a}function pn(t,e){(t.data.directives||e.data.directives)&&hn(t,e)}function hn(t,e){var n,r,i,o=t===ls,a=e===ls,s=dn(t.data.directives,t.context),u=dn(e.data.directives,e.context),c=[],f=[];for(n in u)r=s[n],i=u[n],r?(i.oldValue=r.value,gn(i,"update",e,t),i.def&&i.def.componentUpdated&&f.push(i)):(gn(i,"bind",e,t),i.def&&i.def.inserted&&c.push(i));if(c.length){var l=function(){for(var n=0;n<c.length;n++)gn(c[n],"inserted",e,t)};o?ut(e.data.hook||(e.data.hook={}),"insert",l):l()}if(f.length&&ut(e.data.hook||(e.data.hook={}),"postpatch",function(){for(var n=0;n<f.length;n++)gn(f[n],"componentUpdated",e,t)}),!o)for(n in s)u[n]||gn(s[n],"unbind",t,t,a)}function dn(t,e){var n=Object.create(null);if(!t)return n;var r,i;for(r=0;r<t.length;r++)i=t[r],i.modifiers||(i.modifiers=ds),n[vn(i)]=i,i.def=K(e.$options,"directives",i.name,!0);return n}function vn(t){return t.rawName||t.name+"."+Object.keys(t.modifiers||{}).join(".")}function gn(t,e,n,r,i){var o=t.def&&t.def[e];if(o)try{o(n.elm,t,n,r,i)}catch(r){N(r,n.context,"directive "+t.name+" "+e+" hook")}}function mn(t,e){var n=e.componentOptions;if(!(i(n)&&!1===n.Ctor.options.inheritAttrs||r(t.data.attrs)&&r(e.data.attrs))){var o,a,s=e.elm,u=t.data.attrs||{},c=e.data.attrs||{};i(c.__ob__)&&(c=e.data.attrs=b({},c));for(o in c)a=c[o],u[o]!==a&&yn(s,o,a);No&&c.value!==u.value&&yn(s,"value",c.value);for(o in u)r(c[o])&&(Qa(o)?s.removeAttributeNS(Xa,ts(o)):Ga(o)||s.removeAttribute(o))}}function yn(t,e,n){Za(e)?es(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):Ga(e)?t.setAttribute(e,es(n)||"false"===n?"false":"true"):Qa(e)?es(n)?t.removeAttributeNS(Xa,ts(e)):t.setAttributeNS(Xa,e,n):es(n)?t.removeAttribute(e):t.setAttribute(e,n)}function _n(t,e){var n=e.elm,o=e.data,a=t.data;if(!(r(o.staticClass)&&r(o.class)&&(r(a)||r(a.staticClass)&&r(a.class)))){var s=Ue(e),u=n._transitionClasses;i(u)&&(s=Fe(s,qe(u))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}function bn(t){function e(){(a||(a=[])).push(t.slice(d,i).trim()),d=i+1}var n,r,i,o,a,s=!1,u=!1,c=!1,f=!1,l=0,p=0,h=0,d=0;for(i=0;i<t.length;i++)if(r=n,n=t.charCodeAt(i),s)39===n&&92!==r&&(s=!1);else if(u)34===n&&92!==r&&(u=!1);else if(c)96===n&&92!==r&&(c=!1);else if(f)47===n&&92!==r&&(f=!1);else if(124!==n||124===t.charCodeAt(i+1)||124===t.charCodeAt(i-1)||l||p||h){switch(n){case 34:u=!0;break;case 39:s=!0;break;case 96:c=!0;break;case 40:h++;break;case 41:h--;break;case 91:p++;break;case 93:p--;break;case 123:l++;break;case 125:l--}if(47===n){for(var v=i-1,g=void 0;v>=0&&" "===(g=t.charAt(v));v--);g&&ys.test(g)||(f=!0)}}else void 0===o?(d=i+1,o=t.slice(0,i).trim()):e();if(void 0===o?o=t.slice(0,i).trim():0!==d&&e(),a)for(i=0;i<a.length;i++)o=wn(o,a[i]);return o}function wn(t,e){var n=e.indexOf("(");return n<0?'_f("'+e+'")('+t+")":'_f("'+e.slice(0,n)+'")('+t+","+e.slice(n+1)}function xn(t){console.error("[Vue compiler]: "+t)}function En(t,e){return t?t.map(function(t){return t[e]}).filter(function(t){return t}):[]}function On(t,e,n){(t.props||(t.props=[])).push({name:e,value:n})}function Cn(t,e,n){(t.attrs||(t.attrs=[])).push({name:e,value:n})}function Sn(t,e,n,r,i,o){(t.directives||(t.directives=[])).push({name:e,rawName:n,value:r,arg:i,modifiers:o})}function An(t,n,r,i,o,a){"production"!==e.env.NODE_ENV&&a&&i&&i.prevent&&i.passive&&a("passive and prevent can't be used together. Passive handler can't prevent default event."),i&&i.capture&&(delete i.capture,n="!"+n),i&&i.once&&(delete i.once,n="~"+n),i&&i.passive&&(delete i.passive,n="&"+n);var s;i&&i.native?(delete i.native,s=t.nativeEvents||(t.nativeEvents={})):s=t.events||(t.events={});var u={value:r,modifiers:i},c=s[n];Array.isArray(c)?o?c.unshift(u):c.push(u):s[n]=c?o?[u,c]:[c,u]:u}function kn(t,e,n){var r=Nn(t,":"+e)||Nn(t,"v-bind:"+e);if(null!=r)return bn(r);if(!1!==n){var i=Nn(t,e);if(null!=i)return JSON.stringify(i)}}function Nn(t,e){var n;if(null!=(n=t.attrsMap[e]))for(var r=t.attrsList,i=0,o=r.length;i<o;i++)if(r[i].name===e){r.splice(i,1);break}return n}function Tn(t,e,n){var r=n||{},i=r.number,o=r.trim,a="$$v";o&&(a="(typeof $$v === 'string'? $$v.trim(): $$v)"),i&&(a="_n("+a+")");var s=jn(e,a);t.model={value:"("+e+")",expression:'"'+e+'"',callback:"function ($$v) {"+s+"}"}}function jn(t,e){var n=Rn(t);return null===n.idx?t+"="+e:"$set("+n.exp+", "+n.idx+", "+e+")"}function Rn(t){if(Ua=t,Ma=Ua.length,Va=Fa=qa=0,t.indexOf("[")<0||t.lastIndexOf("]")<Ma-1)return{exp:t,idx:null};for(;!$n();)Ba=Pn(),Dn(Ba)?In(Ba):91===Ba&&Ln(Ba);return{exp:t.substring(0,Fa),idx:t.substring(Fa+1,qa)}}function Pn(){return Ua.charCodeAt(++Va)}function $n(){return Va>=Ma}function Dn(t){return 34===t||39===t}function Ln(t){var e=1;for(Fa=Va;!$n();)if(t=Pn(),Dn(t))In(t);else if(91===t&&e++,93===t&&e--,0===e){qa=Va;break}}function In(t){for(var e=t;!$n()&&(t=Pn())!==e;);}function Mn(t,n,r){za=r;var i=n.value,o=n.modifiers,a=t.tag,s=t.attrsMap.type;if("production"!==e.env.NODE_ENV){var u=t.attrsMap["v-bind:type"]||t.attrsMap[":type"];"input"===a&&u&&za('<input :type="'+u+'" v-model="'+i+'">:\nv-model does not support dynamic input types. Use v-if branches instead.'),"input"===a&&"file"===s&&za("<"+t.tag+' v-model="'+i+'" type="file">:\nFile inputs are read only. Use a v-on:change listener instead.')}if(t.component)return Tn(t,i,o),!1;if("select"===a)Vn(t,i,o);else if("input"===a&&"checkbox"===s)Un(t,i,o);else if("input"===a&&"radio"===s)Bn(t,i,o);else if("input"===a||"textarea"===a)Fn(t,i,o);else{if(!ho.isReservedTag(a))return Tn(t,i,o),!1;"production"!==e.env.NODE_ENV&&za("<"+t.tag+' v-model="'+i+"\">: v-model is not supported on this element type. If you are working with contenteditable, it's recommended to wrap a library dedicated for that purpose inside a custom component.")}return!0}function Un(t,e,n){var r=n&&n.number,i=kn(t,"value")||"null",o=kn(t,"true-value")||"true",a=kn(t,"false-value")||"false";On(t,"checked","Array.isArray("+e+")?_i("+e+","+i+")>-1"+("true"===o?":("+e+")":":_q("+e+","+o+")")),An(t,bs,"var $$a="+e+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+e+"=$$a.concat([$$v]))}else{$$i>-1&&("+e+"=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{"+jn(e,"$$c")+"}",null,!0)}function Bn(t,e,n){var r=n&&n.number,i=kn(t,"value")||"null";i=r?"_n("+i+")":i,On(t,"checked","_q("+e+","+i+")"),An(t,bs,jn(e,i),null,!0)}function Vn(t,e,n){var r=n&&n.number,i='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(r?"_n(val)":"val")+"})",o="var $$selectedVal = "+i+";";o=o+" "+jn(e,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]"),An(t,"change",o,null,!0)}function Fn(t,e,n){var r=t.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,u=!o&&"range"!==r,c=o?"change":"range"===r?_s:"input",f="$event.target.value";s&&(f="$event.target.value.trim()"),a&&(f="_n("+f+")");var l=jn(e,f);u&&(l="if($event.target.composing)return;"+l),On(t,"value","("+e+")"),An(t,c,l,null,!0),(s||a)&&An(t,"blur","$forceUpdate()")}function qn(t){var e;i(t[_s])&&(e=ko?"change":"input",t[e]=[].concat(t[_s],t[e]||[]),delete t[_s]),i(t[bs])&&(e=Po?"click":"change",t[e]=[].concat(t[bs],t[e]||[]),delete t[bs])}function zn(t,e,n,r,i){if(n){var o=e,a=Ha;e=function(n){null!==(1===arguments.length?o(n):o.apply(null,arguments))&&Hn(t,e,r,a)}}Ha.addEventListener(t,e,Do?{capture:r,passive:i}:r)}function Hn(t,e,n,r){(r||Ha).removeEventListener(t,e,n)}function Jn(t,e){if(!r(t.data.on)||!r(e.data.on)){var n=e.data.on||{},i=t.data.on||{};Ha=e.elm,qn(n),st(n,i,zn,Hn,e.context)}}function Wn(t,e){if(!r(t.data.domProps)||!r(e.data.domProps)){var n,o,a=e.elm,s=t.data.domProps||{},u=e.data.domProps||{};i(u.__ob__)&&(u=e.data.domProps=b({},u));for(n in s)r(u[n])&&(a[n]="");for(n in u)if(o=u[n],"textContent"!==n&&"innerHTML"!==n||(e.children&&(e.children.length=0),o!==s[n]))if("value"===n){a._value=o;var c=r(o)?"":String(o);Yn(a,e,c)&&(a.value=c)}else a[n]=o}}function Yn(t,e,n){return!t.composing&&("option"===e.tag||Kn(t,n)||Gn(t,n))}function Kn(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}function Gn(t,e){var n=t.value,r=t._vModifiers;return i(r)&&r.number?h(n)!==h(e):i(r)&&r.trim?n.trim()!==e.trim():n!==e}function Zn(t){var e=Xn(t.style);return t.staticStyle?b(t.staticStyle,e):e}function Xn(t){return Array.isArray(t)?w(t):"string"==typeof t?Es(t):t}function Qn(t,e){var n,r={};if(e)for(var i=t;i.componentInstance;)i=i.componentInstance._vnode,i.data&&(n=Zn(i.data))&&b(r,n);(n=Zn(t.data))&&b(r,n);for(var o=t;o=o.parent;)o.data&&(n=Zn(o.data))&&b(r,n);return r}function tr(t,e){var n=e.data,o=t.data;if(!(r(n.staticStyle)&&r(n.style)&&r(o.staticStyle)&&r(o.style))){var a,s,u=e.elm,c=o.staticStyle,f=o.normalizedStyle||o.style||{},l=c||f,p=Xn(e.data.style)||{};e.data.normalizedStyle=i(p.__ob__)?b({},p):p;var h=Qn(e,!0);for(s in l)r(h[s])&&Ss(u,s,"");for(s in h)(a=h[s])!==l[s]&&Ss(u,s,null==a?"":a)}}function er(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(/\s+/).forEach(function(e){return t.classList.add(e)}):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function nr(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(/\s+/).forEach(function(e){return t.classList.remove(e)}):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" "+(t.getAttribute("class")||"")+" ",r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");n=n.trim(),n?t.setAttribute("class",n):t.removeAttribute("class")}}function rr(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&b(e,Ts(t.name||"v")),b(e,t),e}return"string"==typeof t?Ts(t):void 0}}function ir(t){Ms(function(){Ms(t)})}function or(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),er(t,e))}function ar(t,e){t._transitionClasses&&v(t._transitionClasses,e),nr(t,e)}function sr(t,e,n){var r=ur(t,e),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===Rs?Ds:Is,u=0,c=function(){t.removeEventListener(s,f),n()},f=function(e){e.target===t&&++u>=a&&c()};setTimeout(function(){u<a&&c()},o+1),t.addEventListener(s,f)}function ur(t,e){var n,r=window.getComputedStyle(t),i=r[$s+"Delay"].split(", "),o=r[$s+"Duration"].split(", "),a=cr(i,o),s=r[Ls+"Delay"].split(", "),u=r[Ls+"Duration"].split(", "),c=cr(s,u),f=0,l=0;return e===Rs?a>0&&(n=Rs,f=a,l=o.length):e===Ps?c>0&&(n=Ps,f=c,l=u.length):(f=Math.max(a,c),n=f>0?a>c?Rs:Ps:null,l=n?n===Rs?o.length:u.length:0),{type:n,timeout:f,propCount:l,hasTransform:n===Rs&&Us.test(r[$s+"Property"])}}function cr(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max.apply(null,e.map(function(e,n){return fr(e)+fr(t[n])}))}function fr(t){return 1e3*Number(t.slice(0,-1))}function lr(t,n){var o=t.elm;i(o._leaveCb)&&(o._leaveCb.cancelled=!0,o._leaveCb());var a=rr(t.data.transition);if(!r(a)&&!i(o._enterCb)&&1===o.nodeType){for(var s=a.css,c=a.type,f=a.enterClass,l=a.enterToClass,p=a.enterActiveClass,d=a.appearClass,v=a.appearToClass,g=a.appearActiveClass,m=a.beforeEnter,y=a.enter,_=a.afterEnter,b=a.enterCancelled,w=a.beforeAppear,x=a.appear,E=a.afterAppear,O=a.appearCancelled,S=a.duration,A=va,k=va.$vnode;k&&k.parent;)k=k.parent,A=k.context;var N=!A._isMounted||!t.isRootInsert;if(!N||x||""===x){var T=N&&d?d:f,j=N&&g?g:p,R=N&&v?v:l,P=N?w||m:m,$=N&&"function"==typeof x?x:y,D=N?E||_:_,L=N?O||b:b,I=h(u(S)?S.enter:S);"production"!==e.env.NODE_ENV&&null!=I&&hr(I,"enter",t);var M=!1!==s&&!No,U=vr($),B=o._enterCb=C(function(){M&&(ar(o,R),ar(o,j)),B.cancelled?(M&&ar(o,T),L&&L(o)):D&&D(o),o._enterCb=null});t.data.show||ut(t.data.hook||(t.data.hook={}),"insert",function(){var e=o.parentNode,n=e&&e._pending&&e._pending[t.key];n&&n.tag===t.tag&&n.elm._leaveCb&&n.elm._leaveCb(),$&&$(o,B)}),P&&P(o),M&&(or(o,T),or(o,j),ir(function(){or(o,R),ar(o,T),B.cancelled||U||(dr(I)?setTimeout(B,I):sr(o,c,B))})),t.data.show&&(n&&n(),$&&$(o,B)),M||U||B()}}}function pr(t,n){function o(){O.cancelled||(t.data.show||((a.parentNode._pending||(a.parentNode._pending={}))[t.key]=t),v&&v(a),w&&(or(a,l),or(a,d),ir(function(){or(a,p),ar(a,l),O.cancelled||x||(dr(E)?setTimeout(O,E):sr(a,f,O))})),g&&g(a,O),w||x||O())}var a=t.elm;i(a._enterCb)&&(a._enterCb.cancelled=!0,a._enterCb());var s=rr(t.data.transition);if(r(s))return n();if(!i(a._leaveCb)&&1===a.nodeType){var c=s.css,f=s.type,l=s.leaveClass,p=s.leaveToClass,d=s.leaveActiveClass,v=s.beforeLeave,g=s.leave,m=s.afterLeave,y=s.leaveCancelled,_=s.delayLeave,b=s.duration,w=!1!==c&&!No,x=vr(g),E=h(u(b)?b.leave:b);"production"!==e.env.NODE_ENV&&i(E)&&hr(E,"leave",t);var O=a._leaveCb=C(function(){a.parentNode&&a.parentNode._pending&&(a.parentNode._pending[t.key]=null),w&&(ar(a,p),ar(a,d)),O.cancelled?(w&&ar(a,l),y&&y(a)):(n(),m&&m(a)),a._leaveCb=null});_?_(o):o()}}function hr(t,e,n){"number"!=typeof t?mo("<transition> explicit "+e+" duration is not a valid number - got "+JSON.stringify(t)+".",n.context):isNaN(t)&&mo("<transition> explicit "+e+" duration is NaN - the duration expression might be incorrect.",n.context)}function dr(t){return"number"==typeof t&&!isNaN(t)}function vr(t){if(r(t))return!1;var e=t.fns;return i(e)?vr(Array.isArray(e)?e[0]:e):(t._length||t.length)>1}function gr(t,e){!0!==e.data.show&&lr(e)}function mr(t,e,n){yr(t,e,n),(ko||To)&&setTimeout(function(){yr(t,e,n)},0)}function yr(t,n,r){var i=n.value,o=t.multiple;if(o&&!Array.isArray(i))return void("production"!==e.env.NODE_ENV&&mo('<select multiple v-model="'+n.expression+'"> expects an Array value for its binding, but got '+Object.prototype.toString.call(i).slice(8,-1),r));for(var a,s,u=0,c=t.options.length;u<c;u++)if(s=t.options[u],o)a=O(i,br(s))>-1,s.selected!==a&&(s.selected=a);else if(E(br(s),i))return void(t.selectedIndex!==u&&(t.selectedIndex=u));o||(t.selectedIndex=-1)}function _r(t,e){return e.every(function(e){return!E(e,t)})}function br(t){return"_value"in t?t._value:t.value}function wr(t){t.target.composing=!0}function xr(t){t.target.composing&&(t.target.composing=!1,Er(t.target,"input"))}function Er(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Or(t){return!t.componentInstance||t.data&&t.data.transition?t:Or(t.componentInstance._vnode)}function Cr(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Cr(_t(e.children)):t}function Sr(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var i=n._parentListeners;for(var o in i)e[io(o)]=i[o];return e}function Ar(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}function kr(t){for(;t=t.parent;)if(t.data.transition)return!0}function Nr(t,e){return e.key===t.key&&e.tag===t.tag}function Tr(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function jr(t){t.data.newPos=t.elm.getBoundingClientRect()}function Rr(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,i=e.top-n.top;if(r||i){t.data.moved=!0;var o=t.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}function Pr(t,e){var n=e?nu(e):tu;if(n.test(t)){for(var r,i,o=[],a=n.lastIndex=0;r=n.exec(t);){i=r.index,i>a&&o.push(JSON.stringify(t.slice(a,i)));var s=bn(r[1].trim());o.push("_s("+s+")"),a=i+r[0].length}return a<t.length&&o.push(JSON.stringify(t.slice(a))),o.join("+")}}function $r(t,n){var r=n.warn||xn,i=Nn(t,"class");if("production"!==e.env.NODE_ENV&&i){Pr(i,n.delimiters)&&r('class="'+i+'": Interpolation inside attributes has been removed. Use v-bind or the colon shorthand instead. For example, instead of <div class="{{ val }}">, use <div :class="val">.')}i&&(t.staticClass=JSON.stringify(i));var o=kn(t,"class",!1);o&&(t.classBinding=o)}function Dr(t){var e="";return t.staticClass&&(e+="staticClass:"+t.staticClass+","),t.classBinding&&(e+="class:"+t.classBinding+","),e}function Lr(t,n){var r=n.warn||xn,i=Nn(t,"style");if(i){if("production"!==e.env.NODE_ENV){Pr(i,n.delimiters)&&r('style="'+i+'": Interpolation inside attributes has been removed. Use v-bind or the colon shorthand instead. For example, instead of <div style="{{ val }}">, use <div :style="val">.')}t.staticStyle=JSON.stringify(Es(i))}var o=kn(t,"style",!1);o&&(t.styleBinding=o)}function Ir(t){var e="";return t.staticStyle&&(e+="staticStyle:"+t.staticStyle+","),t.styleBinding&&(e+="style:("+t.styleBinding+"),"),e}function Mr(t,e){e.value&&On(t,"textContent","_s("+e.value+")")}function Ur(t,e){e.value&&On(t,"innerHTML","_s("+e.value+")")}function Br(t,e){var n=e?Lu:Du;return t.replace(n,function(t){return $u[t]})}function Vr(t,n){function r(e){l+=e,t=t.substring(e)}function i(t,r,i){var o,u;if(null==r&&(r=l),null==i&&(i=l),t&&(u=t.toLowerCase()),t)for(o=s.length-1;o>=0&&s[o].lowerCasedTag!==u;o--);else o=0;if(o>=0){for(var c=s.length-1;c>=o;c--)"production"!==e.env.NODE_ENV&&(c>o||!t)&&n.warn&&n.warn("tag <"+s[c].tag+"> has no matching end tag."),n.end&&n.end(s[c].tag,r,i);s.length=o,a=o&&s[o-1].tag}else"br"===u?n.start&&n.start(t,[],!0,r,i):"p"===u&&(n.start&&n.start(t,[],!1,r,i),n.end&&n.end(t,r,i))}for(var o,a,s=[],u=n.expectHTML,c=n.isUnaryTag||uo,f=n.canBeLeftOpenTag||uo,l=0;t;){if(o=t,a&&Ru(a)){var p=0,h=a.toLowerCase(),d=Pu[h]||(Pu[h]=new RegExp("([\\s\\S]*?)(</"+h+"[^>]*>)","i")),v=t.replace(d,function(t,e,r){return p=r.length,Ru(h)||"noscript"===h||(e=e.replace(/<!--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),Mu(h,e)&&(e=e.slice(1)),n.chars&&n.chars(e),""});l+=t.length-v.length,t=v,i(h,l-p,l)}else{var g=t.indexOf("<");if(0===g){if(_u.test(t)){var m=t.indexOf("--\x3e");if(m>=0){n.shouldKeepComment&&n.comment(t.substring(4,m)),r(m+3);continue}}if(bu.test(t)){var y=t.indexOf("]>");if(y>=0){r(y+2);continue}}var _=t.match(yu);if(_){r(_[0].length);continue}var b=t.match(mu);if(b){var w=l;r(b[0].length),i(b[1],w,l);continue}var x=function(){var e=t.match(vu);if(e){var n={tagName:e[1],attrs:[],start:l};r(e[0].length);for(var i,o;!(i=t.match(gu))&&(o=t.match(pu));)r(o[0].length),n.attrs.push(o);if(i)return n.unarySlash=i[1],r(i[0].length),n.end=l,n}}();if(x){!function(t){var e=t.tagName,r=t.unarySlash;u&&("p"===a&&cu(e)&&i(a),f(e)&&a===e&&i(e));for(var o=c(e)||!!r,l=t.attrs.length,p=new Array(l),h=0;h<l;h++){var d=t.attrs[h];wu&&-1===d[0].indexOf('""')&&(""===d[3]&&delete d[3],""===d[4]&&delete d[4],""===d[5]&&delete d[5]);var v=d[3]||d[4]||d[5]||"";p[h]={name:d[1],value:Br(v,n.shouldDecodeNewlines)}}o||(s.push({tag:e,lowerCasedTag:e.toLowerCase(),attrs:p}),a=e),n.start&&n.start(e,p,o,t.start,t.end)}(x),Mu(a,t)&&r(1);continue}}var E=void 0,O=void 0,C=void 0;if(g>=0){for(O=t.slice(g);!(mu.test(O)||vu.test(O)||_u.test(O)||bu.test(O)||(C=O.indexOf("<",1))<0);)g+=C,O=t.slice(g);E=t.substring(0,g),r(g)}g<0&&(E=t,t=""),n.chars&&E&&n.chars(E)}if(t===o){n.chars&&n.chars(t),"production"!==e.env.NODE_ENV&&!s.length&&n.warn&&n.warn('Mal-formatted tag at end of template: "'+t+'"');break}}i()}function Fr(t,n){function r(t){l||(l=!0,xu(t))}function i(t){t.pre&&(c=!1),Au(t.tag)&&(f=!1)}xu=n.warn||xn,Au=n.isPreTag||uo,ku=n.mustUseProp||uo,Nu=n.getTagNamespace||uo,Ou=En(n.modules,"transformNode"),Cu=En(n.modules,"preTransformNode"),Su=En(n.modules,"postTransformNode"),Eu=n.delimiters;var o,a,s=[],u=!1!==n.preserveWhitespace,c=!1,f=!1,l=!1;return Vr(t,{warn:xu,expectHTML:n.expectHTML,isUnaryTag:n.isUnaryTag,canBeLeftOpenTag:n.canBeLeftOpenTag,shouldDecodeNewlines:n.shouldDecodeNewlines,shouldKeepComment:n.comments,start:function(t,u,l){function p(t){"production"!==e.env.NODE_ENV&&("slot"!==t.tag&&"template"!==t.tag||r("Cannot use <"+t.tag+"> as component root element because it may contain multiple nodes."),t.attrsMap.hasOwnProperty("v-for")&&r("Cannot use v-for on stateful component root element because it renders multiple elements."))}var h=a&&a.ns||Nu(t);ko&&"svg"===h&&(u=si(u));var d={type:1,tag:t,attrsList:u,attrsMap:ii(u),parent:a,children:[]};h&&(d.ns=h),ai(d)&&!Uo()&&(d.forbidden=!0,"production"!==e.env.NODE_ENV&&xu("Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <"+t+">, as they will not be parsed."));for(var v=0;v<Cu.length;v++)Cu[v](d,n);if(c||(qr(d),d.pre&&(c=!0)),Au(d.tag)&&(f=!0),c)zr(d);else{Wr(d),Yr(d),Xr(d),Hr(d),d.plain=!d.key&&!u.length,Jr(d),Qr(d),ti(d);for(var g=0;g<Ou.length;g++)Ou[g](d,n);ei(d)}if(o?s.length||(o.if&&(d.elseif||d.else)?(p(d),Zr(o,{exp:d.elseif,block:d})):"production"!==e.env.NODE_ENV&&r("Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.")):(o=d,p(o)),a&&!d.forbidden)if(d.elseif||d.else)Kr(d,a);else if(d.slotScope){a.plain=!1;var m=d.slotTarget||'"default"';(a.scopedSlots||(a.scopedSlots={}))[m]=d}else a.children.push(d),d.parent=a;l?i(d):(a=d,s.push(d));for(var y=0;y<Su.length;y++)Su[y](d,n)},end:function(){var t=s[s.length-1],e=t.children[t.children.length-1];e&&3===e.type&&" "===e.text&&!f&&t.children.pop(),s.length-=1,a=s[s.length-1],i(t)},chars:function(n){if(!a)return void("production"!==e.env.NODE_ENV&&(n===t?r("Component template requires a root element, rather than just text."):(n=n.trim())&&r('text "'+n+'" outside root element will be ignored.')));if(!ko||"textarea"!==a.tag||a.attrsMap.placeholder!==n){var i=a.children;if(n=f||n.trim()?oi(a)?n:Ju(n):u&&i.length?" ":""){var o;!c&&" "!==n&&(o=Pr(n,Eu))?i.push({type:2,expression:o,text:n}):" "===n&&i.length&&" "===i[i.length-1].text||i.push({type:3,text:n})}}},comment:function(t){a.children.push({type:3,text:t,isComment:!0})}}),o}function qr(t){null!=Nn(t,"v-pre")&&(t.pre=!0)}function zr(t){var e=t.attrsList.length;if(e)for(var n=t.attrs=new Array(e),r=0;r<e;r++)n[r]={name:t.attrsList[r].name,value:JSON.stringify(t.attrsList[r].value)};else t.pre||(t.plain=!0)}function Hr(t){var n=kn(t,"key");n&&("production"!==e.env.NODE_ENV&&"template"===t.tag&&xu("<template> cannot be keyed. Place the key on real elements instead."),t.key=n)}function Jr(t){var e=kn(t,"ref");e&&(t.ref=e,t.refInFor=ni(t))}function Wr(t){var n;if(n=Nn(t,"v-for")){var r=n.match(Vu);if(!r)return void("production"!==e.env.NODE_ENV&&xu("Invalid v-for expression: "+n));t.for=r[2].trim();var i=r[1].trim(),o=i.match(Fu);o?(t.alias=o[1].trim(),t.iterator1=o[2].trim(),o[3]&&(t.iterator2=o[3].trim())):t.alias=i}}function Yr(t){var e=Nn(t,"v-if");if(e)t.if=e,Zr(t,{exp:e,block:t});else{null!=Nn(t,"v-else")&&(t.else=!0);var n=Nn(t,"v-else-if");n&&(t.elseif=n)}}function Kr(t,n){var r=Gr(n.children);r&&r.if?Zr(r,{exp:t.elseif,block:t}):"production"!==e.env.NODE_ENV&&xu("v-"+(t.elseif?'else-if="'+t.elseif+'"':"else")+" used on element <"+t.tag+"> without corresponding v-if.")}function Gr(t){for(var n=t.length;n--;){if(1===t[n].type)return t[n];"production"!==e.env.NODE_ENV&&" "!==t[n].text&&xu('text "'+t[n].text.trim()+'" between v-if and v-else(-if) will be ignored.'),t.pop()}}function Zr(t,e){t.ifConditions||(t.ifConditions=[]),t.ifConditions.push(e)}function Xr(t){null!=Nn(t,"v-once")&&(t.once=!0)}function Qr(t){if("slot"===t.tag)t.slotName=kn(t,"name"),"production"!==e.env.NODE_ENV&&t.key&&xu("`key` does not work on <slot> because slots are abstract outlets and can possibly expand into multiple elements. Use the key on a wrapping element instead.");else{var n=kn(t,"slot");n&&(t.slotTarget='""'===n?'"default"':n,Cn(t,"slot",n)),"template"===t.tag&&(t.slotScope=Nn(t,"scope"))}}function ti(t){var e;(e=kn(t,"is"))&&(t.component=e),null!=Nn(t,"inline-template")&&(t.inlineTemplate=!0)}function ei(t){var n,r,i,o,a,s,u,c=t.attrsList;for(n=0,r=c.length;n<r;n++)if(i=o=c[n].name,a=c[n].value,Bu.test(i))if(t.hasBindings=!0,s=ri(i),s&&(i=i.replace(Hu,"")),zu.test(i))i=i.replace(zu,""),a=bn(a),u=!1,s&&(s.prop&&(u=!0,"innerHtml"===(i=io(i))&&(i="innerHTML")),s.camel&&(i=io(i)),s.sync&&An(t,"update:"+io(i),jn(a,"$event"))),u||!t.component&&ku(t.tag,t.attrsMap.type,i)?On(t,i,a):Cn(t,i,a);else if(Uu.test(i))i=i.replace(Uu,""),An(t,i,a,s,!1,xu);else{i=i.replace(Bu,"");var f=i.match(qu),l=f&&f[1];l&&(i=i.slice(0,-(l.length+1))),Sn(t,i,o,a,l,s),"production"!==e.env.NODE_ENV&&"model"===i&&ui(t,a)}else{if("production"!==e.env.NODE_ENV){var p=Pr(a,Eu);p&&xu(i+'="'+a+'": Interpolation inside attributes has been removed. Use v-bind or the colon shorthand instead. For example, instead of <div id="{{ val }}">, use <div :id="val">.')}Cn(t,i,JSON.stringify(a))}}function ni(t){for(var e=t;e;){if(void 0!==e.for)return!0;e=e.parent}return!1}function ri(t){var e=t.match(Hu);if(e){var n={};return e.forEach(function(t){n[t.slice(1)]=!0}),n}}function ii(t){for(var n={},r=0,i=t.length;r<i;r++)"production"===e.env.NODE_ENV||!n[t[r].name]||ko||To||xu("duplicate attribute: "+t[r].name),n[t[r].name]=t[r].value;return n}function oi(t){return"script"===t.tag||"style"===t.tag}function ai(t){return"style"===t.tag||"script"===t.tag&&(!t.attrsMap.type||"text/javascript"===t.attrsMap.type)}function si(t){for(var e=[],n=0;n<t.length;n++){var r=t[n];Wu.test(r.name)||(r.name=r.name.replace(Yu,""),e.push(r))}return e}function ui(t,e){for(var n=t;n;)n.for&&n.alias===e&&xu("<"+t.tag+' v-model="'+e+'">: You are binding v-model directly to a v-for iteration alias. This will not be able to modify the v-for source array because writing to the alias is like modifying a function local variable. Consider using an array of objects and use v-model on an object property instead.'),n=n.parent}function ci(t,e){t&&(Tu=Ku(e.staticKeys||""),ju=e.isReservedTag||uo,li(t),pi(t,!1))}function fi(t){return d("type,tag,attrsList,attrsMap,plain,parent,children,attrs"+(t?","+t:""))}function li(t){if(t.static=hi(t),1===t.type){if(!ju(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var e=0,n=t.children.length;e<n;e++){var r=t.children[e];li(r),r.static||(t.static=!1)}if(t.ifConditions)for(var i=1,o=t.ifConditions.length;i<o;i++){var a=t.ifConditions[i].block;li(a),a.static||(t.static=!1)}}}function pi(t,e){if(1===t.type){if((t.static||t.once)&&(t.staticInFor=e),t.static&&t.children.length&&(1!==t.children.length||3!==t.children[0].type))return void(t.staticRoot=!0);if(t.staticRoot=!1,t.children)for(var n=0,r=t.children.length;n<r;n++)pi(t.children[n],e||!!t.for);if(t.ifConditions)for(var i=1,o=t.ifConditions.length;i<o;i++)pi(t.ifConditions[i].block,e)}}function hi(t){return 2!==t.type&&(3===t.type||!(!t.pre&&(t.hasBindings||t.if||t.for||to(t.tag)||!ju(t.tag)||di(t)||!Object.keys(t).every(Tu))))}function di(t){for(;t.parent;){if(t=t.parent,"template"!==t.tag)return!1;if(t.for)return!0}return!1}function vi(t,n,r){var i=n?"nativeOn:{":"on:{";for(var o in t){var a=t[o];"production"!==e.env.NODE_ENV&&"click"===o&&a&&a.modifiers&&a.modifiers.right&&r('Use "contextmenu" instead of "click.right" since right clicks do not actually fire "click" events.'),i+='"'+o+'":'+gi(o,a)+","}return i.slice(0,-1)+"}"}function gi(t,e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map(function(e){return gi(t,e)}).join(",")+"]";var n=Zu.test(e.value),r=Gu.test(e.value);if(e.modifiers){var i="",o="",a=[];for(var s in e.modifiers)tc[s]?(o+=tc[s],Xu[s]&&a.push(s)):a.push(s);a.length&&(i+=mi(a)),o&&(i+=o);return"function($event){"+i+(n?e.value+"($event)":r?"("+e.value+")($event)":e.value)+"}"}return n||r?e.value:"function($event){"+e.value+"}"}function mi(t){return"if(!('button' in $event)&&"+t.map(yi).join("&&")+")return null;"}function yi(t){var e=parseInt(t,10);if(e)return"$event.keyCode!=="+e;var n=Xu[t];return"_k($event.keyCode,"+JSON.stringify(t)+(n?","+JSON.stringify(n):"")+")"}function _i(t,n){"production"!==e.env.NODE_ENV&&n.modifiers&&mo("v-on without argument does not support modifiers."),t.wrapListeners=function(t){return"_g("+t+","+n.value+")"}}function bi(t,e){t.wrapData=function(n){return"_b("+n+",'"+t.tag+"',"+e.value+","+(e.modifiers&&e.modifiers.prop?"true":"false")+(e.modifiers&&e.modifiers.sync?",true":"")+")"}}function wi(t,e){var n=new nc(e);return{render:"with(this){return "+(t?xi(t,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function xi(t,e){if(t.staticRoot&&!t.staticProcessed)return Ei(t,e);if(t.once&&!t.onceProcessed)return Oi(t,e);if(t.for&&!t.forProcessed)return Ai(t,e);if(t.if&&!t.ifProcessed)return Ci(t,e);if("template"!==t.tag||t.slotTarget){if("slot"===t.tag)return Bi(t,e);var n;if(t.component)n=Vi(t.component,t,e);else{var r=t.plain?void 0:ki(t,e),i=t.inlineTemplate?null:$i(t,e,!0);n="_c('"+t.tag+"'"+(r?","+r:"")+(i?","+i:"")+")"}for(var o=0;o<e.transforms.length;o++)n=e.transforms[o](t,n);return n}return $i(t,e)||"void 0"}function Ei(t,e){return t.staticProcessed=!0,e.staticRenderFns.push("with(this){return "+xi(t,e)+"}"),"_m("+(e.staticRenderFns.length-1)+(t.staticInFor?",true":"")+")"}function Oi(t,n){if(t.onceProcessed=!0,t.if&&!t.ifProcessed)return Ci(t,n);if(t.staticInFor){for(var r="",i=t.parent;i;){if(i.for){r=i.key;break}i=i.parent}return r?"_o("+xi(t,n)+","+n.onceId+++","+r+")":("production"!==e.env.NODE_ENV&&n.warn("v-once can only be used inside v-for that is keyed. "),xi(t,n))}return Ei(t,n)}function Ci(t,e,n,r){return t.ifProcessed=!0,Si(t.ifConditions.slice(),e,n,r)}function Si(t,e,n,r){function i(t){return n?n(t,e):t.once?Oi(t,e):xi(t,e)}if(!t.length)return r||"_e()";var o=t.shift();return o.exp?"("+o.exp+")?"+i(o.block)+":"+Si(t,e,n,r):""+i(o.block)}function Ai(t,n,r,i){var o=t.for,a=t.alias,s=t.iterator1?","+t.iterator1:"",u=t.iterator2?","+t.iterator2:"";return"production"!==e.env.NODE_ENV&&n.maybeComponent(t)&&"slot"!==t.tag&&"template"!==t.tag&&!t.key&&n.warn("<"+t.tag+' v-for="'+a+" in "+o+'">: component lists rendered with v-for should have explicit keys. See https://vuejs.org/guide/list.html#key for more info.',!0),t.forProcessed=!0,(i||"_l")+"(("+o+"),function("+a+s+u+"){return "+(r||xi)(t,n)+"})"}function ki(t,e){var n="{",r=Ni(t,e);r&&(n+=r+","),t.key&&(n+="key:"+t.key+","),t.ref&&(n+="ref:"+t.ref+","),t.refInFor&&(n+="refInFor:true,"),t.pre&&(n+="pre:true,"),t.component&&(n+='tag:"'+t.tag+'",');for(var i=0;i<e.dataGenFns.length;i++)n+=e.dataGenFns[i](t);if(t.attrs&&(n+="attrs:{"+Fi(t.attrs)+"},"),t.props&&(n+="domProps:{"+Fi(t.props)+"},"),t.events&&(n+=vi(t.events,!1,e.warn)+","),t.nativeEvents&&(n+=vi(t.nativeEvents,!0,e.warn)+","),t.slotTarget&&(n+="slot:"+t.slotTarget+","),t.scopedSlots&&(n+=ji(t.scopedSlots,e)+","),t.model&&(n+="model:{value:"+t.model.value+",callback:"+t.model.callback+",expression:"+t.model.expression+"},"),t.inlineTemplate){var o=Ti(t,e);o&&(n+=o+",")}return n=n.replace(/,$/,"")+"}",t.wrapData&&(n=t.wrapData(n)),t.wrapListeners&&(n=t.wrapListeners(n)),n}function Ni(t,e){var n=t.directives;if(n){var r,i,o,a,s="directives:[",u=!1;for(r=0,i=n.length;r<i;r++){o=n[r],a=!0;var c=e.directives[o.name];c&&(a=!!c(t,o,e.warn)),a&&(u=!0,s+='{name:"'+o.name+'",rawName:"'+o.rawName+'"'+(o.value?",value:("+o.value+"),expression:"+JSON.stringify(o.value):"")+(o.arg?',arg:"'+o.arg+'"':"")+(o.modifiers?",modifiers:"+JSON.stringify(o.modifiers):"")+"},")}return u?s.slice(0,-1)+"]":void 0}}function Ti(t,n){var r=t.children[0];if("production"!==e.env.NODE_ENV&&(t.children.length>1||1!==r.type)&&n.warn("Inline-template components must have exactly one child element."),1===r.type){var i=wi(r,n.options);return"inlineTemplate:{render:function(){"+i.render+"},staticRenderFns:["+i.staticRenderFns.map(function(t){return"function(){"+t+"}"}).join(",")+"]}"}}function ji(t,e){return"scopedSlots:_u(["+Object.keys(t).map(function(n){return Ri(n,t[n],e)}).join(",")+"])"}function Ri(t,e,n){return e.for&&!e.forProcessed?Pi(t,e,n):"{key:"+t+",fn:function("+String(e.attrsMap.scope)+"){return "+("template"===e.tag?$i(e,n)||"void 0":xi(e,n))+"}}"}function Pi(t,e,n){var r=e.for,i=e.alias,o=e.iterator1?","+e.iterator1:"",a=e.iterator2?","+e.iterator2:"";return e.forProcessed=!0,"_l(("+r+"),function("+i+o+a+"){return "+Ri(t,e,n)+"})"}function $i(t,e,n,r,i){var o=t.children;if(o.length){var a=o[0];if(1===o.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag)return(r||xi)(a,e);var s=n?Di(o,e.maybeComponent):0,u=i||Ii;return"["+o.map(function(t){return u(t,e)}).join(",")+"]"+(s?","+s:"")}}function Di(t,e){for(var n=0,r=0;r<t.length;r++){var i=t[r];if(1===i.type){if(Li(i)||i.ifConditions&&i.ifConditions.some(function(t){return Li(t.block)})){n=2;break}(e(i)||i.ifConditions&&i.ifConditions.some(function(t){return e(t.block)}))&&(n=1)}}return n}function Li(t){return void 0!==t.for||"template"===t.tag||"slot"===t.tag}function Ii(t,e){return 1===t.type?xi(t,e):3===t.type&&t.isComment?Ui(t):Mi(t)}function Mi(t){return"_v("+(2===t.type?t.expression:qi(JSON.stringify(t.text)))+")"}function Ui(t){return"_e("+JSON.stringify(t.text)+")"}function Bi(t,e){var n=t.slotName||'"default"',r=$i(t,e),i="_t("+n+(r?","+r:""),o=t.attrs&&"{"+t.attrs.map(function(t){return io(t.name)+":"+t.value}).join(",")+"}",a=t.attrsMap["v-bind"];return!o&&!a||r||(i+=",null"),o&&(i+=","+o),a&&(i+=(o?"":",null")+","+a),i+")"}function Vi(t,e,n){var r=e.inlineTemplate?null:$i(e,n,!0);return"_c("+t+","+ki(e,n)+(r?","+r:"")+")"}function Fi(t){for(var e="",n=0;n<t.length;n++){var r=t[n];e+='"'+r.name+'":'+qi(r.value)+","}return e.slice(0,-1)}function qi(t){return t.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function zi(t){var e=[];return t&&Hi(t,e),e}function Hi(t,e){if(1===t.type){for(var n in t.attrsMap)if(Bu.test(n)){var r=t.attrsMap[n];r&&("v-for"===n?Wi(t,'v-for="'+r+'"',e):Uu.test(n)?Ji(r,n+'="'+r+'"',e):Ki(r,n+'="'+r+'"',e))}if(t.children)for(var i=0;i<t.children.length;i++)Hi(t.children[i],e)}else 2===t.type&&Ki(t.expression,t.text,e)}function Ji(t,e,n){var r=t.replace(ac,""),i=r.match(ic);i&&"$"!==r.charAt(i.index-1)&&n.push('avoid using JavaScript unary operator as property name: "'+i[0]+'" in expression '+e.trim()),Ki(t,e,n)}function Wi(t,e,n){Ki(t.for||"",e,n),Yi(t.alias,"v-for alias",e,n),Yi(t.iterator1,"v-for iterator",e,n),Yi(t.iterator2,"v-for iterator",e,n)}function Yi(t,e,n,r){"string"!=typeof t||oc.test(t)||r.push("invalid "+e+' "'+t+'" in expression: '+n.trim())}function Ki(t,e,n){try{new Function("return "+t)}catch(i){var r=t.replace(ac,"").match(rc);r?n.push('avoid using JavaScript keyword as property name: "'+r[0]+'" in expression '+e.trim()):n.push("invalid expression: "+e.trim())}}function Gi(t,e){try{return new Function(t)}catch(n){return e.push({err:n,code:t}),x}}function Zi(t){var n=Object.create(null);return function(r,i,o){if(i=i||{},"production"!==e.env.NODE_ENV)try{new Function("return 1")}catch(t){t.toString().match(/unsafe-eval|CSP/)&&mo("It seems you are using the standalone build of Vue.js in an environment with Content Security Policy that prohibits unsafe-eval. The template compiler cannot work in this environment. Consider relaxing the policy to allow unsafe-eval or pre-compiling your templates into render functions.")}var a=i.delimiters?String(i.delimiters)+r:r;if(n[a])return n[a];var s=t(r,i);"production"!==e.env.NODE_ENV&&(s.errors&&s.errors.length&&mo("Error compiling template:\n\n"+r+"\n\n"+s.errors.map(function(t){return"- "+t}).join("\n")+"\n",o),s.tips&&s.tips.length&&s.tips.forEach(function(t){return yo(t,o)}));var u={},c=[];return u.render=Gi(s.render,c),u.staticRenderFns=s.staticRenderFns.map(function(t){return Gi(t,c)}),"production"!==e.env.NODE_ENV&&(s.errors&&s.errors.length||!c.length||mo("Failed to generate render function:\n\n"+c.map(function(t){var e=t.err,n=t.code;return e.toString()+" in\n\n"+n+"\n"}).join("\n"),o)),n[a]=u}}function Xi(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}var Qi=Object.prototype.toString,to=d("slot,component",!0),eo=d("key,ref,slot,is"),no=Object.prototype.hasOwnProperty,ro=/-(\w)/g,io=m(function(t){return t.replace(ro,function(t,e){return e?e.toUpperCase():""})}),oo=m(function(t){return t.charAt(0).toUpperCase()+t.slice(1)}),ao=/\B([A-Z])/g,so=m(function(t){return t.replace(ao,"-$1").toLowerCase()}),uo=function(t,e,n){return!1},co=function(t){return t},fo="data-server-rendered",lo=["component","directive","filter"],po=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated"],ho={optionMergeStrategies:Object.create(null),silent:!1,productionTip:"production"!==e.env.NODE_ENV,devtools:"production"!==e.env.NODE_ENV,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:uo,isReservedAttr:uo,isUnknownElement:uo,getTagNamespace:x,parsePlatformTagName:co,mustUseProp:uo,_lifecycleHooks:po},vo=Object.freeze({}),go=/[^\w.$]/,mo=x,yo=x,_o=null;if("production"!==e.env.NODE_ENV){var bo="undefined"!=typeof console,wo=/(?:^|[-_])(\w)/g,xo=function(t){return t.replace(wo,function(t){return t.toUpperCase()}).replace(/[-_]/g,"")};mo=function(t,e){var n=e?Oo(e):"";ho.warnHandler?ho.warnHandler.call(null,t,e,n):bo&&!ho.silent&&console.error("[Vue warn]: "+t+n)},yo=function(t,e){bo&&!ho.silent&&console.warn("[Vue tip]: "+t+(e?Oo(e):""))},_o=function(t,e){if(t.$root===t)return"<Root>";var n="string"==typeof t?t:"function"==typeof t&&t.options?t.options.name:t._isVue?t.$options.name||t.$options._componentTag:t.name,r=t._isVue&&t.$options.__file;if(!n&&r){var i=r.match(/([^\/\\]+)\.vue$/);n=i&&i[1]}return(n?"<"+xo(n)+">":"<Anonymous>")+(r&&!1!==e?" at "+r:"")};var Eo=function(t,e){for(var n="";e;)e%2==1&&(n+=t),e>1&&(t+=t),e>>=1;return n},Oo=function(t){if(t._isVue&&t.$parent){for(var e=[],n=0;t;){if(e.length>0){var r=e[e.length-1];if(r.constructor===t.constructor){n++,t=t.$parent;continue}n>0&&(e[e.length-1]=[r,n],n=0)}e.push(t),t=t.$parent}return"\n\nfound in\n\n"+e.map(function(t,e){return""+(0===e?"---\x3e ":Eo(" ",5+2*e))+(Array.isArray(t)?_o(t[0])+"... ("+t[1]+" recursive calls)":_o(t))}).join("\n")}return"\n\n(found in "+_o(t)+")"}}var Co="__proto__"in{},So="undefined"!=typeof window,Ao=So&&window.navigator.userAgent.toLowerCase(),ko=Ao&&/msie|trident/.test(Ao),No=Ao&&Ao.indexOf("msie 9.0")>0,To=Ao&&Ao.indexOf("edge/")>0,jo=Ao&&Ao.indexOf("android")>0,Ro=Ao&&/iphone|ipad|ipod|ios/.test(Ao),Po=Ao&&/chrome\/\d+/.test(Ao)&&!To,$o={}.watch,Do=!1;if(So)try{var Lo={};Object.defineProperty(Lo,"passive",{get:function(){Do=!0}}),window.addEventListener("test-passive",null,Lo)}catch(t){}var Io,Mo,Uo=function(){return void 0===Io&&(Io=!So&&void 0!==n&&"server"===n.process.env.VUE_ENV),Io},Bo=So&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,Vo="undefined"!=typeof Symbol&&T(Symbol)&&"undefined"!=typeof Reflect&&T(Reflect.ownKeys),Fo=function(){function t(){r=!1;var t=n.slice(0);n.length=0;for(var e=0;e<t.length;e++)t[e]()}var e,n=[],r=!1;if("undefined"!=typeof Promise&&T(Promise)){var i=Promise.resolve(),o=function(t){console.error(t)};e=function(){i.then(t).catch(o),Ro&&setTimeout(x)}}else if(ko||"undefined"==typeof MutationObserver||!T(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())e=function(){setTimeout(t,0)};else{var a=1,s=new MutationObserver(t),u=document.createTextNode(String(a));s.observe(u,{characterData:!0}),e=function(){a=(a+1)%2,u.data=String(a)}}return function(t,i){var o;if(n.push(function(){if(t)try{t.call(i)}catch(t){N(t,i,"nextTick")}else o&&o(i)}),r||(r=!0,e()),!t&&"undefined"!=typeof Promise)return new Promise(function(t,e){o=t})}}();Mo="undefined"!=typeof Set&&T(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var qo=0,zo=function(){this.id=qo++,this.subs=[]};zo.prototype.addSub=function(t){this.subs.push(t)},zo.prototype.removeSub=function(t){v(this.subs,t)},zo.prototype.depend=function(){zo.target&&zo.target.addDep(this)},zo.prototype.notify=function(){for(var t=this.subs.slice(),e=0,n=t.length;e<n;e++)t[e].update()},zo.target=null;var Ho=[],Jo=Array.prototype,Wo=Object.create(Jo);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(t){var e=Jo[t];A(Wo,t,function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];var i,o=e.apply(this,n),a=this.__ob__;switch(t){case"push":case"unshift":i=n;break;case"splice":i=n.slice(2)}return i&&a.observeArray(i),a.dep.notify(),o})});var Yo=Object.getOwnPropertyNames(Wo),Ko={shouldConvert:!0},Go=function(t){if(this.value=t,this.dep=new zo,this.vmCount=0,A(t,"__ob__",this),Array.isArray(t)){(Co?P:$)(t,Wo,Yo),this.observeArray(t)}else this.walk(t)};Go.prototype.walk=function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)L(t,e[n],t[e[n]])},Go.prototype.observeArray=function(t){for(var e=0,n=t.length;e<n;e++)D(t[e])};var Zo=ho.optionMergeStrategies;"production"!==e.env.NODE_ENV&&(Zo.el=Zo.propsData=function(t,e,n,r){return n||mo('option "'+r+'" can only be used during instance creation with the `new` keyword.'),ta(t,e)}),Zo.data=function(t,n,r){return r?V(t,n,r):n&&"function"!=typeof n?("production"!==e.env.NODE_ENV&&mo('The "data" option should be a function that returns a per-instance value in component definitions.',r),t):V.call(this,t,n)},po.forEach(function(t){Zo[t]=F}),lo.forEach(function(t){Zo[t+"s"]=q}),Zo.watch=function(t,e){if(t===$o&&(t=void 0),e===$o&&(e=void 0),!e)return Object.create(t||null);if(!t)return e;var n={};b(n,t);for(var r in e){var i=n[r],o=e[r];i&&!Array.isArray(i)&&(i=[i]),n[r]=i?i.concat(o):Array.isArray(o)?o:[o]}return n},Zo.props=Zo.methods=Zo.inject=Zo.computed=function(t,e){if(!t)return e;var n=Object.create(null);return b(n,t),e&&b(n,e),n},Zo.provide=V;var Xo,Qo,ta=function(t,e){return void 0===e?t:e},ea=/^(String|Number|Boolean|Function|Symbol)$/;if("production"!==e.env.NODE_ENV){var na=So&&window.performance;na&&na.mark&&na.measure&&na.clearMarks&&na.clearMeasures&&(Xo=function(t){return na.mark(t)},Qo=function(t,e,n){na.measure(t,e,n),na.clearMarks(e),na.clearMarks(n),na.clearMeasures(t)})}var ra;if("production"!==e.env.NODE_ENV){var ia=d("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,require"),oa=function(t,e){mo('Property or method "'+e+'" is not defined on the instance but referenced during render. Make sure to declare reactive data properties in the data option.',t)},aa="undefined"!=typeof Proxy&&Proxy.toString().match(/native code/);if(aa){var sa=d("stop,prevent,self,ctrl,shift,alt,meta");ho.keyCodes=new Proxy(ho.keyCodes,{set:function(t,e,n){return sa(e)?(mo("Avoid overwriting built-in modifier in config.keyCodes: ."+e),!1):(t[e]=n,!0)}})}var ua={has:function(t,e){var n=e in t,r=ia(e)||"_"===e.charAt(0);return n||r||oa(t,e),n||!r}},ca={get:function(t,e){return"string"!=typeof e||e in t||oa(t,e),t[e]}};ra=function(t){if(aa){var e=t.$options,n=e.render&&e.render._withStripped?ca:ua;t._renderProxy=new Proxy(t,n)}else t._renderProxy=t}}var fa=function(t,e,n,r,i,o,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=i,this.ns=void 0,this.context=o,this.functionalContext=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},la={child:{}};la.child.get=function(){return this.componentInstance},Object.defineProperties(fa.prototype,la);var pa,ha=function(t){void 0===t&&(t="");var e=new fa;return e.text=t,e.isComment=!0,e},da=m(function(t){var e="&"===t.charAt(0);t=e?t.slice(1):t;var n="~"===t.charAt(0);t=n?t.slice(1):t;var r="!"===t.charAt(0);return t=r?t.slice(1):t,{name:t,plain:!(e||n||r),once:n,capture:r,passive:e}}),va=null,ga=!1,ma=100,ya=[],_a=[],ba={},wa={},xa=!1,Ea=!1,Oa=0,Ca=0,Sa=function(t,n,r,i){this.vm=t,t._watchers.push(this),i?(this.deep=!!i.deep,this.user=!!i.user,this.lazy=!!i.lazy,this.sync=!!i.sync):this.deep=this.user=this.lazy=this.sync=!1,this.cb=r,this.id=++Ca,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new Mo,this.newDepIds=new Mo,this.expression="production"!==e.env.NODE_ENV?n.toString():"","function"==typeof n?this.getter=n:(this.getter=k(n),this.getter||(this.getter=function(){},"production"!==e.env.NODE_ENV&&mo('Failed watching path: "'+n+'" Watcher only accepts simple dot-delimited paths. For full control, use a function instead.',t))),this.value=this.lazy?void 0:this.get()};Sa.prototype.get=function(){j(this);var t,e=this.vm;try{t=this.getter.call(e,e)}catch(t){if(!this.user)throw t;N(t,e,'getter for watcher "'+this.expression+'"')}finally{this.deep&&Bt(t),R(),this.cleanupDeps()}return t},Sa.prototype.addDep=function(t){var e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))},Sa.prototype.cleanupDeps=function(){for(var t=this,e=this.deps.length;e--;){var n=t.deps[e];t.newDepIds.has(n.id)||n.removeSub(t)}var r=this.depIds;this.depIds=this.newDepIds,this.newDepIds=r,this.newDepIds.clear(),r=this.deps,this.deps=this.newDeps,this.newDeps=r,this.newDeps.length=0},Sa.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():Ut(this)},Sa.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||u(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(t){N(t,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,e)}}},Sa.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Sa.prototype.depend=function(){for(var t=this,e=this.deps.length;e--;)t.deps[e].depend()},Sa.prototype.teardown=function(){var t=this;if(this.active){this.vm._isBeingDestroyed||v(this.vm._watchers,this);for(var e=this.deps.length;e--;)t.deps[e].removeSub(t);this.active=!1}};var Aa=new Mo,ka={enumerable:!0,configurable:!0,get:x,set:x},Na={lazy:!0},Ta={init:function(t,e,n,r){if(!t.componentInstance||t.componentInstance._isDestroyed){(t.componentInstance=ae(t,va,n,r)).$mount(e?t.elm:void 0,e)}else if(t.data.keepAlive){var i=t;Ta.prepatch(i,i)}},prepatch:function(t,e){var n=e.componentOptions;Nt(e.componentInstance=t.componentInstance,n.propsData,n.listeners,e,n.children)},insert:function(t){var e=t.context,n=t.componentInstance;n._isMounted||(n._isMounted=!0,Pt(n,"mounted")),t.data.keepAlive&&(e._isMounted?It(n):jt(n,!0))},destroy:function(t){var e=t.componentInstance;e._isDestroyed||(t.data.keepAlive?Rt(e,!0):e.$destroy())}},ja=Object.keys(Ta),Ra=1,Pa=2,$a=0;!function(t){t.prototype._init=function(t){var n=this;n._uid=$a++;var r,i;"production"!==e.env.NODE_ENV&&ho.performance&&Xo&&(r="vue-perf-init:"+n._uid,i="vue-perf-end:"+n._uid,Xo(r)),n._isVue=!0,t&&t._isComponent?Oe(n,t):n.$options=Y(Ce(n.constructor),t||{},n),"production"!==e.env.NODE_ENV?ra(n):n._renderProxy=n,n._self=n,At(n),bt(n),Ee(n),Pt(n,"beforeCreate"),ee(n),qt(n),te(n),Pt(n,"created"),"production"!==e.env.NODE_ENV&&ho.performance&&Xo&&(n._name=_o(n,!1),Xo(i),Qo(n._name+" init",r,i)),n.$options.el&&n.$mount(n.$options.el)}}(ke),function(t){var n={};n.get=function(){return this._data};var r={};r.get=function(){return this._props},"production"!==e.env.NODE_ENV&&(n.set=function(t){mo("Avoid replacing instance root $data. Use nested data properties instead.",this)},r.set=function(){mo("$props is readonly.",this)}),Object.defineProperty(t.prototype,"$data",n),Object.defineProperty(t.prototype,"$props",r),t.prototype.$set=I,t.prototype.$delete=M,t.prototype.$watch=function(t,e,n){var r=this;if(c(e))return Qt(r,t,e,n);n=n||{},n.user=!0;var i=new Sa(r,t,e,n);return n.immediate&&e.call(r,i.value),function(){i.teardown()}}}(ke),function(t){var n=/^hook:/;t.prototype.$on=function(t,e){var r=this,i=this;if(Array.isArray(t))for(var o=0,a=t.length;o<a;o++)r.$on(t[o],e);else(i._events[t]||(i._events[t]=[])).push(e),n.test(t)&&(i._hasHookEvent=!0);return i},t.prototype.$once=function(t,e){function n(){r.$off(t,n),e.apply(r,arguments)}var r=this;return n.fn=e,r.$on(t,n),r},t.prototype.$off=function(t,e){var n=this,r=this;if(!arguments.length)return r._events=Object.create(null),r;if(Array.isArray(t)){for(var i=0,o=t.length;i<o;i++)n.$off(t[i],e);return r}var a=r._events[t];if(!a)return r;if(1===arguments.length)return r._events[t]=null,r;if(e)for(var s,u=a.length;u--;)if((s=a[u])===e||s.fn===e){a.splice(u,1);break}return r},t.prototype.$emit=function(t){var n=this;if("production"!==e.env.NODE_ENV){var r=t.toLowerCase();r!==t&&n._events[r]&&yo('Event "'+r+'" is emitted in component '+_o(n)+' but the handler is registered for "'+t+'". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "'+so(t)+'" instead of "'+t+'".')}var i=n._events[t];if(i){i=i.length>1?_(i):i;for(var o=_(arguments,1),a=0,s=i.length;a<s;a++)try{i[a].apply(n,o)}catch(e){N(e,n,'event handler for "'+t+'"')}}return n}}(ke),function(t){t.prototype._update=function(t,e){var n=this;n._isMounted&&Pt(n,"beforeUpdate");var r=n.$el,i=n._vnode,o=va;va=n,n._vnode=t,i?n.$el=n.__patch__(i,t):(n.$el=n.__patch__(n.$el,t,e,!1,n.$options._parentElm,n.$options._refElm),n.$options._parentElm=n.$options._refElm=null),va=o,r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},t.prototype.$forceUpdate=function(){var t=this;t._watcher&&t._watcher.update()},t.prototype.$destroy=function(){var t=this;if(!t._isBeingDestroyed){Pt(t,"beforeDestroy"),t._isBeingDestroyed=!0;var e=t.$parent;!e||e._isBeingDestroyed||t.$options.abstract||v(e.$children,t),t._watcher&&t._watcher.teardown();for(var n=t._watchers.length;n--;)t._watchers[n].teardown();t._data.__ob__&&t._data.__ob__.vmCount--,t._isDestroyed=!0,t.__patch__(t._vnode,null),Pt(t,"destroyed"),t.$off(),t.$el&&(t.$el.__vue__=null)}}}(ke),function(t){t.prototype.$nextTick=function(t){return Fo(t,this)},t.prototype._render=function(){var t=this,n=t.$options,r=n.render,i=n.staticRenderFns,o=n._parentVnode;if(t._isMounted)for(var a in t.$slots){var s=t.$slots[a];s._rendered&&(t.$slots[a]=it(s,!0))}t.$scopedSlots=o&&o.data.scopedSlots||vo,i&&!t._staticTrees&&(t._staticTrees=[]),t.$vnode=o;var u;try{u=r.call(t._renderProxy,t.$createElement)}catch(n){N(n,t,"render function"),u="production"!==e.env.NODE_ENV&&t.$options.renderError?t.$options.renderError.call(t._renderProxy,t.$createElement,n):t._vnode}return u instanceof fa||("production"!==e.env.NODE_ENV&&Array.isArray(u)&&mo("Multiple root nodes returned from render function. Render function should return a single root node.",t),u=ha()),u.parent=o,u},t.prototype._o=_e,t.prototype._n=h,t.prototype._s=p,t.prototype._l=he,t.prototype._t=de,t.prototype._q=E,t.prototype._i=O,t.prototype._m=ye,t.prototype._f=ve,t.prototype._k=ge,t.prototype._b=me,t.prototype._v=nt,t.prototype._e=ha,t.prototype._u=St,t.prototype._g=xe}(ke);var Da=[String,RegExp,Array],La={name:"keep-alive",abstract:!0,props:{include:Da,exclude:Da},created:function(){this.cache=Object.create(null)},destroyed:function(){var t=this;for(var e in t.cache)Me(t.cache[e])},watch:{include:function(t){Ie(this.cache,this._vnode,function(e){return Le(t,e)})},exclude:function(t){Ie(this.cache,this._vnode,function(e){return!Le(t,e)})}},render:function(){var t=_t(this.$slots.default),e=t&&t.componentOptions;if(e){var n=De(e);if(n&&(this.include&&!Le(this.include,n)||this.exclude&&Le(this.exclude,n)))return t;var r=null==t.key?e.Ctor.cid+(e.tag?"::"+e.tag:""):t.key;this.cache[r]?t.componentInstance=this.cache[r].componentInstance:this.cache[r]=t,t.data.keepAlive=!0}return t}},Ia={KeepAlive:La};!function(t){var n={};n.get=function(){return ho},"production"!==e.env.NODE_ENV&&(n.set=function(){mo("Do not replace the Vue.config object, set individual fields instead.")}),Object.defineProperty(t,"config",n),t.util={warn:mo,extend:b,mergeOptions:Y,defineReactive:L},t.set=I,t.delete=M,t.nextTick=Fo,t.options=Object.create(null),lo.forEach(function(e){t.options[e+"s"]=Object.create(null)}),t.options._base=t,b(t.options.components,Ia),Ne(t),Te(t),je(t),$e(t)}(ke),Object.defineProperty(ke.prototype,"$isServer",{get:Uo}),Object.defineProperty(ke.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),ke.version="2.4.4";var Ma,Ua,Ba,Va,Fa,qa,za,Ha,Ja,Wa=d("style,class"),Ya=d("input,textarea,option,select,progress"),Ka=function(t,e,n){return"value"===n&&Ya(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},Ga=d("contenteditable,draggable,spellcheck"),Za=d("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Xa="http://www.w3.org/1999/xlink",Qa=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},ts=function(t){return Qa(t)?t.slice(6,t.length):""},es=function(t){return null==t||!1===t},ns={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},rs=d("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),is=d("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),os=function(t){return"pre"===t},as=function(t){return rs(t)||is(t)},ss=Object.create(null),us=d("text,number,password,search,email,tel,url"),cs=Object.freeze({createElement:Ke,createElementNS:Ge,createTextNode:Ze,createComment:Xe,insertBefore:Qe,removeChild:tn,appendChild:en,parentNode:nn,nextSibling:rn,tagName:on,setTextContent:an,setAttribute:sn}),fs={create:function(t,e){un(e)},update:function(t,e){t.data.ref!==e.data.ref&&(un(t,!0),un(e))},destroy:function(t){un(t,!0)}},ls=new fa("",{},[]),ps=["create","activate","update","remove","destroy"],hs={create:pn,update:pn,destroy:function(t){pn(t,ls)}},ds=Object.create(null),vs=[fs,hs],gs={create:mn,update:mn},ms={create:_n,update:_n},ys=/[\w).+\-_$\]]/,_s="__r",bs="__c",ws={create:Jn,update:Jn},xs={create:Wn,update:Wn},Es=m(function(t){var e={},n=/;(?![^(]*\))/g,r=/:(.+)/;return t.split(n).forEach(function(t){if(t){var n=t.split(r);n.length>1&&(e[n[0].trim()]=n[1].trim())}}),e}),Os=/^--/,Cs=/\s*!important$/,Ss=function(t,e,n){if(Os.test(e))t.style.setProperty(e,n);else if(Cs.test(n))t.style.setProperty(e,n.replace(Cs,""),"important");else{var r=ks(e);if(Array.isArray(n))for(var i=0,o=n.length;i<o;i++)t.style[r]=n[i];else t.style[r]=n}},As=["Webkit","Moz","ms"],ks=m(function(t){if(Ja=Ja||document.createElement("div").style,"filter"!==(t=io(t))&&t in Ja)return t;for(var e=t.charAt(0).toUpperCase()+t.slice(1),n=0;n<As.length;n++){var r=As[n]+e;if(r in Ja)return r}}),Ns={create:tr,update:tr},Ts=m(function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}}),js=So&&!No,Rs="transition",Ps="animation",$s="transition",Ds="transitionend",Ls="animation",Is="animationend";js&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&($s="WebkitTransition",Ds="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Ls="WebkitAnimation",Is="webkitAnimationEnd"));var Ms=So&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout,Us=/\b(transform|all)(,|$)/,Bs=So?{create:gr,activate:gr,remove:function(t,e){!0!==t.data.show?pr(t,e):e()}}:{},Vs=[gs,ms,ws,xs,Ns,Bs],Fs=Vs.concat(vs),qs=function(t){function n(t){return new fa(P.tagName(t).toLowerCase(),{},[],void 0,t)}function a(t,e){function n(){0==--n.listeners&&u(t)}return n.listeners=e,n}function u(t){var e=P.parentNode(t);i(e)&&P.removeChild(e,t)}function c(t,n,r,a,s){if(t.isRootInsert=!s,!f(t,n,r,a)){var u=t.data,c=t.children,l=t.tag;i(l)?("production"!==e.env.NODE_ENV&&(u&&u.pre&&$++,$||t.ns||ho.ignoredElements.length&&ho.ignoredElements.indexOf(l)>-1||!ho.isUnknownElement(l)||mo("Unknown custom element: <"+l+'> - did you register the component correctly? For recursive components, make sure to provide the "name" option.',t.context)),t.elm=t.ns?P.createElementNS(t.ns,l):P.createElement(l,t),y(t),v(t,c,n),i(u)&&m(t,n),h(r,t.elm,a),"production"!==e.env.NODE_ENV&&u&&u.pre&&$--):o(t.isComment)?(t.elm=P.createComment(t.text),h(r,t.elm,a)):(t.elm=P.createTextNode(t.text),h(r,t.elm,a))}}function f(t,e,n,r){var a=t.data;if(i(a)){var s=i(t.componentInstance)&&a.keepAlive;if(i(a=a.hook)&&i(a=a.init)&&a(t,!1,n,r),i(t.componentInstance))return l(t,e),o(s)&&p(t,e,n,r),!0}}function l(t,e){i(t.data.pendingInsert)&&(e.push.apply(e,t.data.pendingInsert),t.data.pendingInsert=null),t.elm=t.componentInstance.$el,g(t)?(m(t,e),y(t)):(un(t),e.push(t))}function p(t,e,n,r){for(var o,a=t;a.componentInstance;)if(a=a.componentInstance._vnode,i(o=a.data)&&i(o=o.transition)){for(o=0;o<j.activate.length;++o)j.activate[o](ls,a);e.push(a);break}h(n,t.elm,r)}function h(t,e,n){i(t)&&(i(n)?n.parentNode===t&&P.insertBefore(t,e,n):P.appendChild(t,e))}function v(t,e,n){if(Array.isArray(e))for(var r=0;r<e.length;++r)c(e[r],n,t.elm,null,!0);else s(t.text)&&P.appendChild(t.elm,P.createTextNode(t.text))}function g(t){for(;t.componentInstance;)t=t.componentInstance._vnode;return i(t.tag)}function m(t,e){for(var n=0;n<j.create.length;++n)j.create[n](ls,t);N=t.data.hook,i(N)&&(i(N.create)&&N.create(ls,t),i(N.insert)&&e.push(t))}function y(t){for(var e,n=t;n;)i(e=n.context)&&i(e=e.$options._scopeId)&&P.setAttribute(t.elm,e,""),n=n.parent;i(e=va)&&e!==t.context&&i(e=e.$options._scopeId)&&P.setAttribute(t.elm,e,"")}function _(t,e,n,r,i,o){for(;r<=i;++r)c(n[r],o,t,e)}function b(t){var e,n,r=t.data;if(i(r))for(i(e=r.hook)&&i(e=e.destroy)&&e(t),e=0;e<j.destroy.length;++e)j.destroy[e](t);if(i(e=t.children))for(n=0;n<t.children.length;++n)b(t.children[n])}function w(t,e,n,r){for(;n<=r;++n){var o=e[n];i(o)&&(i(o.tag)?(x(o),b(o)):u(o.elm))}}function x(t,e){if(i(e)||i(t.data)){var n,r=j.remove.length+1;for(i(e)?e.listeners+=r:e=a(t.elm,r),i(n=t.componentInstance)&&i(n=n._vnode)&&i(n.data)&&x(n,e),n=0;n<j.remove.length;++n)j.remove[n](t,e);i(n=t.data.hook)&&i(n=n.remove)?n(t,e):e()}else u(t.elm)}function E(t,n,o,a,s){for(var u,f,l,p,h=0,d=0,v=n.length-1,g=n[0],m=n[v],y=o.length-1,b=o[0],x=o[y],E=!s;h<=v&&d<=y;)r(g)?g=n[++h]:r(m)?m=n[--v]:cn(g,b)?(C(g,b,a),g=n[++h],b=o[++d]):cn(m,x)?(C(m,x,a),m=n[--v],x=o[--y]):cn(g,x)?(C(g,x,a),E&&P.insertBefore(t,g.elm,P.nextSibling(m.elm)),g=n[++h],x=o[--y]):cn(m,b)?(C(m,b,a),E&&P.insertBefore(t,m.elm,g.elm),m=n[--v],b=o[++d]):(r(u)&&(u=ln(n,h,v)),f=i(b.key)?u[b.key]:O(b,n,h,v),r(f)?c(b,a,t,g.elm):(l=n[f],"production"===e.env.NODE_ENV||l||mo("It seems there are duplicate keys that is causing an update error. Make sure each v-for item has a unique key."),cn(l,b)?(C(l,b,a),n[f]=void 0,E&&P.insertBefore(t,l.elm,g.elm)):c(b,a,t,g.elm)),b=o[++d]);h>v?(p=r(o[y+1])?null:o[y+1].elm,_(t,p,o,d,y,a)):d>y&&w(t,n,h,v)}function O(t,e,n,r){for(var o=n;o<r;o++){var a=e[o];if(i(a)&&cn(t,a))return o}}function C(t,e,n,a){if(t!==e){var s=e.elm=t.elm;if(o(t.isAsyncPlaceholder))return void(i(e.asyncFactory.resolved)?A(t.elm,e,n):e.isAsyncPlaceholder=!0);if(o(e.isStatic)&&o(t.isStatic)&&e.key===t.key&&(o(e.isCloned)||o(e.isOnce)))return void(e.componentInstance=t.componentInstance);var u,c=e.data;i(c)&&i(u=c.hook)&&i(u=u.prepatch)&&u(t,e);var f=t.children,l=e.children;if(i(c)&&g(e)){for(u=0;u<j.update.length;++u)j.update[u](t,e);i(u=c.hook)&&i(u=u.update)&&u(t,e)}r(e.text)?i(f)&&i(l)?f!==l&&E(s,f,l,n,a):i(l)?(i(t.text)&&P.setTextContent(s,""),_(s,null,l,0,l.length-1,n)):i(f)?w(s,f,0,f.length-1):i(t.text)&&P.setTextContent(s,""):t.text!==e.text&&P.setTextContent(s,e.text),i(c)&&i(u=c.hook)&&i(u=u.postpatch)&&u(t,e)}}function S(t,e,n){if(o(n)&&i(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r<e.length;++r)e[r].data.hook.insert(e[r])}function A(t,n,r){if(o(n.isComment)&&i(n.asyncFactory))return n.elm=t,n.isAsyncPlaceholder=!0,!0;if("production"!==e.env.NODE_ENV&&!k(t,n))return!1;n.elm=t;var a=n.tag,s=n.data,u=n.children;if(i(s)&&(i(N=s.hook)&&i(N=N.init)&&N(n,!0),i(N=n.componentInstance)))return l(n,r),!0;if(i(a)){if(i(u))if(t.hasChildNodes())if(i(N=s)&&i(N=N.domProps)&&i(N=N.innerHTML)){if(N!==t.innerHTML)return"production"===e.env.NODE_ENV||"undefined"==typeof console||D||(D=!0,console.warn("Parent: ",t),console.warn("server innerHTML: ",N),console.warn("client innerHTML: ",t.innerHTML)),!1}else{for(var c=!0,f=t.firstChild,p=0;p<u.length;p++){if(!f||!A(f,u[p],r)){c=!1;break}f=f.nextSibling}if(!c||f)return"production"===e.env.NODE_ENV||"undefined"==typeof console||D||(D=!0,console.warn("Parent: ",t),console.warn("Mismatching childNodes vs. VNodes: ",t.childNodes,u)),!1}else v(n,u,r);if(i(s))for(var h in s)if(!L(h)){m(n,r);break}}else t.data!==n.text&&(t.data=n.text);return!0}function k(t,e){return i(e.tag)?0===e.tag.indexOf("vue-component")||e.tag.toLowerCase()===(t.tagName&&t.tagName.toLowerCase()):t.nodeType===(e.isComment?8:3)}var N,T,j={},R=t.modules,P=t.nodeOps;for(N=0;N<ps.length;++N)for(j[ps[N]]=[],T=0;T<R.length;++T)i(R[T][ps[N]])&&j[ps[N]].push(R[T][ps[N]]);var $=0,D=!1,L=d("attrs,style,class,staticClass,staticStyle,key");return function(t,a,s,u,f,l){if(r(a))return void(i(t)&&b(t));var p=!1,h=[];if(r(t))p=!0,c(a,h,f,l);else{var d=i(t.nodeType);if(!d&&cn(t,a))C(t,a,h,u);else{if(d){if(1===t.nodeType&&t.hasAttribute(fo)&&(t.removeAttribute(fo),s=!0),o(s)){if(A(t,a,h))return S(a,h,!0),t;"production"!==e.env.NODE_ENV&&mo("The client-side rendered virtual DOM tree is not matching server-rendered content. This is likely caused by incorrect HTML markup, for example nesting block-level elements inside <p>, or missing <tbody>. Bailing hydration and performing full client-side render.")}t=n(t)}var v=t.elm,m=P.parentNode(v);if(c(a,h,v._leaveCb?null:m,P.nextSibling(v)),i(a.parent))for(var y=a.parent,_=g(a);y;){for(var x=0;x<j.destroy.length;++x)j.destroy[x](y);if(y.elm=a.elm,_){for(var E=0;E<j.create.length;++E)j.create[E](ls,y);var O=y.data.hook.insert;if(O.merged)for(var k=1;k<O.fns.length;k++)O.fns[k]()}y=y.parent}i(m)?w(m,[t],0,0):i(t.tag)&&b(t)}}return S(a,h,p),a.elm}}({nodeOps:cs,modules:Fs});No&&document.addEventListener("selectionchange",function(){var t=document.activeElement;t&&t.vmodel&&Er(t,"input")});var zs={inserted:function(t,e,n){"select"===n.tag?(mr(t,e,n.context),t._vOptions=[].map.call(t.options,br)):("textarea"===n.tag||us(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("change",xr),jo||(t.addEventListener("compositionstart",wr),t.addEventListener("compositionend",xr)),No&&(t.vmodel=!0)))},componentUpdated:function(t,e,n){if("select"===n.tag){mr(t,e,n.context);var r=t._vOptions,i=t._vOptions=[].map.call(t.options,br);if(i.some(function(t,e){return!E(t,r[e])})){(t.multiple?e.value.some(function(t){return _r(t,i)}):e.value!==e.oldValue&&_r(e.value,i))&&Er(t,"change")}}}},Hs={bind:function(t,e,n){var r=e.value;n=Or(n);var i=n.data&&n.data.transition,o=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&i?(n.data.show=!0,lr(n,function(){t.style.display=o})):t.style.display=r?o:"none"},update:function(t,e,n){var r=e.value;r!==e.oldValue&&(n=Or(n),n.data&&n.data.transition?(n.data.show=!0,r?lr(n,function(){t.style.display=t.__vOriginalDisplay}):pr(n,function(){t.style.display="none"})):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,i){i||(t.style.display=t.__vOriginalDisplay)}},Js={model:zs,show:Hs},Ws={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]},Ys={name:"transition",props:Ws,abstract:!0,render:function(t){var n=this,r=this.$options._renderChildren;if(r&&(r=r.filter(function(t){return t.tag||yt(t)}),r.length)){"production"!==e.env.NODE_ENV&&r.length>1&&mo("<transition> can only be used on a single element. Use <transition-group> for lists.",this.$parent);var i=this.mode;"production"!==e.env.NODE_ENV&&i&&"in-out"!==i&&"out-in"!==i&&mo("invalid <transition> mode: "+i,this.$parent);var o=r[0];if(kr(this.$vnode))return o;var a=Cr(o);if(!a)return o;if(this._leaving)return Ar(t,o);var u="__transition-"+this._uid+"-";a.key=null==a.key?a.isComment?u+"comment":u+a.tag:s(a.key)?0===String(a.key).indexOf(u)?a.key:u+a.key:a.key;var c=(a.data||(a.data={})).transition=Sr(this),f=this._vnode,l=Cr(f);if(a.data.directives&&a.data.directives.some(function(t){return"show"===t.name})&&(a.data.show=!0),l&&l.data&&!Nr(a,l)&&!yt(l)){var p=l&&(l.data.transition=b({},c));if("out-in"===i)return this._leaving=!0,ut(p,"afterLeave",function(){n._leaving=!1,n.$forceUpdate()}),Ar(t,o);if("in-out"===i){if(yt(a))return f;var h,d=function(){h()};ut(c,"afterEnter",d),ut(c,"enterCancelled",d),ut(p,"delayLeave",function(t){h=t})}}return o}}},Ks=b({tag:String,moveClass:String},Ws);delete Ks.mode;var Gs={props:Ks,render:function(t){for(var n=this.tag||this.$vnode.data.tag||"span",r=Object.create(null),i=this.prevChildren=this.children,o=this.$slots.default||[],a=this.children=[],s=Sr(this),u=0;u<o.length;u++){var c=o[u];if(c.tag)if(null!=c.key&&0!==String(c.key).indexOf("__vlist"))a.push(c),r[c.key]=c,(c.data||(c.data={})).transition=s;else if("production"!==e.env.NODE_ENV){var f=c.componentOptions,l=f?f.Ctor.options.name||f.tag||"":c.tag;mo("<transition-group> children must be keyed: <"+l+">")}}if(i){for(var p=[],h=[],d=0;d<i.length;d++){var v=i[d];v.data.transition=s,v.data.pos=v.elm.getBoundingClientRect(),r[v.key]?p.push(v):h.push(v)}this.kept=t(n,null,p),this.removed=h}return t(n,null,a)},beforeUpdate:function(){this.__patch__(this._vnode,this.kept,!1,!0),this._vnode=this.kept},updated:function(){var t=this.prevChildren,e=this.moveClass||(this.name||"v")+"-move";if(t.length&&this.hasMove(t[0].elm,e)){t.forEach(Tr),t.forEach(jr),t.forEach(Rr);var n=document.body;n.offsetHeight;t.forEach(function(t){if(t.data.moved){var n=t.elm,r=n.style;or(n,e),r.transform=r.WebkitTransform=r.transitionDuration="",n.addEventListener(Ds,n._moveCb=function t(r){r&&!/transform$/.test(r.propertyName)||(n.removeEventListener(Ds,t),n._moveCb=null,ar(n,e))})}})}},methods:{hasMove:function(t,e){if(!js)return!1;if(this._hasMove)return this._hasMove;var n=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach(function(t){nr(n,t)}),er(n,e),n.style.display="none",this.$el.appendChild(n);var r=ur(n);return this.$el.removeChild(n),this._hasMove=r.hasTransform}}},Zs={Transition:Ys,TransitionGroup:Gs};ke.config.mustUseProp=Ka,ke.config.isReservedTag=as,ke.config.isReservedAttr=Wa,ke.config.getTagNamespace=Je,ke.config.isUnknownElement=We,b(ke.options.directives,Js),b(ke.options.components,Zs),ke.prototype.__patch__=So?qs:x,ke.prototype.$mount=function(t,e){return t=t&&So?Ye(t):void 0,kt(this,t,e)},setTimeout(function(){ho.devtools&&(Bo?Bo.emit("init",ke):"production"!==e.env.NODE_ENV&&Po&&console[console.info?"info":"log"]("Download the Vue Devtools extension for a better development experience:\nhttps://github.com/vuejs/vue-devtools")),"production"!==e.env.NODE_ENV&&!1!==ho.productionTip&&So&&"undefined"!=typeof console&&console[console.info?"info":"log"]("You are running Vue in development mode.\nMake sure to turn on production mode when deploying for production.\nSee more tips at https://vuejs.org/guide/deployment.html")},0);var Xs,Qs=!!So&&function(t,e){var n=document.createElement("div");return n.innerHTML='<div a="'+t+'"/>',n.innerHTML.indexOf(e)>0}("\n","&#10;"),tu=/\{\{((?:.|\n)+?)\}\}/g,eu=/[-.*+?^${}()|[\]\/\\]/g,nu=m(function(t){var e=t[0].replace(eu,"\\$&"),n=t[1].replace(eu,"\\$&");return new RegExp(e+"((?:.|\\n)+?)"+n,"g")}),ru={staticKeys:["staticClass"],transformNode:$r,genData:Dr},iu={staticKeys:["staticStyle"],transformNode:Lr,genData:Ir},ou=[ru,iu],au={model:Mn,text:Mr,html:Ur},su=d("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),uu=d("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),cu=d("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),fu={expectHTML:!0,modules:ou,directives:au,isPreTag:os,isUnaryTag:su,mustUseProp:Ka,canBeLeftOpenTag:uu,isReservedTag:as,getTagNamespace:Je,staticKeys:function(t){return t.reduce(function(t,e){return t.concat(e.staticKeys||[])},[]).join(",")}(ou)},lu={decode:function(t){return Xs=Xs||document.createElement("div"),Xs.innerHTML=t,Xs.textContent}},pu=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,hu="[a-zA-Z_][\\w\\-\\.]*",du="((?:"+hu+"\\:)?"+hu+")",vu=new RegExp("^<"+du),gu=/^\s*(\/?)>/,mu=new RegExp("^<\\/"+du+"[^>]*>"),yu=/^<!DOCTYPE [^>]+>/i,_u=/^<!--/,bu=/^<!\[/,wu=!1;"x".replace(/x(.)?/g,function(t,e){wu=""===e});var xu,Eu,Ou,Cu,Su,Au,ku,Nu,Tu,ju,Ru=d("script,style,textarea",!0),Pu={},$u={"&lt;":"<","&gt;":">","&quot;":'"',"&amp;":"&","&#10;":"\n"},Du=/&(?:lt|gt|quot|amp);/g,Lu=/&(?:lt|gt|quot|amp|#10);/g,Iu=d("pre,textarea",!0),Mu=function(t,e){return t&&Iu(t)&&"\n"===e[0]},Uu=/^@|^v-on:/,Bu=/^v-|^@|^:/,Vu=/(.*?)\s+(?:in|of)\s+(.*)/,Fu=/\((\{[^}]*\}|[^,]*),([^,]*)(?:,([^,]*))?\)/,qu=/:(.*)$/,zu=/^:|^v-bind:/,Hu=/\.[^.]+/g,Ju=m(lu.decode),Wu=/^xmlns:NS\d+/,Yu=/^NS\d+:/,Ku=m(fi),Gu=/^\s*([\w$_]+|\([^)]*?\))\s*=>|^function\s*\(/,Zu=/^\s*[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['.*?']|\[".*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*\s*$/,Xu={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Qu=function(t){return"if("+t+")return null;"},tc={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Qu("$event.target !== $event.currentTarget"),ctrl:Qu("!$event.ctrlKey"),shift:Qu("!$event.shiftKey"),alt:Qu("!$event.altKey"),meta:Qu("!$event.metaKey"),left:Qu("'button' in $event && $event.button !== 0"),middle:Qu("'button' in $event && $event.button !== 1"),right:Qu("'button' in $event && $event.button !== 2")},ec={on:_i,bind:bi,cloak:x},nc=function(t){this.options=t,this.warn=t.warn||xn,this.transforms=En(t.modules,"transformCode"),this.dataGenFns=En(t.modules,"genData"),this.directives=b(b({},ec),t.directives);var e=t.isReservedTag||uo;this.maybeComponent=function(t){return!e(t.tag)},this.onceId=0,this.staticRenderFns=[]},rc=new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),ic=new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)"),oc=/[A-Za-z_$][\w$]*/,ac=/'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g,sc=function(t){return function(n){function r(r,i){var o=Object.create(n),a=[],s=[];if(o.warn=function(t,e){(e?s:a).push(t)},i){i.modules&&(o.modules=(n.modules||[]).concat(i.modules)),i.directives&&(o.directives=b(Object.create(n.directives),i.directives));for(var u in i)"modules"!==u&&"directives"!==u&&(o[u]=i[u])}var c=t(r,o);return"production"!==e.env.NODE_ENV&&a.push.apply(a,zi(c.ast)),c.errors=a,c.tips=s,c}return{compile:r,compileToFunctions:Zi(r)}}}(function(t,e){var n=Fr(t.trim(),e);ci(n,e);var r=wi(n,e);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}}),uc=sc(fu),cc=uc.compileToFunctions,fc=m(function(t){var e=Ye(t);return e&&e.innerHTML}),lc=ke.prototype.$mount;ke.prototype.$mount=function(t,n){if((t=t&&Ye(t))===document.body||t===document.documentElement)return"production"!==e.env.NODE_ENV&&mo("Do not mount Vue to <html> or <body> - mount to normal elements instead."),this;var r=this.$options;if(!r.render){var i=r.template;if(i)if("string"==typeof i)"#"===i.charAt(0)&&(i=fc(i),"production"===e.env.NODE_ENV||i||mo("Template element not found or is empty: "+r.template,this));else{if(!i.nodeType)return"production"!==e.env.NODE_ENV&&mo("invalid template option:"+i,this),this;i=i.innerHTML}else t&&(i=Xi(t));if(i){"production"!==e.env.NODE_ENV&&ho.performance&&Xo&&Xo("compile");var o=cc(i,{shouldDecodeNewlines:Qs,delimiters:r.delimiters,comments:r.comments},this),a=o.render,s=o.staticRenderFns;r.render=a,r.staticRenderFns=s,"production"!==e.env.NODE_ENV&&ho.performance&&Xo&&(Xo("compile end"),Qo(this._name+" compile","compile","compile end"))}}return lc.call(this,t,n)},ke.compile=cc,t.exports=ke}).call(e,n(2),n(1))},function(t,e,n){"use strict";function r(t){n(28)}Object.defineProperty(e,"__esModule",{value:!0});var i=n(33),o=n.n(i),a=n(91),s=n(10),u=r,c=s(o.a,a.a,u,null,null);e.default=c.exports},function(t,e,n){var r=n(29);"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);n(31)("4055d79c",r,!0)},function(t,e,n){e=t.exports=n(30)(void 0),e.push([t.i,"body,html{font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:100%}pre{font-family:Consolas,monaco,monospace;font-size:13px;margin:0}a,a:active,a:hover,a:visited{color:#357edd;text-decoration:none}a:hover{text-decoration:underline}.flex-fill{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;min-width:0;min-height:0}.darken-10:focus,.darken-10:hover{-webkit-box-shadow:inset 9999px 9999px rgba(0,0,0,.1);box-shadow:inset 9999px 9999px rgba(0,0,0,.1)}.darken-10:active{-webkit-box-shadow:inset 9999px 9999px rgba(0,0,0,.2);box-shadow:inset 9999px 9999px rgba(0,0,0,.2)}.hljs{background-color:#f4f4f4;padding:0 1rem}.box-shadow{-webkit-box-shadow:0 1px 4px -1px rgba(0,0,0,.4);box-shadow:0 1px 4px -1px rgba(0,0,0,.4)}",""])},function(t,e){function n(t,e){var n=t[1]||"",i=t[3];if(!i)return n;if(e&&"function"==typeof btoa){var o=r(i);return[n].concat(i.sources.map(function(t){return"/*# sourceURL="+i.sourceRoot+t+" */"})).concat([o]).join("\n")}return[n].join("\n")}function r(t){return"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t))))+" */"}t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var r=n(e,t);return e[2]?"@media "+e[2]+"{"+r+"}":r}).join("")},e.i=function(t,n){"string"==typeof t&&(t=[[null,t,""]]);for(var r={},i=0;i<this.length;i++){var o=this[i][0];"number"==typeof o&&(r[o]=!0)}for(i=0;i<t.length;i++){var a=t[i];"number"==typeof a[0]&&r[a[0]]||(n&&!a[2]?a[2]=n:n&&(a[2]="("+a[2]+") and ("+n+")"),e.push(a))}},e}},function(t,e,n){function r(t){for(var e=0;e<t.length;e++){var n=t[e],r=f[n.id];if(r){r.refs++;for(var i=0;i<r.parts.length;i++)r.parts[i](n.parts[i]);for(;i<n.parts.length;i++)r.parts.push(o(n.parts[i]));r.parts.length>n.parts.length&&(r.parts.length=n.parts.length)}else{for(var a=[],i=0;i<n.parts.length;i++)a.push(o(n.parts[i]));f[n.id]={id:n.id,refs:1,parts:a}}}}function i(){var t=document.createElement("style");return t.type="text/css",l.appendChild(t),t}function o(t){var e,n,r=document.querySelector('style[data-vue-ssr-id~="'+t.id+'"]');if(r){if(d)return v;r.parentNode.removeChild(r)}if(g){var o=h++;r=p||(p=i()),e=a.bind(null,r,o,!1),n=a.bind(null,r,o,!0)}else r=i(),e=s.bind(null,r),n=function(){r.parentNode.removeChild(r)};return e(t),function(r){if(r){if(r.css===t.css&&r.media===t.media&&r.sourceMap===t.sourceMap)return;e(t=r)}else n()}}function a(t,e,n,r){var i=n?"":r.css;if(t.styleSheet)t.styleSheet.cssText=m(e,i);else{var o=document.createTextNode(i),a=t.childNodes;a[e]&&t.removeChild(a[e]),a.length?t.insertBefore(o,a[e]):t.appendChild(o)}}function s(t,e){var n=e.css,r=e.media,i=e.sourceMap;if(r&&t.setAttribute("media",r),i&&(n+="\n/*# sourceURL="+i.sources[0]+" */",n+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(i))))+" */"),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}var u="undefined"!=typeof document;if("undefined"!=typeof DEBUG&&DEBUG&&!u)throw new Error("vue-style-loader cannot be used in a non-browser environment. Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.");var c=n(32),f={},l=u&&(document.head||document.getElementsByTagName("head")[0]),p=null,h=0,d=!1,v=function(){},g="undefined"!=typeof navigator&&/msie [6-9]\b/.test(navigator.userAgent.toLowerCase());t.exports=function(t,e,n){d=n;var i=c(t,e);return r(i),function(e){for(var n=[],o=0;o<i.length;o++){var a=i[o],s=f[a.id];s.refs--,n.push(s)}e?(i=c(t,e),r(i)):i=[];for(var o=0;o<n.length;o++){var s=n[o];if(0===s.refs){for(var u=0;u<s.parts.length;u++)s.parts[u]();delete f[s.id]}}}};var m=function(){var t=[];return function(e,n){return t[e]=n,t.filter(Boolean).join("\n")}}()},function(t,e){t.exports=function(t,e){for(var n=[],r={},i=0;i<e.length;i++){var o=e[i],a=o[0],s=o[1],u=o[2],c=o[3],f={id:t+":"+i,css:s,media:u,sourceMap:c};r[a]?r[a].parts.push(f):n.push(r[a]={id:a,parts:[f]})}return n}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var i=n(11),o=(r(i),n(13)),a=r(o),s=n(87),u=r(s),c=[],f=[],l=[],p=[],h=a.default.version,d="https://localhost:8080/api/v1";e.default={name:"app",components:{Example:u.default},watch:{api_key:function(t,e){a.default.setup(t,{baseUrl:this.base_url,debug:!0})},base_url:function(t,e){a.default.setup(this.api_key,{baseUrl:t,debug:!0})}},data:function(){return{version:h,api_key:"xtdkxpcjwzkpgkhkcmhx",base_url:d,list_examples:c,connection_examples:f,pipe_examples:l,task_examples:p}},mounted:function(){a.default.setup("xtdkxpcjwzkpgkhkcmhx",{baseUrl:d,debug:!0})}}},function(t,e,n){"use strict";var r=n(0),i=n(35),o=n(36),a=n(37),s=n(38),u=n(39),c=n(40),f=n(41),l=n(44),p=n(45),h=n(46),d=n(47),v=n(48),g=n(49),m=n(50),y=n(51),_=n(52),b=n(53),w=n(54),x=n(55),E=n(56),O=n(57),C=n(58),S=n(59),A=n(60),k=function(t,e){switch(r.get(t,"op","")){default:return C.toCode(t);case"create":return i.toCode(t,e);case"convert":return o.toCode(t,e);case"copy":return a.toCode(t,e);case"dump":return s.toCode(t,e);case"echo":return u.toCode(t,e);case"email":return c.toCode(t,e);case"execute":return f.toCode(t,e);case"filter":return l.toCode(t,e);case"foreach":return p.toCode(t,e);case"insert":return h.toCode(t,e);case"limit":return d.toCode(t,e);case"list":return m.toCode(t,e);case"merge":return v.toCode(t,e);case"mkdir":return g.toCode(t,e);case"read":return y.toCode(t,e);case"render":return _.toCode(t,e);case"request":return b.toCode(t,e);case"select":return w.toCode(t,e);case"sequence":return x.toCode(t,e);case"set":return E.toCode(t,e);case"sleep":return O.toCode(t,e);case"transform":return S.toCode(t,e);case"write":return A.toCode(t,e)}};t.exports={create:i,convert:o,copy:a,dump:s,echo:u,email:c,execute:f.execute,insert:h,filter:l,foreach:p,javascript:f.javascript,limit:d,list:m,merge:v,mkdir:g,python:f.python,read:y,render:_,request:b,select:w,sequence:x,set:E,sleep:O,task:C,transform:S,write:A,toCode:k}},function(t,e,n){"use strict";var r=n(0),i=function(t,e){if(Array.isArray(t))return{op:"create",params:{content_type:"application/vnd.flexio.table",columns:t}};var n={op:"create",params:{path:t}};return void 0!==e&&(Array.isArray(e)?n.params.columns=e:n.params.content_type=e),n};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=JSON.stringify(n.path)||void 0,o=JSON.stringify(n.content_type)||void 0,a=JSON.stringify(n.columns)||void 0;return void 0!==i?void 0!==a?"create("+i+", "+a+")":void 0!==o?"create("+i+", "+o+")":"create("+i+")":void 0!==a?"create("+a+")":void 0!==o?"":void 0},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t,e){return{op:"convert",params:{input:t,output:e}}};i.toCode=function(t,e){var n=r.get(t,"params.input",{}),i=r.get(t,"params.output",{});return"convert("+JSON.stringify(n)+", "+JSON.stringify(i)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t,e,n){var i={op:"copy",params:{from:t,to:e}};return r.isPlainObject(n)&&(i.params.options=n),i};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=JSON.stringify(n.from)||'""',o=JSON.stringify(n.to)||'""',a=n.hasOwnProperty("options")&&r.isPlainObject(n.options)?JSON.stringify(n.options):null,s="copy("+i+", "+o;return null!==a&&(s+=", "+a),s+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"dump",params:{msg:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"dump("+(JSON.stringify(n.msg)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"echo",params:{msg:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"echo("+(JSON.stringify(n.msg)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){if(!r.isPlainObject(t))throw"The first function parameter must be an object";if(!t.hasOwnProperty("to"))throw"The `to` parameter is required";if(!t.hasOwnProperty("body_text"))throw"The `body_text` parameter is required";return{op:"email",params:t}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"email("+JSON.stringify(n,null,2)+")"},t.exports=i},function(t,e,n){"use strict";(function(e,r){var i=n(0),o=function(){return void 0!==e},a=function(t){try{return o()?r(t,"utf8").toString("base64"):btoa(unescape(encodeURIComponent(t)))}catch(t){return t}},s=function(t){try{return o()?r.from(t,"base64").toString("utf8"):decodeURIComponent(escape(atob(t)))}catch(t){return t}},u=function(t){var e;try{e=t.toString(),e=e.substring(e.indexOf("{")+1,e.lastIndexOf("}"))}catch(t){e=""}return e},c=function(t){if(i.isString(t))return t;if(i.isFunction(t)){var e;if(0==t.length)return"exports.flexio_handler = function(context) "+(e=u(t));if(e=t.toString(),"function"==e.substring(0,8))e=e.slice(8);else{var n=e.indexOf("=>"),r=e.indexOf("{");n>=0&&n<r&&(e=e.replace("=>s*{","{"))}return"exports.flexio_handler = function"+e}},f=function(){var t,e,n,r=Array.from(arguments),o=i.get(r,"[0]",null),s=i.get(r,"[1]",null),u=i.get(r,"[2]",null),f={};"python"==o||"javascript"==o?(t=o,e=s,null!==e&&void 0!==e||(e=""),n=u):(t="javascript",e=o,n=s),"javascript"==t&&(e=c(e)),f.lang=t;var l=/^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/;return e.match(l)?f.path=e:f.code=a(e),null!==n&&(f.integrity=n),{op:"execute",params:f}},l=function(){var t=Array.from(arguments);return t.unshift("javascript"),f.apply(this,t)},p=function(){var t=Array.from(arguments);return t.unshift("python"),f.apply(this,t)},h=function(t){var e=i.get(t,"params",{}),n=e.lang||"",r=s(e.code||"");switch(n){case"javascript":return-1!=r.indexOf("exports.flexio_handler")?(r=r.replace("exports.flexio_handler =",""),"javascript("+r.trim()+")"):"javascript("+JSON.stringify(r.trim())+")";case"python":return"python(`\n"+r+"\n`)";default:return"execute("+JSON.stringify(n)+", `\n"+r+"\n`)"}};t.exports={execute:f,javascript:l,python:p,toCode:h}}).call(e,n(2),n(3).Buffer)},function(t,e,n){"use strict";function r(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===t[e-2]?2:"="===t[e-1]?1:0}function i(t){return 3*t.length/4-r(t)}function o(t){var e,n,i,o,a,s=t.length;o=r(t),a=new l(3*s/4-o),n=o>0?s-4:s;var u=0;for(e=0;e<n;e+=4)i=f[t.charCodeAt(e)]<<18|f[t.charCodeAt(e+1)]<<12|f[t.charCodeAt(e+2)]<<6|f[t.charCodeAt(e+3)],a[u++]=i>>16&255,a[u++]=i>>8&255,a[u++]=255&i;return 2===o?(i=f[t.charCodeAt(e)]<<2|f[t.charCodeAt(e+1)]>>4,a[u++]=255&i):1===o&&(i=f[t.charCodeAt(e)]<<10|f[t.charCodeAt(e+1)]<<4|f[t.charCodeAt(e+2)]>>2,a[u++]=i>>8&255,a[u++]=255&i),a}function a(t){return c[t>>18&63]+c[t>>12&63]+c[t>>6&63]+c[63&t]}function s(t,e,n){for(var r,i=[],o=e;o<n;o+=3)r=(t[o]<<16)+(t[o+1]<<8)+t[o+2],i.push(a(r));return i.join("")}function u(t){for(var e,n=t.length,r=n%3,i="",o=[],a=0,u=n-r;a<u;a+=16383)o.push(s(t,a,a+16383>u?u:a+16383));return 1===r?(e=t[n-1],i+=c[e>>2],i+=c[e<<4&63],i+="=="):2===r&&(e=(t[n-2]<<8)+t[n-1],i+=c[e>>10],i+=c[e>>4&63],i+=c[e<<2&63],i+="="),o.push(i),o.join("")}e.byteLength=i,e.toByteArray=o,e.fromByteArray=u;for(var c=[],f=[],l="undefined"!=typeof Uint8Array?Uint8Array:Array,p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=0,d=p.length;h<d;++h)c[h]=p[h],f[p.charCodeAt(h)]=h;f["-".charCodeAt(0)]=62,f["_".charCodeAt(0)]=63},function(t,e){e.read=function(t,e,n,r,i){var o,a,s=8*i-r-1,u=(1<<s)-1,c=u>>1,f=-7,l=n?i-1:0,p=n?-1:1,h=t[e+l];for(l+=p,o=h&(1<<-f)-1,h>>=-f,f+=s;f>0;o=256*o+t[e+l],l+=p,f-=8);for(a=o&(1<<-f)-1,o>>=-f,f+=r;f>0;a=256*a+t[e+l],l+=p,f-=8);if(0===o)o=1-c;else{if(o===u)return a?NaN:1/0*(h?-1:1);a+=Math.pow(2,r),o-=c}return(h?-1:1)*a*Math.pow(2,o-r)},e.write=function(t,e,n,r,i,o){var a,s,u,c=8*o-i-1,f=(1<<c)-1,l=f>>1,p=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,h=r?0:o-1,d=r?1:-1,v=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=f):(a=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-a))<1&&(a--,u*=2),e+=a+l>=1?p/u:p*Math.pow(2,1-l),e*u>=2&&(a++,u/=2),a+l>=f?(s=0,a=f):a+l>=1?(s=(e*u-1)*Math.pow(2,i),a+=l):(s=e*Math.pow(2,l-1)*Math.pow(2,i),a=0));i>=8;t[n+h]=255&s,h+=d,s/=256,i-=8);for(a=a<<i|s,c+=i;c>0;t[n+h]=255&a,h+=d,a/=256,c-=8);t[n+h-d]|=128*v}},function(t,e,n){"use strict";var r=n(0),i=function(t){if(r.isNil(t))throw"The `filter` parameter is required";return{op:"filter",params:{where:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"filter("+(JSON.stringify(n.where)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=n(5),o=function(t,e){var n={op:"foreach",params:{}};return("string"==typeof t||t instanceof String)&&(n.params.spec=t),i.isPipeObject(t)?n.params.run=t.pipe.task:i.isPipeObject(e)&&(n.params.run=e.pipe.task),n};o.toCode=function(t,e){var n=r.get(t,"params",{}),i=[];return n.hasOwnProperty("spec")&&i.push(JSON.stringify(n.spec)),n.hasOwnProperty("run")&&i.push(e.task.toCode(n.run,e)),"foreach("+i.join(", ")+")"},t.exports=o},function(t,e,n){"use strict";var r=n(0),i=function(t,e){var n;return n=Array.isArray(e)?e:[e],{op:"insert",params:{path:t,values:n}}};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=r.get(n,"path",void 0),o=r.get(n,"values",void 0);return Array.isArray(o)||(o=[o]),i=JSON.stringify(i),o=JSON.stringify(o),"insert("+i+", "+o+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"limit",params:{value:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"limit("+(JSON.stringify(n.value)||"")+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){if(Array.isArray(t))var e=t;else for(var e=[],n=0;n<arguments.length;++n)e.push(arguments[n]);return{op:"merge",params:{files:e}}};i.toCode=function(t,e){for(var n=r.get(t,"params",{}),i=r.get(n,"files",[]),o=0;o<i.length;++o)"string"==typeof i[o]||i[o]instanceof String?i[o]=JSON.stringify(i[o]):i[o]=e.merge.toCode(i[o],e);return"merge("+(i.length>=10?"["+i.join(", ")+"]":i.join(", "))+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"mkdir",params:{path:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"mkdir("+(JSON.stringify(n.path)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"list",params:{path:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"list("+(JSON.stringify(n.path)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"read",params:{path:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"read("+(JSON.stringify(n.path)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t,e){var n={};return r.isPlainObject(t)?n=t:r.isString(t)&&(n.url=t),r.isPlainObject(e)&&r.assign(n,e),{op:"render",params:n}};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=JSON.stringify(n.url)||"";return delete n.url,0==Object.keys(n).length?"render("+i+")":"render("+i+", "+JSON.stringify(n,null,2)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(){var t=Array.from(arguments),e=r.get(t,"[0]",""),n=r.get(t,"[1]",{});return n=r.isPlainObject(r.get(t,"[0]",{}))?r.get(t,"[0]",{}):r.assign({},{url:e},n),{op:"request",params:n}};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=r.get(n,"url",""),o=Object.keys(n);return 1==o.length&&"url"==o[0]?"request("+JSON.stringify(i)+")":"request("+JSON.stringify(n,null,2)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(){var t=Array.from(arguments);return 1==t.length&&Array.isArray(r.get(t,"[0]"))&&(t=r.get(t,"[0]",[])),{op:"select",params:{columns:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{}),i=JSON.stringify(n.columns)||"";return-1!=i.indexOf("[")&&-1!=i.indexOf("]")&&(i=i.substring(1,i.length-1)),"select("+i+")"},t.exports=i},function(t,e,n){"use strict";var r=(n(0),function(t){return{op:"sequence",params:{steps:t}}});r.toCode=function(t,e){for(var n=[],r=0;r<t.params.items.length;++r){var i=t.params.items[r],o=e.task.toCode(i,e);i.hasOwnProperty("params")&&i.params.hasOwnProperty("lang")&&"python"!=i.params.lang&&(o=o.replace(/\n/g,"\n  ")),n.push(o)}var n=["Flexio.pipe()"].concat(n);return n.join("\n  .")},t.exports=r},function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=n(0),o=n(5),a=function(t,e){return o.isPipeObject(e)&&(e=e.pipe.task),{op:"set",params:{var:t,value:e}}};a.toCode=function(t,e){var n=i.get(t,"params",{}),o=i.get(n,"variable",""),a=i.get(n,"value","");return o=JSON.stringify(o),a="object"===(void 0===a?"undefined":r(a))&&null!==a&&a.hasOwnProperty("op")?e.task.toCode(a,e):JSON.stringify(a),"set("+o+", "+a+")"},t.exports=a},function(t,e,n){"use strict";var r=n(0),i=function(t){return t=r.defaultTo(t,10),{op:"sleep",params:{value:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"sleep("+(JSON.stringify(n.value)||"")+")"},t.exports=i},function(t,e,n){"use strict";var r=(n(0),function(t){return t});r.toCode=function(t,e){return"task("+JSON.stringify(t,null,2)+")"},t.exports=r},function(t,e,n){"use strict";var r=n(0),i=function(t){var e=Array.from(arguments),n={operations:[]},i={},o=[],a=r.get(e,"[0]");return r.isPlainObject(a)?(1==e.length&&r.has(a,"operations")?(i=r.pick(a,["columns","operations"]),i=r.assign(n,i)):(o=[].concat(e),i={operations:o}),{op:"transform",params:i}):{op:"transform",params:{columns:void 0,operations:o}}};i.toCode=function(t,e){var n=t.hasOwnProperty("params")?t.params:{};return!n.hasOwnProperty("columns")&&n.hasOwnProperty("operations")&&Array.isArray(n.operations)&&1==n.operations.length?"transform("+JSON.stringify(n.operations[0])+")":"transform("+JSON.stringify(n)+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=function(t){return{op:"write",params:{path:t}}};i.toCode=function(t,e){var n=r.get(t,"params",{});return"write("+(JSON.stringify(n.path)||'""')+")"},t.exports=i},function(t,e,n){"use strict";var r=n(0);n(5);t.exports={},t.exports.getConnectionsObject=function(t){return new function(){this.create=function(e,n){var i;if(r.isPlainObject(e))i=e;else{if(!(e instanceof t.connection))throw"Unknown connection object type";i=e.connection}return new Promise(function(e,r){t.http().post("/connections",i).then(function(i){t.util.callbackAdapter(null,i.data,e,r,n)}).catch(function(i){t.util.debug("Flexio.connections.create(): Failed."),t.util.callbackAdapter(i,null,e,r,n)})})},this.list=function(e){var n=Array.from(arguments),e=r.get(n,"[0]");return new Promise(function(n,i){t.util.debug("Requesting Connections..."),t.http().get("/connections").then(function(o){var a=r.get(o,"data",[]);t.util.debug("Success!"),t.util.callbackAdapter(null,a,n,i,e)}).catch(function(r){t.util.debug("Failed."),t.util.callbackAdapter(r,null,n,i,e)})})}}}},function(t,e,n){"use strict";var r=n(0);t.exports={},t.exports.getPipesObject=function(t){return new function(){this.create=function(e,n){var i;if(r.isPlainObject(e))i=e;else{if(!(e instanceof t.pipe))throw"Unknown pipe object type";i=e.pipe}return new Promise(function(e,r){t.http().post("/pipes",i).then(function(i){t.util.callbackAdapter(null,i.data,e,r,n)}).catch(function(i){t.util.debug("Flexio.pipes.create(): Failed."),t.util.callbackAdapter(i,null,e,r,n)})})},this.list=function(e){var n=Array.from(arguments),e=r.get(n,"[0]");return new Promise(function(n,i){t.util.debug("Requesting Pipes..."),t.http().get("/pipes").then(function(o){var a=r.get(o,"data",[]);t.util.debug("Success!"),t.util.callbackAdapter(null,a,n,i,e)}).catch(function(r){t.util.debug("Failed."),t.util.callbackAdapter(r,null,n,i,e)})})},this.run=function(){var e=Array.from(arguments);e.push(null,null,null);var n,i,o={},a=null;e[0]instanceof t.pipe?(i=r.get(e[0],"pipe.eid",""),a=r.get(e[0],"pipe.task","")):Array.isArray(e[0])?(i="",a=e[0]):i=e[0],r.isPlainObject(e[1])&&(o=e[1]),n=r.isFunction(e[1])?e[1]:r.isFunction(e[2])?e[2]:null;var s=function(e,n){return{contentType:n,buffer:e,get blob(){return new Blob([this.buffer],{type:n})},get text(){return t.util.arrayBufferToString(this.buffer)},get data(){try{return JSON.parse(t.util.arrayBufferToString(this.buffer))}catch(t){return null}}}};return new Promise(function(e,u){if(t.util.debug("Running Pipe `"+(0==i.length?"[Pipe Object/Task Array]":i)+"`..."),0==i.length){var c={name:"SDK Pipe",description:"SDK Pipe",task:a,process_mode:"R"};t.http().post("/processes",c).then(function(i){var a=r.get(i,"data",{}),c=r.get(a,"eid","");t.util.debug("Created Process.");var f={method:"post",url:"/processes/"+c+"/run",responseType:"arraybuffer"};o.hasOwnProperty("data")&&(f.data=o.data),o.hasOwnProperty("query")&&(f.params=o.query),t.http().request(f).then(function(i){t.util.debug("Process Complete.");var o=r.get(i,"headers.content-type","text/plain"),a=s(i.data,o);t.util.callbackAdapter(null,a,e,u,n)}).catch(function(r){t.util.debug("Process Run Failed. "+r),t.util.callbackAdapter(r,null,e,u,n)})}).catch(function(r){t.util.debug("Process Create Failed. "+r),t.util.callbackAdapter(r,null,e,u,n)})}else{var f={method:"post",url:"/pipes/"+i+"/run",responseType:"arraybuffer"};o.hasOwnProperty("data")&&(f.data=o.data),o.hasOwnProperty("query")&&(f.params=o.query),o.hasOwnProperty("contentType")?f.headers={"Content-Type":o.contentType}:f.hasOwnProperty("data")&&(r.isPlainObject(f.data)||(r.isString(f.data)?f.headers={"Content-Type":"text/plain"}:f.headers={"Content-Type":"application/octet-stream"}));t.http()(f).then(function(i){t.util.debug("Process Complete.");var o=r.get(i,"headers.content-type","text/plain"),a=s(i.data,o);t.util.callbackAdapter(null,a,e,u,n)}).catch(function(r){t.util.debug("Pipe Run Call Failed. "+r),t.util.callbackAdapter(r,null,e,u,n)})}})}}}},function(t,e){t.exports={name:"flexio-sdk-js",version:"1.21.0",description:"Javascript SDK for managing Flex.io resources and services",author:"David Z. Williams <dave@flex.io>","--main":"dist/flexio-node.js",main:"src/main.js","--browser":"src/main.js",browser:"dist/flexio.min.js",scripts:{dev:"cross-env build=development webpack-dev-server --config ./build/webpack.dev.js --open --inline --https --hot","build:debug":"cross-env build=debug webpack --config build/webpack.dist.js","build:release":"cross-env build=production webpack --config build/webpack.dist.js","build:examples":"webpack --config build/webpack.examples.js",build:"npm run build:debug && npm run build:release && npm run build:examples",test:"jest"},repository:{type:"git",url:"git+https://github.com/flexiodata/flexio-sdk-js.git"},keywords:[],license:"Apache-2.0",bugs:{url:"https://github.com/flexiodata/flexio-sdk-js/issues"},homepage:"https://github.com/flexiodata/flexio-sdk-js/",dependencies:{},devDependencies:{autoprefixer:"^7.1.4","babel-core":"^6.26.0","babel-loader":"^7.1.2","babel-plugin-transform-es2015-destructuring":"^6.23.0","babel-plugin-transform-es2015-parameters":"^6.24.1","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-es2015":"^6.24.1","babel-preset-stage-2":"^6.24.1","cross-env":"^5.0.5","css-loader":"^0.28.7","deep-assign":"^2.0.0",jest:"^22.4.2",vue:"^2.4.4","vue-loader":"^13.0.4","vue-simple-spinner":"^1.2.7","vue-style-loader":"^3.0.3","vue-template-compiler":"^2.4.4",webpack:"^3.5.5","webpack-bundle-analyzer":"^2.11.1","webpack-dev-server":"^2.8.2"}}},function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=n(0);t.exports={},t.exports.getPipeConstructor=function(t){return function(e){if(!(this instanceof t.pipe))return new t.pipe(e);var n=i.assign(this,{pipe:{name:"Untitled",description:"",task:{op:"sequence",params:{items:[]}}},processes:[],_params:{},loading:!1,saving:!1,running:!1,getJSON:function(){return i.assign({},this.pipe)},getProcesses:function(){return[].concat(this.processes)},getLastProcess:function(){return i.last(this.processes)},addTask:function(t){return this.pipe.task.params.items.push(t),this},clearTasks:function(){return this.pipe.task.params.items=[],this},getTasks:function(){return this.pipe.task.params.items},load:function(){var e=this,n=arguments,r=Array.from(arguments),o=i.get(r,"[0]"),a=i.get(r,"[1]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){e.load.apply(e,n)},50),this):i.isNil(o)?t.util.debug("The `identifier` parameter is required. Either the pipe's eid or pipe's alias may be used."):(this.loading=!0,t.util.debug("Loading Pipe `"+o+"`..."),t.http().get("/pipes/"+o).then(function(n){var r=i.get(n,"data",{});e.pipe=i.assign({},r),e.loading=!1,t.util.debug("Pipe Loaded."),"function"==typeof a&&a.call(e,null,r)}).catch(function(n){e.loading=!1,t.util.debug("Pipe Load Failed. "),"function"==typeof a&&a.call(e,n,null)}),this)},save:function(){var e=this,n=arguments,r=Array.from(arguments),o=i.get(r,"[0]"),a=i.get(r,"[0]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){e.save.apply(e,n)},50),this):(i.isPlainObject(o)&&(i.assign(this.pipe,i.pick(o,["name","description","ename"])),a=i.get(r,"[1]")),this.saving=!0,t.util.debug("Saving Pipe `"+i.get(this.pipe,"name","Untitled Pipe")+"`..."),t.http().post("/pipes",this.pipe).then(function(n){var r=i.get(n,"data",{});e.pipe=i.assign({},r),e.saving=!1,t.util.debug("Pipe Saved."),"function"==typeof a&&a.call(e,null,e.pipe)}).catch(function(n){e.saving=!1,t.util.debug("Pipe Save Failed."),"function"==typeof a&&a.call(e,n,null)}),this)},run:function(){var e=Array.from(arguments);return e.unshift(this),t.pipes.run.apply(null,e)},params:function(t){return this._params=i.assign({},this.getParams(),t),this},getParams:function(){return i.assign({},this._params)},toCode:function(e){return t.task.toCode(this.pipe.task,t)}});return function(e){for(var n in t.task)t.task.hasOwnProperty(n)&&"toCode"!=n&&e(n,t.task[n])}(function(t,e){n[t]=function(){return n.addTask(e.apply(n,arguments))}}),void 0!==e&&("string"==typeof e||e instanceof String?n.pipe.eid=e:"object"===(void 0===e?"undefined":r(e))&&(e.hasOwnProperty("pipe")?n.pipe=JSON.parse(JSON.stringify(e.pipe)):e.hasOwnProperty("task")?n.pipe=JSON.parse(JSON.stringify(e)):e.hasOwnProperty("op")&&(n.pipe.task=e))),n}}},function(t,e,n){"use strict";var r=n(0),i=["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"],o=["","basic","bearer","oauth2"];t.exports={},t.exports.getConnectionConstructor=function(t){return function(){return this instanceof t.connection?r.assign(this,{connection:{name:"Untitled",description:"",connection_type:"http",connection_info:{method:"",url:"",auth:"",username:"",password:"",token:"",access_token:"",refresh_token:"",expires:"",data:{},headers:{}}},loading:!1,saving:!1,running:!1,getJSON:function(){return r.assign({},this.connection)},name:function(t){return this.connection.name=t,this},description:function(t){return this.connection.description=t,this},method:function(){var t=Array.from(arguments),e=r.get(t,"[0]");if(!r.isString(e))throw"Invalid/empty method";if(-1==i.indexOf(e))throw"Invalid method";return this._setInfo("method",e)},url:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("url",e):this},auth:function(){var t=Array.from(arguments),e=r.get(t,"[0]");if(!r.isString(e))throw"Invalid/empty auth";if(-1==o.indexOf(e))throw"Invalid auth";return"none"==e&&(e=""),this._setInfo("auth",e)},username:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("username",e):this},password:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("password",e):this},token:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("token",e):this},accessToken:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("access_token",e):this},refreshToken:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isString(e)?this._setInfo("refresh_token",e):this},expires:function(){var t=Array.from(arguments),e=r.get(t,"[0]");return r.isNumber(e)&&(e=""+e),r.isString(e)?this._setInfo("expires",e):this},data:function(){var t=Array.from(arguments),e=r.get(t,"[0]");if(!r.isPlainObject(e))return this;var n=this._getInfo("data",{});return e=r.assign({},n,e),this._setInfo("data",e)},headers:function(){var t=Array.from(arguments),e=r.get(t,"[0]");if(!r.isPlainObject(e))return this;var n=this._getInfo("headers",{});return e=r.assign({},n,e),this._setInfo("headers",e)},load:function(){var e=this,n=arguments,i=Array.from(arguments),o=r.get(i,"[0]"),a=r.get(i,"[1]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){e.load.apply(e,n)},50),this):r.isNil(o)?t.util.debug("The `identifier` parameter is required. Either the connection's eid or connection's alias may be used."):(this.loading=!0,t.util.debug("Loading Connection `"+o+"`..."),t.http().get("/connections/"+o).then(function(n){var i=r.get(n,"data",{});e.connection=r.assign({},i),e.loading=!1,t.util.debug("Connection Loaded."),"function"==typeof a&&a.call(e,null,i)}).catch(function(n){e.loading=!1,t.util.debug("Connection Load Failed."),"function"==typeof a&&a.call(e,n,null)}),this)},save:function(){var e=this,n=arguments,i=Array.from(arguments),o=r.get(i,"[0]"),a=r.get(i,"[0]");return!0===this.loading||!0===this.saving||!0===this.running?(setTimeout(function(){e.save.apply(e,n)},50),this):(r.isPlainObject(o)&&(r.assign(this.connection,r.pick(o,["name","description","ename"])),a=r.get(i,"[1]")),this.saving=!0,t.util.debug("Saving Connection `"+r.get(this.connection,"name","Untitled Connection")+"`..."),t.http().post("/connections",this.connection).then(function(n){var i=r.get(n,"data",{});e.connection=r.assign({},i),e.saving=!1,t.util.debug("Connection Saved."),"function"==typeof a&&a.call(e,null,e.connection)}).catch(function(n){e.saving=!1,t.util.debug("Connection Save Failed."),"function"==typeof a&&a.call(e,n,null)}),this)},_getInfo:function(t,e){return r.get(this.connection,"connection_info."+t,e)},_setInfo:function(t,e){return this.connection.hasOwnProperty("connection_info")||(this.connection.connection_info={}),this.connection.connection_info[t]=e,this}}):new t.connection}}},function(t,e,n){"use strict";function r(t){this.options=i.isPlainObject(t)?t:{},this.post=function(t,e,n){return this.request(i.assign(n||{},{method:"POST",url:t,data:e}))},this.get=function(t,e){return this.request(i.assign(e||{},{method:"GET",url:t}))},this.request=function(t){var e=i.get(this.options,"baseURL",""),r=i.get(t,"url","");return-1!=r.indexOf("://")?e=r:(r="/"==r.substr(0,1)?r.substr(1):r,"/"!=e.slice(-1)&&(e+="/"),e+=r),t=i.assign({},t,{url:e}),o.isNodeJs()?n(67).apply(this,[t]):n(86).apply(this,[t])}}var i=n(0),o=n(5);t.exports={create:function(t){return new r(t)}}},function(t,e,n){"use strict";(function(e,r){function i(t){!0===this.options.insecure&&(e.env.NODE_TLS_REJECT_UNAUTHORIZED="0");var i=this.hasOwnProperty("https")?this.https:null;null===i&&(i=this.https=n(68));var a=n(24).URL,s=new a(o.get(t,"url",""),o.get(this.options,"baseUrl",void 0)),u={method:t.hasOwnProperty("method")?t.method.toUpperCase():"GET",port:s.port?s.port:443,host:s.hostname,path:s.pathname,encoding:null},c=o.assign({},o.get(this.options,"headers",{}),o.get(t,"headers",{}));Object.keys(c).length>0&&(u.headers=c);var f=null,l=o.get(t,"data",null);return o.isPlainObject(l)&&(l=JSON.stringify(l),f="application/json"),l&&(u.hasOwnProperty("headers")||(u.headers={}),f&&(u.headers["Content-Type"]=f),u.headers["Content-Length"]=r.byteLength(l)),new Promise(function(e,n){var o=[],a=i.request(u,function(n){var i={status:n.statusCode,statusText:n.statusMessage,headers:n.headers,request:a};n.on("data",function(t){o.push(t)}),n.on("end",function(){if(o=r.concat(o),"arraybuffer"!==t.responseType&&(o=o.toString(t.responseEncoding)),"string"==typeof o)try{o=JSON.parse(o)}catch(t){}i.data=o,e(i)})});a.on("error",function(t){n(response)}),a.end(l)})}var o=n(0);t.exports=i}).call(e,n(2),n(3).Buffer)},function(t,e,n){var r=n(69),i=t.exports;for(var o in r)r.hasOwnProperty(o)&&(i[o]=r[o]);i.request=function(t,e){return t||(t={}),t.scheme="https",t.protocol="https:",r.request.call(this,t,e)}},function(t,e,n){(function(t){var r=n(70),i=n(79),o=n(80),a=n(24),s=e;s.request=function(e,n){e="string"==typeof e?a.parse(e):i(e);var o=-1===t.location.protocol.search(/^https?:$/)?"http:":"",s=e.protocol||o,u=e.hostname||e.host,c=e.port,f=e.path||"/";u&&-1!==u.indexOf(":")&&(u="["+u+"]"),e.url=(u?s+"//"+u:"")+(c?":"+c:"")+f,e.method=(e.method||"GET").toUpperCase(),e.headers=e.headers||{};var l=new r(e);return n&&l.on("response",n),l},s.get=function(t,e){var n=s.request(t,e);return n.end(),n},s.Agent=function(){},s.Agent.defaultMaxSockets=4,s.STATUS_CODES=o,s.METHODS=["CHECKOUT","CONNECT","COPY","DELETE","GET","HEAD","LOCK","M-SEARCH","MERGE","MKACTIVITY","MKCOL","MOVE","NOTIFY","OPTIONS","PATCH","POST","PROPFIND","PROPPATCH","PURGE","PUT","REPORT","SEARCH","SUBSCRIBE","TRACE","UNLOCK","UNSUBSCRIBE"]}).call(e,n(1))},function(t,e,n){(function(e,r,i){function o(t,e){return s.fetch&&e?"fetch":s.mozchunkedarraybuffer?"moz-chunked-arraybuffer":s.msstream?"ms-stream":s.arraybuffer&&t?"arraybuffer":s.vbArray&&t?"text:vbarray":"text"}function a(t){try{var e=t.status;return null!==e&&0!==e}catch(t){return!1}}var s=n(15),u=n(4),c=n(71),f=n(16),l=n(78),p=c.IncomingMessage,h=c.readyStates,d=t.exports=function(t){var n=this;f.Writable.call(n),n._opts=t,n._body=[],n._headers={},t.auth&&n.setHeader("Authorization","Basic "+new e(t.auth).toString("base64")),Object.keys(t.headers).forEach(function(e){n.setHeader(e,t.headers[e])});var r,i=!0;if("disable-fetch"===t.mode||"timeout"in t)i=!1,r=!0;else if("prefer-streaming"===t.mode)r=!1;else if("allow-wrong-content-type"===t.mode)r=!s.overrideMimeType;else{if(t.mode&&"default"!==t.mode&&"prefer-fast"!==t.mode)throw new Error("Invalid value for opts.mode");r=!0}n._mode=o(r,i),n.on("finish",function(){n._onFinish()})};u(d,f.Writable),d.prototype.setHeader=function(t,e){var n=this,r=t.toLowerCase();-1===v.indexOf(r)&&(n._headers[r]={name:t,value:e})},d.prototype.getHeader=function(t){var e=this._headers[t.toLowerCase()];return e?e.value:null},d.prototype.removeHeader=function(t){delete this._headers[t.toLowerCase()]},d.prototype._onFinish=function(){var t=this;if(!t._destroyed){var n=t._opts,o=t._headers,a=null;"GET"!==n.method&&"HEAD"!==n.method&&(a=s.blobConstructor?new r.Blob(t._body.map(function(t){return l(t)}),{type:(o["content-type"]||{}).value||""}):e.concat(t._body).toString());var u=[];if(Object.keys(o).forEach(function(t){var e=o[t].name,n=o[t].value;Array.isArray(n)?n.forEach(function(t){u.push([e,t])}):u.push([e,n])}),"fetch"===t._mode)r.fetch(t._opts.url,{method:t._opts.method,headers:u,body:a||void 0,mode:"cors",credentials:n.withCredentials?"include":"same-origin"}).then(function(e){t._fetchResponse=e,t._connect()},function(e){t.emit("error",e)});else{var c=t._xhr=new r.XMLHttpRequest;try{c.open(t._opts.method,t._opts.url,!0)}catch(e){return void i.nextTick(function(){t.emit("error",e)})}"responseType"in c&&(c.responseType=t._mode.split(":")[0]),"withCredentials"in c&&(c.withCredentials=!!n.withCredentials),"text"===t._mode&&"overrideMimeType"in c&&c.overrideMimeType("text/plain; charset=x-user-defined"),"timeout"in n&&(c.timeout=n.timeout,c.ontimeout=function(){t.emit("timeout")}),u.forEach(function(t){c.setRequestHeader(t[0],t[1])}),t._response=null,c.onreadystatechange=function(){switch(c.readyState){case h.LOADING:case h.DONE:t._onXHRProgress()}},"moz-chunked-arraybuffer"===t._mode&&(c.onprogress=function(){t._onXHRProgress()}),c.onerror=function(){t._destroyed||t.emit("error",new Error("XHR error"))};try{c.send(a)}catch(e){return void i.nextTick(function(){t.emit("error",e)})}}}},d.prototype._onXHRProgress=function(){var t=this;a(t._xhr)&&!t._destroyed&&(t._response||t._connect(),t._response._onXHRProgress())},d.prototype._connect=function(){var t=this;t._destroyed||(t._response=new p(t._xhr,t._fetchResponse,t._mode),t._response.on("error",function(e){t.emit("error",e)}),t.emit("response",t._response))},d.prototype._write=function(t,e,n){this._body.push(t),n()},d.prototype.abort=d.prototype.destroy=function(){var t=this;t._destroyed=!0,t._response&&(t._response._destroyed=!0),t._xhr&&t._xhr.abort()},d.prototype.end=function(t,e,n){var r=this;"function"==typeof t&&(n=t,t=void 0),f.Writable.prototype.end.call(r,t,e,n)},d.prototype.flushHeaders=function(){},d.prototype.setTimeout=function(){},d.prototype.setNoDelay=function(){},d.prototype.setSocketKeepAlive=function(){};var v=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","date","dnt","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"]}).call(e,n(3).Buffer,n(1),n(2))},function(t,e,n){(function(t,r,i){var o=n(15),a=n(4),s=n(16),u=e.readyStates={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},c=e.IncomingMessage=function(e,n,i){function a(){c.read().then(function(t){if(!u._destroyed){if(t.done)return void u.push(null);u.push(new r(t.value)),a()}}).catch(function(t){u.emit("error",t)})}var u=this;if(s.Readable.call(u),u._mode=i,u.headers={},u.rawHeaders=[],u.trailers={},u.rawTrailers=[],u.on("end",function(){t.nextTick(function(){u.emit("close")})}),"fetch"===i){u._fetchResponse=n,u.url=n.url,u.statusCode=n.status,u.statusMessage=n.statusText,n.headers.forEach(function(t,e){u.headers[e.toLowerCase()]=t,u.rawHeaders.push(e,t)});var c=n.body.getReader();a()}else{u._xhr=e,u._pos=0,u.url=e.responseURL,u.statusCode=e.status,u.statusMessage=e.statusText;if(e.getAllResponseHeaders().split(/\r?\n/).forEach(function(t){var e=t.match(/^([^:]+):\s*(.*)/);if(e){var n=e[1].toLowerCase();"set-cookie"===n?(void 0===u.headers[n]&&(u.headers[n]=[]),u.headers[n].push(e[2])):void 0!==u.headers[n]?u.headers[n]+=", "+e[2]:u.headers[n]=e[2],u.rawHeaders.push(e[1],e[2])}}),u._charset="x-user-defined",!o.overrideMimeType){var f=u.rawHeaders["mime-type"];if(f){var l=f.match(/;\s*charset=([^;])(;|$)/);l&&(u._charset=l[1].toLowerCase())}u._charset||(u._charset="utf-8")}}};a(c,s.Readable),c.prototype._read=function(){},c.prototype._onXHRProgress=function(){var t=this,e=t._xhr,n=null;switch(t._mode){case"text:vbarray":if(e.readyState!==u.DONE)break;try{n=new i.VBArray(e.responseBody).toArray()}catch(t){}if(null!==n){t.push(new r(n));break}case"text":try{n=e.responseText}catch(e){t._mode="text:vbarray";break}if(n.length>t._pos){var o=n.substr(t._pos);if("x-user-defined"===t._charset){for(var a=new r(o.length),s=0;s<o.length;s++)a[s]=255&o.charCodeAt(s);t.push(a)}else t.push(o,t._charset);t._pos=n.length}break;case"arraybuffer":if(e.readyState!==u.DONE||!e.response)break;n=e.response,t.push(new r(new Uint8Array(n)));break;case"moz-chunked-arraybuffer":if(n=e.response,e.readyState!==u.LOADING||!n)break;t.push(new r(new Uint8Array(n)));break;case"ms-stream":if(n=e.response,e.readyState!==u.LOADING)break;var c=new i.MSStreamReader;c.onprogress=function(){c.result.byteLength>t._pos&&(t.push(new r(new Uint8Array(c.result.slice(t._pos)))),t._pos=c.result.byteLength)},c.onload=function(){t.push(null)},c.readAsArrayBuffer(n)}t._xhr.readyState===u.DONE&&"ms-stream"!==t._mode&&t.push(null)}}).call(e,n(2),n(3).Buffer,n(1))},function(t,e){},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e,n){t.copy(e,n)}var o=n(9).Buffer;t.exports=function(){function t(){r(this,t),this.head=null,this.tail=null,this.length=0}return t.prototype.push=function(t){var e={data:t,next:null};this.length>0?this.tail.next=e:this.head=e,this.tail=e,++this.length},t.prototype.unshift=function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length},t.prototype.shift=function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}},t.prototype.clear=function(){this.head=this.tail=null,this.length=0},t.prototype.join=function(t){if(0===this.length)return"";for(var e=this.head,n=""+e.data;e=e.next;)n+=t+e.data;return n},t.prototype.concat=function(t){if(0===this.length)return o.alloc(0);if(1===this.length)return this.head.data;for(var e=o.allocUnsafe(t>>>0),n=this.head,r=0;n;)i(n.data,e,r),r+=n.data.length,n=n.next;return e},t}()},function(t,e,n){function r(t,e){this._id=t,this._clearFn=e}var i=Function.prototype.apply;e.setTimeout=function(){return new r(i.call(setTimeout,window,arguments),clearTimeout)},e.setInterval=function(){return new r(i.call(setInterval,window,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t&&t.close()},r.prototype.unref=r.prototype.ref=function(){},r.prototype.close=function(){this._clearFn.call(window,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},n(75),e.setImmediate=setImmediate,e.clearImmediate=clearImmediate},function(t,e,n){(function(t,e){!function(t,n){"use strict";function r(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),n=0;n<e.length;n++)e[n]=arguments[n+1];var r={callback:t,args:e};return c[u]=r,s(u),u++}function i(t){delete c[t]}function o(t){var e=t.callback,r=t.args;switch(r.length){case 0:e();break;case 1:e(r[0]);break;case 2:e(r[0],r[1]);break;case 3:e(r[0],r[1],r[2]);break;default:e.apply(n,r)}}function a(t){if(f)setTimeout(a,0,t);else{var e=c[t];if(e){f=!0;try{o(e)}finally{i(t),f=!1}}}}if(!t.setImmediate){var s,u=1,c={},f=!1,l=t.document,p=Object.getPrototypeOf&&Object.getPrototypeOf(t);p=p&&p.setTimeout?p:t,"[object process]"==={}.toString.call(t.process)?function(){s=function(t){e.nextTick(function(){a(t)})}}():function(){if(t.postMessage&&!t.importScripts){var e=!0,n=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=n,e}}()?function(){var e="setImmediate$"+Math.random()+"$",n=function(n){n.source===t&&"string"==typeof n.data&&0===n.data.indexOf(e)&&a(+n.data.slice(e.length))};t.addEventListener?t.addEventListener("message",n,!1):t.attachEvent("onmessage",n),s=function(n){t.postMessage(e+n,"*")}}():t.MessageChannel?function(){var t=new MessageChannel;t.port1.onmessage=function(t){a(t.data)},s=function(e){t.port2.postMessage(e)}}():l&&"onreadystatechange"in l.createElement("script")?function(){var t=l.documentElement;s=function(e){var n=l.createElement("script");n.onreadystatechange=function(){a(e),n.onreadystatechange=null,t.removeChild(n),n=null},t.appendChild(n)}}():function(){s=function(t){setTimeout(a,0,t)}}(),p.setImmediate=r,p.clearImmediate=i}}("undefined"==typeof self?void 0===t?this:t:self)}).call(e,n(1),n(2))},function(t,e,n){(function(e){function n(t,e){function n(){if(!i){if(r("throwDeprecation"))throw new Error(e);r("traceDeprecation")?console.trace(e):console.warn(e),i=!0}return t.apply(this,arguments)}if(r("noDeprecation"))return t;var i=!1;return n}function r(t){try{if(!e.localStorage)return!1}catch(t){return!1}var n=e.localStorage[t];return null!=n&&"true"===String(n).toLowerCase()}t.exports=n}).call(e,n(1))},function(t,e,n){"use strict";function r(t){if(!(this instanceof r))return new r(t);i.call(this,t)}t.exports=r;var i=n(23),o=n(7);o.inherits=n(4),o.inherits(r,i),r.prototype._transform=function(t,e,n){n(null,t)}},function(t,e,n){var r=n(3).Buffer;t.exports=function(t){if(t instanceof Uint8Array){if(0===t.byteOffset&&t.byteLength===t.buffer.byteLength)return t.buffer;if("function"==typeof t.buffer.slice)return t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}if(r.isBuffer(t)){for(var e=new Uint8Array(t.length),n=t.length,i=0;i<n;i++)e[i]=t[i];return e.buffer}throw new Error("Argument must be a Buffer")}},function(t,e){function n(){for(var t={},e=0;e<arguments.length;e++){var n=arguments[e];for(var i in n)r.call(n,i)&&(t[i]=n[i])}return t}t.exports=n;var r=Object.prototype.hasOwnProperty},function(t,e){t.exports={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",208:"Already Reported",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Payload Too Large",414:"URI Too Long",415:"Unsupported Media Type",416:"Range Not Satisfiable",417:"Expectation Failed",418:"I'm a teapot",421:"Misdirected Request",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Unordered Collection",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",451:"Unavailable For Legal Reasons",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",508:"Loop Detected",509:"Bandwidth Limit Exceeded",510:"Not Extended",511:"Network Authentication Required"}},function(t,e,n){(function(t,r){var i;!function(o){function a(t){throw new RangeError(R[t])}function s(t,e){for(var n=t.length,r=[];n--;)r[n]=e(t[n]);return r}function u(t,e){var n=t.split("@"),r="";return n.length>1&&(r=n[0]+"@",t=n[1]),t=t.replace(j,"."),r+s(t.split("."),e).join(".")}function c(t){for(var e,n,r=[],i=0,o=t.length;i<o;)e=t.charCodeAt(i++),e>=55296&&e<=56319&&i<o?(n=t.charCodeAt(i++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),i--)):r.push(e);return r}function f(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=D(t>>>10&1023|55296),t=56320|1023&t),e+=D(t)}).join("")}function l(t){return t-48<10?t-22:t-65<26?t-65:t-97<26?t-97:w}function p(t,e){return t+22+75*(t<26)-((0!=e)<<5)}function h(t,e,n){var r=0;for(t=n?$(t/C):t>>1,t+=$(t/e);t>P*E>>1;r+=w)t=$(t/P);return $(r+(P+1)*t/(t+O))}function d(t){var e,n,r,i,o,s,u,c,p,d,v=[],g=t.length,m=0,y=A,_=S;for(n=t.lastIndexOf(k),n<0&&(n=0),r=0;r<n;++r)t.charCodeAt(r)>=128&&a("not-basic"),v.push(t.charCodeAt(r));for(i=n>0?n+1:0;i<g;){for(o=m,s=1,u=w;i>=g&&a("invalid-input"),c=l(t.charCodeAt(i++)),(c>=w||c>$((b-m)/s))&&a("overflow"),m+=c*s,p=u<=_?x:u>=_+E?E:u-_,!(c<p);u+=w)d=w-p,s>$(b/d)&&a("overflow"),s*=d;e=v.length+1,_=h(m-o,e,0==o),$(m/e)>b-y&&a("overflow"),y+=$(m/e),m%=e,v.splice(m++,0,y)}return f(v)}function v(t){var e,n,r,i,o,s,u,f,l,d,v,g,m,y,_,O=[];for(t=c(t),g=t.length,e=A,n=0,o=S,s=0;s<g;++s)(v=t[s])<128&&O.push(D(v));for(r=i=O.length,i&&O.push(k);r<g;){for(u=b,s=0;s<g;++s)(v=t[s])>=e&&v<u&&(u=v);for(m=r+1,u-e>$((b-n)/m)&&a("overflow"),n+=(u-e)*m,e=u,s=0;s<g;++s)if(v=t[s],v<e&&++n>b&&a("overflow"),v==e){for(f=n,l=w;d=l<=o?x:l>=o+E?E:l-o,!(f<d);l+=w)_=f-d,y=w-d,O.push(D(p(d+_%y,0))),f=$(_/y);O.push(D(p(f,0))),o=h(n,m,r==i),n=0,++r}++n,++e}return O.join("")}function g(t){return u(t,function(t){return N.test(t)?d(t.slice(4).toLowerCase()):t})}function m(t){return u(t,function(t){return T.test(t)?"xn--"+v(t):t})}var y=("object"==typeof e&&e&&e.nodeType,"object"==typeof t&&t&&t.nodeType,"object"==typeof r&&r);var _,b=2147483647,w=36,x=1,E=26,O=38,C=700,S=72,A=128,k="-",N=/^xn--/,T=/[^\x20-\x7E]/,j=/[\x2E\u3002\uFF0E\uFF61]/g,R={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},P=w-x,$=Math.floor,D=String.fromCharCode;_={version:"1.4.1",ucs2:{decode:c,encode:f},decode:d,encode:v,toASCII:m,toUnicode:g},void 0!==(i=function(){return _}.call(e,n,e,t))&&(t.exports=i)}()}).call(e,n(12)(t),n(1))},function(t,e,n){"use strict";t.exports={isString:function(t){return"string"==typeof t},isObject:function(t){return"object"==typeof t&&null!==t},isNull:function(t){return null===t},isNullOrUndefined:function(t){return null==t}}},function(t,e,n){"use strict";e.decode=e.parse=n(84),e.encode=e.stringify=n(85)},function(t,e,n){"use strict";function r(t,e){return Object.prototype.hasOwnProperty.call(t,e)}t.exports=function(t,e,n,o){e=e||"&",n=n||"=";var a={};if("string"!=typeof t||0===t.length)return a;var s=/\+/g;t=t.split(e);var u=1e3;o&&"number"==typeof o.maxKeys&&(u=o.maxKeys);var c=t.length;u>0&&c>u&&(c=u);for(var f=0;f<c;++f){var l,p,h,d,v=t[f].replace(s,"%20"),g=v.indexOf(n);g>=0?(l=v.substr(0,g),p=v.substr(g+1)):(l=v,p=""),h=decodeURIComponent(l),d=decodeURIComponent(p),r(a,h)?i(a[h])?a[h].push(d):a[h]=[a[h],d]:a[h]=d}return a};var i=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},function(t,e,n){"use strict";function r(t,e){if(t.map)return t.map(e);for(var n=[],r=0;r<t.length;r++)n.push(e(t[r],r));return n}var i=function(t){switch(typeof t){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}};t.exports=function(t,e,n,s){return e=e||"&",n=n||"=",null===t&&(t=void 0),"object"==typeof t?r(a(t),function(a){var s=encodeURIComponent(i(a))+n;return o(t[a])?r(t[a],function(t){return s+encodeURIComponent(i(t))}).join(e):s+encodeURIComponent(i(t[a]))}).join(e):s?encodeURIComponent(i(s))+n+encodeURIComponent(i(t)):""};var o=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},a=Object.keys||function(t){var e=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.push(n);return e}},function(t,e,n){"use strict";function r(t){function e(t){for(var e={},n=t?t.split("\r\n"):[],r=0,i=n.length;r<i;r++){var o=n[r].indexOf(":");o>0&&(e[n[r].substr(0,o).trim()]=n[r].substr(o+1).trim())}return e}var n=i.assign({},i.get(this.options,"headers",{}),i.get(t,"headers",{})),r=i.get(t,"data",null);return"undefined"!=typeof FormData&&r instanceof FormData?delete n["Content-Type"]:i.isPlainObject(r)&&(r=JSON.stringify(r),n["Content-Type"]="application/json"),new Promise(function(i,o){function a(e){var n=t.responseType&&"text"!==t.responseType?e.response:e.responseText;if("string"==typeof n)try{n=JSON.parse(n)}catch(t){}return n}var s=new XMLHttpRequest;if(s.open(t.method.toUpperCase(),t.url,!0),t.responseType&&(s.responseType=t.responseType),Object.keys(n).length>0)for(var u in n)n.hasOwnProperty(u)&&s.setRequestHeader(u,n[u]);s.onload=function(){var n=a(s),r={data:n,status:1223===s.status?204:s.status,statusText:1223===s.status?"No Content":s.statusText,headers:e(s.getAllResponseHeaders()),config:t,request:s};i(r),s=null},s.onerror=function(){var n=a(s),r={data:n,status:s.status,statusText:s.statusText,headers:e(s.getAllResponseHeaders()),config:t,request:s};o(r),s=null},s.send(r)})}var i=n(0);t.exports=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(88),i=n.n(r),o=n(90),a=n(10),s=a(i.a,o.a,null,null,null);e.default=s.exports},function(module,exports,__webpack_require__){"use strict";function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(exports,"__esModule",{value:!0});var _lodash=__webpack_require__(11),_lodash2=_interopRequireDefault(_lodash),_util=__webpack_require__(5),_util2=_interopRequireDefault(_util),_flexio=__webpack_require__(13),_flexio2=_interopRequireDefault(_flexio),_vueSimpleSpinner=__webpack_require__(89),_vueSimpleSpinner2=_interopRequireDefault(_vueSimpleSpinner);exports.default={props:{title:{type:String,default:""},description:{type:String,default:""},code:{type:String,default:""},fn:{type:Function,default:function(){return function(){alert("No function specified!")}}},"is-editable":{type:Boolean,default:!1},"show-run":{type:Boolean,default:!0}},components:{VueSimpleSpinner:_vueSimpleSpinner2.default},data:function(){return{result:"",img_src:"",editable_code:"Flexio.pipe()\n  .echo('Hello, World!')\n  .run(callback)",is_loading:!1}},computed:{has_image_result:function(){return this.img_src.length>0},has_text_result:function(){return this.result.length>0},code_trimmed:function(){return this.code.trim()}},methods:{run:function run(){var _this=this;if("function"==typeof this.fn){this.is_loading=!0;var fn=this.fn;this.isEditable&&(fn=function fn(Flexio,callback){eval(_this.editable_code)}),fn.call(this,_flexio2.default,function(t,e){_this.result="",_this.img_src="";var n=_lodash2.default.get(e,"contentType","");if("image/"==n.substr(0,6)){var r=window.URL||window.webkitURL;_this.img_src=r.createObjectURL(e.blob)}else"application/json"==n?_this.result=JSON.stringify(e.data,null,2):n.length>0&&_lodash2.default.has(e,"buffer")?_this.result=e.text:_this.result=JSON.stringify(e,null,2);_this.is_loading=!1},function(t){_this.is_loading=!1})}}}}},function(t,e,n){/*!
  * vue-simple-spinner v1.2.7 (https://github.com/dzwillia/vue-simple-spinner)
  * (c) 2017 David Z. Williams
  * Released under the MIT License.