text: (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
  "use strict";
  
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
  
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
  
  /**
   * Esy npm release installation script.
   *
   * This is made to be invoked from npm's postinstall hook:
   *
   *   node esyInstallRelease.js
   *
   * Note that it's important to keep this program as portable as possible and not
   * to use any of the non-standard JS features.
   */
  require('@babel/polyfill');
  
  var path = require('path');
  
  var fs = require('fs');
  
  var cp = require('child_process');
  
  var os = require('os');
  
  var promisepipe = require('promisepipe');
  
  var tarFs = require('tar-fs');
  
  var gunzipMaybe = require('gunzip-maybe');
  /**
   * Constants
   */
  
  
  var OCAML_PKG_NAME = process.env.OCAML_PKG_NAME;
  
  if (!OCAML_PKG_NAME || OCAML_PKG_NAME == '') {
    console.log("[Warning] OCAML_PKG_NAME wasn't present in the environment. Falling back to 'ocaml'. This can potentially fail");
    OCAML_PKG_NAME = 'ocaml';
  }
  
  var OCAML_VERSION = process.env.OCAML_VERSION;
  
  if (!OCAML_VERSION) {
    console.log("[Warning] OCAML_VERSION wasn't present in the environment. Falling back to default 'n.00.0000'. This can potentially fail");
    OCAML_VERSION = 'n.00.0000';
  }
  
  var STORE_BUILD_TREE = 'b';
  var STORE_INSTALL_TREE = 'i';
  var STORE_STAGE_TREE = 's';
  var ESY_STORE_VERSION = 3;
  var MAX_SHEBANG_LENGTH = 127;
  var OCAMLRUN_STORE_PATH = OCAML_PKG_NAME + '-' + OCAML_VERSION + '-########/bin/ocamlrun';
  var ESY_STORE_PADDING_LENGTH = MAX_SHEBANG_LENGTH - '!#'.length - ('/' + STORE_INSTALL_TREE + '/' + OCAMLRUN_STORE_PATH).length;
  var shouldRewritePrefix = process.env.ESY_RELEASE_REWRITE_PREFIX === 'true';
  /**
   * Utils
   */
  
  function info(msg) {
    console.log(msg);
  }
  
  function error(err) {
    if (err instanceof Error) {
      console.error('error: ' + err.stack);
    } else {
      console.error('error: ' + err);
    }
  
    process.exit(1);
  }
  
  function promisify(fn, firstData) {
    return function () {
      var args = Array.prototype.slice.call(arguments);
      return new Promise(function (resolve, reject) {
        args.push(function () {
          var args = Array.prototype.slice.call(arguments);
          var err = args.shift();
          var res = args;
  
          if (res.length <= 1) {
            res = res[0];
          }
  
          if (firstData) {
            res = err;
            err = null;
          }
  
          if (err) {
            reject(err);
          } else {
            resolve(res);
          }
        });
        fn.apply(null, args);
      });
    };
  }
  
  function processWithConcurrencyLimit(tasks, process, concurrency) {
    tasks = tasks.slice(0);
    return new Promise(function (resolve, reject) {
      var inprogress = 0;
      var rejected = false;
  
      function run() {
        if (tasks.length === 0) {
          if (inprogress === 0) {
            resolve();
          }
  
          return;
        }
  
        while (inprogress < concurrency && tasks.length > 0) {
          var task = tasks.pop();
          inprogress = inprogress + 1;
          process(task).then(function () {
            if (!rejected) {
              inprogress = inprogress - 1;
              run();
            }
          }, function (err) {
            if (!rejected) {
              rejected = true;
              reject(err);
            }
          });
        }
      }
  
      run();
    });
  }
  /**
   * Filesystem functions.
   */
  
  
  var fsExists = promisify(fs.exists, true);
  var fsReaddir = promisify(fs.readdir);
  var fsReadFile = promisify(fs.readFile);
  var fsWriteFile = promisify(fs.writeFile);
  var fsSymlink = promisify(fs.symlink);
  var fsUnlink = promisify(fs.unlink);
  var fsReadlink = promisify(fs.readlink);
  var fsStat = promisify(fs.stat);
  var fsLstat = promisify(fs.lstat);
  var fsMkdir = promisify(fs.mkdir);
  var fsRename = promisify(fs.rename);
  
  var lookupMachOBinaries = function lookupMachOBinaries(dir) {
    var entries = fs.readdirSync(dir);
    return entries.reduce(function (acc, entry) {
      var entryPath = path.join(dir, entry);
      var lstat = fs.lstatSync(entryPath);
  
      if (lstat.isDirectory()) {
        acc = acc.concat(lookupMachOBinaries(entryPath));
      } else if (lstat.isFile(entryPath)) {
        var magicNumber;
  
        try {
          magicNumber = fs.readFileSync(entryPath)['readUInt32' + os.endianness()](0);
        } catch (e) {
          magicNumber = 0;
        }
  
        if (magicNumber === 0xfeedfacf) {
          acc = acc.concat(entryPath);
        } else {}
      }
  
      return acc;
    }, []);
  };
  
  var codesign = function codesign(p) {
    cp.execSync("codesign --sign - --force --preserve-metadata=entitlements,requirements,flags,runtime " + p, {
      stdio: 'ignore'
    });
  };
  
  var sign = function sign(p) {
    codesign(p);
    var tempDirPath = fs.mkdtempSync("esy-npm-bigsur-workaround-");
    fs.copyFileSync(p, path.join(tempDirPath, path.basename(p)));
    fs.unlinkSync(p);
    fs.copyFileSync(path.join(tempDirPath, path.basename(p)), p);
    codesign(p);
  };
  
  function fsWalk(dir, relativeDir) {
    var files = [];
    return fsReaddir(dir).then(function (filenames) {
      function process(name) {
        var relative = relativeDir ? path.join(relativeDir, name) : name;
        var loc = path.join(dir, name);
        return fsLstat(loc).then(function (stats) {
          files.push({
            relative: relative,
            basename: name,
            absolute: loc,
            mtime: +stats.mtime,
            stats: stats
          });
  
          if (stats.isDirectory()) {
            return fsWalk(loc, relative).then(function (nextFiles) {
              files = files.concat(nextFiles);
            });
          }
        });
      }
  
      return processWithConcurrencyLimit(filenames, process, 20).then(function () {
        return files;
      });
    });
  }
  /**
   * Store utils
   */
  
  
  function getStorePathForPrefix(prefix) {
    var prefixLength = path.join(prefix, String(ESY_STORE_VERSION)).length;
    var paddingLength = ESY_STORE_PADDING_LENGTH - prefixLength;
  
    if (paddingLength < 0) {
      error("Esy prefix path is too deep in the filesystem, Esy won't be able to relocate artefacts");
    }
  
    var p = path.join(prefix, String(ESY_STORE_VERSION));
  
    while (p.length < ESY_STORE_PADDING_LENGTH) {
      p = p + '_';
    }
  
    return p;
  }
  
  var cwd = process.cwd();
  var releasePackagePath = cwd;
  var releaseExportPath = path.join(releasePackagePath, '_export');
  var releaseBinPath = path.join(releasePackagePath, 'bin');
  var unpaddedStorePath = path.join(releasePackagePath, String(ESY_STORE_VERSION));
  /**
   * Main
   */
  
  function importBuild(_x, _x2) {
    return _importBuild.apply(this, arguments);
  }
  
  function _importBuild() {
    _importBuild = _asyncToGenerator(
    /*#__PURE__*/
    regeneratorRuntime.mark(function _callee2(filename, storePath) {
      var buildId, extractTarball, _extractTarball, storeStagePath, buildStagePath, buildFinalPath, prevStorePrefix;
  
      return regeneratorRuntime.wrap(function _callee2$(_context2) {
        while (1) {
          switch (_context2.prev = _context2.next) {
            case 0:
              _extractTarball = function _ref2() {
                _extractTarball = _asyncToGenerator(
                /*#__PURE__*/
                regeneratorRuntime.mark(function _callee(storeStagePath) {
                  return regeneratorRuntime.wrap(function _callee$(_context) {
                    while (1) {
                      switch (_context.prev = _context.next) {
                        case 0:
                          _context.next = 2;
                          return promisepipe(fs.createReadStream(filename), gunzipMaybe(), tarFs.extract(storeStagePath));
  
                        case 2:
                        case "end":
                          return _context.stop();
                      }
                    }
                  }, _callee, this);
                }));
                return _extractTarball.apply(this, arguments);
              };
  
              extractTarball = function _ref(_x3) {
                return _extractTarball.apply(this, arguments);
              };
  
              buildId = path.basename(filename).replace(/\.tar\.gz$/g, '');
              info('importing: ' + buildId);
  
              if (!(storePath != null)) {
                _context2.next = 22;
                break;
              }
  
              storeStagePath = path.join(storePath, STORE_STAGE_TREE);
              buildStagePath = path.join(storeStagePath, buildId);
              buildFinalPath = path.join(storePath, STORE_INSTALL_TREE, buildId);
              _context2.next = 10;
              return fsMkdir(buildStagePath);
  
            case 10:
              _context2.next = 12;
              return extractTarball(storeStagePath);
  
            case 12:
              _context2.next = 14;
              return fsReadFile(path.join(buildStagePath, '_esy', 'storePrefix'));
  
            case 14:
              prevStorePrefix = _context2.sent;
              prevStorePrefix = prevStorePrefix.toString();
              _context2.next = 18;
              return rewritePaths(buildStagePath, prevStorePrefix, storePath);
  
            case 18:
              _context2.next = 20;
              return fsRename(buildStagePath, buildFinalPath);
  
            case 20:
              _context2.next = 31;
              break;
  
            case 22:
              storeStagePath = path.join(unpaddedStorePath, STORE_STAGE_TREE);
              buildStagePath = path.join(storeStagePath, buildId);
              buildFinalPath = path.join(unpaddedStorePath, STORE_INSTALL_TREE, buildId);
              _context2.next = 27;
              return fsMkdir(buildStagePath);
  
            case 27:
              _context2.next = 29;
              return extractTarball(storeStagePath);
  
            case 29:
              _context2.next = 31;
              return fsRename(buildStagePath, buildFinalPath);
  
            case 31:
            case "end":
              return _context2.stop();
          }
        }
      }, _callee2, this);
    }));
    return _importBuild.apply(this, arguments);
  }
  
  function rewritePaths(path, from, to) {
    var concurrency = 20;
  
    function process(file) {
      if (file.stats.isSymbolicLink()) {
        return rewritePathInSymlink(file.absolute, from, to);
      } else {
        return rewritePathInFile(file.absolute, from, to);
      }
    }
  
    return fsWalk(path).then(function (files) {
      return processWithConcurrencyLimit(files, process, concurrency);
    });
  }
  
  function rewritePathInFile(filename, origPath, destPath) {
    return fsStat(filename).then(function (stat) {
      if (!stat.isFile()) {
        return;
      }
  
      function subst(content, origPath, destPath) {
        var offset = content.indexOf(origPath);
        var needRewrite = offset > -1;
  
        while (offset > -1) {
          content.write(destPath, offset);
          offset = content.indexOf(origPath);
        }
  
        return needRewrite;
      }
  
      var allFwd = function allFwd(s) {
        return s.replace(/\\/g, '/');
      };
  
      var allBack = function allBack(s) {
        return s.replace(/\//g, '\\');
      };
  
      var allButFirstFwd = function allButFirstFwd(s) {
        var parts = allFwd(s).split('/');
  
        if (parts.length === 0) {
          return "";
        } else {
          return parts[0] + '/' + parts.slice(1).join('\\');
        }
      };
  
      var allDouble = function allDouble(s) {
        return allFwd(s).replace(/\/\//g, '\\\\');
      };
  
      return fsReadFile(filename).then(function (content) {
        var r1 = subst(content, allFwd(origPath), allFwd(destPath));
        var r2 = subst(content, allBack(origPath), allBack(destPath));
        var r3 = subst(content, allButFirstFwd(origPath), allButFirstFwd(destPath));
        var r4 = subst(content, allDouble(origPath), allDouble(destPath));
  
        if (r1 || r2 || r3 || r4) {
          fs.chmodSync(filename, stat.mode | 128);
          return fsWriteFile(filename, content).then(function () {
            fs.chmodSync(filename, stat.mode);
          });
        }
      });
    });
  }
  
  function rewritePathInSymlink(filename, origPath, destPath) {
    return fsLstat(filename).then(function (stat) {
      if (!stat.isSymbolicLink()) {
        return;
      }
  
      return fsReadlink(filename).then(function (linkPath) {
        if (linkPath.indexOf(origPath) !== 0) {
          return;
        }
  
        var nextTargetPath = path.join(destPath, path.relative(origPath, linkPath));
        return fsUnlink(filename).then(function () {
          return fsSymlink(nextTargetPath, filename);
        });
      });
    });
  }
  
  function main() {
    function check() {
      function checkReleasePath() {
        return fsExists(releaseExportPath).then(function (exists) {
          if (!exists) {
            error('no builds found');
          }
        });
      }
  
      function checkStorePath() {
        if (!shouldRewritePrefix) {
          return;
        }
  
        var storePath = getStorePathForPrefix(releasePackagePath);
        return fsExists(storePath).then(function (exists) {
          if (exists) {
            info('Release already installed, exiting...');
            process.exit(0);
          }
        });
      }
  
      return checkReleasePath().then(checkStorePath);
    }
  
    function initStore() {
      var storePath = shouldRewritePrefix ? getStorePathForPrefix(releasePackagePath) : unpaddedStorePath;
      return fsMkdir(storePath).then(function () {
        return Promise.all([fsMkdir(path.join(storePath, STORE_BUILD_TREE)), fsMkdir(path.join(storePath, STORE_INSTALL_TREE)), fsMkdir(path.join(storePath, STORE_STAGE_TREE))]);
      });
    }
  
    function doImport() {
      function importBuilds() {
        return fsWalk(releaseExportPath).then(function (builds) {
          return Promise.all(builds.map(function (file) {
            var storePath = null;
  
            if (shouldRewritePrefix) {
              storePath = getStorePathForPrefix(releasePackagePath);
            }
  
            return importBuild(file.absolute, storePath);
          }));
        });
      }
  
      function rewriteBinWrappers() {
        if (!shouldRewritePrefix) {
          return;
        }
  
        var storePath = getStorePathForPrefix(releasePackagePath);
        return fsReadFile(path.join(releaseBinPath, '_storePath')).then(function (prevStorePath) {
          prevStorePath = prevStorePath.toString();
          return rewritePaths(releaseBinPath, prevStorePath, storePath);
        });
      }
  
      return importBuilds().then(function () {
        return rewriteBinWrappers();
      });
    }
  
    return check().then(initStore).then(doImport);
  }
  
  process.on('unhandledRejection', error);
  Promise.resolve().then(main).then(function () {
    info('Done!');
  
    if (os.arch() === 'arm64' && os.platform() === 'darwin') {
      console.log("Detected macOS arm64. Signing binaries...");
      var machOBinaries = lookupMachOBinaries(process.cwd());
      machOBinaries.forEach(function (binaryPath) {
        sign(binaryPath);
      });
      console.log("Done!");
    }
  
    process.exit(0);
  }, function (err) {
    error(err);
  });
  
  },{"@babel/polyfill":2,"child_process":undefined,"fs":undefined,"gunzip-maybe":291,"os":undefined,"path":undefined,"promisepipe":300,"tar-fs":319}],2:[function(require,module,exports){
  "use strict";
  
  require("core-js/es6");
  
  require("core-js/fn/array/includes");
  
  require("core-js/fn/string/pad-start");
  
  require("core-js/fn/string/pad-end");
  
  require("core-js/fn/symbol/async-iterator");
  
  require("core-js/fn/object/get-own-property-descriptors");
  
  require("core-js/fn/object/values");
  
  require("core-js/fn/object/entries");
  
  require("core-js/fn/promise/finally");
  
  require("core-js/web");
  
  require("regenerator-runtime/runtime");
  
  if (global._babelPolyfill && typeof console !== "undefined" && console.warn) {
    console.warn("@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended " + "and may have consequences if different versions of the polyfills are applied sequentially. " + "If you do need to load the polyfill more than once, use @babel/polyfill/noConflict " + "instead to bypass the warning.");
  }
  
  global._babelPolyfill = true;
  },{"core-js/es6":9,"core-js/fn/array/includes":10,"core-js/fn/object/entries":11,"core-js/fn/object/get-own-property-descriptors":12,"core-js/fn/object/values":13,"core-js/fn/promise/finally":14,"core-js/fn/string/pad-end":15,"core-js/fn/string/pad-start":16,"core-js/fn/symbol/async-iterator":17,"core-js/web":286,"regenerator-runtime/runtime":316}],3:[function(require,module,exports){
  var DuplexStream = require('readable-stream/duplex')
    , util         = require('util')
    , Buffer       = require('safe-buffer').Buffer
  
  
  function BufferList (callback) {
    if (!(this instanceof BufferList))
      return new BufferList(callback)
  
    this._bufs  = []
    this.length = 0
  
    if (typeof callback == 'function') {
      this._callback = callback
  
      var piper = function piper (err) {
        if (this._callback) {
          this._callback(err)
          this._callback = null
        }
      }.bind(this)
  
      this.on('pipe', function onPipe (src) {
        src.on('error', piper)
      })
      this.on('unpipe', function onUnpipe (src) {
        src.removeListener('error', piper)
      })
    } else {
      this.append(callback)
    }
  
    DuplexStream.call(this)
  }
  
  
  util.inherits(BufferList, DuplexStream)
  
  
  BufferList.prototype._offset = function _offset (offset) {
    var tot = 0, i = 0, _t
    if (offset === 0) return [ 0, 0 ]
    for (; i < this._bufs.length; i++) {
      _t = tot + this._bufs[i].length
      if (offset < _t || i == this._bufs.length - 1)
        return [ i, offset - tot ]
      tot = _t
    }
  }
  
  
  BufferList.prototype.append = function append (buf) {
    var i = 0
  
    if (Buffer.isBuffer(buf)) {
      this._appendBuffer(buf);
    } else if (Array.isArray(buf)) {
      for (; i < buf.length; i++)
        this.append(buf[i])
    } else if (buf instanceof BufferList) {
      // unwrap argument into individual BufferLists
      for (; i < buf._bufs.length; i++)
        this.append(buf._bufs[i])
    } else if (buf != null) {
      // coerce number arguments to strings, since Buffer(number) does
      // uninitialized memory allocation
      if (typeof buf == 'number')
        buf = buf.toString()
  
      this._appendBuffer(Buffer.from(buf));
    }
  
    return this
  }
  
  
  BufferList.prototype._appendBuffer = function appendBuffer (buf) {
    this._bufs.push(buf)
    this.length += buf.length
  }
  
  
  BufferList.prototype._write = function _write (buf, encoding, callback) {
    this._appendBuffer(buf)
  
    if (typeof callback == 'function')
      callback()
  }
  
  
  BufferList.prototype._read = function _read (size) {
    if (!this.length)
      return this.push(null)
  
    size = Math.min(size, this.length)
    this.push(this.slice(0, size))
    this.consume(size)
  }
  
  
  BufferList.prototype.end = function end (chunk) {
    DuplexStream.prototype.end.call(this, chunk)
  
    if (this._callback) {
      this._callback(null, this.slice())
      this._callback = null
    }
  }
  
  
  BufferList.prototype.get = function get (index) {
    return this.slice(index, index + 1)[0]
  }
  
  
  BufferList.prototype.slice = function slice (start, end) {
    if (typeof start == 'number' && start < 0)
      start += this.length
    if (typeof end == 'number' && end < 0)
      end += this.length
    return this.copy(null, 0, start, end)
  }
  
  
  BufferList.prototype.copy = function copy (dst, dstStart, srcStart, srcEnd) {
    if (typeof srcStart != 'number' || srcStart < 0)
      srcStart = 0
    if (typeof srcEnd != 'number' || srcEnd > this.length)
      srcEnd = this.length
    if (srcStart >= this.length)
      return dst || Buffer.alloc(0)
    if (srcEnd <= 0)
      return dst || Buffer.alloc(0)
  
    var copy   = !!dst
      , off    = this._offset(srcStart)
      , len    = srcEnd - srcStart
      , bytes  = len
      , bufoff = (copy && dstStart) || 0
      , start  = off[1]
      , l
      , i
  
    // copy/slice everything
    if (srcStart === 0 && srcEnd == this.length) {
      if (!copy) { // slice, but full concat if multiple buffers
        return this._bufs.length === 1
          ? this._bufs[0]
          : Buffer.concat(this._bufs, this.length)
      }
  
      // copy, need to copy individual buffers
      for (i = 0; i < this._bufs.length; i++) {
        this._bufs[i].copy(dst, bufoff)
        bufoff += this._bufs[i].length
      }
  
      return dst
    }
  
    // easy, cheap case where it's a subset of one of the buffers
    if (bytes <= this._bufs[off[0]].length - start) {
      return copy
        ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes)
        : this._bufs[off[0]].slice(start, start + bytes)
    }
  
    if (!copy) // a slice, we need something to copy in to
      dst = Buffer.allocUnsafe(len)
  
    for (i = off[0]; i < this._bufs.length; i++) {
      l = this._bufs[i].length - start
  
      if (bytes > l) {
        this._bufs[i].copy(dst, bufoff, start)
      } else {
        this._bufs[i].copy(dst, bufoff, start, start + bytes)
        break
      }
  
      bufoff += l
      bytes -= l
  
      if (start)
        start = 0
    }
  
    return dst
  }
  
  BufferList.prototype.shallowSlice = function shallowSlice (start, end) {
    start = start || 0
    end = end || this.length
  
    if (start < 0)
      start += this.length
    if (end < 0)
      end += this.length
  
    var startOffset = this._offset(start)
      , endOffset = this._offset(end)
      , buffers = this._bufs.slice(startOffset[0], endOffset[0] + 1)
  
    if (endOffset[1] == 0)
      buffers.pop()
    else
      buffers[buffers.length-1] = buffers[buffers.length-1].slice(0, endOffset[1])
  
    if (startOffset[1] != 0)
      buffers[0] = buffers[0].slice(startOffset[1])
  
    return new BufferList(buffers)
  }
  
  BufferList.prototype.toString = function toString (encoding, start, end) {
    return this.slice(start, end).toString(encoding)
  }
  
  BufferList.prototype.consume = function consume (bytes) {
    while (this._bufs.length) {
      if (bytes >= this._bufs[0].length) {
        bytes -= this._bufs[0].length
        this.length -= this._bufs[0].length
        this._bufs.shift()
      } else {
        this._bufs[0] = this._bufs[0].slice(bytes)
        this.length -= bytes
        break
      }
    }
    return this
  }
  
  
  BufferList.prototype.duplicate = function duplicate () {
    var i = 0
      , copy = new BufferList()
  
    for (; i < this._bufs.length; i++)
      copy.append(this._bufs[i])
  
    return copy
  }
  
  
  BufferList.prototype.destroy = function destroy () {
    this._bufs.length = 0
    this.length = 0
    this.push(null)
  }
  
  
  ;(function () {
    var methods = {
        'readDoubleBE' : 8
      , 'readDoubleLE' : 8
      , 'readFloatBE'  : 4
      , 'readFloatLE'  : 4
      , 'readInt32BE'  : 4
      , 'readInt32LE'  : 4
      , 'readUInt32BE' : 4
      , 'readUInt32LE' : 4
      , 'readInt16BE'  : 2
      , 'readInt16LE'  : 2
      , 'readUInt16BE' : 2
      , 'readUInt16LE' : 2
      , 'readInt8'     : 1
      , 'readUInt8'    : 1
    }
  
    for (var m in methods) {
      (function (m) {
        BufferList.prototype[m] = function (offset) {
          return this.slice(offset, offset + methods[m])[m](0)
        }
      }(m))
    }
  }())
  
  
  module.exports = BufferList
  
  },{"readable-stream/duplex":304,"safe-buffer":317,"util":undefined}],4:[function(require,module,exports){
  function allocUnsafe (size) {
    if (typeof size !== 'number') {
      throw new TypeError('"size" argument must be a number')
    }
  
    if (size < 0) {
      throw new RangeError('"size" argument must not be negative')
    }
  
    if (Buffer.allocUnsafe) {
      return Buffer.allocUnsafe(size)
    } else {
      return new Buffer(size)
    }
  }
  
  module.exports = allocUnsafe
  
  },{}],5:[function(require,module,exports){
  var bufferFill = require('buffer-fill')
  var allocUnsafe = require('buffer-alloc-unsafe')
  
  module.exports = function alloc (size, fill, encoding) {
    if (typeof size !== 'number') {
      throw new TypeError('"size" argument must be a number')
    }
  
    if (size < 0) {
      throw new RangeError('"size" argument must not be negative')
    }
  
    if (Buffer.alloc) {
      return Buffer.alloc(size, fill, encoding)
    }
  
    var buffer = allocUnsafe(size)
  
    if (size === 0) {
      return buffer
    }
  
    if (fill === undefined) {
      return bufferFill(buffer, 0)
    }
  
    if (typeof encoding !== 'string') {
      encoding = undefined
    }
  
    return bufferFill(buffer, fill, encoding)
  }
  
  },{"buffer-alloc-unsafe":4,"buffer-fill":6}],6:[function(require,module,exports){
  /* Node.js 6.4.0 and up has full support */
  var hasFullSupport = (function () {
    try {
      if (!Buffer.isEncoding('latin1')) {
        return false
      }
  
      var buf = Buffer.alloc ? Buffer.alloc(4) : new Buffer(4)
  
      buf.fill('ab', 'ucs2')
  
      return (buf.toString('hex') === '61006200')
    } catch (_) {
      return false
    }
  }())
  
  function isSingleByte (val) {
    return (val.length === 1 && val.charCodeAt(0) < 256)
  }
  
  function fillWithNumber (buffer, val, start, end) {
    if (start < 0 || end > buffer.length) {
      throw new RangeError('Out of range index')
    }
  
    start = start >>> 0
    end = end === undefined ? buffer.length : end >>> 0
  
    if (end > start) {
      buffer.fill(val, start, end)
    }
  
    return buffer
  }
  
  function fillWithBuffer (buffer, val, start, end) {
    if (start < 0 || end > buffer.length) {
      throw new RangeError('Out of range index')
    }
  
    if (end <= start) {
      return buffer
    }
  
    start = start >>> 0
    end = end === undefined ? buffer.length : end >>> 0
  
    var pos = start
    var len = val.length
    while (pos <= (end - len)) {
      val.copy(buffer, pos)
      pos += len
    }
  
    if (pos !== end) {
      val.copy(buffer, pos, 0, end - pos)
    }
  
    return buffer
  }
  
  function fill (buffer, val, start, end, encoding) {
    if (hasFullSupport) {
      return buffer.fill(val, start, end, encoding)
    }
  
    if (typeof val === 'number') {
      return fillWithNumber(buffer, val, start, end)
    }
  
    if (typeof val === 'string') {
      if (typeof start === 'string') {
        encoding = start
        start = 0
        end = buffer.length
      } else if (typeof end === 'string') {
        encoding = end
        end = buffer.length
      }
  
      if (encoding !== undefined && typeof encoding !== 'string') {
        throw new TypeError('encoding must be a string')
      }
  
      if (encoding === 'latin1') {
        encoding = 'binary'
      }
  
      if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
        throw new TypeError('Unknown encoding: ' + encoding)
      }
  
      if (val === '') {
        return fillWithNumber(buffer, 0, start, end)
      }
  
      if (isSingleByte(val)) {
        return fillWithNumber(buffer, val.charCodeAt(0), start, end)
      }
  
      val = new Buffer(val, encoding)
    }
  
    if (Buffer.isBuffer(val)) {
      return fillWithBuffer(buffer, val, start, end)
    }
  
    // Other values (e.g. undefined, boolean, object) results in zero-fill
    return fillWithNumber(buffer, 0, start, end)
  }
  
  module.exports = fill
  
  },{}],7:[function(require,module,exports){
  var toString = Object.prototype.toString
  
  var isModern = (
    typeof Buffer.alloc === 'function' &&
    typeof Buffer.allocUnsafe === 'function' &&
    typeof Buffer.from === 'function'
  )
  
  function isArrayBuffer (input) {
    return toString.call(input).slice(8, -1) === 'ArrayBuffer'
  }
  
  function fromArrayBuffer (obj, byteOffset, length) {
    byteOffset >>>= 0
  
    var maxLength = obj.byteLength - byteOffset
  
    if (maxLength < 0) {
      throw new RangeError("'offset' is out of bounds")
    }
  
    if (length === undefined) {
      length = maxLength
    } else {
      length >>>= 0
  
      if (length > maxLength) {
        throw new RangeError("'length' is out of bounds")
      }
    }
  
    return isModern
      ? Buffer.from(obj.slice(byteOffset, byteOffset + length))
      : new Buffer(new Uint8Array(obj.slice(byteOffset, byteOffset + length)))
  }
  
  function fromString (string, encoding) {
    if (typeof encoding !== 'string' || encoding === '') {
      encoding = 'utf8'
    }
  
    if (!Buffer.isEncoding(encoding)) {
      throw new TypeError('"encoding" must be a valid string encoding')
    }
  
    return isModern
      ? Buffer.from(string, encoding)
      : new Buffer(string, encoding)
  }
  
  function bufferFrom (value, encodingOrOffset, length) {
    if (typeof value === 'number') {
      throw new TypeError('"value" argument must not be a number')
    }
  
    if (isArrayBuffer(value)) {
      return fromArrayBuffer(value, encodingOrOffset, length)
    }
  
    if (typeof value === 'string') {
      return fromString(value, encodingOrOffset)
    }
  
    return isModern
      ? Buffer.from(value)
      : new Buffer(value)
  }
  
  module.exports = bufferFrom
  
  },{}],8:[function(require,module,exports){
  'use strict'
  const fs = require('fs')
  const path = require('path')
  
  /* istanbul ignore next */
  const LCHOWN = fs.lchown ? 'lchown' : 'chown'
  /* istanbul ignore next */
  const LCHOWNSYNC = fs.lchownSync ? 'lchownSync' : 'chownSync'
  
  // fs.readdir could only accept an options object as of node v6
  const nodeVersion = process.version
  let readdir = (path, options, cb) => fs.readdir(path, options, cb)
  let readdirSync = (path, options) => fs.readdirSync(path, options)
  /* istanbul ignore next */
  if (/^v4\./.test(nodeVersion))
    readdir = (path, options, cb) => fs.readdir(path, cb)
  
  const chownrKid = (p, child, uid, gid, cb) => {
    if (typeof child === 'string')
      return fs.lstat(path.resolve(p, child), (er, stats) => {
        if (er)
          return cb(er)
        stats.name = child
        chownrKid(p, stats, uid, gid, cb)
      })
  
    if (child.isDirectory()) {
      chownr(path.resolve(p, child.name), uid, gid, er => {
        if (er)
          return cb(er)
        fs[LCHOWN](path.resolve(p, child.name), uid, gid, cb)
      })
    } else
      fs[LCHOWN](path.resolve(p, child.name), uid, gid, cb)
  }
  
  
  const chownr = (p, uid, gid, cb) => {
    readdir(p, { withFileTypes: true }, (er, children) => {
      // any error other than ENOTDIR or ENOTSUP means it's not readable,
      // or doesn't exist.  give up.
      if (er && er.code !== 'ENOTDIR' && er.code !== 'ENOTSUP')
        return cb(er)
      if (er || !children.length) return fs[LCHOWN](p, uid, gid, cb)
  
      let len = children.length
      let errState = null
      const then = er => {
        if (errState) return
        if (er) return cb(errState = er)
        if (-- len === 0) return fs[LCHOWN](p, uid, gid, cb)
      }
  
      children.forEach(child => chownrKid(p, child, uid, gid, then))
    })
  }
  
  const chownrKidSync = (p, child, uid, gid) => {
    if (typeof child === 'string') {
      const stats = fs.lstatSync(path.resolve(p, child))
      stats.name = child
      child = stats
    }
  
    if (child.isDirectory())
      chownrSync(path.resolve(p, child.name), uid, gid)
  
    fs[LCHOWNSYNC](path.resolve(p, child.name), uid, gid)
  }
  
  const chownrSync = (p, uid, gid) => {
    let children
    try {
      children = readdirSync(p, { withFileTypes: true })
    } catch (er) {
      if (er && er.code === 'ENOTDIR' && er.code !== 'ENOTSUP')
        return fs[LCHOWNSYNC](p, uid, gid)
      throw er
    }
  
    if (children.length)
      children.forEach(child => chownrKidSync(p, child, uid, gid))
  
    return fs[LCHOWNSYNC](p, uid, gid)
  }
  
  module.exports = chownr
  chownr.sync = chownrSync
  
  },{"fs":undefined,"path":undefined}],9:[function(require,module,exports){
  require('../modules/es6.symbol');
  require('../modules/es6.object.create');
  require('../modules/es6.object.define-property');
  require('../modules/es6.object.define-properties');
  require('../modules/es6.object.get-own-property-descriptor');
  require('../modules/es6.object.get-prototype-of');
  require('../modules/es6.object.keys');
  require('../modules/es6.object.get-own-property-names');
  require('../modules/es6.object.freeze');
  require('../modules/es6.object.seal');
  require('../modules/es6.object.prevent-extensions');
  require('../modules/es6.object.is-frozen');
  require('../modules/es6.object.is-sealed');
  require('../modules/es6.object.is-extensible');
  require('../modules/es6.object.assign');
  require('../modules/es6.object.is');
  require('../modules/es6.object.set-prototype-of');
  require('../modules/es6.object.to-string');
  require('../modules/es6.function.bind');
  require('../modules/es6.function.name');
  require('../modules/es6.function.has-instance');
  require('../modules/es6.parse-int');
  require('../modules/es6.parse-float');
  require('../modules/es6.number.constructor');
  require('../modules/es6.number.to-fixed');
  require('../modules/es6.number.to-precision');
  require('../modules/es6.number.epsilon');
  require('../modules/es6.number.is-finite');
  require('../modules/es6.number.is-integer');
  require('../modules/es6.number.is-nan');
  require('../modules/es6.number.is-safe-integer');
  require('../modules/es6.number.max-safe-integer');
  require('../modules/es6.number.min-safe-integer');
  require('../modules/es6.number.parse-float');
  require('../modules/es6.number.parse-int');
  require('../modules/es6.math.acosh');
  require('../modules/es6.math.asinh');
  require('../modules/es6.math.atanh');
  require('../modules/es6.math.cbrt');
  require('../modules/es6.math.clz32');
  require('../modules/es6.math.cosh');
  require('../modules/es6.math.expm1');
  require('../modules/es6.math.fround');
  require('../modules/es6.math.hypot');
  require('../modules/es6.math.imul');
  require('../modules/es6.math.log10');
  require('../modules/es6.math.log1p');
  require('../modules/es6.math.log2');
  require('../modules/es6.math.sign');
  require('../modules/es6.math.sinh');
  require('../modules/es6.math.tanh');
  require('../modules/es6.math.trunc');
  require('../modules/es6.string.from-code-point');
  require('../modules/es6.string.raw');
  require('../modules/es6.string.trim');
  require('../modules/es6.string.iterator');
  require('../modules/es6.string.code-point-at');
  require('../modules/es6.string.ends-with');
  require('../modules/es6.string.includes');
  require('../modules/es6.string.repeat');
  require('../modules/es6.string.starts-with');
  require('../modules/es6.string.anchor');
  require('../modules/es6.string.big');
  require('../modules/es6.string.blink');
  require('../modules/es6.string.bold');
  require('../modules/es6.string.fixed');
  require('../modules/es6.string.fontcolor');
  require('../modules/es6.string.fontsize');
  require('../modules/es6.string.italics');
  require('../modules/es6.string.link');
  require('../modules/es6.string.small');
  require('../modules/es6.string.strike');
  require('../modules/es6.string.sub');
  require('../modules/es6.string.sup');
  require('../modules/es6.date.now');
  require('../modules/es6.date.to-json');
  require('../modules/es6.date.to-iso-string');
  require('../modules/es6.date.to-string');
  require('../modules/es6.date.to-primitive');
  require('../modules/es6.array.is-array');
  require('../modules/es6.array.from');
  require('../modules/es6.array.of');
  require('../modules/es6.array.join');
  require('../modules/es6.array.slice');
  require('../modules/es6.array.sort');
  require('../modules/es6.array.for-each');
  require('../modules/es6.array.map');
  require('../modules/es6.array.filter');
  require('../modules/es6.array.some');
  require('../modules/es6.array.every');
  require('../modules/es6.array.reduce');
  require('../modules/es6.array.reduce-right');
  require('../modules/es6.array.index-of');
  require('../modules/es6.array.last-index-of');
  require('../modules/es6.array.copy-within');
  require('../modules/es6.array.fill');
  require('../modules/es6.array.find');
  require('../modules/es6.array.find-index');
  require('../modules/es6.array.species');
  require('../modules/es6.array.iterator');
  require('../modules/es6.regexp.constructor');
  require('../modules/es6.regexp.exec');
  require('../modules/es6.regexp.to-string');
  require('../modules/es6.regexp.flags');
  require('../modules/es6.regexp.match');
  require('../modules/es6.regexp.replace');
  require('../modules/es6.regexp.search');
  require('../modules/es6.regexp.split');
  require('../modules/es6.promise');
  require('../modules/es6.map');
  require('../modules/es6.set');
  require('../modules/es6.weak-map');
  require('../modules/es6.weak-set');
  require('../modules/es6.typed.array-buffer');
  require('../modules/es6.typed.data-view');
  require('../modules/es6.typed.int8-array');
  require('../modules/es6.typed.uint8-array');
  require('../modules/es6.typed.uint8-clamped-array');
  require('../modules/es6.typed.int16-array');
  require('../modules/es6.typed.uint16-array');
  require('../modules/es6.typed.int32-array');
  require('../modules/es6.typed.uint32-array');
  require('../modules/es6.typed.float32-array');
  require('../modules/es6.typed.float64-array');
  require('../modules/es6.reflect.apply');
  require('../modules/es6.reflect.construct');
  require('../modules/es6.reflect.define-property');
  require('../modules/es6.reflect.delete-property');
  require('../modules/es6.reflect.enumerate');
  require('../modules/es6.reflect.get');
  require('../modules/es6.reflect.get-own-property-descriptor');
  require('../modules/es6.reflect.get-prototype-of');
  require('../modules/es6.reflect.has');
  require('../modules/es6.reflect.is-extensible');
  require('../modules/es6.reflect.own-keys');
  require('../modules/es6.reflect.prevent-extensions');
  require('../modules/es6.reflect.set');
  require('../modules/es6.reflect.set-prototype-of');
  module.exports = require('../modules/_core');
  
  },{"../modules/_core":37,"../modules/es6.array.copy-within":137,"../modules/es6.array.every":138,"../modules/es6.array.fill":139,"../modules/es6.array.filter":140,"../modules/es6.array.find":142,"../modules/es6.array.find-index":141,"../modules/es6.array.for-each":143,"../modules/es6.array.from":144,"../modules/es6.array.index-of":145,"../modules/es6.array.is-array":146,"../modules/es6.array.iterator":147,"../modules/es6.array.join":148,"../modules/es6.array.last-index-of":149,"../modules/es6.array.map":150,"../modules/es6.array.of":151,"../modules/es6.array.reduce":153,"../modules/es6.array.reduce-right":152,"../modules/es6.array.slice":154,"../modules/es6.array.some":155,"../modules/es6.array.sort":156,"../modules/es6.array.species":157,"../modules/es6.date.now":158,"../modules/es6.date.to-iso-string":159,"../modules/es6.date.to-json":160,"../modules/es6.date.to-primitive":161,"../modules/es6.date.to-string":162,"../modules/es6.function.bind":163,"../modules/es6.function.has-instance":164,"../modules/es6.function.name":165,"../modules/es6.map":166,"../modules/es6.math.acosh":167,"../modules/es6.math.asinh":168,"../modules/es6.math.atanh":169,"../modules/es6.math.cbrt":170,"../modules/es6.math.clz32":171,"../modules/es6.math.cosh":172,"../modules/es6.math.expm1":173,"../modules/es6.math.fround":174,"../modules/es6.math.hypot":175,"../modules/es6.math.imul":176,"../modules/es6.math.log10":177,"../modules/es6.math.log1p":178,"../modules/es6.math.log2":179,"../modules/es6.math.sign":180,"../modules/es6.math.sinh":181,"../modules/es6.math.tanh":182,"../modules/es6.math.trunc":183,"../modules/es6.number.constructor":184,"../modules/es6.number.epsilon":185,"../modules/es6.number.is-finite":186,"../modules/es6.number.is-integer":187,"../modules/es6.number.is-nan":188,"../modules/es6.number.is-safe-integer":189,"../modules/es6.number.max-safe-integer":190,"../modules/es6.number.min-safe-integer":191,"../modules/es6.number.parse-float":192,"../modules/es6.number.parse-int":193,"../modules/es6.number.to-fixed":194,"../modules/es6.number.to-precision":195,"../modules/es6.object.assign":196,"../modules/es6.object.create":197,"../modules/es6.object.define-properties":198,"../modules/es6.object.define-property":199,"../modules/es6.object.freeze":200,"../modules/es6.object.get-own-property-descriptor":201,"../modules/es6.object.get-own-property-names":202,"../modules/es6.object.get-prototype-of":203,"../modules/es6.object.is":207,"../modules/es6.object.is-extensible":204,"../modules/es6.object.is-frozen":205,"../modules/es6.object.is-sealed":206,"../modules/es6.object.keys":208,"../modules/es6.object.prevent-extensions":209,"../modules/es6.object.seal":210,"../modules/es6.object.set-prototype-of":211,"../modules/es6.object.to-string":212,"../modules/es6.parse-float":213,"../modules/es6.parse-int":214,"../modules/es6.promise":215,"../modules/es6.reflect.apply":216,"../modules/es6.reflect.construct":217,"../modules/es6.reflect.define-property":218,"../modules/es6.reflect.delete-property":219,"../modules/es6.reflect.enumerate":220,"../modules/es6.reflect.get":223,"../modules/es6.reflect.get-own-property-descriptor":221,"../modules/es6.reflect.get-prototype-of":222,"../modules/es6.reflect.has":224,"../modules/es6.reflect.is-extensible":225,"../modules/es6.reflect.own-keys":226,"../modules/es6.reflect.prevent-extensions":227,"../modules/es6.reflect.set":229,"../modules/es6.reflect.set-prototype-of":228,"../modules/es6.regexp.constructor":230,"../modules/es6.regexp.exec":231,"../modules/es6.regexp.flags":232,"../modules/es6.regexp.match":233,"../modules/es6.regexp.replace":234,"../modules/es6.regexp.search":235,"../modules/es6.regexp.split":236,"../modules/es6.regexp.to-string":237,"../modules/es6.set":238,"../modules/es6.string.anchor":239,"../modules/es6.string.big":240,"../modules/es6.string.blink":241,"../modules/es6.string.bold":242,"../modules/es6.string.code-point-at":243,"../modules/es6.string.ends-with":244,"../modules/es6.string.fixed":245,"../modules/es6.string.fontcolor":246,"../modules/es6.string.fontsize":247,"../modules/es6.string.from-code-point":248,"../modules/es6.string.includes":249,"../modules/es6.string.italics":250,"../modules/es6.string.iterator":251,"../modules/es6.string.link":252,"../modules/es6.string.raw":253,"../modules/es6.string.repeat":254,"../modules/es6.string.small":255,"../modules/es6.string.starts-with":256,"../modules/es6.string.strike":257,"../modules/es6.string.sub":258,"../modules/es6.string.sup":259,"../modules/es6.string.trim":260,"../modules/es6.symbol":261,"../modules/es6.typed.array-buffer":262,"../modules/es6.typed.data-view":263,"../modules/es6.typed.float32-array":264,"../modules/es6.typed.float64-array":265,"../modules/es6.typed.int16-array":266,"../modules/es6.typed.int32-array":267,"../modules/es6.typed.int8-array":268,"../modules/es6.typed.uint16-array":269,"../modules/es6.typed.uint32-array":270,"../modules/es6.typed.uint8-array":271,"../modules/es6.typed.uint8-clamped-array":272,"../modules/es6.weak-map":273,"../modules/es6.weak-set":274}],10:[function(require,module,exports){
  require('../../modules/es7.array.includes');
  module.exports = require('../../modules/_core').Array.includes;
  
  },{"../../modules/_core":37,"../../modules/es7.array.includes":275}],11:[function(require,module,exports){
  require('../../modules/es7.object.entries');
  module.exports = require('../../modules/_core').Object.entries;
  
  },{"../../modules/_core":37,"../../modules/es7.object.entries":276}],12:[function(require,module,exports){
  require('../../modules/es7.object.get-own-property-descriptors');
  module.exports = require('../../modules/_core').Object.getOwnPropertyDescriptors;
  
  },{"../../modules/_core":37,"../../modules/es7.object.get-own-property-descriptors":277}],13:[function(require,module,exports){
  require('../../modules/es7.object.values');
  module.exports = require('../../modules/_core').Object.values;
  
  },{"../../modules/_core":37,"../../modules/es7.object.values":278}],14:[function(require,module,exports){
  'use strict';
  require('../../modules/es6.promise');
  require('../../modules/es7.promise.finally');
  module.exports = require('../../modules/_core').Promise['finally'];
  
  },{"../../modules/_core":37,"../../modules/es6.promise":215,"../../modules/es7.promise.finally":279}],15:[function(require,module,exports){
  require('../../modules/es7.string.pad-end');
  module.exports = require('../../modules/_core').String.padEnd;
  
  },{"../../modules/_core":37,"../../modules/es7.string.pad-end":280}],16:[function(require,module,exports){
  require('../../modules/es7.string.pad-start');
  module.exports = require('../../modules/_core').String.padStart;
  
  },{"../../modules/_core":37,"../../modules/es7.string.pad-start":281}],17:[function(require,module,exports){
  require('../../modules/es7.symbol.async-iterator');
  module.exports = require('../../modules/_wks-ext').f('asyncIterator');
  
  },{"../../modules/_wks-ext":134,"../../modules/es7.symbol.async-iterator":282}],18:[function(require,module,exports){
  module.exports = function (it) {
    if (typeof it != 'function') throw TypeError(it + ' is not a function!');
    return it;
  };
  
  },{}],19:[function(require,module,exports){
  var cof = require('./_cof');
  module.exports = function (it, msg) {
    if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);
    return +it;
  };
  
  },{"./_cof":33}],20:[function(require,module,exports){
  // 22.1.3.31 Array.prototype[@@unscopables]
  var UNSCOPABLES = require('./_wks')('unscopables');
  var ArrayProto = Array.prototype;
  if (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});
  module.exports = function (key) {
    ArrayProto[UNSCOPABLES][key] = true;
  };
  
  },{"./_hide":55,"./_wks":135}],21:[function(require,module,exports){
  'use strict';
  var at = require('./_string-at')(true);
  
   // `AdvanceStringIndex` abstract operation
  // https://tc39.github.io/ecma262/#sec-advancestringindex
  module.exports = function (S, index, unicode) {
    return index + (unicode ? at(S, index).length : 1);
  };
  
  },{"./_string-at":112}],22:[function(require,module,exports){
  module.exports = function (it, Constructor, name, forbiddenField) {
    if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {
      throw TypeError(name + ': incorrect invocation!');
    } return it;
  };
  
  },{}],23:[function(require,module,exports){
  var isObject = require('./_is-object');
  module.exports = function (it) {
    if (!isObject(it)) throw TypeError(it + ' is not an object!');
    return it;
  };
  
  },{"./_is-object":64}],24:[function(require,module,exports){
  // 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
  'use strict';
  var toObject = require('./_to-object');
  var toAbsoluteIndex = require('./_to-absolute-index');
  var toLength = require('./_to-length');
  
  module.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {
    var O = toObject(this);
    var len = toLength(O.length);
    var to = toAbsoluteIndex(target, len);
    var from = toAbsoluteIndex(start, len);
    var end = arguments.length > 2 ? arguments[2] : undefined;
    var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);
    var inc = 1;
    if (from < to && to < from + count) {
      inc = -1;
      from += count - 1;
      to += count - 1;
    }
    while (count-- > 0) {
      if (from in O) O[to] = O[from];
      else delete O[to];
      to += inc;
      from += inc;
    } return O;
  };
  
  },{"./_to-absolute-index":120,"./_to-length":124,"./_to-object":125}],25:[function(require,module,exports){
  // 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
  'use strict';
  var toObject = require('./_to-object');
  var toAbsoluteIndex = require('./_to-absolute-index');
  var toLength = require('./_to-length');
  module.exports = function fill(value /* , start = 0, end = @length */) {
    var O = toObject(this);
    var length = toLength(O.length);
    var aLen = arguments.length;
    var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);
    var end = aLen > 2 ? arguments[2] : undefined;
    var endPos = end === undefined ? length : toAbsoluteIndex(end, length);
    while (endPos > index) O[index++] = value;
    return O;
  };
  
  },{"./_to-absolute-index":120,"./_to-length":124,"./_to-object":125}],26:[function(require,module,exports){
  // false -> Array#indexOf
  // true  -> Array#includes
  var toIObject = require('./_to-iobject');
  var toLength = require('./_to-length');
  var toAbsoluteIndex = require('./_to-absolute-index');
  module.exports = function (IS_INCLUDES) {
    return function ($this, el, fromIndex) {
      var O = toIObject($this);
      var length = toLength(O.length);
      var index = toAbsoluteIndex(fromIndex, length);
      var value;
      // Array#includes uses SameValueZero equality algorithm
      // eslint-disable-next-line no-self-compare
      if (IS_INCLUDES && el != el) while (length > index) {
        value = O[index++];
        // eslint-disable-next-line no-self-compare
        if (value != value) return true;
      // Array#indexOf ignores holes, Array#includes - not
      } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
        if (O[index] === el) return IS_INCLUDES || index || 0;
      } return !IS_INCLUDES && -1;
    };
  };
  
  },{"./_to-absolute-index":120,"./_to-iobject":123,"./_to-length":124}],27:[function(require,module,exports){
  // 0 -> Array#forEach
  // 1 -> Array#map
  // 2 -> Array#filter
  // 3 -> Array#some
  // 4 -> Array#every
  // 5 -> Array#find
  // 6 -> Array#findIndex
  var ctx = require('./_ctx');
  var IObject = require('./_iobject');
  var toObject = require('./_to-object');
  var toLength = require('./_to-length');
  var asc = require('./_array-species-create');
  module.exports = function (TYPE, $create) {
    var IS_MAP = TYPE == 1;
    var IS_FILTER = TYPE == 2;
    var IS_SOME = TYPE == 3;
    var IS_EVERY = TYPE == 4;
    var IS_FIND_INDEX = TYPE == 6;
    var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
    var create = $create || asc;
    return function ($this, callbackfn, that) {
      var O = toObject($this);
      var self = IObject(O);
      var f = ctx(callbackfn, that, 3);
      var length = toLength(self.length);
      var index = 0;
      var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
      var val, res;
      for (;length > index; index++) if (NO_HOLES || index in self) {
        val = self[index];
        res = f(val, index, O);
        if (TYPE) {
          if (IS_MAP) result[index] = res;   // map
          else if (res) switch (TYPE) {
            case 3: return true;             // some
            case 5: return val;              // find
            case 6: return index;            // findIndex
            case 2: result.push(val);        // filter
          } else if (IS_EVERY) return false; // every
        }
      }
      return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
    };
  };
  
  },{"./_array-species-create":30,"./_ctx":39,"./_iobject":60,"./_to-length":124,"./_to-object":125}],28:[function(require,module,exports){
  var aFunction = require('./_a-function');
  var toObject = require('./_to-object');
  var IObject = require('./_iobject');
  var toLength = require('./_to-length');
  
  module.exports = function (that, callbackfn, aLen, memo, isRight) {
    aFunction(callbackfn);
    var O = toObject(that);
    var self = IObject(O);
    var length = toLength(O.length);
    var index = isRight ? length - 1 : 0;
    var i = isRight ? -1 : 1;
    if (aLen < 2) for (;;) {
      if (index in self) {
        memo = self[index];
        index += i;
        break;
      }
      index += i;
      if (isRight ? index < 0 : length <= index) {
        throw TypeError('Reduce of empty array with no initial value');
      }
    }
    for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {
      memo = callbackfn(memo, self[index], index, O);
    }
    return memo;
  };
  
  },{"./_a-function":18,"./_iobject":60,"./_to-length":124,"./_to-object":125}],29:[function(require,module,exports){
  var isObject = require('./_is-object');
  var isArray = require('./_is-array');
  var SPECIES = require('./_wks')('species');
  
  module.exports = function (original) {
    var C;
    if (isArray(original)) {
      C = original.constructor;
      // cross-realm fallback
      if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
      if (isObject(C)) {
        C = C[SPECIES];
        if (C === null) C = undefined;
      }
    } return C === undefined ? Array : C;
  };
  
  },{"./_is-array":62,"./_is-object":64,"./_wks":135}],30:[function(require,module,exports){
  // 9.4.2.3 ArraySpeciesCreate(originalArray, length)
  var speciesConstructor = require('./_array-species-constructor');
  
  module.exports = function (original, length) {
    return new (speciesConstructor(original))(length);
  };
  
  },{"./_array-species-constructor":29}],31:[function(require,module,exports){
  'use strict';
  var aFunction = require('./_a-function');
  var isObject = require('./_is-object');
  var invoke = require('./_invoke');
  var arraySlice = [].slice;
  var factories = {};
  
  var construct = function (F, len, args) {
    if (!(len in factories)) {
      for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';
      // eslint-disable-next-line no-new-func
      factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');
    } return factories[len](F, args);
  };
  
  module.exports = Function.bind || function bind(that /* , ...args */) {
    var fn = aFunction(this);
    var partArgs = arraySlice.call(arguments, 1);
    var bound = function (/* args... */) {
      var args = partArgs.concat(arraySlice.call(arguments));
      return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);
    };
    if (isObject(fn.prototype)) bound.prototype = fn.prototype;
    return bound;
  };
  
  },{"./_a-function":18,"./_invoke":59,"./_is-object":64}],32:[function(require,module,exports){
  // getting tag from 19.1.3.6 Object.prototype.toString()
  var cof = require('./_cof');
  var TAG = require('./_wks')('toStringTag');
  // ES3 wrong here
  var ARG = cof(function () { return arguments; }()) == 'Arguments';
  
  // fallback for IE11 Script Access Denied error
  var tryGet = function (it, key) {
    try {
      return it[key];
    } catch (e) { /* empty */ }
  };
  
  module.exports = function (it) {
    var O, T, B;
    return it === undefined ? 'Undefined' : it === null ? 'Null'
      // @@toStringTag case
      : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
      // builtinTag case
      : ARG ? cof(O)
      // ES3 arguments fallback
      : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
  };
  
  },{"./_cof":33,"./_wks":135}],33:[function(require,module,exports){
  var toString = {}.toString;
  
  module.exports = function (it) {
    return toString.call(it).slice(8, -1);
  };
  
  },{}],34:[function(require,module,exports){
  'use strict';
  var dP = require('./_object-dp').f;
  var create = require('./_object-create');
  var redefineAll = require('./_redefine-all');
  var ctx = require('./_ctx');
  var anInstance = require('./_an-instance');
  var forOf = require('./_for-of');
  var $iterDefine = require('./_iter-define');
  var step = require('./_iter-step');
  var setSpecies = require('./_set-species');
  var DESCRIPTORS = require('./_descriptors');
  var fastKey = require('./_meta').fastKey;
  var validate = require('./_validate-collection');
  var SIZE = DESCRIPTORS ? '_s' : 'size';
  
  var getEntry = function (that, key) {
    // fast case
    var index = fastKey(key);
    var entry;
    if (index !== 'F') return that._i[index];
    // frozen object case
    for (entry = that._f; entry; entry = entry.n) {
      if (entry.k == key) return entry;
    }
  };
  
  module.exports = {
    getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {
      var C = wrapper(function (that, iterable) {
        anInstance(that, C, NAME, '_i');
        that._t = NAME;         // collection type
        that._i = create(null); // index
        that._f = undefined;    // first entry
        that._l = undefined;    // last entry
        that[SIZE] = 0;         // size
        if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
      });
      redefineAll(C.prototype, {
        // 23.1.3.1 Map.prototype.clear()
        // 23.2.3.2 Set.prototype.clear()
        clear: function clear() {
          for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {
            entry.r = true;
            if (entry.p) entry.p = entry.p.n = undefined;
            delete data[entry.i];
          }
          that._f = that._l = undefined;
          that[SIZE] = 0;
        },
        // 23.1.3.3 Map.prototype.delete(key)
        // 23.2.3.4 Set.prototype.delete(value)
        'delete': function (key) {
          var that = validate(this, NAME);
          var entry = getEntry(that, key);
          if (entry) {
            var next = entry.n;
            var prev = entry.p;
            delete that._i[entry.i];
            entry.r = true;
            if (prev) prev.n = next;
            if (next) next.p = prev;
            if (that._f == entry) that._f = next;
            if (that._l == entry) that._l = prev;
            that[SIZE]--;
          } return !!entry;
        },
        // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
        // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
        forEach: function forEach(callbackfn /* , that = undefined */) {
          validate(this, NAME);
          var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);
          var entry;
          while (entry = entry ? entry.n : this._f) {
            f(entry.v, entry.k, this);
            // revert to the last existing entry
            while (entry && entry.r) entry = entry.p;
          }
        },
        // 23.1.3.7 Map.prototype.has(key)
        // 23.2.3.7 Set.prototype.has(value)
        has: function has(key) {
          return !!getEntry(validate(this, NAME), key);
        }
      });
      if (DESCRIPTORS) dP(C.prototype, 'size', {
        get: function () {
          return validate(this, NAME)[SIZE];
        }
      });
      return C;
    },
    def: function (that, key, value) {
      var entry = getEntry(that, key);
      var prev, index;
      // change existing entry
      if (entry) {
        entry.v = value;
      // create new entry
      } else {
        that._l = entry = {
          i: index = fastKey(key, true), // <- index
          k: key,                        // <- key
          v: value,                      // <- value
          p: prev = that._l,             // <- previous entry
          n: undefined,                  // <- next entry
          r: false                       // <- removed
        };
        if (!that._f) that._f = entry;
        if (prev) prev.n = entry;
        that[SIZE]++;
        // add to index
        if (index !== 'F') that._i[index] = entry;
      } return that;
    },
    getEntry: getEntry,
    setStrong: function (C, NAME, IS_MAP) {
      // add .keys, .values, .entries, [@@iterator]
      // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
      $iterDefine(C, NAME, function (iterated, kind) {
        this._t = validate(iterated, NAME); // target
        this._k = kind;                     // kind
        this._l = undefined;                // previous
      }, function () {
        var that = this;
        var kind = that._k;
        var entry = that._l;
        // revert to the last existing entry
        while (entry && entry.r) entry = entry.p;
        // get next entry
        if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {
          // or finish the iteration
          that._t = undefined;
          return step(1);
        }
        // return step by kind
        if (kind == 'keys') return step(0, entry.k);
        if (kind == 'values') return step(0, entry.v);
        return step(0, [entry.k, entry.v]);
      }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);
  
      // add [@@species], 23.1.2.2, 23.2.2.2
      setSpecies(NAME);
    }
  };
  
  },{"./_an-instance":22,"./_ctx":39,"./_descriptors":43,"./_for-of":52,"./_iter-define":68,"./_iter-step":70,"./_meta":77,"./_object-create":81,"./_object-dp":82,"./_redefine-all":100,"./_set-species":106,"./_validate-collection":132}],35:[function(require,module,exports){
  'use strict';
  var redefineAll = require('./_redefine-all');
  var getWeak = require('./_meta').getWeak;
  var anObject = require('./_an-object');
  var isObject = require('./_is-object');
  var anInstance = require('./_an-instance');
  var forOf = require('./_for-of');
  var createArrayMethod = require('./_array-methods');
  var $has = require('./_has');
  var validate = require('./_validate-collection');
  var arrayFind = createArrayMethod(5);
  var arrayFindIndex = createArrayMethod(6);
  var id = 0;
  
  // fallback for uncaught frozen keys
  var uncaughtFrozenStore = function (that) {
    return that._l || (that._l = new UncaughtFrozenStore());
  };
  var UncaughtFrozenStore = function () {
    this.a = [];
  };
  var findUncaughtFrozen = function (store, key) {
    return arrayFind(store.a, function (it) {
      return it[0] === key;
    });
  };
  UncaughtFrozenStore.prototype = {
    get: function (key) {
      var entry = findUncaughtFrozen(this, key);
      if (entry) return entry[1];
    },
    has: function (key) {
      return !!findUncaughtFrozen(this, key);
    },
    set: function (key, value) {
      var entry = findUncaughtFrozen(this, key);
      if (entry) entry[1] = value;
      else this.a.push([key, value]);
    },
    'delete': function (key) {
      var index = arrayFindIndex(this.a, function (it) {
        return it[0] === key;
      });
      if (~index) this.a.splice(index, 1);
      return !!~index;
    }
  };
  
  module.exports = {
    getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {
      var C = wrapper(function (that, iterable) {
        anInstance(that, C, NAME, '_i');
        that._t = NAME;      // collection type
        that._i = id++;      // collection id
        that._l = undefined; // leak store for uncaught frozen objects
        if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
      });
      redefineAll(C.prototype, {
        // 23.3.3.2 WeakMap.prototype.delete(key)
        // 23.4.3.3 WeakSet.prototype.delete(value)
        'delete': function (key) {
          if (!isObject(key)) return false;
          var data = getWeak(key);
          if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);
          return data && $has(data, this._i) && delete data[this._i];
        },
        // 23.3.3.4 WeakMap.prototype.has(key)
        // 23.4.3.4 WeakSet.prototype.has(value)
        has: function has(key) {
          if (!isObject(key)) return false;
          var data = getWeak(key);
          if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);
          return data && $has(data, this._i);
        }
      });
      return C;
    },
    def: function (that, key, value) {
      var data = getWeak(anObject(key), true);
      if (data === true) uncaughtFrozenStore(that).set(key, value);
      else data[that._i] = value;
      return that;
    },
    ufstore: uncaughtFrozenStore
  };
  
  },{"./_an-instance":22,"./_an-object":23,"./_array-methods":27,"./_for-of":52,"./_has":54,"./_is-object":64,"./_meta":77,"./_redefine-all":100,"./_validate-collection":132}],36:[function(require,module,exports){
  'use strict';
  var global = require('./_global');
  var $export = require('./_export');
  var redefine = require('./_redefine');
  var redefineAll = require('./_redefine-all');
  var meta = require('./_meta');
  var forOf = require('./_for-of');
  var anInstance = require('./_an-instance');
  var isObject = require('./_is-object');
  var fails = require('./_fails');
  var $iterDetect = require('./_iter-detect');
  var setToStringTag = require('./_set-to-string-tag');
  var inheritIfRequired = require('./_inherit-if-required');
  
  module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
    var Base = global[NAME];
    var C = Base;
    var ADDER = IS_MAP ? 'set' : 'add';
    var proto = C && C.prototype;
    var O = {};
    var fixMethod = function (KEY) {
      var fn = proto[KEY];
      redefine(proto, KEY,
        KEY == 'delete' ? function (a) {
          return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
        } : KEY == 'has' ? function has(a) {
          return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
        } : KEY == 'get' ? function get(a) {
          return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);
        } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }
          : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }
      );
    };
    if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {
      new C().entries().next();
    }))) {
      // create collection constructor
      C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
      redefineAll(C.prototype, methods);
      meta.NEED = true;
    } else {
      var instance = new C();
      // early implementations not supports chaining
      var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;
      // V8 ~  Chromium 40- weak-collections throws on primitives, but should return false
      var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });
      // most early implementations doesn't supports iterables, most modern - not close it correctly
      var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new
      // for early implementations -0 and +0 not the same
      var BUGGY_ZERO = !IS_WEAK && fails(function () {
        // V8 ~ Chromium 42- fails only with 5+ elements
        var $instance = new C();
        var index = 5;
        while (index--) $instance[ADDER](index, index);
        return !$instance.has(-0);
      });
      if (!ACCEPT_ITERABLES) {
        C = wrapper(function (target, iterable) {
          anInstance(target, C, NAME);
          var that = inheritIfRequired(new Base(), target, C);
          if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
          return that;
        });
        C.prototype = proto;
        proto.constructor = C;
      }
      if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {
        fixMethod('delete');
        fixMethod('has');
        IS_MAP && fixMethod('get');
      }
      if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);
      // weak collections should not contains .clear method
      if (IS_WEAK && proto.clear) delete proto.clear;
    }
  
    setToStringTag(C, NAME);
  
    O[NAME] = C;
    $export($export.G + $export.W + $export.F * (C != Base), O);
  
    if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);
  
    return C;
  };
  
  },{"./_an-instance":22,"./_export":47,"./_fails":49,"./_for-of":52,"./_global":53,"./_inherit-if-required":58,"./_is-object":64,"./_iter-detect":69,"./_meta":77,"./_redefine":101,"./_redefine-all":100,"./_set-to-string-tag":107}],37:[function(require,module,exports){
  var core = module.exports = { version: '2.6.1' };
  if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
  
  },{}],38:[function(require,module,exports){
  'use strict';
  var $defineProperty = require('./_object-dp');
  var createDesc = require('./_property-desc');
  
  module.exports = function (object, index, value) {
    if (index in object) $defineProperty.f(object, index, createDesc(0, value));
    else object[index] = value;
  };
  
  },{"./_object-dp":82,"./_property-desc":99}],39:[function(require,module,exports){
  // optional / simple context binding
  var aFunction = require('./_a-function');
  module.exports = function (fn, that, length) {
    aFunction(fn);
    if (that === undefined) return fn;
    switch (length) {
      case 1: return function (a) {
        return fn.call(that, a);
      };
      case 2: return function (a, b) {
        return fn.call(that, a, b);
      };
      case 3: return function (a, b, c) {
        return fn.call(that, a, b, c);
      };
    }
    return function (/* ...args */) {
      return fn.apply(that, arguments);
    };
  };
  
  },{"./_a-function":18}],40:[function(require,module,exports){
  'use strict';
  // 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()
  var fails = require('./_fails');
  var getTime = Date.prototype.getTime;
  var $toISOString = Date.prototype.toISOString;
  
  var lz = function (num) {
    return num > 9 ? num : '0' + num;
  };
  
  // PhantomJS / old WebKit has a broken implementations
  module.exports = (fails(function () {
    return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';
  }) || !fails(function () {
    $toISOString.call(new Date(NaN));
  })) ? function toISOString() {
    if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');
    var d = this;
    var y = d.getUTCFullYear();
    var m = d.getUTCMilliseconds();
    var s = y < 0 ? '-' : y > 9999 ? '+' : '';
    return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +
      '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +
      'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +
      ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';
  } : $toISOString;
  
  },{"./_fails":49}],41:[function(require,module,exports){
  'use strict';
  var anObject = require('./_an-object');
  var toPrimitive = require('./_to-primitive');
  var NUMBER = 'number';
  
  module.exports = function (hint) {
    if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');
    return toPrimitive(anObject(this), hint != NUMBER);
  };
  
  },{"./_an-object":23,"./_to-primitive":126}],42:[function(require,module,exports){
  // 7.2.1 RequireObjectCoercible(argument)
  module.exports = function (it) {
    if (it == undefined) throw TypeError("Can't call method on  " + it);
    return it;
  };
  
  },{}],43:[function(require,module,exports){
  // Thank's IE8 for his funny defineProperty
  module.exports = !require('./_fails')(function () {
    return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
  });
  
  },{"./_fails":49}],44:[function(require,module,exports){
  var isObject = require('./_is-object');
  var document = require('./_global').document;
  // typeof document.createElement is 'object' in old IE
  var is = isObject(document) && isObject(document.createElement);
  module.exports = function (it) {
    return is ? document.createElement(it) : {};
  };
  
  },{"./_global":53,"./_is-object":64}],45:[function(require,module,exports){
  // IE 8- don't enum bug keys
  module.exports = (
    'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
  ).split(',');
  
  },{}],46:[function(require,module,exports){
  // all enumerable object keys, includes symbols
  var getKeys = require('./_object-keys');
  var gOPS = require('./_object-gops');
  var pIE = require('./_object-pie');
  module.exports = function (it) {
    var result = getKeys(it);
    var getSymbols = gOPS.f;
    if (getSymbols) {
      var symbols = getSymbols(it);
      var isEnum = pIE.f;
      var i = 0;
      var key;
      while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);
    } return result;
  };
  
  },{"./_object-gops":87,"./_object-keys":90,"./_object-pie":91}],47:[function(require,module,exports){
  var global = require('./_global');
  var core = require('./_core');
  var hide = require('./_hide');
  var redefine = require('./_redefine');
  var ctx = require('./_ctx');
  var PROTOTYPE = 'prototype';
  
  var $export = function (type, name, source) {
    var IS_FORCED = type & $export.F;
    var IS_GLOBAL = type & $export.G;
    var IS_STATIC = type & $export.S;
    var IS_PROTO = type & $export.P;
    var IS_BIND = type & $export.B;
    var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];
    var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
    var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});
    var key, own, out, exp;
    if (IS_GLOBAL) source = name;
    for (key in source) {
      // contains in native
      own = !IS_FORCED && target && target[key] !== undefined;
      // export native or passed
      out = (own ? target : source)[key];
      // bind timers to global for call from export context
      exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
      // extend global
      if (target) redefine(target, key, out, type & $export.U);
      // export
      if (exports[key] != out) hide(exports, key, exp);
      if (IS_PROTO && expProto[key] != out) expProto[key] = out;
    }
  };
  global.core = core;
  // type bitmap
  $export.F = 1;   // forced
  $export.G = 2;   // global
  $export.S = 4;   // static
  $export.P = 8;   // proto
  $export.B = 16;  // bind
  $export.W = 32;  // wrap
  $export.U = 64;  // safe
  $export.R = 128; // real proto method for `library`
  module.exports = $export;
  
  },{"./_core":37,"./_ctx":39,"./_global":53,"./_hide":55,"./_redefine":101}],48:[function(require,module,exports){
  var MATCH = require('./_wks')('match');
  module.exports = function (KEY) {
    var re = /./;
    try {
      '/./'[KEY](re);
    } catch (e) {
      try {
        re[MATCH] = false;
        return !'/./'[KEY](re);
      } catch (f) { /* empty */ }
    } return true;
  };
  
  },{"./_wks":135}],49:[function(require,module,exports){
  module.exports = function (exec) {
    try {
      return !!exec();
    } catch (e) {
      return true;
    }
  };
  
  },{}],50:[function(require,module,exports){
  'use strict';
  require('./es6.regexp.exec');
  var redefine = require('./_redefine');
  var hide = require('./_hide');
  var fails = require('./_fails');
  var defined = require('./_defined');
  var wks = require('./_wks');
  var regexpExec = require('./_regexp-exec');
  
  var SPECIES = wks('species');
  
  var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {
    // #replace needs built-in support for named groups.
    // #match works fine because it just return the exec results, even if it has
    // a "grops" property.
    var re = /./;
    re.exec = function () {
      var result = [];
      result.groups = { a: '7' };
      return result;
    };
    return ''.replace(re, '$<a>') !== '7';
  });
  
  var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {
    // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
    var re = /(?:)/;
    var originalExec = re.exec;
    re.exec = function () { return originalExec.apply(this, arguments); };
    var result = 'ab'.split(re);
    return result.length === 2 && result[0] === 'a' && result[1] === 'b';
  })();
  
  module.exports = function (KEY, length, exec) {
    var SYMBOL = wks(KEY);
  
    var DELEGATES_TO_SYMBOL = !fails(function () {
      // String methods call symbol-named RegEp methods
      var O = {};
      O[SYMBOL] = function () { return 7; };
      return ''[KEY](O) != 7;
    });
  
    var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {
      // Symbol-named RegExp methods call .exec
      var execCalled = false;
      var re = /a/;
      re.exec = function () { execCalled = true; return null; };
      if (KEY === 'split') {
        // RegExp[@@split] doesn't call the regex's exec method, but first creates
        // a new one. We need to return the patched regex when creating the new one.
        re.constructor = {};
        re.constructor[SPECIES] = function () { return re; };
      }
      re[SYMBOL]('');
      return !execCalled;
    }) : undefined;
  
    if (
      !DELEGATES_TO_SYMBOL ||
      !DELEGATES_TO_EXEC ||
      (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||
      (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)
    ) {
      var nativeRegExpMethod = /./[SYMBOL];
      var fns = exec(
        defined,
        SYMBOL,
        ''[KEY],
        function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {
          if (regexp.exec === regexpExec) {
            if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
              // The native String method already delegates to @@method (this
              // polyfilled function), leasing to infinite recursion.
              // We avoid it by directly calling the native @@method method.
              return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };
            }
            return { done: true, value: nativeMethod.call(str, regexp, arg2) };
          }
          return { done: false };
        }
      );
      var strfn = fns[0];
      var rxfn = fns[1];
  
      redefine(String.prototype, KEY, strfn);
      hide(RegExp.prototype, SYMBOL, length == 2
        // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
        // 21.2.5.11 RegExp.prototype[@@split](string, limit)
        ? function (string, arg) { return rxfn.call(string, this, arg); }
        // 21.2.5.6 RegExp.prototype[@@match](string)
        // 21.2.5.9 RegExp.prototype[@@search](string)
        : function (string) { return rxfn.call(string, this); }
      );
    }
  };
  
  },{"./_defined":42,"./_fails":49,"./_hide":55,"./_redefine":101,"./_regexp-exec":103,"./_wks":135,"./es6.regexp.exec":231}],51:[function(require,module,exports){
  'use strict';
  // 21.2.5.3 get RegExp.prototype.flags
  var anObject = require('./_an-object');
  module.exports = function () {
    var that = anObject(this);
    var result = '';
    if (that.global) result += 'g';
    if (that.ignoreCase) result += 'i';
    if (that.multiline) result += 'm';
    if (that.unicode) result += 'u';
    if (that.sticky) result += 'y';
    return result;
  };
  
  },{"./_an-object":23}],52:[function(require,module,exports){
  var ctx = require('./_ctx');
  var call = require('./_iter-call');
  var isArrayIter = require('./_is-array-iter');
  var anObject = require('./_an-object');
  var toLength = require('./_to-length');
  var getIterFn = require('./core.get-iterator-method');
  var BREAK = {};
  var RETURN = {};
  var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {
    var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);
    var f = ctx(fn, that, entries ? 2 : 1);
    var index = 0;
    var length, step, iterator, result;
    if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');
    // fast case for arrays with default iterator
    if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {
      result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
      if (result === BREAK || result === RETURN) return result;
    } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {
      result = call(iterator, f, step.value, entries);
      if (result === BREAK || result === RETURN) return result;
    }
  };
  exports.BREAK = BREAK;
  exports.RETURN = RETURN;
  
  },{"./_an-object":23,"./_ctx":39,"./_is-array-iter":61,"./_iter-call":66,"./_to-length":124,"./core.get-iterator-method":136}],53:[function(require,module,exports){
  // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
  var global = module.exports = typeof window != 'undefined' && window.Math == Math
    ? window : typeof self != 'undefined' && self.Math == Math ? self
    // eslint-disable-next-line no-new-func
    : Function('return this')();
  if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
  
  },{}],54:[function(require,module,exports){
  var hasOwnProperty = {}.hasOwnProperty;
  module.exports = function (it, key) {
    return hasOwnProperty.call(it, key);
  };
  
  },{}],55:[function(require,module,exports){
  var dP = require('./_object-dp');
  var createDesc = require('./_property-desc');
  module.exports = require('./_descriptors') ? function (object, key, value) {
    return dP.f(object, key, createDesc(1, value));
  } : function (object, key, value) {
    object[key] = value;
    return object;
  };
  
  },{"./_descriptors":43,"./_object-dp":82,"./_property-desc":99}],56:[function(require,module,exports){
  var document = require('./_global').document;
  module.exports = document && document.documentElement;
  
  },{"./_global":53}],57:[function(require,module,exports){
  module.exports = !require('./_descriptors') && !require('./_fails')(function () {
    return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;
  });
  
  },{"./_descriptors":43,"./_dom-create":44,"./_fails":49}],58:[function(require,module,exports){
  var isObject = require('./_is-object');
  var setPrototypeOf = require('./_set-proto').set;
  module.exports = function (that, target, C) {
    var S = target.constructor;
    var P;
    if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {
      setPrototypeOf(that, P);
    } return that;
  };
  
  },{"./_is-object":64,"./_set-proto":105}],59:[function(require,module,exports){
  // fast apply, http://jsperf.lnkit.com/fast-apply/5
  module.exports = function (fn, args, that) {
    var un = that === undefined;
    switch (args.length) {
      case 0: return un ? fn()
                        : fn.call(that);
      case 1: return un ? fn(args[0])
                        : fn.call(that, args[0]);
      case 2: return un ? fn(args[0], args[1])
                        : fn.call(that, args[0], args[1]);
      case 3: return un ? fn(args[0], args[1], args[2])
                        : fn.call(that, args[0], args[1], args[2]);
      case 4: return un ? fn(args[0], args[1], args[2], args[3])
                        : fn.call(that, args[0], args[1], args[2], args[3]);
    } return fn.apply(that, args);
  };
  
  },{}],60:[function(require,module,exports){
  // fallback for non-array-like ES3 and non-enumerable old V8 strings
  var cof = require('./_cof');
  // eslint-disable-next-line no-prototype-builtins
  module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
    return cof(it) == 'String' ? it.split('') : Object(it);
  };
  
  },{"./_cof":33}],61:[function(require,module,exports){
  // check on default Array iterator
  var Iterators = require('./_iterators');
  var ITERATOR = require('./_wks')('iterator');
  var ArrayProto = Array.prototype;
  
  module.exports = function (it) {
    return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
  };
  
  },{"./_iterators":71,"./_wks":135}],62:[function(require,module,exports){
  // 7.2.2 IsArray(argument)
  var cof = require('./_cof');
  module.exports = Array.isArray || function isArray(arg) {
    return cof(arg) == 'Array';
  };
  
  },{"./_cof":33}],63:[function(require,module,exports){
  // 20.1.2.3 Number.isInteger(number)
  var isObject = require('./_is-object');
  var floor = Math.floor;
  module.exports = function isInteger(it) {
    return !isObject(it) && isFinite(it) && floor(it) === it;
  };
  
  },{"./_is-object":64}],64:[function(require,module,exports){
  module.exports = function (it) {
    return typeof it === 'object' ? it !== null : typeof it === 'function';
  };
  
  },{}],65:[function(require,module,exports){
  // 7.2.8 IsRegExp(argument)
  var isObject = require('./_is-object');
  var cof = require('./_cof');
  var MATCH = require('./_wks')('match');
  module.exports = function (it) {
    var isRegExp;
    return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');
  };
  
  },{"./_cof":33,"./_is-object":64,"./_wks":135}],66:[function(require,module,exports){
  // call something on iterator step with safe closing on error
  var anObject = require('./_an-object');
  module.exports = function (iterator, fn, value, entries) {
    try {
      return entries ? fn(anObject(value)[0], value[1]) : fn(value);
    // 7.4.6 IteratorClose(iterator, completion)
    } catch (e) {
      var ret = iterator['return'];
      if (ret !== undefined) anObject(ret.call(iterator));
      throw e;
    }
  };
  
  },{"./_an-object":23}],67:[function(require,module,exports){
  'use strict';
  var create = require('./_object-create');
  var descriptor = require('./_property-desc');
  var setToStringTag = require('./_set-to-string-tag');
  var IteratorPrototype = {};
  
  // 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
  require('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });
  
  module.exports = function (Constructor, NAME, next) {
    Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
    setToStringTag(Constructor, NAME + ' Iterator');
  };
  
  },{"./_hide":55,"./_object-create":81,"./_property-desc":99,"./_set-to-string-tag":107,"./_wks":135}],68:[function(require,module,exports){
  'use strict';
  var LIBRARY = require('./_library');
  var $export = require('./_export');
  var redefine = require('./_redefine');
  var hide = require('./_hide');
  var Iterators = require('./_iterators');
  var $iterCreate = require('./_iter-create');
  var setToStringTag = require('./_set-to-string-tag');
  var getPrototypeOf = require('./_object-gpo');
  var ITERATOR = require('./_wks')('iterator');
  var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
  var FF_ITERATOR = '@@iterator';
  var KEYS = 'keys';
  var VALUES = 'values';
  
  var returnThis = function () { return this; };
  
  module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
    $iterCreate(Constructor, NAME, next);
    var getMethod = function (kind) {
      if (!BUGGY && kind in proto) return proto[kind];
      switch (kind) {
        case KEYS: return function keys() { return new Constructor(this, kind); };
        case VALUES: return function values() { return new Constructor(this, kind); };
      } return function entries() { return new Constructor(this, kind); };
    };
    var TAG = NAME + ' Iterator';
    var DEF_VALUES = DEFAULT == VALUES;
    var VALUES_BUG = false;
    var proto = Base.prototype;
    var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
    var $default = $native || getMethod(DEFAULT);
    var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
    var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
    var methods, key, IteratorPrototype;
    // Fix native
    if ($anyNative) {
      IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
      if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
        // Set @@toStringTag to native iterators
        setToStringTag(IteratorPrototype, TAG, true);
        // fix for some old engines
        if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);
      }
    }
    // fix Array#{values, @@iterator}.name in V8 / FF
    if (DEF_VALUES && $native && $native.name !== VALUES) {
      VALUES_BUG = true;
      $default = function values() { return $native.call(this); };
    }
    // Define iterator
    if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
      hide(proto, ITERATOR, $default);
    }
    // Plug for library
    Iterators[NAME] = $default;
    Iterators[TAG] = returnThis;
    if (DEFAULT) {
      methods = {
        values: DEF_VALUES ? $default : getMethod(VALUES),
        keys: IS_SET ? $default : getMethod(KEYS),
        entries: $entries
      };
      if (FORCED) for (key in methods) {
        if (!(key in proto)) redefine(proto, key, methods[key]);
      } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
    }
    return methods;
  };
  
  },{"./_export":47,"./_hide":55,"./_iter-create":67,"./_iterators":71,"./_library":72,"./_object-gpo":88,"./_redefine":101,"./_set-to-string-tag":107,"./_wks":135}],69:[function(require,module,exports){
  var ITERATOR = require('./_wks')('iterator');
  var SAFE_CLOSING = false;
  
  try {
    var riter = [7][ITERATOR]();
    riter['return'] = function () { SAFE_CLOSING = true; };
    // eslint-disable-next-line no-throw-literal
    Array.from(riter, function () { throw 2; });
  } catch (e) { /* empty */ }
  
  module.exports = function (exec, skipClosing) {
    if (!skipClosing && !SAFE_CLOSING) return false;
    var safe = false;
    try {
      var arr = [7];
      var iter = arr[ITERATOR]();
      iter.next = function () { return { done: safe = true }; };
      arr[ITERATOR] = function () { return iter; };
      exec(arr);
    } catch (e) { /* empty */ }
    return safe;
  };
  
  },{"./_wks":135}],70:[function(require,module,exports){
  module.exports = function (done, value) {
    return { value: value, done: !!done };
  };
  
  },{}],71:[function(require,module,exports){
  module.exports = {};
  
  },{}],72:[function(require,module,exports){
  module.exports = false;
  
  },{}],73:[function(require,module,exports){
  // 20.2.2.14 Math.expm1(x)
  var $expm1 = Math.expm1;
  module.exports = (!$expm1
    // Old FF bug
    || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168
    // Tor Browser bug
    || $expm1(-2e-17) != -2e-17
  ) ? function expm1(x) {
    return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;
  } : $expm1;
  
  },{}],74:[function(require,module,exports){
  // 20.2.2.16 Math.fround(x)
  var sign = require('./_math-sign');
  var pow = Math.pow;
  var EPSILON = pow(2, -52);
  var EPSILON32 = pow(2, -23);
  var MAX32 = pow(2, 127) * (2 - EPSILON32);
  var MIN32 = pow(2, -126);
  
  var roundTiesToEven = function (n) {
    return n + 1 / EPSILON - 1 / EPSILON;
  };
  
  module.exports = Math.fround || function fround(x) {
    var $abs = Math.abs(x);
    var $sign = sign(x);
    var a, result;
    if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;
    a = (1 + EPSILON32 / EPSILON) * $abs;
    result = a - (a - $abs);
    // eslint-disable-next-line no-self-compare
    if (result > MAX32 || result != result) return $sign * Infinity;
    return $sign * result;
  };
  
  },{"./_math-sign":76}],75:[function(require,module,exports){
  // 20.2.2.20 Math.log1p(x)
  module.exports = Math.log1p || function log1p(x) {
    return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);
  };
  
  },{}],76:[function(require,module,exports){
  // 20.2.2.28 Math.sign(x)
  module.exports = Math.sign || function sign(x) {
    // eslint-disable-next-line no-self-compare
    return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;
  };
  
  },{}],77:[function(require,module,exports){
  var META = require('./_uid')('meta');
  var isObject = require('./_is-object');
  var has = require('./_has');
  var setDesc = require('./_object-dp').f;
  var id = 0;
  var isExtensible = Object.isExtensible || function () {
    return true;
  };
  var FREEZE = !require('./_fails')(function () {
    return isExtensible(Object.preventExtensions({}));
  });
  var setMeta = function (it) {
    setDesc(it, META, { value: {
      i: 'O' + ++id, // object ID
      w: {}          // weak collections IDs
    } });
  };
  var fastKey = function (it, create) {
    // return primitive with prefix
    if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
    if (!has(it, META)) {
      // can't set metadata to uncaught frozen object
      if (!isExtensible(it)) return 'F';
      // not necessary to add metadata
      if (!create) return 'E';
      // add missing metadata
      setMeta(it);
    // return object ID
    } return it[META].i;
  };
  var getWeak = function (it, create) {
    if (!has(it, META)) {
      // can't set metadata to uncaught frozen object
      if (!isExtensible(it)) return true;
      // not necessary to add metadata
      if (!create) return false;
      // add missing metadata
      setMeta(it);
    // return hash weak collections IDs
    } return it[META].w;
  };
  // add metadata on freeze-family methods calling
  var onFreeze = function (it) {
    if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
    return it;
  };
  var meta = module.exports = {
    KEY: META,
    NEED: false,
    fastKey: fastKey,
    getWeak: getWeak,
    onFreeze: onFreeze
  };
  
  },{"./_fails":49,"./_has":54,"./_is-object":64,"./_object-dp":82,"./_uid":130}],78:[function(require,module,exports){
  var global = require('./_global');
  var macrotask = require('./_task').set;
  var Observer = global.MutationObserver || global.WebKitMutationObserver;
  var process = global.process;
  var Promise = global.Promise;
  var isNode = require('./_cof')(process) == 'process';
  
  module.exports = function () {
    var head, last, notify;
  
    var flush = function () {
      var parent, fn;
      if (isNode && (parent = process.domain)) parent.exit();
      while (head) {
        fn = head.fn;
        head = head.next;
        try {
          fn();
        } catch (e) {
          if (head) notify();
          else last = undefined;
          throw e;
        }
      } last = undefined;
      if (parent) parent.enter();
    };
  
    // Node.js
    if (isNode) {
      notify = function () {
        process.nextTick(flush);
      };
    // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339
    } else if (Observer && !(global.navigator && global.navigator.standalone)) {
      var toggle = true;
      var node = document.createTextNode('');
      new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new
      notify = function () {
        node.data = toggle = !toggle;
      };
    // environments with maybe non-completely correct, but existent Promise
    } else if (Promise && Promise.resolve) {
      // Promise.resolve without an argument throws an error in LG WebOS 2
      var promise = Promise.resolve(undefined);
      notify = function () {
        promise.then(flush);
      };
    // for other environments - macrotask based on:
    // - setImmediate
    // - MessageChannel
    // - window.postMessag
    // - onreadystatechange
    // - setTimeout
    } else {
      notify = function () {
        // strange IE + webpack dev server bug - use .call(global)
        macrotask.call(global, flush);
      };
    }
  
    return function (fn) {
      var task = { fn: fn, next: undefined };
      if (last) last.next = task;
      if (!head) {
        head = task;
        notify();
      } last = task;
    };
  };
  
  },{"./_cof":33,"./_global":53,"./_task":119}],79:[function(require,module,exports){
  'use strict';
  // 25.4.1.5 NewPromiseCapability(C)
  var aFunction = require('./_a-function');
  
  function PromiseCapability(C) {
    var resolve, reject;
    this.promise = new C(function ($$resolve, $$reject) {
      if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');
      resolve = $$resolve;
      reject = $$reject;
    });
    this.resolve = aFunction(resolve);
    this.reject = aFunction(reject);
  }
  
  module.exports.f = function (C) {
    return new PromiseCapability(C);
  };
  
  },{"./_a-function":18}],80:[function(require,module,exports){
  'use strict';
  // 19.1.2.1 Object.assign(target, source, ...)
  var getKeys = require('./_object-keys');
  var gOPS = require('./_object-gops');
  var pIE = require('./_object-pie');
  var toObject = require('./_to-object');
  var IObject = require('./_iobject');
  var $assign = Object.assign;
  
  // should work with symbols and should have deterministic property order (V8 bug)
  module.exports = !$assign || require('./_fails')(function () {
    var A = {};
    var B = {};
    // eslint-disable-next-line no-undef
    var S = Symbol();
    var K = 'abcdefghijklmnopqrst';
    A[S] = 7;
    K.split('').forEach(function (k) { B[k] = k; });
    return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
  }) ? function assign(target, source) { // eslint-disable-line no-unused-vars
    var T = toObject(target);
    var aLen = arguments.length;
    var index = 1;
    var getSymbols = gOPS.f;
    var isEnum = pIE.f;
    while (aLen > index) {
      var S = IObject(arguments[index++]);
      var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);
      var length = keys.length;
      var j = 0;
      var key;
      while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];
    } return T;
  } : $assign;
  
  },{"./_fails":49,"./_iobject":60,"./_object-gops":87,"./_object-keys":90,"./_object-pie":91,"./_to-object":125}],81:[function(require,module,exports){
  // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
  var anObject = require('./_an-object');
  var dPs = require('./_object-dps');
  var enumBugKeys = require('./_enum-bug-keys');
  var IE_PROTO = require('./_shared-key')('IE_PROTO');
  var Empty = function () { /* empty */ };
  var PROTOTYPE = 'prototype';
  
  // Create object with fake `null` prototype: use iframe Object with cleared prototype
  var createDict = function () {
    // Thrash, waste and sodomy: IE GC bug
    var iframe = require('./_dom-create')('iframe');
    var i = enumBugKeys.length;
    var lt = '<';
    var gt = '>';
    var iframeDocument;
    iframe.style.display = 'none';
    require('./_html').appendChild(iframe);
    iframe.src = 'javascript:'; // eslint-disable-line no-script-url
    // createDict = iframe.contentWindow.Object;
    // html.removeChild(iframe);
    iframeDocument = iframe.contentWindow.document;
    iframeDocument.open();
    iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
    iframeDocument.close();
    createDict = iframeDocument.F;
    while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
    return createDict();
  };
  
  module.exports = Object.create || function create(O, Properties) {
    var result;
    if (O !== null) {
      Empty[PROTOTYPE] = anObject(O);
      result = new Empty();
      Empty[PROTOTYPE] = null;
      // add "__proto__" for Object.getPrototypeOf polyfill
      result[IE_PROTO] = O;
    } else result = createDict();
    return Properties === undefined ? result : dPs(result, Properties);
  };
  
  },{"./_an-object":23,"./_dom-create":44,"./_enum-bug-keys":45,"./_html":56,"./_object-dps":83,"./_shared-key":108}],82:[function(require,module,exports){
  var anObject = require('./_an-object');
  var IE8_DOM_DEFINE = require('./_ie8-dom-define');
  var toPrimitive = require('./_to-primitive');
  var dP = Object.defineProperty;
  
  exports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {
    anObject(O);
    P = toPrimitive(P, true);
    anObject(Attributes);
    if (IE8_DOM_DEFINE) try {
      return dP(O, P, Attributes);
    } catch (e) { /* empty */ }
    if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
    if ('value' in Attributes) O[P] = Attributes.value;
    return O;
  };
  
  },{"./_an-object":23,"./_descriptors":43,"./_ie8-dom-define":57,"./_to-primitive":126}],83:[function(require,module,exports){
  var dP = require('./_object-dp');
  var anObject = require('./_an-object');
  var getKeys = require('./_object-keys');
  
  module.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {
    anObject(O);
    var keys = getKeys(Properties);
    var length = keys.length;
    var i = 0;
    var P;
    while (length > i) dP.f(O, P = keys[i++], Properties[P]);
    return O;
  };
  
  },{"./_an-object":23,"./_descriptors":43,"./_object-dp":82,"./_object-keys":90}],84:[function(require,module,exports){
  var pIE = require('./_object-pie');
  var createDesc = require('./_property-desc');
  var toIObject = require('./_to-iobject');
  var toPrimitive = require('./_to-primitive');
  var has = require('./_has');
  var IE8_DOM_DEFINE = require('./_ie8-dom-define');
  var gOPD = Object.getOwnPropertyDescriptor;
  
  exports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {
    O = toIObject(O);
    P = toPrimitive(P, true);
    if (IE8_DOM_DEFINE) try {
      return gOPD(O, P);
    } catch (e) { /* empty */ }
    if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);
  };
  
  },{"./_descriptors":43,"./_has":54,"./_ie8-dom-define":57,"./_object-pie":91,"./_property-desc":99,"./_to-iobject":123,"./_to-primitive":126}],85:[function(require,module,exports){
  // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
  var toIObject = require('./_to-iobject');
  var gOPN = require('./_object-gopn').f;
  var toString = {}.toString;
  
  var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
    ? Object.getOwnPropertyNames(window) : [];
  
  var getWindowNames = function (it) {
    try {
      return gOPN(it);
    } catch (e) {
      return windowNames.slice();
    }
  };
  
  module.exports.f = function getOwnPropertyNames(it) {
    return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
  };
  
  },{"./_object-gopn":86,"./_to-iobject":123}],86:[function(require,module,exports){
  // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
  var $keys = require('./_object-keys-internal');
  var hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');
  
  exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
    return $keys(O, hiddenKeys);
  };
  
  },{"./_enum-bug-keys":45,"./_object-keys-internal":89}],87:[function(require,module,exports){
  exports.f = Object.getOwnPropertySymbols;
  
  },{}],88:[function(require,module,exports){
  // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
  var has = require('./_has');
  var toObject = require('./_to-object');
  var IE_PROTO = require('./_shared-key')('IE_PROTO');
  var ObjectProto = Object.prototype;
  
  module.exports = Object.getPrototypeOf || function (O) {
    O = toObject(O);
    if (has(O, IE_PROTO)) return O[IE_PROTO];
    if (typeof O.constructor == 'function' && O instanceof O.constructor) {
      return O.constructor.prototype;
    } return O instanceof Object ? ObjectProto : null;
  };
  
  },{"./_has":54,"./_shared-key":108,"./_to-object":125}],89:[function(require,module,exports){
  var has = require('./_has');
  var toIObject = require('./_to-iobject');
  var arrayIndexOf = require('./_array-includes')(false);
  var IE_PROTO = require('./_shared-key')('IE_PROTO');
  
  module.exports = function (object, names) {
    var O = toIObject(object);
    var i = 0;
    var result = [];
    var key;
    for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
    // Don't enum bug & hidden keys
    while (names.length > i) if (has(O, key = names[i++])) {
      ~arrayIndexOf(result, key) || result.push(key);
    }
    return result;
  };
  
  },{"./_array-includes":26,"./_has":54,"./_shared-key":108,"./_to-iobject":123}],90:[function(require,module,exports){
  // 19.1.2.14 / 15.2.3.14 Object.keys(O)
  var $keys = require('./_object-keys-internal');
  var enumBugKeys = require('./_enum-bug-keys');
  
  module.exports = Object.keys || function keys(O) {
    return $keys(O, enumBugKeys);
  };
  
  },{"./_enum-bug-keys":45,"./_object-keys-internal":89}],91:[function(require,module,exports){
  exports.f = {}.propertyIsEnumerable;
  
  },{}],92:[function(require,module,exports){
  // most Object methods by ES6 should accept primitives
  var $export = require('./_export');
  var core = require('./_core');
  var fails = require('./_fails');
  module.exports = function (KEY, exec) {
    var fn = (core.Object || {})[KEY] || Object[KEY];
    var exp = {};
    exp[KEY] = exec(fn);
    $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);
  };
  
  },{"./_core":37,"./_export":47,"./_fails":49}],93:[function(require,module,exports){
  var getKeys = require('./_object-keys');
  var toIObject = require('./_to-iobject');
  var isEnum = require('./_object-pie').f;
  module.exports = function (isEntries) {
    return function (it) {
      var O = toIObject(it);
      var keys = getKeys(O);
      var length = keys.length;
      var i = 0;
      var result = [];
      var key;
      while (length > i) if (isEnum.call(O, key = keys[i++])) {
        result.push(isEntries ? [key, O[key]] : O[key]);
      } return result;
    };
  };
  
  },{"./_object-keys":90,"./_object-pie":91,"./_to-iobject":123}],94:[function(require,module,exports){
  // all object keys, includes non-enumerable and symbols
  var gOPN = require('./_object-gopn');
  var gOPS = require('./_object-gops');
  var anObject = require('./_an-object');
  var Reflect = require('./_global').Reflect;
  module.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {
    var keys = gOPN.f(anObject(it));
    var getSymbols = gOPS.f;
    return getSymbols ? keys.concat(getSymbols(it)) : keys;
  };
  
  },{"./_an-object":23,"./_global":53,"./_object-gopn":86,"./_object-gops":87}],95:[function(require,module,exports){
  var $parseFloat = require('./_global').parseFloat;
  var $trim = require('./_string-trim').trim;
  
  module.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {
    var string = $trim(String(str), 3);
    var result = $parseFloat(string);
    return result === 0 && string.charAt(0) == '-' ? -0 : result;
  } : $parseFloat;
  
  },{"./_global":53,"./_string-trim":117,"./_string-ws":118}],96:[function(require,module,exports){
  var $parseInt = require('./_global').parseInt;
  var $trim = require('./_string-trim').trim;
  var ws = require('./_string-ws');
  var hex = /^[-+]?0[xX]/;
  
  module.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {
    var string = $trim(String(str), 3);
    return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));
  } : $parseInt;
  
  },{"./_global":53,"./_string-trim":117,"./_string-ws":118}],97:[function(require,module,exports){
  module.exports = function (exec) {
    try {
      return { e: false, v: exec() };
    } catch (e) {
      return { e: true, v: e };
    }
  };
  
  },{}],98:[function(require,module,exports){
  var anObject = require('./_an-object');
  var isObject = require('./_is-object');
  var newPromiseCapability = require('./_new-promise-capability');
  
  module.exports = function (C, x) {
    anObject(C);
    if (isObject(x) && x.constructor === C) return x;
    var promiseCapability = newPromiseCapability.f(C);
    var resolve = promiseCapability.resolve;
    resolve(x);
    return promiseCapability.promise;
  };
  
  },{"./_an-object":23,"./_is-object":64,"./_new-promise-capability":79}],99:[function(require,module,exports){
  module.exports = function (bitmap, value) {
    return {
      enumerable: !(bitmap & 1),
      configurable: !(bitmap & 2),
      writable: !(bitmap & 4),
      value: value
    };
  };
  
  },{}],100:[function(require,module,exports){
  var redefine = require('./_redefine');
  module.exports = function (target, src, safe) {
    for (var key in src) redefine(target, key, src[key], safe);
    return target;
  };
  
  },{"./_redefine":101}],101:[function(require,module,exports){
  var global = require('./_global');
  var hide = require('./_hide');
  var has = require('./_has');
  var SRC = require('./_uid')('src');
  var TO_STRING = 'toString';
  var $toString = Function[TO_STRING];
  var TPL = ('' + $toString).split(TO_STRING);
  
  require('./_core').inspectSource = function (it) {
    return $toString.call(it);
  };
  
  (module.exports = function (O, key, val, safe) {
    var isFunction = typeof val == 'function';
    if (isFunction) has(val, 'name') || hide(val, 'name', key);
    if (O[key] === val) return;
    if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
    if (O === global) {
      O[key] = val;
    } else if (!safe) {
      delete O[key];
      hide(O, key, val);
    } else if (O[key]) {
      O[key] = val;
    } else {
      hide(O, key, val);
    }
  // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
  })(Function.prototype, TO_STRING, function toString() {
    return typeof this == 'function' && this[SRC] || $toString.call(this);
  });
  
  },{"./_core":37,"./_global":53,"./_has":54,"./_hide":55,"./_uid":130}],102:[function(require,module,exports){
  'use strict';
  
  var classof = require('./_classof');
  var builtinExec = RegExp.prototype.exec;
  
   // `RegExpExec` abstract operation
  // https://tc39.github.io/ecma262/#sec-regexpexec
  module.exports = function (R, S) {
    var exec = R.exec;
    if (typeof exec === 'function') {
      var result = exec.call(R, S);
      if (typeof result !== 'object') {
        throw new TypeError('RegExp exec method returned something other than an Object or null');
      }
      return result;
    }
    if (classof(R) !== 'RegExp') {
      throw new TypeError('RegExp#exec called on incompatible receiver');
    }
    return builtinExec.call(R, S);
  };
  
  },{"./_classof":32}],103:[function(require,module,exports){
  'use strict';
  
  var regexpFlags = require('./_flags');
  
  var nativeExec = RegExp.prototype.exec;
  // This always refers to the native implementation, because the
  // String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,
  // which loads this file before patching the method.
  var nativeReplace = String.prototype.replace;
  
  var patchedExec = nativeExec;
  
  var LAST_INDEX = 'lastIndex';
  
  var UPDATES_LAST_INDEX_WRONG = (function () {
    var re1 = /a/,
        re2 = /b*/g;
    nativeExec.call(re1, 'a');
    nativeExec.call(re2, 'a');
    return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;
  })();
  
  // nonparticipating capturing group, copied from es5-shim's String#split patch.
  var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;
  
  var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;
  
  if (PATCH) {
    patchedExec = function exec(str) {
      var re = this;
      var lastIndex, reCopy, match, i;
  
      if (NPCG_INCLUDED) {
        reCopy = new RegExp('^' + re.source + '$(?!\\s)', regexpFlags.call(re));
      }
      if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];
  
      match = nativeExec.call(re, str);
  
      if (UPDATES_LAST_INDEX_WRONG && match) {
        re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;
      }
      if (NPCG_INCLUDED && match && match.length > 1) {
        // Fix browsers whose `exec` methods don't consistently return `undefined`
        // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
        // eslint-disable-next-line no-loop-func
        nativeReplace.call(match[0], reCopy, function () {
          for (i = 1; i < arguments.length - 2; i++) {
            if (arguments[i] === undefined) match[i] = undefined;
          }
        });
      }
  
      return match;
    };
  }
  
  module.exports = patchedExec;
  
  },{"./_flags":51}],104:[function(require,module,exports){
  // 7.2.9 SameValue(x, y)
  module.exports = Object.is || function is(x, y) {
    // eslint-disable-next-line no-self-compare
    return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
  };
  
  },{}],105:[function(require,module,exports){
  // Works with __proto__ only. Old v8 can't work with null proto objects.
  /* eslint-disable no-proto */
  var isObject = require('./_is-object');
  var anObject = require('./_an-object');
  var check = function (O, proto) {
    anObject(O);
    if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
  };
  module.exports = {
    set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
      function (test, buggy, set) {
        try {
          set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);
          set(test, []);
          buggy = !(test instanceof Array);
        } catch (e) { buggy = true; }
        return function setPrototypeOf(O, proto) {
          check(O, proto);
          if (buggy) O.__proto__ = proto;
          else set(O, proto);
          return O;
        };
      }({}, false) : undefined),
    check: check
  };
  
  },{"./_an-object":23,"./_ctx":39,"./_is-object":64,"./_object-gopd":84}],106:[function(require,module,exports){
  'use strict';
  var global = require('./_global');
  var dP = require('./_object-dp');
  var DESCRIPTORS = require('./_descriptors');
  var SPECIES = require('./_wks')('species');
  
  module.exports = function (KEY) {
    var C = global[KEY];
    if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {
      configurable: true,
      get: function () { return this; }
    });
  };
  
  },{"./_descriptors":43,"./_global":53,"./_object-dp":82,"./_wks":135}],107:[function(require,module,exports){
  var def = require('./_object-dp').f;
  var has = require('./_has');
  var TAG = require('./_wks')('toStringTag');
  
  module.exports = function (it, tag, stat) {
    if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
  };
  
  },{"./_has":54,"./_object-dp":82,"./_wks":135}],108:[function(require,module,exports){
  var shared = require('./_shared')('keys');
  var uid = require('./_uid');
  module.exports = function (key) {
    return shared[key] || (shared[key] = uid(key));
  };
  
  },{"./_shared":109,"./_uid":130}],109:[function(require,module,exports){
  var core = require('./_core');
  var global = require('./_global');
  var SHARED = '__core-js_shared__';
  var store = global[SHARED] || (global[SHARED] = {});
  
  (module.exports = function (key, value) {
    return store[key] || (store[key] = value !== undefined ? value : {});
  })('versions', []).push({
    version: core.version,
    mode: require('./_library') ? 'pure' : 'global',
    copyright: '© 2018 Denis Pushkarev (zloirock.ru)'
  });
  
  },{"./_core":37,"./_global":53,"./_library":72}],110:[function(require,module,exports){
  // 7.3.20 SpeciesConstructor(O, defaultConstructor)
  var anObject = require('./_an-object');
  var aFunction = require('./_a-function');
  var SPECIES = require('./_wks')('species');
  module.exports = function (O, D) {
    var C = anObject(O).constructor;
    var S;
    return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
  };
  
  },{"./_a-function":18,"./_an-object":23,"./_wks":135}],111:[function(require,module,exports){
  'use strict';
  var fails = require('./_fails');
  
  module.exports = function (method, arg) {
    return !!method && fails(function () {
      // eslint-disable-next-line no-useless-call
      arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);
    });
  };
  
  },{"./_fails":49}],112:[function(require,module,exports){
  var toInteger = require('./_to-integer');
  var defined = require('./_defined');
  // true  -> String#at
  // false -> String#codePointAt
  module.exports = function (TO_STRING) {
    return function (that, pos) {
      var s = String(defined(that));
      var i = toInteger(pos);
      var l = s.length;
      var a, b;
      if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
      a = s.charCodeAt(i);
      return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
        ? TO_STRING ? s.charAt(i) : a
        : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
    };
  };
  
  },{"./_defined":42,"./_to-integer":122}],113:[function(require,module,exports){
  // helper for String#{startsWith, endsWith, includes}
  var isRegExp = require('./_is-regexp');
  var defined = require('./_defined');
  
  module.exports = function (that, searchString, NAME) {
    if (isRegExp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!");
    return String(defined(that));
  };
  
  },{"./_defined":42,"./_is-regexp":65}],114:[function(require,module,exports){
  var $export = require('./_export');
  var fails = require('./_fails');
  var defined = require('./_defined');
  var quot = /"/g;
  // B.2.3.2.1 CreateHTML(string, tag, attribute, value)
  var createHTML = function (string, tag, attribute, value) {
    var S = String(defined(string));
    var p1 = '<' + tag;
    if (attribute !== '') p1 += ' ' + attribute + '="' + String(value).replace(quot, '&quot;') + '"';
    return p1 + '>' + S + '</' + tag + '>';
  };
  module.exports = function (NAME, exec) {
    var O = {};
    O[NAME] = exec(createHTML);
    $export($export.P + $export.F * fails(function () {
      var test = ''[NAME]('"');
      return test !== test.toLowerCase() || test.split('"').length > 3;
    }), 'String', O);
  };
  
  },{"./_defined":42,"./_export":47,"./_fails":49}],115:[function(require,module,exports){
  // https://github.com/tc39/proposal-string-pad-start-end
  var toLength = require('./_to-length');
  var repeat = require('./_string-repeat');
  var defined = require('./_defined');
  
  module.exports = function (that, maxLength, fillString, left) {
    var S = String(defined(that));
    var stringLength = S.length;
    var fillStr = fillString === undefined ? ' ' : String(fillString);
    var intMaxLength = toLength(maxLength);
    if (intMaxLength <= stringLength || fillStr == '') return S;
    var fillLen = intMaxLength - stringLength;
    var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));
    if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);
    return left ? stringFiller + S : S + stringFiller;
  };
  
  },{"./_defined":42,"./_string-repeat":116,"./_to-length":124}],116:[function(require,module,exports){
  'use strict';
  var toInteger = require('./_to-integer');
  var defined = require('./_defined');
  
  module.exports = function repeat(count) {
    var str = String(defined(this));
    var res = '';
    var n = toInteger(count);
    if (n < 0 || n == Infinity) throw RangeError("Count can't be negative");
    for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;
    return res;
  };
  
  },{"./_defined":42,"./_to-integer":122}],117:[function(require,module,exports){
  var $export = require('./_export');
  var defined = require('./_defined');
  var fails = require('./_fails');
  var spaces = require('./_string-ws');
  var space = '[' + spaces + ']';
  var non = '\u200b\u0085';
  var ltrim = RegExp('^' + space + space + '*');
  var rtrim = RegExp(space + space + '*$');
  
  var exporter = function (KEY, exec, ALIAS) {
    var exp = {};
    var FORCE = fails(function () {
      return !!spaces[KEY]() || non[KEY]() != non;
    });
    var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];
    if (ALIAS) exp[ALIAS] = fn;
    $export($export.P + $export.F * FORCE, 'String', exp);
  };
  
  // 1 -> String#trimLeft
  // 2 -> String#trimRight
  // 3 -> String#trim
  var trim = exporter.trim = function (string, TYPE) {
    string = String(defined(string));
    if (TYPE & 1) string = string.replace(ltrim, '');
    if (TYPE & 2) string = string.replace(rtrim, '');
    return string;
  };
  
  module.exports = exporter;
  
  },{"./_defined":42,"./_export":47,"./_fails":49,"./_string-ws":118}],118:[function(require,module,exports){
  module.exports = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
    '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
  
  },{}],119:[function(require,module,exports){
  var ctx = require('./_ctx');
  var invoke = require('./_invoke');
  var html = require('./_html');
  var cel = require('./_dom-create');
  var global = require('./_global');
  var process = global.process;
  var setTask = global.setImmediate;
  var clearTask = global.clearImmediate;
  var MessageChannel = global.MessageChannel;
  var Dispatch = global.Dispatch;
  var counter = 0;
  var queue = {};
  var ONREADYSTATECHANGE = 'onreadystatechange';
  var defer, channel, port;
  var run = function () {
    var id = +this;
    // eslint-disable-next-line no-prototype-builtins
    if (queue.hasOwnProperty(id)) {
      var fn = queue[id];
      delete queue[id];
      fn();
    }
  };
  var listener = function (event) {
    run.call(event.data);
  };
  // Node.js 0.9+ & IE10+ has setImmediate, otherwise:
  if (!setTask || !clearTask) {
    setTask = function setImmediate(fn) {
      var args = [];
      var i = 1;
      while (arguments.length > i) args.push(arguments[i++]);
      queue[++counter] = function () {
        // eslint-disable-next-line no-new-func
        invoke(typeof fn == 'function' ? fn : Function(fn), args);
      };
      defer(counter);
      return counter;
    };
    clearTask = function clearImmediate(id) {
      delete queue[id];
    };
    // Node.js 0.8-
    if (require('./_cof')(process) == 'process') {
      defer = function (id) {
        process.nextTick(ctx(run, id, 1));
      };
    // Sphere (JS game engine) Dispatch API
    } else if (Dispatch && Dispatch.now) {
      defer = function (id) {
        Dispatch.now(ctx(run, id, 1));
      };
    // Browsers with MessageChannel, includes WebWorkers
    } else if (MessageChannel) {
      channel = new MessageChannel();
      port = channel.port2;
      channel.port1.onmessage = listener;
      defer = ctx(port.postMessage, port, 1);
    // Browsers with postMessage, skip WebWorkers
    // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
    } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {
      defer = function (id) {
        global.postMessage(id + '', '*');
      };
      global.addEventListener('message', listener, false);
    // IE8-
    } else if (ONREADYSTATECHANGE in cel('script')) {
      defer = function (id) {
        html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {
          html.removeChild(this);
          run.call(id);
        };
      };
    // Rest old browsers
    } else {
      defer = function (id) {
        setTimeout(ctx(run, id, 1), 0);
      };
    }
  }
  module.exports = {
    set: setTask,
    clear: clearTask
  };
  
  },{"./_cof":33,"./_ctx":39,"./_dom-create":44,"./_global":53,"./_html":56,"./_invoke":59}],120:[function(require,module,exports){
  var toInteger = require('./_to-integer');
  var max = Math.max;
  var min = Math.min;
  module.exports = function (index, length) {
    index = toInteger(index);
    return index < 0 ? max(index + length, 0) : min(index, length);
  };
  
  },{"./_to-integer":122}],121:[function(require,module,exports){
  // https://tc39.github.io/ecma262/#sec-toindex
  var toInteger = require('./_to-integer');
  var toLength = require('./_to-length');
  module.exports = function (it) {
    if (it === undefined) return 0;
    var number = toInteger(it);
    var length = toLength(number);
    if (number !== length) throw RangeError('Wrong length!');
    return length;
  };
  
  },{"./_to-integer":122,"./_to-length":124}],122:[function(require,module,exports){
  // 7.1.4 ToInteger
  var ceil = Math.ceil;
  var floor = Math.floor;
  module.exports = function (it) {
    return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
  };
  
  },{}],123:[function(require,module,exports){
  // to indexed object, toObject with fallback for non-array-like ES3 strings
  var IObject = require('./_iobject');
  var defined = require('./_defined');
  module.exports = function (it) {
    return IObject(defined(it));
  };
  
  },{"./_defined":42,"./_iobject":60}],124:[function(require,module,exports){
  // 7.1.15 ToLength
  var toInteger = require('./_to-integer');
  var min = Math.min;
  module.exports = function (it) {
    return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
  };
  
  },{"./_to-integer":122}],125:[function(require,module,exports){
  // 7.1.13 ToObject(argument)
  var defined = require('./_defined');
  module.exports = function (it) {
    return Object(defined(it));
  };
  
  },{"./_defined":42}],126:[function(require,module,exports){
  // 7.1.1 ToPrimitive(input [, PreferredType])
  var isObject = require('./_is-object');
  // instead of the ES6 spec version, we didn't implement @@toPrimitive case
  // and the second argument - flag - preferred type is a string
  module.exports = function (it, S) {
    if (!isObject(it)) return it;
    var fn, val;
    if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
    if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
    if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
    throw TypeError("Can't convert object to primitive value");
  };
  
  },{"./_is-object":64}],127:[function(require,module,exports){
  'use strict';
  if (require('./_descriptors')) {
    var LIBRARY = require('./_library');
    var global = require('./_global');
    var fails = require('./_fails');
    var $export = require('./_export');
    var $typed = require('./_typed');
    var $buffer = require('./_typed-buffer');
    var ctx = require('./_ctx');
    var anInstance = require('./_an-instance');
    var propertyDesc = require('./_property-desc');
    var hide = require('./_hide');
    var redefineAll = require('./_redefine-all');
    var toInteger = require('./_to-integer');
    var toLength = require('./_to-length');
    var toIndex = require('./_to-index');
    var toAbsoluteIndex = require('./_to-absolute-index');
    var toPrimitive = require('./_to-primitive');
    var has = require('./_has');
    var classof = require('./_classof');
    var isObject = require('./_is-object');
    var toObject = require('./_to-object');
    var isArrayIter = require('./_is-array-iter');
    var create = require('./_object-create');
    var getPrototypeOf = require('./_object-gpo');
    var gOPN = require('./_object-gopn').f;
    var getIterFn = require('./core.get-iterator-method');
    var uid = require('./_uid');
    var wks = require('./_wks');
    var createArrayMethod = require('./_array-methods');
    var createArrayIncludes = require('./_array-includes');
    var speciesConstructor = require('./_species-constructor');
    var ArrayIterators = require('./es6.array.iterator');
    var Iterators = require('./_iterators');
    var $iterDetect = require('./_iter-detect');
    var setSpecies = require('./_set-species');
    var arrayFill = require('./_array-fill');
    var arrayCopyWithin = require('./_array-copy-within');
    var $DP = require('./_object-dp');
    var $GOPD = require('./_object-gopd');
    var dP = $DP.f;
    var gOPD = $GOPD.f;
    var RangeError = global.RangeError;
    var TypeError = global.TypeError;
    var Uint8Array = global.Uint8Array;
    var ARRAY_BUFFER = 'ArrayBuffer';
    var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;
    var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';
    var PROTOTYPE = 'prototype';
    var ArrayProto = Array[PROTOTYPE];
    var $ArrayBuffer = $buffer.ArrayBuffer;
    var $DataView = $buffer.DataView;
    var arrayForEach = createArrayMethod(0);
    var arrayFilter = createArrayMethod(2);
    var arraySome = createArrayMethod(3);
    var arrayEvery = createArrayMethod(4);
    var arrayFind = createArrayMethod(5);
    var arrayFindIndex = createArrayMethod(6);
    var arrayIncludes = createArrayIncludes(true);
    var arrayIndexOf = createArrayIncludes(false);
    var arrayValues = ArrayIterators.values;
    var arrayKeys = ArrayIterators.keys;
    var arrayEntries = ArrayIterators.entries;
    var arrayLastIndexOf = ArrayProto.lastIndexOf;
    var arrayReduce = ArrayProto.reduce;
    var arrayReduceRight = ArrayProto.reduceRight;
    var arrayJoin = ArrayProto.join;
    var arraySort = ArrayProto.sort;
    var arraySlice = ArrayProto.slice;
    var arrayToString = ArrayProto.toString;
    var arrayToLocaleString = ArrayProto.toLocaleString;
    var ITERATOR = wks('iterator');
    var TAG = wks('toStringTag');
    var TYPED_CONSTRUCTOR = uid('typed_constructor');
    var DEF_CONSTRUCTOR = uid('def_constructor');
    var ALL_CONSTRUCTORS = $typed.CONSTR;
    var TYPED_ARRAY = $typed.TYPED;
    var VIEW = $typed.VIEW;
    var WRONG_LENGTH = 'Wrong length!';
  
    var $map = createArrayMethod(1, function (O, length) {
      return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);
    });
  
    var LITTLE_ENDIAN = fails(function () {
      // eslint-disable-next-line no-undef
      return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;
    });
  
    var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {
      new Uint8Array(1).set({});
    });
  
    var toOffset = function (it, BYTES) {
      var offset = toInteger(it);
      if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');
      return offset;
    };
  
    var validate = function (it) {
      if (isObject(it) && TYPED_ARRAY in it) return it;
      throw TypeError(it + ' is not a typed array!');
    };
  
    var allocate = function (C, length) {
      if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {
        throw TypeError('It is not a typed array constructor!');
      } return new C(length);
    };
  
    var speciesFromList = function (O, list) {
      return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);
    };
  
    var fromList = function (C, list) {
      var index = 0;
      var length = list.length;
      var result = allocate(C, length);
      while (length > index) result[index] = list[index++];
      return result;
    };
  
    var addGetter = function (it, key, internal) {
      dP(it, key, { get: function () { return this._d[internal]; } });
    };
  
    var $from = function from(source /* , mapfn, thisArg */) {
      var O = toObject(source);
      var aLen = arguments.length;
      var mapfn = aLen > 1 ? arguments[1] : undefined;
      var mapping = mapfn !== undefined;
      var iterFn = getIterFn(O);
      var i, length, values, result, step, iterator;
      if (iterFn != undefined && !isArrayIter(iterFn)) {
        for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {
          values.push(step.value);
        } O = values;
      }
      if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);
      for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {
        result[i] = mapping ? mapfn(O[i], i) : O[i];
      }
      return result;
    };
  
    var $of = function of(/* ...items */) {
      var index = 0;
      var length = arguments.length;
      var result = allocate(this, length);
      while (length > index) result[index] = arguments[index++];
      return result;
    };
  
    // iOS Safari 6.x fails here
    var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });
  
    var $toLocaleString = function toLocaleString() {
      return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);
    };
  
    var proto = {
      copyWithin: function copyWithin(target, start /* , end */) {
        return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
      },
      every: function every(callbackfn /* , thisArg */) {
        return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
      },
      fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars
        return arrayFill.apply(validate(this), arguments);
      },
      filter: function filter(callbackfn /* , thisArg */) {
        return speciesFromList(this, arrayFilter(validate(this), callbackfn,
          arguments.length > 1 ? arguments[1] : undefined));
      },
      find: function find(predicate /* , thisArg */) {
        return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
      },
      findIndex: function findIndex(predicate /* , thisArg */) {
        return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
      },
      forEach: function forEach(callbackfn /* , thisArg */) {
        arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
      },
      indexOf: function indexOf(searchElement /* , fromIndex */) {
        return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
      },
      includes: function includes(searchElement /* , fromIndex */) {
        return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
      },
      join: function join(separator) { // eslint-disable-line no-unused-vars
        return arrayJoin.apply(validate(this), arguments);
      },
      lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars
        return arrayLastIndexOf.apply(validate(this), arguments);
      },
      map: function map(mapfn /* , thisArg */) {
        return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);
      },
      reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars
        return arrayReduce.apply(validate(this), arguments);
      },
      reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars
        return arrayReduceRight.apply(validate(this), arguments);
      },
      reverse: function reverse() {
        var that = this;
        var length = validate(that).length;
        var middle = Math.floor(length / 2);
        var index = 0;
        var value;
        while (index < middle) {
          value = that[index];
          that[index++] = that[--length];
          that[length] = value;
        } return that;
      },
      some: function some(callbackfn /* , thisArg */) {
        return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
      },
      sort: function sort(comparefn) {
        return arraySort.call(validate(this), comparefn);
      },
      subarray: function subarray(begin, end) {
        var O = validate(this);
        var length = O.length;
        var $begin = toAbsoluteIndex(begin, length);
        return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(
          O.buffer,
          O.byteOffset + $begin * O.BYTES_PER_ELEMENT,
          toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)
        );
      }
    };
  
    var $slice = function slice(start, end) {
      return speciesFromList(this, arraySlice.call(validate(this), start, end));
    };
  
    var $set = function set(arrayLike /* , offset */) {
      validate(this);
      var offset = toOffset(arguments[1], 1);
      var length = this.length;
      var src = toObject(arrayLike);
      var len = toLength(src.length);
      var index = 0;
      if (len + offset > length) throw RangeError(WRONG_LENGTH);
      while (index < len) this[offset + index] = src[index++];
    };
  
    var $iterators = {
      entries: function entries() {
        return arrayEntries.call(validate(this));
      },
      keys: function keys() {
        return arrayKeys.call(validate(this));
      },
      values: function values() {
        return arrayValues.call(validate(this));
      }
    };
  
    var isTAIndex = function (target, key) {
      return isObject(target)
        && target[TYPED_ARRAY]
        && typeof key != 'symbol'
        && key in target
        && String(+key) == String(key);
    };
    var $getDesc = function getOwnPropertyDescriptor(target, key) {
      return isTAIndex(target, key = toPrimitive(key, true))
        ? propertyDesc(2, target[key])
        : gOPD(target, key);
    };
    var $setDesc = function defineProperty(target, key, desc) {
      if (isTAIndex(target, key = toPrimitive(key, true))
        && isObject(desc)
        && has(desc, 'value')
        && !has(desc, 'get')
        && !has(desc, 'set')
        // TODO: add validation descriptor w/o calling accessors
        && !desc.configurable
        && (!has(desc, 'writable') || desc.writable)
        && (!has(desc, 'enumerable') || desc.enumerable)
      ) {
        target[key] = desc.value;
        return target;
      } return dP(target, key, desc);
    };
  
    if (!ALL_CONSTRUCTORS) {
      $GOPD.f = $getDesc;
      $DP.f = $setDesc;
    }
  
    $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {
      getOwnPropertyDescriptor: $getDesc,
      defineProperty: $setDesc
    });
  
    if (fails(function () { arrayToString.call({}); })) {
      arrayToString = arrayToLocaleString = function toString() {
        return arrayJoin.call(this);
      };
    }
  
    var $TypedArrayPrototype$ = redefineAll({}, proto);
    redefineAll($TypedArrayPrototype$, $iterators);
    hide($TypedArrayPrototype$, ITERATOR, $iterators.values);
    redefineAll($TypedArrayPrototype$, {
      slice: $slice,
      set: $set,
      constructor: function () { /* noop */ },
      toString: arrayToString,
      toLocaleString: $toLocaleString
    });
    addGetter($TypedArrayPrototype$, 'buffer', 'b');
    addGetter($TypedArrayPrototype$, 'byteOffset', 'o');
    addGetter($TypedArrayPrototype$, 'byteLength', 'l');
    addGetter($TypedArrayPrototype$, 'length', 'e');
    dP($TypedArrayPrototype$, TAG, {
      get: function () { return this[TYPED_ARRAY]; }
    });
  
    // eslint-disable-next-line max-statements
    module.exports = function (KEY, BYTES, wrapper, CLAMPED) {
      CLAMPED = !!CLAMPED;
      var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';
      var GETTER = 'get' + KEY;
      var SETTER = 'set' + KEY;
      var TypedArray = global[NAME];
      var Base = TypedArray || {};
      var TAC = TypedArray && getPrototypeOf(TypedArray);
      var FORCED = !TypedArray || !$typed.ABV;
      var O = {};
      var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];
      var getter = function (that, index) {
        var data = that._d;
        return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);
      };
      var setter = function (that, index, value) {
        var data = that._d;
        if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;
        data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);
      };
      var addElement = function (that, index) {
        dP(that, index, {
          get: function () {
            return getter(this, index);
          },
          set: function (value) {
            return setter(this, index, value);
          },
          enumerable: true
        });
      };
      if (FORCED) {
        TypedArray = wrapper(function (that, data, $offset, $length) {
          anInstance(that, TypedArray, NAME, '_d');
          var index = 0;
          var offset = 0;
          var buffer, byteLength, length, klass;
          if (!isObject(data)) {
            length = toIndex(data);
            byteLength = length * BYTES;
            buffer = new $ArrayBuffer(byteLength);
          } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
            buffer = data;
            offset = toOffset($offset, BYTES);
            var $len = data.byteLength;
            if ($length === undefined) {
              if ($len % BYTES) throw RangeError(WRONG_LENGTH);
              byteLength = $len - offset;
              if (byteLength < 0) throw RangeError(WRONG_LENGTH);
            } else {
              byteLength = toLength($length) * BYTES;
              if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);
            }
            length = byteLength / BYTES;
          } else if (TYPED_ARRAY in data) {
            return fromList(TypedArray, data);
          } else {
            return $from.call(TypedArray, data);
          }
          hide(that, '_d', {
            b: buffer,
            o: offset,
            l: byteLength,
            e: length,
            v: new $DataView(buffer)
          });
          while (index < length) addElement(that, index++);
        });
        TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);
        hide(TypedArrayPrototype, 'constructor', TypedArray);
      } else if (!fails(function () {
        TypedArray(1);
      }) || !fails(function () {
        new TypedArray(-1); // eslint-disable-line no-new
      }) || !$iterDetect(function (iter) {
        new TypedArray(); // eslint-disable-line no-new
        new TypedArray(null); // eslint-disable-line no-new
        new TypedArray(1.5); // eslint-disable-line no-new
        new TypedArray(iter); // eslint-disable-line no-new
      }, true)) {
        TypedArray = wrapper(function (that, data, $offset, $length) {
          anInstance(that, TypedArray, NAME);
          var klass;
          // `ws` module bug, temporarily remove validation length for Uint8Array
          // https://github.com/websockets/ws/pull/645
          if (!isObject(data)) return new Base(toIndex(data));
          if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
            return $length !== undefined
              ? new Base(data, toOffset($offset, BYTES), $length)
              : $offset !== undefined
                ? new Base(data, toOffset($offset, BYTES))
                : new Base(data);
          }
          if (TYPED_ARRAY in data) return fromList(TypedArray, data);
          return $from.call(TypedArray, data);
        });
        arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {
          if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);
        });
        TypedArray[PROTOTYPE] = TypedArrayPrototype;
        if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;
      }
      var $nativeIterator = TypedArrayPrototype[ITERATOR];
      var CORRECT_ITER_NAME = !!$nativeIterator
        && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);
      var $iterator = $iterators.values;
      hide(TypedArray, TYPED_CONSTRUCTOR, true);
      hide(TypedArrayPrototype, TYPED_ARRAY, NAME);
      hide(TypedArrayPrototype, VIEW, true);
      hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);
  
      if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {
        dP(TypedArrayPrototype, TAG, {
          get: function () { return NAME; }
        });
      }
  
      O[NAME] = TypedArray;
  
      $export($export.G + $export.W + $export.F * (TypedArray != Base), O);
  
      $export($export.S, NAME, {
        BYTES_PER_ELEMENT: BYTES
      });
  
      $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {
        from: $from,
        of: $of
      });
  
      if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);
  
      $export($export.P, NAME, proto);
  
      setSpecies(NAME);
  
      $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });
  
      $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);
  
      if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;
  
      $export($export.P + $export.F * fails(function () {
        new TypedArray(1).slice();
      }), NAME, { slice: $slice });
  
      $export($export.P + $export.F * (fails(function () {
        return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();
      }) || !fails(function () {
        TypedArrayPrototype.toLocaleString.call([1, 2]);
      })), NAME, { toLocaleString: $toLocaleString });
  
      Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;
      if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);
    };
  } else module.exports = function () { /* empty */ };
  
  },{"./_an-instance":22,"./_array-copy-within":24,"./_array-fill":25,"./_array-includes":26,"./_array-methods":27,"./_classof":32,"./_ctx":39,"./_descriptors":43,"./_export":47,"./_fails":49,"./_global":53,"./_has":54,"./_hide":55,"./_is-array-iter":61,"./_is-object":64,"./_iter-detect":69,"./_iterators":71,"./_library":72,"./_object-create":81,"./_object-dp":82,"./_object-gopd":84,"./_object-gopn":86,"./_object-gpo":88,"./_property-desc":99,"./_redefine-all":100,"./_set-species":106,"./_species-constructor":110,"./_to-absolute-index":120,"./_to-index":121,"./_to-integer":122,"./_to-length":124,"./_to-object":125,"./_to-primitive":126,"./_typed":129,"./_typed-buffer":128,"./_uid":130,"./_wks":135,"./core.get-iterator-method":136,"./es6.array.iterator":147}],128:[function(require,module,exports){
  'use strict';
  var global = require('./_global');
  var DESCRIPTORS = require('./_descriptors');
  var LIBRARY = require('./_library');
  var $typed = require('./_typed');
  var hide = require('./_hide');
  var redefineAll = require('./_redefine-all');
  var fails = require('./_fails');
  var anInstance = require('./_an-instance');
  var toInteger = require('./_to-integer');
  var toLength = require('./_to-length');
  var toIndex = require('./_to-index');
  var gOPN = require('./_object-gopn').f;
  var dP = require('./_object-dp').f;
  var arrayFill = require('./_array-fill');
  var setToStringTag = require('./_set-to-string-tag');
  var ARRAY_BUFFER = 'ArrayBuffer';
  var DATA_VIEW = 'DataView';
  var PROTOTYPE = 'prototype';
  var WRONG_LENGTH = 'Wrong length!';
  var WRONG_INDEX = 'Wrong index!';
  var $ArrayBuffer = global[ARRAY_BUFFER];
  var $DataView = global[DATA_VIEW];
  var Math = global.Math;
  var RangeError = global.RangeError;
  // eslint-disable-next-line no-shadow-restricted-names
  var Infinity = global.Infinity;
  var BaseBuffer = $ArrayBuffer;
  var abs = Math.abs;
  var pow = Math.pow;
  var floor = Math.floor;
  var log = Math.log;
  var LN2 = Math.LN2;
  var BUFFER = 'buffer';
  var BYTE_LENGTH = 'byteLength';
  var BYTE_OFFSET = 'byteOffset';
  var $BUFFER = DESCRIPTORS ? '_b' : BUFFER;
  var $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;
  var $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;
  
  // IEEE754 conversions based on https://github.com/feross/ieee754
  function packIEEE754(value, mLen, nBytes) {
    var buffer = new Array(nBytes);
    var eLen = nBytes * 8 - mLen - 1;
    var eMax = (1 << eLen) - 1;
    var eBias = eMax >> 1;
    var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;
    var i = 0;
    var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
    var e, m, c;
    value = abs(value);
    // eslint-disable-next-line no-self-compare
    if (value != value || value === Infinity) {
      // eslint-disable-next-line no-self-compare
      m = value != value ? 1 : 0;
      e = eMax;
    } else {
      e = floor(log(value) / LN2);
      if (value * (c = pow(2, -e)) < 1) {
        e--;
        c *= 2;
      }
      if (e + eBias >= 1) {
        value += rt / c;
      } else {
        value += rt * 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) * pow(2, mLen);
        e = e + eBias;
      } else {
        m = value * pow(2, eBias - 1) * pow(2, mLen);
        e = 0;
      }
    }
    for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);
    e = e << mLen | m;
    eLen += mLen;
    for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);
    buffer[--i] |= s * 128;
    return buffer;
  }
  function unpackIEEE754(buffer, mLen, nBytes) {
    var eLen = nBytes * 8 - mLen - 1;
    var eMax = (1 << eLen) - 1;
    var eBias = eMax >> 1;
    var nBits = eLen - 7;
    var i = nBytes - 1;
    var s = buffer[i--];
    var e = s & 127;
    var m;
    s >>= 7;
    for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);
    m = e & (1 << -nBits) - 1;
    e >>= -nBits;
    nBits += mLen;
    for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);
    if (e === 0) {
      e = 1 - eBias;
    } else if (e === eMax) {
      return m ? NaN : s ? -Infinity : Infinity;
    } else {
      m = m + pow(2, mLen);
      e = e - eBias;
    } return (s ? -1 : 1) * m * pow(2, e - mLen);
  }
  
  function unpackI32(bytes) {
    return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];
  }
  function packI8(it) {
    return [it & 0xff];
  }
  function packI16(it) {
    return [it & 0xff, it >> 8 & 0xff];
  }
  function packI32(it) {
    return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];
  }
  function packF64(it) {
    return packIEEE754(it, 52, 8);
  }
  function packF32(it) {
    return packIEEE754(it, 23, 4);
  }
  
  function addGetter(C, key, internal) {
    dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });
  }
  
  function get(view, bytes, index, isLittleEndian) {
    var numIndex = +index;
    var intIndex = toIndex(numIndex);
    if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
    var store = view[$BUFFER]._b;
    var start = intIndex + view[$OFFSET];
    var pack = store.slice(start, start + bytes);
    return isLittleEndian ? pack : pack.reverse();
  }
  function set(view, bytes, index, conversion, value, isLittleEndian) {
    var numIndex = +index;
    var intIndex = toIndex(numIndex);
    if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
    var store = view[$BUFFER]._b;
    var start = intIndex + view[$OFFSET];
    var pack = conversion(+value);
    for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];
  }
  
  if (!$typed.ABV) {
    $ArrayBuffer = function ArrayBuffer(length) {
      anInstance(this, $ArrayBuffer, ARRAY_BUFFER);
      var byteLength = toIndex(length);
      this._b = arrayFill.call(new Array(byteLength), 0);
      this[$LENGTH] = byteLength;
    };
  
    $DataView = function DataView(buffer, byteOffset, byteLength) {
      anInstance(this, $DataView, DATA_VIEW);
      anInstance(buffer, $ArrayBuffer, DATA_VIEW);
      var bufferLength = buffer[$LENGTH];
      var offset = toInteger(byteOffset);
      if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');
      byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);
      if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);
      this[$BUFFER] = buffer;
      this[$OFFSET] = offset;
      this[$LENGTH] = byteLength;
    };
  
    if (DESCRIPTORS) {
      addGetter($ArrayBuffer, BYTE_LENGTH, '_l');
      addGetter($DataView, BUFFER, '_b');
      addGetter($DataView, BYTE_LENGTH, '_l');
      addGetter($DataView, BYTE_OFFSET, '_o');
    }
  
    redefineAll($DataView[PROTOTYPE], {
      getInt8: function getInt8(byteOffset) {
        return get(this, 1, byteOffset)[0] << 24 >> 24;
      },
      getUint8: function getUint8(byteOffset) {
        return get(this, 1, byteOffset)[0];
      },
      getInt16: function getInt16(byteOffset /* , littleEndian */) {
        var bytes = get(this, 2, byteOffset, arguments[1]);
        return (bytes[1] << 8 | bytes[0]) << 16 >> 16;
      },
      getUint16: function getUint16(byteOffset /* , littleEndian */) {
        var bytes = get(this, 2, byteOffset, arguments[1]);
        return bytes[1] << 8 | bytes[0];
      },
      getInt32: function getInt32(byteOffset /* , littleEndian */) {
        return unpackI32(get(this, 4, byteOffset, arguments[1]));
      },
      getUint32: function getUint32(byteOffset /* , littleEndian */) {
        return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;
      },
      getFloat32: function getFloat32(byteOffset /* , littleEndian */) {
        return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);
      },
      getFloat64: function getFloat64(byteOffset /* , littleEndian */) {
        return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);
      },
      setInt8: function setInt8(byteOffset, value) {
        set(this, 1, byteOffset, packI8, value);
      },
      setUint8: function setUint8(byteOffset, value) {
        set(this, 1, byteOffset, packI8, value);
      },
      setInt16: function setInt16(byteOffset, value /* , littleEndian */) {
        set(this, 2, byteOffset, packI16, value, arguments[2]);
      },
      setUint16: function setUint16(byteOffset, value /* , littleEndian */) {
        set(this, 2, byteOffset, packI16, value, arguments[2]);
      },
      setInt32: function setInt32(byteOffset, value /* , littleEndian */) {
        set(this, 4, byteOffset, packI32, value, arguments[2]);
      },
      setUint32: function setUint32(byteOffset, value /* , littleEndian */) {
        set(this, 4, byteOffset, packI32, value, arguments[2]);
      },
      setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {
        set(this, 4, byteOffset, packF32, value, arguments[2]);
      },
      setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {
        set(this, 8, byteOffset, packF64, value, arguments[2]);
      }
    });
  } else {
    if (!fails(function () {
      $ArrayBuffer(1);
    }) || !fails(function () {
      new $ArrayBuffer(-1); // eslint-disable-line no-new
    }) || fails(function () {
      new $ArrayBuffer(); // eslint-disable-line no-new
      new $ArrayBuffer(1.5); // eslint-disable-line no-new
      new $ArrayBuffer(NaN); // eslint-disable-line no-new
      return $ArrayBuffer.name != ARRAY_BUFFER;
    })) {
      $ArrayBuffer = function ArrayBuffer(length) {
        anInstance(this, $ArrayBuffer);
        return new BaseBuffer(toIndex(length));
      };
      var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];
      for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {
        if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);
      }
      if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;
    }
    // iOS Safari 7.x bug
    var view = new $DataView(new $ArrayBuffer(2));
    var $setInt8 = $DataView[PROTOTYPE].setInt8;
    view.setInt8(0, 2147483648);
    view.setInt8(1, 2147483649);
    if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {
      setInt8: function setInt8(byteOffset, value) {
        $setInt8.call(this, byteOffset, value << 24 >> 24);
      },
      setUint8: function setUint8(byteOffset, value) {
        $setInt8.call(this, byteOffset, value << 24 >> 24);
      }
    }, true);
  }
  setToStringTag($ArrayBuffer, ARRAY_BUFFER);
  setToStringTag($DataView, DATA_VIEW);
  hide($DataView[PROTOTYPE], $typed.VIEW, true);
  exports[ARRAY_BUFFER] = $ArrayBuffer;
  exports[DATA_VIEW] = $DataView;
  
  },{"./_an-instance":22,"./_array-fill":25,"./_descriptors":43,"./_fails":49,"./_global":53,"./_hide":55,"./_library":72,"./_object-dp":82,"./_object-gopn":86,"./_redefine-all":100,"./_set-to-string-tag":107,"./_to-index":121,"./_to-integer":122,"./_to-length":124,"./_typed":129}],129:[function(require,module,exports){
  var global = require('./_global');
  var hide = require('./_hide');
  var uid = require('./_uid');
  var TYPED = uid('typed_array');
  var VIEW = uid('view');
  var ABV = !!(global.ArrayBuffer && global.DataView);
  var CONSTR = ABV;
  var i = 0;
  var l = 9;
  var Typed;
  
  var TypedArrayConstructors = (
    'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'
  ).split(',');
  
  while (i < l) {
    if (Typed = global[TypedArrayConstructors[i++]]) {
      hide(Typed.prototype, TYPED, true);
      hide(Typed.prototype, VIEW, true);
    } else CONSTR = false;
  }
  
  module.exports = {
    ABV: ABV,
    CONSTR: CONSTR,
    TYPED: TYPED,
    VIEW: VIEW
  };
  
  },{"./_global":53,"./_hide":55,"./_uid":130}],130:[function(require,module,exports){
  var id = 0;
  var px = Math.random();
  module.exports = function (key) {
    return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
  };
  
  },{}],131:[function(require,module,exports){
  var global = require('./_global');
  var navigator = global.navigator;
  
  module.exports = navigator && navigator.userAgent || '';
  
  },{"./_global":53}],132:[function(require,module,exports){
  var isObject = require('./_is-object');
  module.exports = function (it, TYPE) {
    if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
    return it;
  };
  
  },{"./_is-object":64}],133:[function(require,module,exports){
  var global = require('./_global');
  var core = require('./_core');
  var LIBRARY = require('./_library');
  var wksExt = require('./_wks-ext');
  var defineProperty = require('./_object-dp').f;
  module.exports = function (name) {
    var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
    if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
  };
  
  },{"./_core":37,"./_global":53,"./_library":72,"./_object-dp":82,"./_wks-ext":134}],134:[function(require,module,exports){
  exports.f = require('./_wks');
  
  },{"./_wks":135}],135:[function(require,module,exports){
  var store = require('./_shared')('wks');
  var uid = require('./_uid');
  var Symbol = require('./_global').Symbol;
  var USE_SYMBOL = typeof Symbol == 'function';
  
  var $exports = module.exports = function (name) {
    return store[name] || (store[name] =
      USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
  };
  
  $exports.store = store;
  
  },{"./_global":53,"./_shared":109,"./_uid":130}],136:[function(require,module,exports){
  var classof = require('./_classof');
  var ITERATOR = require('./_wks')('iterator');
  var Iterators = require('./_iterators');
  module.exports = require('./_core').getIteratorMethod = function (it) {
    if (it != undefined) return it[ITERATOR]
      || it['@@iterator']
      || Iterators[classof(it)];
  };
  
  },{"./_classof":32,"./_core":37,"./_iterators":71,"./_wks":135}],137:[function(require,module,exports){
  // 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
  var $export = require('./_export');
  
  $export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });
  
  require('./_add-to-unscopables')('copyWithin');
  
  },{"./_add-to-unscopables":20,"./_array-copy-within":24,"./_export":47}],138:[function(require,module,exports){
  'use strict';
  var $export = require('./_export');
  var $every = require('./_array-methods')(4);
  
  $export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {
    // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])
    every: function every(callbackfn /* , thisArg */) {
      return $every(this, callbackfn, arguments[1]);
    }
  });
  
  },{"./_array-methods":27,"./_export":47,"./_strict-method":111}],139:[function(require,module,exports){
  // 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
  var $export = require('./_export');
  
  $export($export.P, 'Array', { fill: require('./_array-fill') });
  
  require('./_add-to-unscopables')('fill');
  
  },{"./_add-to-unscopables":20,"./_array-fill":25,"./_export":47}],140:[function(require,module,exports){
  'use strict';
  var $export = require('./_export');
  var $filter = require('./_array-methods')(2);
  
  $export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {
    // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])
    filter: function filter(callbackfn /* , thisArg */) {
      return $filter(this, callbackfn, arguments[1]);
    }
  });
  
  },{"./_array-methods":27,"./_export":47,"./_strict-method":111}],141:[function(require,module,exports){
  'use strict';
  // 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)
  var $export = require('./_export');
  var $find = require('./_array-methods')(6);
  var KEY = 'findIndex';
  var forced = true;
  // Shouldn't skip holes
  if (KEY in []) Array(1)[KEY](function () { forced = false; });
  $export($export.P + $export.F * forced, 'Array', {
    findIndex: function findIndex(callbackfn /* , that = undefined */) {
      return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
    }
  });
  require('./_add-to-unscopables')(KEY);
  
  },{"./_add-to-unscopables":20,"./_array-methods":27,"./_export":47}],142:[function(require,module,exports){
  'use strict';
  // 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)
  var $export = require('./_export');
  var $find = require('./_array-methods')(5);
  var KEY = 'find';
  var forced = true;
  // Shouldn't skip holes
  if (KEY in []) Array(1)[KEY](function () { forced = false; });
  $export($export.P + $export.F * forced, 'Array', {
    find: function find(callbackfn /* , that = undefined */) {
      return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
    }
  });
  require('./_add-to-unscopables')(KEY);
  
  },{"./_add-to-unscopables":20,"./_array-methods":27,"./_export":47}],143:[function(require,module,exports){
  'use strict';
  var $export = require('./_export');
  var $forEach = require('./_array-methods')(0);
  var STRICT = require('./_strict-method')([].forEach, true);
  
  $export($export.P + $export.F * !STRICT, 'Array', {
    // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])
    forEach: function forEach(callbackfn /* , thisArg */) {
      return $forEach(this, callbackfn, arguments[1]);
    }
  });
  
  },{"./_array-methods":27,"./_export":47,"./_strict-method":111}],144:[function(require,module,exports){
  'use strict';
  var ctx = require('./_ctx');
  var $export = require('./_export');
  var toObject = require('./_to-object');
  var call = require('./_iter-call');
  var isArrayIter = require('./_is-array-iter');
  var toLength = require('./_to-length');
  var createProperty = require('./_create-property');
  var getIterFn = require('./core.get-iterator-method');
  
  $export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {
    // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
    from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
      var O = toObject(arrayLike);
      var C = typeof this == 'function' ? this : Array;
      var aLen = arguments.length;
      var mapfn = aLen > 1 ? arguments[1] : undefined;
      var mapping = mapfn !== undefined;
      var index = 0;
      var iterFn = getIterFn(O);
      var length, result, step, iterator;
      if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
      // if object isn't iterable or it's array with default iterator - use simple case
      if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {
        for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {
          createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);
        }
      } else {
        length = toLength(O.length);
        for (result = new C(length); length > index; index++) {
          createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
        }
      }
      result.length = index;
      return result;
    }
  });
  
  },{"./_create-property":38,"./_ctx":39,"./_export":47,"./_is-array-iter":61,"./_iter-call":66,"./_iter-detect":69,"./_to-length":124,"./_to-object":125,"./core.get-iterator-method":136}],145:[function(require,module,exports){
  'use strict';
  var $export = require('./_export');
  var $indexOf = require('./_array-includes')(false);
  var $native = [].indexOf;
  var NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;
  
  $export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {
    // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])
    indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {
      return NEGATIVE_ZERO
        // convert -0 to +0
        ? $native.apply(this, arguments) || 0
        : $indexOf(this, searchElement, arguments[1]);
    }
  });
  
  },{"./_array-includes":26,"./_export":47,"./_strict-method":111}],146:[function(require,module,exports){
  // 22.1.2.2 / 15.4.3.2 Array.isArray(arg)
  var $export = require('./_export');
  
  $export($export.S, 'Array', { isArray: require('./_is-array') });
  
  },{"./_export":47,"./_is-array":62}],147:[function(require,module,exports){
  'use strict';
  var addToUnscopables = require('./_add-to-unscopables');
  var step = require('./_iter-step');
  var Iterators = require('./_iterators');
  var toIObject = require('./_to-iobject');
  
  // 22.1.3.4 Array.prototype.entries()
  // 22.1.3.13 Array.prototype.keys()
  // 22.1.3.29 Array.prototype.values()
  // 22.1.3.30 Array.prototype[@@iterator]()
  module.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {
    this._t = toIObject(iterated); // target
    this._i = 0;                   // next index
    this._k = kind;                // kind
  // 22.1.5.2.1 %ArrayIteratorPrototype%.next()
  }, function () {
    var O = this._t;
    var kind = this._k;
    var index = this._i++;
    if (!O || index >= O.length) {
      this._t = undefined;
      return step(1);
    }
    if (kind == 'keys') return step(0, index);
    if (kind == 'values') return step(0, O[index]);
    return step(0, [index, O[index]]);
  }, 'values');
  
  // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
  Iterators.Arguments = Iterators.Array;
  
  addToUnscopables('keys');
  addToUnscopables('values');
  addToUnscopables('entries');
  
  },{"./_add-to-unscopables":20,"./_iter-define":68,"./_iter-step":70,"./_iterators":71,"./_to-iobject":123}],148:[function(require,module,exports){
  'use strict';
  // 22.1.3.13 Array.prototype.join(separator)
  var $export = require('./_export');
  var toIObject = require('./_to-iobject');
  var arrayJoin = [].join;
  
  // fallback for not array-like strings
  $export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {
    join: function join(separator) {
      return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);
    }
  });
  
  },{"./_export":47,"./_iobject":60,"./_strict-method":111,"./_to-iobject":123}],149:[function(require,module,exports){
  'use strict';
  var $export = require('./_export');
  var toIObject = require('./_to-iobject');
  var toInteger = require('./_to-integer');
  var toLength = require('./_to-length');
  var $native = [].lastIndexOf;
  var NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;
  
  $export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {
    // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])
    lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {
      // convert -0 to +0
      if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;
      var O = toIObject(this);
      var length = toLength(O.length);
      var index = length - 1;
      if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));
      if (index < 0) index = length + index;
      for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;
      return -1;
    }
  });
  
  },{"./_export":47,"./_strict-method":111,"./_to-integer":122,"./_to-iobject":123,"./_to-length":124}],150:[function(require,module,exports){
  'use strict';
  var $export = require('./_export');
  var $map = require('./_array-methods')(1);
  
  $export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {
    // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])
    map: function map(callbackfn /* , thisArg */) {
      return $map(this, callbackfn, arguments[1]);
    }
  });
  
  },{"./_array-methods":27,"./_export":47,"./_strict-method":111}],151:[function(require,module,exports){
  'use strict';
  var $export = require('./_export');
  var createProperty = require('./_create-property');
  
  // WebKit Array.of isn't generic
  $export($export.S + $export.F * require('./_fails')(function () {
    function F() { /* empty */ }
    return !(Array.of.call(F) instanceof F);
  }), 'Array', {
    // 22.1.2.3 Array.of( ...items)
    of: function of(/* ...args */) {
      var index = 0;
      var aLen = arguments.length;
      var result = new (typeof this == 'function' ? this : Array)(aLen);
      while (aLen > index) createProperty(result, index, arguments[index++]);
      result.length = aLen;
      return result;
    }
  });
  
  },{"./_create-property":38,"./_export":47,"./_fails":49}],152:[function(require,module,exports){
  'use strict';
  var $export = require('./_export');
  var $reduce = require('./_array-reduce');
  
  $export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {
    // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])
    reduceRight: function reduceRight(callbackfn /* , initialValue */) {
      return $reduce(this, callbackfn, arguments.length, arguments[1], true);
    }
  });
  
  },{"./_array-reduce":28,"./_export":47,"./_strict-method":111}],153:[function(require,module,exports){
  'use strict';
  var $export = require('./_export');
  var $reduce = require('./_array-reduce');
  
  $export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {
    // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])
    reduce: function reduce(callbackfn /* , initialValue */) {
      return $reduce(this, callbackfn, arguments.length, arguments[1], false);
    }
  });
  
  },{"./_array-reduce":28,"./_export":47,"./_strict-method":111}],154:[function(require,module,exports){
  'use strict';
  var $export = require('./_export');
  var html = require('./_html');
  var cof = require('./_cof');
  var toAbsoluteIndex = require('./_to-absolute-index');
  var toLength = require('./_to-length');
  var arraySlice = [].slice;
  
  // fallback for not array-like ES3 strings and DOM objects
  $export($export.P + $export.F * require('./_fails')(function () {
    if (html) arraySlice.call(html);
  }), 'Array', {
    slice: function slice(begin, end) {
      var len = toLength(this.length);
      var klass = cof(this);
      end = end === undefined ? len : end;
      if (klass == 'Array') return arraySlice.call(this, begin, end);
      var start = toAbsoluteIndex(begin, len);
      var upTo = toAbsoluteIndex(end, len);
      var size = toLength(upTo - start);
      var cloned = new Array(size);
      var i = 0;
      for (; i < size; i++) cloned[i] = klass == 'String'
        ? this.charAt(start + i)
        : this[start + i];
      return cloned;
    }
  });
  
  },{"./_cof":33,"./_export":47,"./_fails":49,"./_html":56,"./_to-absolute-index":120,"./_to-length":124}],155:[function(require,module,exports){
  'use strict';
  var $export = require('./_export');
  var $some = require('./_array-methods')(3);
  
  $export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {
    // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])
    some: function some(callbackfn /* , thisArg */) {
      return $some(this, callbackfn, arguments[1]);
    }
  });
  
  },{"./_array-methods":27,"./_export":47,"./_strict-method":111}],156:[function(require,module,exports){
  'use strict';
  var $export = require('./_export');
  var aFunction = require('./_a-function');
  var toObject = require('./_to-object');
  var fails = require('./_fails');
  var $sort = [].sort;
  var test = [1, 2, 3];
  
  $export($export.P + $export.F * (fails(function () {
    // IE8-
    test.sort(undefined);
  }) || !fails(function () {
    // V8 bug
    test.sort(null);
    // Old WebKit
  }) || !require('./_strict-method')($sort)), 'Array', {
    // 22.1.3.25 Array.prototype.sort(comparefn)
    sort: function sort(comparefn) {
      return comparefn === undefined
        ? $sort.call(toObject(this))
        : $sort.call(toObject(this), aFunction(comparefn));
    }
  });
  
  },{"./_a-function":18,"./_export":47,"./_fails":49,"./_strict-method":111,"./_to-object":125}],157:[function(require,module,exports){
  require('./_set-species')('Array');
  
  },{"./_set-species":106}],158:[function(require,module,exports){
  // 20.3.3.1 / 15.9.4.4 Date.now()
  var $export = require('./_export');
  
  $export($export.S, 'Date', { now: function () { return new Date().getTime(); } });
  
  },{"./_export":47}],159:[function(require,module,exports){
  // 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()
  var $export = require('./_export');
  var toISOString = require('./_date-to-iso-string');
  
  // PhantomJS / old WebKit has a broken implementations
  $export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {
    toISOString: toISOString
  });
  
  },{"./_date-to-iso-string":40,"./_export":47}],160:[function(require,module,exports){
  'use strict';
  var $export = require('./_export');
  var toObject = require('./_to-object');
  var toPrimitive = require('./_to-primitive');
  
  $export($export.P + $export.F * require('./_fails')(function () {
    return new Date(NaN).toJSON() !== null
      || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;
  }), 'Date', {
    // eslint-disable-next-line no-unused-vars
    toJSON: function toJSON(key) {
      var O = toObject(this);
      var pv = toPrimitive(O);
      return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();
    }
  });
  
  },{"./_export":47,"./_fails":49,"./_to-object":125,"./_to-primitive":126}],161:[function(require,module,exports){
  var TO_PRIMITIVE = require('./_wks')('toPrimitive');
  var proto = Date.prototype;
  
  if (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));
  
  },{"./_date-to-primitive":41,"./_hide":55,"./_wks":135}],162:[function(require,module,exports){
  var DateProto = Date.prototype;
  var INVALID_DATE = 'Invalid Date';
  var TO_STRING = 'toString';
  var $toString = DateProto[TO_STRING];
  var getTime = DateProto.getTime;
  if (new Date(NaN) + '' != INVALID_DATE) {
    require('./_redefine')(DateProto, TO_STRING, function toString() {
      var value = getTime.call(this);
      // eslint-disable-next-line no-self-compare
      return value === value ? $toString.call(this) : INVALID_DATE;
    });
  }
  
  },{"./_redefine":101}],163:[function(require,module,exports){
  // 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)
  var $export = require('./_export');
  
  $export($export.P, 'Function', { bind: require('./_bind') });
  
  },{"./_bind":31,"./_export":47}],164:[function(require,module,exports){
  'use strict';
  var isObject = require('./_is-object');
  var getPrototypeOf = require('./_object-gpo');
  var HAS_INSTANCE = require('./_wks')('hasInstance');
  var FunctionProto = Function.prototype;
  // 19.2.3.6 Function.prototype[@@hasInstance](V)
  if (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {
    if (typeof this != 'function' || !isObject(O)) return false;
    if (!isObject(this.prototype)) return O instanceof this;
    // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:
    while (O = getPrototypeOf(O)) if (this.prototype === O) return true;
    return false;
  } });
  
  },{"./_is-object":64,"./_object-dp":82,"./_object-gpo":88,"./_wks":135}],165:[function(require,module,exports){
  var dP = require('./_object-dp').f;
  var FProto = Function.prototype;
  var nameRE = /^\s*function ([^ (]*)/;
  var NAME = 'name';
  
  // 19.2.4.2 name
  NAME in FProto || require('./_descriptors') && dP(FProto, NAME, {
    configurable: true,
    get: function () {
      try {
        return ('' + this).match(nameRE)[1];
      } catch (e) {
        return '';
      }
    }
  });
  
  },{"./_descriptors":43,"./_object-dp":82}],166:[function(require,module,exports){
  'use strict';
  var strong = require('./_collection-strong');
  var validate = require('./_validate-collection');
  var MAP = 'Map';
  
  // 23.1 Map Objects
  module.exports = require('./_collection')(MAP, function (get) {
    return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
  }, {
    // 23.1.3.6 Map.prototype.get(key)
    get: function get(key) {
      var entry = strong.getEntry(validate(this, MAP), key);
      return entry && entry.v;
    },
    // 23.1.3.9 Map.prototype.set(key, value)
    set: function set(key, value) {
      return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);
    }
  }, strong, true);
  
  },{"./_collection":36,"./_collection-strong":34,"./_validate-collection":132}],167:[function(require,module,exports){
  // 20.2.2.3 Math.acosh(x)
  var $export = require('./_export');
  var log1p = require('./_math-log1p');
  var sqrt = Math.sqrt;
  var $acosh = Math.acosh;
  
  $export($export.S + $export.F * !($acosh
    // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509
    && Math.floor($acosh(Number.MAX_VALUE)) == 710
    // Tor Browser bug: Math.acosh(Infinity) -> NaN
    && $acosh(Infinity) == Infinity
  ), 'Math', {
    acosh: function acosh(x) {
      return (x = +x) < 1 ? NaN : x > 94906265.62425156
        ? Math.log(x) + Math.LN2
        : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));
    }
  });
  
  },{"./_export":47,"./_math-log1p":75}],168:[function(require,module,exports){
  // 20.2.2.5 Math.asinh(x)
  var $export = require('./_export');
  var $asinh = Math.asinh;
  
  function asinh(x) {
    return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));
  }
  
  // Tor Browser bug: Math.asinh(0) -> -0
  $export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });
  
  },{"./_export":47}],169:[function(require,module,exports){
  // 20.2.2.7 Math.atanh(x)
  var $export = require('./_export');
  var $atanh = Math.atanh;
  
  // Tor Browser bug: Math.atanh(-0) -> 0
  $export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {
    atanh: function atanh(x) {
      return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;
    }
  });
  
  },{"./_export":47}],170:[function(require,module,exports){
  // 20.2.2.9 Math.cbrt(x)
  var $export = require('./_export');
  var sign = require('./_math-sign');
  
  $export($export.S, 'Math', {
    cbrt: function cbrt(x) {
      return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);
    }
  });
  
  },{"./_export":47,"./_math-sign":76}],171:[function(require,module,exports){
  // 20.2.2.11 Math.clz32(x)
  var $export = require('./_export');
  
  $export($export.S, 'Math', {
    clz32: function clz32(x) {
      return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;
    }
  });
  
  },{"./_export":47}],172:[function(require,module,exports){
  // 20.2.2.12 Math.cosh(x)
  var $export = require('./_export');
  var exp = Math.exp;
  
  $export($export.S, 'Math', {
    cosh: function cosh(x) {
      return (exp(x = +x) + exp(-x)) / 2;
    }
  });
  
  },{"./_export":47}],173:[function(require,module,exports){
  // 20.2.2.14 Math.expm1(x)
  var $export = require('./_export');
  var $expm1 = require('./_math-expm1');
  
  $export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });
  
  },{"./_export":47,"./_math-expm1":73}],174:[function(require,module,exports){
  // 20.2.2.16 Math.fround(x)
  var $export = require('./_export');
  
  $export($export.S, 'Math', { fround: require('./_math-fround') });
  
  },{"./_export":47,"./_math-fround":74}],175:[function(require,module,exports){
  // 20.2.2.17 Math.hypot([value1[, value2[, … ]]])
  var $export = require('./_export');
  var abs = Math.abs;
  
  $export($export.S, 'Math', {
    hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars
      var sum = 0;
      var i = 0;
      var aLen = arguments.length;
      var larg = 0;
      var arg, div;
      while (i < aLen) {
        arg = abs(arguments[i++]);
        if (larg < arg) {
          div = larg / arg;
          sum = sum * div * div + 1;
          larg = arg;
        } else if (arg > 0) {
          div = arg / larg;
          sum += div * div;
        } else sum += arg;
      }
      return larg === Infinity ? Infinity : larg * Math.sqrt(sum);
    }
  });
  
  },{"./_export":47}],176:[function(require,module,exports){
  // 20.2.2.18 Math.imul(x, y)
  var $export = require('./_export');
  var $imul = Math.imul;
  
  // some WebKit versions fails with big numbers, some has wrong arity
  $export($export.S + $export.F * require('./_fails')(function () {
    return $imul(0xffffffff, 5) != -5 || $imul.length != 2;
  }), 'Math', {
    imul: function imul(x, y) {
      var UINT16 = 0xffff;
      var xn = +x;
      var yn = +y;
      var xl = UINT16 & xn;
      var yl = UINT16 & yn;
      return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);
    }
  });
  
  },{"./_export":47,"./_fails":49}],177:[function(require,module,exports){
  // 20.2.2.21 Math.log10(x)
  var $export = require('./_export');
  
  $export($export.S, 'Math', {
    log10: function log10(x) {
      return Math.log(x) * Math.LOG10E;
    }
  });
  
  },{"./_export":47}],178:[function(require,module,exports){
  // 20.2.2.20 Math.log1p(x)
  var $export = require('./_export');
  
  $export($export.S, 'Math', { log1p: require('./_math-log1p') });
  
  },{"./_export":47,"./_math-log1p":75}],179:[function(require,module,exports){
  // 20.2.2.22 Math.log2(x)
  var $export = require('./_export');
  
  $export($export.S, 'Math', {
    log2: function log2(x) {
      return Math.log(x) / Math.LN2;
    }
  });
  
  },{"./_export":47}],180:[function(require,module,exports){
  // 20.2.2.28 Math.sign(x)
  var $export = require('./_export');
  
  $export($export.S, 'Math', { sign: require('./_math-sign') });
  
  },{"./_export":47,"./_math-sign":76}],181:[function(require,module,exports){
  // 20.2.2.30 Math.sinh(x)
  var $export = require('./_export');
  var expm1 = require('./_math-expm1');
  var exp = Math.exp;
  
  // V8 near Chromium 38 has a problem with very small numbers
  $export($export.S + $export.F * require('./_fails')(function () {
    return !Math.sinh(-2e-17) != -2e-17;
  }), 'Math', {
    sinh: function sinh(x) {
      return Math.abs(x = +x) < 1
        ? (expm1(x) - expm1(-x)) / 2
        : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);
    }
  });
  
  },{"./_export":47,"./_fails":49,"./_math-expm1":73}],182:[function(require,module,exports){
  // 20.2.2.33 Math.tanh(x)
  var $export = require('./_export');
  var expm1 = require('./_math-expm1');
  var exp = Math.exp;
  
  $export($export.S, 'Math', {
    tanh: function tanh(x) {
      var a = expm1(x = +x);
      var b = expm1(-x);
      return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));
    }
  });
  
  },{"./_export":47,"./_math-expm1":73}],183:[function(require,module,exports){
  // 20.2.2.34 Math.trunc(x)
  var $export = require('./_export');
  
  $export($export.S, 'Math', {
    trunc: function trunc(it) {
      return (it > 0 ? Math.floor : Math.ceil)(it);
    }
  });
  
  },{"./_export":47}],184:[function(require,module,exports){
  'use strict';
  var global = require('./_global');
  var has = require('./_has');
  var cof = require('./_cof');
  var inheritIfRequired = require('./_inherit-if-required');
  var toPrimitive = require('./_to-primitive');
  var fails = require('./_fails');
  var gOPN = require('./_object-gopn').f;
  var gOPD = require('./_object-gopd').f;
  var dP = require('./_object-dp').f;
  var $trim = require('./_string-trim').trim;
  var NUMBER = 'Number';
  var $Number = global[NUMBER];
  var Base = $Number;
  var proto = $Number.prototype;
  // Opera ~12 has broken Object#toString
  var BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;
  var TRIM = 'trim' in String.prototype;
  
  // 7.1.3 ToNumber(argument)
  var toNumber = function (argument) {
    var it = toPrimitive(argument, false);
    if (typeof it == 'string' && it.length > 2) {
      it = TRIM ? it.trim() : $trim(it, 3);
      var first = it.charCodeAt(0);
      var third, radix, maxCode;
      if (first === 43 || first === 45) {
        third = it.charCodeAt(2);
        if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix
      } else if (first === 48) {
        switch (it.charCodeAt(1)) {
          case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i
          case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i
          default: return +it;
        }
        for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {
          code = digits.charCodeAt(i);
          // parseInt parses a string to a first unavailable symbol
          // but ToNumber should return NaN if a string contains unavailable symbols
          if (code < 48 || code > maxCode) return NaN;
        } return parseInt(digits, radix);
      }
    } return +it;
  };
  
  if (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {
    $Number = function Number(value) {
      var it = arguments.length < 1 ? 0 : value;
      var that = this;
      return that instanceof $Number
        // check on 1..constructor(foo) case
        && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)
          ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);
    };
    for (var keys = require('./_descriptors') ? gOPN(Base) : (
      // ES3:
      'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +
      // ES6 (in case, if modules with ES6 Number statics required before):
      'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +
      'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'
    ).split(','), j = 0, key; keys.length > j; j++) {
      if (has(Base, key = keys[j]) && !has($Number, key)) {
        dP($Number, key, gOPD(Base, key));
      }
    }
    $Number.prototype = proto;
    proto.constructor = $Number;
    require('./_redefine')(global, NUMBER, $Number);
  }
  
  },{"./_cof":33,"./_descriptors":43,"./_fails":49,"./_global":53,"./_has":54,"./_inherit-if-required":58,"./_object-create":81,"./_object-dp":82,"./_object-gopd":84,"./_object-gopn":86,"./_redefine":101,"./_string-trim":117,"./_to-primitive":126}],185:[function(require,module,exports){
  // 20.1.2.1 Number.EPSILON
  var $export = require('./_export');
  
  $export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });
  
  },{"./_export":47}],186:[function(require,module,exports){
  // 20.1.2.2 Number.isFinite(number)
  var $export = require('./_export');
  var _isFinite = require('./_global').isFinite;
  
  $export($export.S, 'Number', {
    isFinite: function isFinite(it) {
      return typeof it == 'number' && _isFinite(it);
    }
  });
  
  },{"./_export":47,"./_global":53}],187:[function(require,module,exports){
  // 20.1.2.3 Number.isInteger(number)
  var $export = require('./_export');
  
  $export($export.S, 'Number', { isInteger: require('./_is-integer') });
  
  },{"./_export":47,"./_is-integer":63}],188:[function(require,module,exports){
  // 20.1.2.4 Number.isNaN(number)
  var $export = require('./_export');
  
  $export($export.S, 'Number', {
    isNaN: function isNaN(number) {
      // eslint-disable-next-line no-self-compare
      return number != number;
    }
  });
  
  },{"./_export":47}],189:[function(require,module,exports){
  // 20.1.2.5 Number.isSafeInteger(number)
  var $export = require('./_export');
  var isInteger = require('./_is-integer');
  var abs = Math.abs;
  
  $export($export.S, 'Number', {
    isSafeInteger: function isSafeInteger(number) {
      return isInteger(number) && abs(number) <= 0x1fffffffffffff;
    }
  });
  
  },{"./_export":47,"./_is-integer":63}],190:[function(require,module,exports){
  // 20.1.2.6 Number.MAX_SAFE_INTEGER
  var $export = require('./_export');
  
  $export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });
  
  },{"./_export":47}],191:[function(require,module,exports){
  // 20.1.2.10 Number.MIN_SAFE_INTEGER
  var $export = require('./_export');
  
  $export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });
  
  },{"./_export":47}],192:[function(require,module,exports){
  var $export = require('./_export');
  var $parseFloat = require('./_parse-float');
  // 20.1.2.12 Number.parseFloat(string)
  $export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });
  
  },{"./_export":47,"./_parse-float":95}],193:[function(require,module,exports){
  var $export = require('./_export');
  var $parseInt = require('./_parse-int');
  // 20.1.2.13 Number.parseInt(string, radix)
  $export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });
  
  },{"./_export":47,"./_parse-int":96}],194:[function(require,module,exports){
  'use strict';
  var $export = require('./_export');
  var toInteger = require('./_to-integer');
  var aNumberValue = require('./_a-number-value');
  var repeat = require('./_string-repeat');
  var $toFixed = 1.0.toFixed;
  var floor = Math.floor;
  var data = [0, 0, 0, 0, 0, 0];
  var ERROR = 'Number.toFixed: incorrect invocation!';
  var ZERO = '0';
  
  var multiply = function (n, c) {
    var i = -1;
    var c2 = c;
    while (++i < 6) {
      c2 += n * data[i];
      data[i] = c2 % 1e7;
      c2 = floor(c2 / 1e7);
    }
  };
  var divide = function (n) {
    var i = 6;
    var c = 0;
    while (--i >= 0) {
      c += data[i];
      data[i] = floor(c / n);
      c = (c % n) * 1e7;
    }
  };
  var numToString = function () {
    var i = 6;
    var s = '';
    while (--i >= 0) {
      if (s !== '' || i === 0 || data[i] !== 0) {
        var t = String(data[i]);
        s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;
      }
    } return s;
  };
  var pow = function (x, n, acc) {
    return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);
  };
  var log = function (x) {
    var n = 0;
    var x2 = x;
    while (x2 >= 4096) {
      n += 12;
      x2 /= 4096;
    }
    while (x2 >= 2) {
      n += 1;
      x2 /= 2;
    } return n;
  };
  
  $export($export.P + $export.F * (!!$toFixed && (
    0.00008.toFixed(3) !== '0.000' ||
    0.9.toFixed(0) !== '1' ||
    1.255.toFixed(2) !== '1.25' ||
    1000000000000000128.0.toFixed(0) !== '1000000000000000128'
  ) || !require('./_fails')(function () {
    // V8 ~ Android 4.3-
    $toFixed.call({});
  })), 'Number', {
    toFixed: function toFixed(fractionDigits) {
      var x = aNumberValue(this, ERROR);
      var f = toInteger(fractionDigits);
      var s = '';
      var m = ZERO;
      var e, z, j, k;
      if (f < 0 || f > 20) throw RangeError(ERROR);
      // eslint-disable-next-line no-self-compare
      if (x != x) return 'NaN';
      if (x <= -1e21 || x >= 1e21) return String(x);
      if (x < 0) {
        s = '-';
        x = -x;
      }
      if (x > 1e-21) {
        e = log(x * pow(2, 69, 1)) - 69;
        z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);
        z *= 0x10000000000000;
        e = 52 - e;
        if (e > 0) {
          multiply(0, z);
          j = f;
          while (j >= 7) {
            multiply(1e7, 0);
            j -= 7;
          }
          multiply(pow(10, j, 1), 0);
          j = e - 1;
          while (j >= 23) {
            divide(1 << 23);
            j -= 23;
          }
          divide(1 << j);
          multiply(1, 1);
          divide(2);
          m = numToString();
        } else {
          multiply(0, z);
          multiply(1 << -e, 0);
          m = numToString() + repeat.call(ZERO, f);
        }
      }
      if (f > 0) {
        k = m.length;
        m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));
      } else {
        m = s + m;
      } return m;
    }
  });
  
  },{"./_a-number-value":19,"./_export":47,"./_fails":49,"./_string-repeat":116,"./_to-integer":122}],195:[function(require,module,exports){
  'use strict';
  var $export = require('./_export');
  var $fails = require('./_fails');
  var aNumberValue = require('./_a-number-value');
  var $toPrecision = 1.0.toPrecision;
  
  $export($export.P + $export.F * ($fails(function () {
    // IE7-
    return $toPrecision.call(1, undefined) !== '1';
  }) || !$fails(function () {
    // V8 ~ Android 4.3-
    $toPrecision.call({});
  })), 'Number', {
    toPrecision: function toPrecision(precision) {
      var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');
      return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);
    }
  });
  
  },{"./_a-number-value":19,"./_export":47,"./_fails":49}],196:[function(require,module,exports){
  // 19.1.3.1 Object.assign(target, source)
  var $export = require('./_export');
  
  $export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });
  
  },{"./_export":47,"./_object-assign":80}],197:[function(require,module,exports){
  var $export = require('./_export');
  // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
  $export($export.S, 'Object', { create: require('./_object-create') });
  
  },{"./_export":47,"./_object-create":81}],198:[function(require,module,exports){
  var $export = require('./_export');
  // 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)
  $export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });
  
  },{"./_descriptors":43,"./_export":47,"./_object-dps":83}],199:[function(require,module,exports){
  var $export = require('./_export');
  // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
  $export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });
  
  },{"./_descriptors":43,"./_export":47,"./_object-dp":82}],200:[function(require,module,exports){
  // 19.1.2.5 Object.freeze(O)
  var isObject = require('./_is-object');
  var meta = require('./_meta').onFreeze;
  
  require('./_object-sap')('freeze', function ($freeze) {
    return function freeze(it) {
      return $freeze && isObject(it) ? $freeze(meta(it)) : it;
    };
  });
  
  },{"./_is-object":64,"./_meta":77,"./_object-sap":92}],201:[function(require,module,exports){
  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
  var toIObject = require('./_to-iobject');
  var $getOwnPropertyDescriptor = require('./_object-gopd').f;
  
  require('./_object-sap')('getOwnPropertyDescriptor', function () {
    return function getOwnPropertyDescriptor(it, key) {
      return $getOwnPropertyDescriptor(toIObject(it), key);
    };
  });
  
  },{"./_object-gopd":84,"./_object-sap":92,"./_to-iobject":123}],202:[function(require,module,exports){
  // 19.1.2.7 Object.getOwnPropertyNames(O)
  require('./_object-sap')('getOwnPropertyNames', function () {
    return require('./_object-gopn-ext').f;
  });
  
  },{"./_object-gopn-ext":85,"./_object-sap":92}],203:[function(require,module,exports){
  // 19.1.2.9 Object.getPrototypeOf(O)
  var toObject = require('./_to-object');
  var $getPrototypeOf = require('./_object-gpo');
  
  require('./_object-sap')('getPrototypeOf', function () {
    return function getPrototypeOf(it) {
      return $getPrototypeOf(toObject(it));
    };
  });
  
  },{"./_object-gpo":88,"./_object-sap":92,"./_to-object":125}],204:[function(require,module,exports){
  // 19.1.2.11 Object.isExtensible(O)
  var isObject = require('./_is-object');
  
  require('./_object-sap')('isExtensible', function ($isExtensible) {
    return function isExtensible(it) {
      return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;
    };
  });
  
  },{"./_is-object":64,"./_object-sap":92}],205:[function(require,module,exports){
  // 19.1.2.12 Object.isFrozen(O)
  var isObject = require('./_is-object');
  
  require('./_object-sap')('isFrozen', function ($isFrozen) {
    return function isFrozen(it) {
      return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;
    };
  });
  
  },{"./_is-object":64,"./_object-sap":92}],206:[function(require,module,exports){
  // 19.1.2.13 Object.isSealed(O)
  var isObject = require('./_is-object');
  
  require('./_object-sap')('isSealed', function ($isSealed) {
    return function isSealed(it) {
      return isObject(it) ? $isSealed ? $isSealed(it) : false : true;
    };
  });
  
  },{"./_is-object":64,"./_object-sap":92}],207:[function(require,module,exports){
  // 19.1.3.10 Object.is(value1, value2)
  var $export = require('./_export');
  $export($export.S, 'Object', { is: require('./_same-value') });
  
  },{"./_export":47,"./_same-value":104}],208:[function(require,module,exports){
  // 19.1.2.14 Object.keys(O)
  var toObject = require('./_to-object');
  var $keys = require('./_object-keys');
  
  require('./_object-sap')('keys', function () {
    return function keys(it) {
      return $keys(toObject(it));
    };
  });
  
  },{"./_object-keys":90,"./_object-sap":92,"./_to-object":125}],209:[function(require,module,exports){
  // 19.1.2.15 Object.preventExtensions(O)
  var isObject = require('./_is-object');
  var meta = require('./_meta').onFreeze;
  
  require('./_object-sap')('preventExtensions', function ($preventExtensions) {
    return function preventExtensions(it) {
      return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;
    };
  });
  
  },{"./_is-object":64,"./_meta":77,"./_object-sap":92}],210:[function(require,module,exports){
  // 19.1.2.17 Object.seal(O)
  var isObject = require('./_is-object');
  var meta = require('./_meta').onFreeze;
  
  require('./_object-sap')('seal', function ($seal) {
    return function seal(it) {
      return $seal && isObject(it) ? $seal(meta(it)) : it;
    };
  });
  
  },{"./_is-object":64,"./_meta":77,"./_object-sap":92}],211:[function(require,module,exports){
  // 19.1.3.19 Object.setPrototypeOf(O, proto)
  var $export = require('./_export');
  $export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });
  
  },{"./_export":47,"./_set-proto":105}],212:[function(require,module,exports){
  'use strict';
  // 19.1.3.6 Object.prototype.toString()
  var classof = require('./_classof');
  var test = {};
  test[require('./_wks')('toStringTag')] = 'z';
  if (test + '' != '[object z]') {
    require('./_redefine')(Object.prototype, 'toString', function toString() {
      return '[object ' + classof(this) + ']';
    }, true);
  }
  
  },{"./_classof":32,"./_redefine":101,"./_wks":135}],213:[function(require,module,exports){
  var $export = require('./_export');
  var $parseFloat = require('./_parse-float');
  // 18.2.4 parseFloat(string)
  $export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });
  
  },{"./_export":47,"./_parse-float":95}],214:[function(require,module,exports){
  var $export = require('./_export');
  var $parseInt = require('./_parse-int');
  // 18.2.5 parseInt(string, radix)
  $export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });
  
  },{"./_export":47,"./_parse-int":96}],215:[function(require,module,exports){
  'use strict';
  var LIBRARY = require('./_library');
  var global = require('./_global');
  var ctx = require('./_ctx');
  var classof = require('./_classof');
  var $export = require('./_export');
  var isObject = require('./_is-object');
  var aFunction = require('./_a-function');
  var anInstance = require('./_an-instance');
  var forOf = require('./_for-of');
  var speciesConstructor = require('./_species-constructor');
  var task = require('./_task').set;
  var microtask = require('./_microtask')();
  var newPromiseCapabilityModule = require('./_new-promise-capability');
  var perform = require('./_perform');
  var userAgent = require('./_user-agent');
  var promiseResolve = require('./_promise-resolve');
  var PROMISE = 'Promise';
  var TypeError = global.TypeError;
  var process = global.process;
  var versions = process && process.versions;
  var v8 = versions && versions.v8 || '';
  var $Promise = global[PROMISE];
  var isNode = classof(process) == 'process';
  var empty = function () { /* empty */ };
  var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;
  var newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;
  
  var USE_NATIVE = !!function () {
    try {
      // correct subclassing with @@species support
      var promise = $Promise.resolve(1);
      var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {
        exec(empty, empty);
      };
      // unhandled rejections tracking support, NodeJS Promise without it fails @@species test
      return (isNode || typeof PromiseRejectionEvent == 'function')
        && promise.then(empty) instanceof FakePromise
        // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
        // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
        // we can't detect it synchronously, so just check versions
        && v8.indexOf('6.6') !== 0
        && userAgent.indexOf('Chrome/66') === -1;
    } catch (e) { /* empty */ }
  }();
  
  // helpers
  var isThenable = function (it) {
    var then;
    return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
  };
  var notify = function (promise, isReject) {
    if (promise._n) return;
    promise._n = true;
    var chain = promise._c;
    microtask(function () {
      var value = promise._v;
      var ok = promise._s == 1;
      var i = 0;
      var run = function (reaction) {
        var handler = ok ? reaction.ok : reaction.fail;
        var resolve = reaction.resolve;
        var reject = reaction.reject;
        var domain = reaction.domain;
        var result, then, exited;
        try {
          if (handler) {
            if (!ok) {
              if (promise._h == 2) onHandleUnhandled(promise);
              promise._h = 1;
            }
            if (handler === true) result = value;
            else {
              if (domain) domain.enter();
              result = handler(value); // may throw
              if (domain) {
                domain.exit();
                exited = true;
              }
            }
            if (result === reaction.promise) {
              reject(TypeError('Promise-chain cycle'));
            } else if (then = isThenable(result)) {
              then.call(result, resolve, reject);
            } else resolve(result);
          } else reject(value);
        } catch (e) {
          if (domain && !exited) domain.exit();
          reject(e);
        }
      };
      while (chain.length > i) run(chain[i++]); // variable length - can't use forEach
      promise._c = [];
      promise._n = false;
      if (isReject && !promise._h) onUnhandled(promise);
    });
  };
  var onUnhandled = function (promise) {
    task.call(global, function () {
      var value = promise._v;
      var unhandled = isUnhandled(promise);
      var result, handler, console;
      if (unhandled) {
        result = perform(function () {
          if (isNode) {
            process.emit('unhandledRejection', value, promise);
          } else if (handler = global.onunhandledrejection) {
            handler({ promise: promise, reason: value });
          } else if ((console = global.console) && console.error) {
            console.error('Unhandled promise rejection', value);
          }
        });
        // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
        promise._h = isNode || isUnhandled(promise) ? 2 : 1;
      } promise._a = undefined;
      if (unhandled && result.e) throw result.v;
    });
  };
  var isUnhandled = function (promise) {
    return promise._h !== 1 && (promise._a || promise._c).length === 0;
  };
  var onHandleUnhandled = function (promise) {
    task.call(global, function () {
      var handler;
      if (isNode) {
        process.emit('rejectionHandled', promise);
      } else if (handler = global.onrejectionhandled) {
        handler({ promise: promise, reason: promise._v });
      }
    });
  };
  var $reject = function (value) {
    var promise = this;
    if (promise._d) return;
    promise._d = true;
    promise = promise._w || promise; // unwrap
    promise._v = value;
    promise._s = 2;
    if (!promise._a) promise._a = promise._c.slice();
    notify(promise, true);
  };
  var $resolve = function (value) {
    var promise = this;
    var then;
    if (promise._d) return;
    promise._d = true;
    promise = promise._w || promise; // unwrap
    try {
      if (promise === value) throw TypeError("Promise can't be resolved itself");
      if (then = isThenable(value)) {
        microtask(function () {
          var wrapper = { _w: promise, _d: false }; // wrap
          try {
            then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));
          } catch (e) {
            $reject.call(wrapper, e);
          }
        });
      } else {
        promise._v = value;
        promise._s = 1;
        notify(promise, false);
      }
    } catch (e) {
      $reject.call({ _w: promise, _d: false }, e); // wrap
    }
  };
  
  // constructor polyfill
  if (!USE_NATIVE) {
    // 25.4.3.1 Promise(executor)
    $Promise = function Promise(executor) {
      anInstance(this, $Promise, PROMISE, '_h');
      aFunction(executor);
      Internal.call(this);
      try {
        executor(ctx($resolve, this, 1), ctx($reject, this, 1));
      } catch (err) {
        $reject.call(this, err);
      }
    };
    // eslint-disable-next-line no-unused-vars
    Internal = function Promise(executor) {
      this._c = [];             // <- awaiting reactions
      this._a = undefined;      // <- checked in isUnhandled reactions
      this._s = 0;              // <- state
      this._d = false;          // <- done
      this._v = undefined;      // <- value
      this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
      this._n = false;          // <- notify
    };
    Internal.prototype = require('./_redefine-all')($Promise.prototype, {
      // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)
      then: function then(onFulfilled, onRejected) {
        var reaction = newPromiseCapability(speciesConstructor(this, $Promise));
        reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
        reaction.fail = typeof onRejected == 'function' && onRejected;
        reaction.domain = isNode ? process.domain : undefined;
        this._c.push(reaction);
        if (this._a) this._a.push(reaction);
        if (this._s) notify(this, false);
        return reaction.promise;
      },
      // 25.4.5.1 Promise.prototype.catch(onRejected)
      'catch': function (onRejected) {
        return this.then(undefined, onRejected);
      }
    });
    OwnPromiseCapability = function () {
      var promise = new Internal();
      this.promise = promise;
      this.resolve = ctx($resolve, promise, 1);
      this.reject = ctx($reject, promise, 1);
    };
    newPromiseCapabilityModule.f = newPromiseCapability = function (C) {
      return C === $Promise || C === Wrapper
        ? new OwnPromiseCapability(C)
        : newGenericPromiseCapability(C);
    };
  }
  
  $export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });
  require('./_set-to-string-tag')($Promise, PROMISE);
  require('./_set-species')(PROMISE);
  Wrapper = require('./_core')[PROMISE];
  
  // statics
  $export($export.S + $export.F * !USE_NATIVE, PROMISE, {
    // 25.4.4.5 Promise.reject(r)
    reject: function reject(r) {
      var capability = newPromiseCapability(this);
      var $$reject = capability.reject;
      $$reject(r);
      return capability.promise;
    }
  });
  $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {
    // 25.4.4.6 Promise.resolve(x)
    resolve: function resolve(x) {
      return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);
    }
  });
  $export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {
    $Promise.all(iter)['catch'](empty);
  })), PROMISE, {
    // 25.4.4.1 Promise.all(iterable)
    all: function all(iterable) {
      var C = this;
      var capability = newPromiseCapability(C);
      var resolve = capability.resolve;
      var reject = capability.reject;
      var result = perform(function () {
        var values = [];
        var index = 0;
        var remaining = 1;
        forOf(iterable, false, function (promise) {
          var $index = index++;
          var alreadyCalled = false;
          values.push(undefined);
          remaining++;
          C.resolve(promise).then(function (value) {
            if (alreadyCalled) return;
            alreadyCalled = true;
            values[$index] = value;
            --remaining || resolve(values);
          }, reject);
        });
        --remaining || resolve(values);
      });
      if (result.e) reject(result.v);
      return capability.promise;
    },
    // 25.4.4.4 Promise.race(iterable)
    race: function race(iterable) {
      var C = this;
      var capability = newPromiseCapability(C);
      var reject = capability.reject;
      var result = perform(function () {
        forOf(iterable, false, function (promise) {
          C.resolve(promise).then(capability.resolve, reject);
        });
      });
      if (result.e) reject(result.v);
      return capability.promise;
    }
  });
  
  },{"./_a-function":18,"./_an-instance":22,"./_classof":32,"./_core":37,"./_ctx":39,"./_export":47,"./_for-of":52,"./_global":53,"./_is-object":64,"./_iter-detect":69,"./_library":72,"./_microtask":78,"./_new-promise-capability":79,"./_perform":97,"./_promise-resolve":98,"./_redefine-all":100,"./_set-species":106,"./_set-to-string-tag":107,"./_species-constructor":110,"./_task":119,"./_user-agent":131,"./_wks":135}],216:[function(require,module,exports){
  // 26.1.1 Reflect.apply(target, thisArgument, argumentsList)
  var $export = require('./_export');
  var aFunction = require('./_a-function');
  var anObject = require('./_an-object');
  var rApply = (require('./_global').Reflect || {}).apply;
  var fApply = Function.apply;
  // MS Edge argumentsList argument is optional
  $export($export.S + $export.F * !require('./_fails')(function () {
    rApply(function () { /* empty */ });
  }), 'Reflect', {
    apply: function apply(target, thisArgument, argumentsList) {
      var T = aFunction(target);
      var L = anObject(argumentsList);
      return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);
    }
  });
  
  },{"./_a-function":18,"./_an-object":23,"./_export":47,"./_fails":49,"./_global":53}],217:[function(require,module,exports){
  // 26.1.2 Reflect.construct(target, argumentsList [, newTarget])
  var $export = require('./_export');
  var create = require('./_object-create');
  var aFunction = require('./_a-function');
  var anObject = require('./_an-object');
  var isObject = require('./_is-object');
  var fails = require('./_fails');
  var bind = require('./_bind');
  var rConstruct = (require('./_global').Reflect || {}).construct;
  
  // MS Edge supports only 2 arguments and argumentsList argument is optional
  // FF Nightly sets third argument as `new.target`, but does not create `this` from it
  var NEW_TARGET_BUG = fails(function () {
    function F() { /* empty */ }
    return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);
  });
  var ARGS_BUG = !fails(function () {
    rConstruct(function () { /* empty */ });
  });
  
  $export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {
    construct: function construct(Target, args /* , newTarget */) {
      aFunction(Target);
      anObject(args);
      var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);
      if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);
      if (Target == newTarget) {
        // w/o altered newTarget, optimization for 0-4 arguments
        switch (args.length) {
          case 0: return new Target();
          case 1: return new Target(args[0]);
          case 2: return new Target(args[0], args[1]);
          case 3: return new Target(args[0], args[1], args[2]);
          case 4: return new Target(args[0], args[1], args[2], args[3]);
        }
        // w/o altered newTarget, lot of arguments case
        var $args = [null];
        $args.push.apply($args, args);
        return new (bind.apply(Target, $args))();
      }
      // with altered newTarget, not support built-in constructors
      var proto = newTarget.prototype;
      var instance = create(isObject(proto) ? proto : Object.prototype);
      var result = Function.apply.call(Target, instance, args);
      return isObject(result) ? result : instance;
    }
  });
  
  },{"./_a-function":18,"./_an-object":23,"./_bind":31,"./_export":47,"./_fails":49,"./_global":53,"./_is-object":64,"./_object-create":81}],218:[function(require,module,exports){
  // 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)
  var dP = require('./_object-dp');
  var $export = require('./_export');
  var anObject = require('./_an-object');
  var toPrimitive = require('./_to-primitive');
  
  // MS Edge has broken Reflect.defineProperty - throwing instead of returning false
  $export($export.S + $export.F * require('./_fails')(function () {
    // eslint-disable-next-line no-undef
    Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });
  }), 'Reflect', {
    defineProperty: function defineProperty(target, propertyKey, attributes) {
      anObject(target);
      propertyKey = toPrimitive(propertyKey, true);
      anObject(attributes);
      try {
        dP.f(target, propertyKey, attributes);
        return true;
      } catch (e) {
        return false;
      }
    }
  });
  
  },{"./_an-object":23,"./_export":47,"./_fails":49,"./_object-dp":82,"./_to-primitive":126}],219:[function(require,module,exports){
  // 26.1.4 Reflect.deleteProperty(target, propertyKey)
  var $export = require('./_export');
  var gOPD = require('./_object-gopd').f;
  var anObject = require('./_an-object');
  
  $export($export.S, 'Reflect', {
    deleteProperty: function deleteProperty(target, propertyKey) {
      var desc = gOPD(anObject(target), propertyKey);
      return desc && !desc.configurable ? false : delete target[propertyKey];
    }
  });
  
  },{"./_an-object":23,"./_export":47,"./_object-gopd":84}],220:[function(require,module,exports){
  'use strict';
  // 26.1.5 Reflect.enumerate(target)
  var $export = require('./_export');
  var anObject = require('./_an-object');
  var Enumerate = function (iterated) {
    this._t = anObject(iterated); // target
    this._i = 0;                  // next index
    var keys = this._k = [];      // keys
    var key;
    for (key in iterated) keys.push(key);
  };
  require('./_iter-create')(Enumerate, 'Object', function () {
    var that = this;
    var keys = that._k;
    var key;
    do {
      if (that._i >= keys.length) return { value: undefined, done: true };
    } while (!((key = keys[that._i++]) in that._t));
    return { value: key, done: false };
  });
  
  $export($export.S, 'Reflect', {
    enumerate: function enumerate(target) {
      return new Enumerate(target);
    }
  });
  
  },{"./_an-object":23,"./_export":47,"./_iter-create":67}],221:[function(require,module,exports){
  // 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)
  var gOPD = require('./_object-gopd');
  var $export = require('./_export');
  var anObject = require('./_an-object');
  
  $export($export.S, 'Reflect', {
    getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {
      return gOPD.f(anObject(target), propertyKey);
    }
  });
  
  },{"./_an-object":23,"./_export":47,"./_object-gopd":84}],222:[function(require,module,exports){
  // 26.1.8 Reflect.getPrototypeOf(target)
  var $export = require('./_export');
  var getProto = require('./_object-gpo');
  var anObject = require('./_an-object');
  
  $export($export.S, 'Reflect', {
    getPrototypeOf: function getPrototypeOf(target) {
      return getProto(anObject(target));
    }
  });
  
  },{"./_an-object":23,"./_export":47,"./_object-gpo":88}],223:[function(require,module,exports){
  // 26.1.6 Reflect.get(target, propertyKey [, receiver])
  var gOPD = require('./_object-gopd');
  var getPrototypeOf = require('./_object-gpo');
  var has = require('./_has');
  var $export = require('./_export');
  var isObject = require('./_is-object');
  var anObject = require('./_an-object');
  
  function get(target, propertyKey /* , receiver */) {
    var receiver = arguments.length < 3 ? target : arguments[2];
    var desc, proto;
    if (anObject(target) === receiver) return target[propertyKey];
    if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')
      ? desc.value
      : desc.get !== undefined
        ? desc.get.call(receiver)
        : undefined;
    if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);
  }
  
  $export($export.S, 'Reflect', { get: get });
  
  },{"./_an-object":23,"./_export":47,"./_has":54,"./_is-object":64,"./_object-gopd":84,"./_object-gpo":88}],224:[function(require,module,exports){
  // 26.1.9 Reflect.has(target, propertyKey)
  var $export = require('./_export');
  
  $export($export.S, 'Reflect', {
    has: function has(target, propertyKey) {
      return propertyKey in target;
    }
  });
  
  },{"./_export":47}],225:[function(require,module,exports){
  // 26.1.10 Reflect.isExtensible(target)
  var $export = require('./_export');
  var anObject = require('./_an-object');
  var $isExtensible = Object.isExtensible;
  
  $export($export.S, 'Reflect', {
    isExtensible: function isExtensible(target) {
      anObject(target);
      return $isExtensible ? $isExtensible(target) : true;
    }
  });
  
  },{"./_an-object":23,"./_export":47}],226:[function(require,module,exports){
  // 26.1.11 Reflect.ownKeys(target)
  var $export = require('./_export');
  
  $export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });
  
  },{"./_export":47,"./_own-keys":94}],227:[function(require,module,exports){
  // 26.1.12 Reflect.preventExtensions(target)
  var $export = require('./_export');
  var anObject = require('./_an-object');
  var $preventExtensions = Object.preventExtensions;
  
  $export($export.S, 'Reflect', {
    preventExtensions: function preventExtensions(target) {
      anObject(target);
      try {
        if ($preventExtensions) $preventExtensions(target);
        return true;
      } catch (e) {
        return false;
      }
    }
  });
  
  },{"./_an-object":23,"./_export":47}],228:[function(require,module,exports){
  // 26.1.14 Reflect.setPrototypeOf(target, proto)
  var $export = require('./_export');
  var setProto = require('./_set-proto');
  
  if (setProto) $export($export.S, 'Reflect', {
    setPrototypeOf: function setPrototypeOf(target, proto) {
      setProto.check(target, proto);
      try {
        setProto.set(target, proto);
        return true;
      } catch (e) {
        return false;
      }
    }
  });
  
  },{"./_export":47,"./_set-proto":105}],229:[function(require,module,exports){
  // 26.1.13 Reflect.set(target, propertyKey, V [, receiver])
  var dP = require('./_object-dp');
  var gOPD = require('./_object-gopd');
  var getPrototypeOf = require('./_object-gpo');
  var has = require('./_has');
  var $export = require('./_export');
  var createDesc = require('./_property-desc');
  var anObject = require('./_an-object');
  var isObject = require('./_is-object');
  
  function set(target, propertyKey, V /* , receiver */) {
    var receiver = arguments.length < 4 ? target : arguments[3];
    var ownDesc = gOPD.f(anObject(target), propertyKey);
    var existingDescriptor, proto;
    if (!ownDesc) {
      if (isObject(proto = getPrototypeOf(target))) {
        return set(proto, propertyKey, V, receiver);
      }
      ownDesc = createDesc(0);
    }
    if (has(ownDesc, 'value')) {
      if (ownDesc.writable === false || !isObject(receiver)) return false;
      if (existingDescriptor = gOPD.f(receiver, propertyKey)) {
        if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;
        existingDescriptor.value = V;
        dP.f(receiver, propertyKey, existingDescriptor);
      } else dP.f(receiver, propertyKey, createDesc(0, V));
      return true;
    }
    return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);
  }
  
  $export($export.S, 'Reflect', { set: set });
  
  },{"./_an-object":23,"./_export":47,"./_has":54,"./_is-object":64,"./_object-dp":82,"./_object-gopd":84,"./_object-gpo":88,"./_property-desc":99}],230:[function(require,module,exports){
  var global = require('./_global');
  var inheritIfRequired = require('./_inherit-if-required');
  var dP = require('./_object-dp').f;
  var gOPN = require('./_object-gopn').f;
  var isRegExp = require('./_is-regexp');
  var $flags = require('./_flags');
  var $RegExp = global.RegExp;
  var Base = $RegExp;
  var proto = $RegExp.prototype;
  var re1 = /a/g;
  var re2 = /a/g;
  // "new" creates a new object, old webkit buggy here
  var CORRECT_NEW = new $RegExp(re1) !== re1;
  
  if (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {
    re2[require('./_wks')('match')] = false;
    // RegExp constructor can alter flags and IsRegExp works correct with @@match
    return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';
  }))) {
    $RegExp = function RegExp(p, f) {
      var tiRE = this instanceof $RegExp;
      var piRE = isRegExp(p);
      var fiU = f === undefined;
      return !tiRE && piRE && p.constructor === $RegExp && fiU ? p
        : inheritIfRequired(CORRECT_NEW
          ? new Base(piRE && !fiU ? p.source : p, f)
          : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)
        , tiRE ? this : proto, $RegExp);
    };
    var proxy = function (key) {
      key in $RegExp || dP($RegExp, key, {
        configurable: true,
        get: function () { return Base[key]; },
        set: function (it) { Base[key] = it; }
      });
    };
    for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);
    proto.constructor = $RegExp;
    $RegExp.prototype = proto;
    require('./_redefine')(global, 'RegExp', $RegExp);
  }
  
  require('./_set-species')('RegExp');
  
  },{"./_descriptors":43,"./_fails":49,"./_flags":51,"./_global":53,"./_inherit-if-required":58,"./_is-regexp":65,"./_object-dp":82,"./_object-gopn":86,"./_redefine":101,"./_set-species":106,"./_wks":135}],231:[function(require,module,exports){
  'use strict';
  var regexpExec = require('./_regexp-exec');
  require('./_export')({
    target: 'RegExp',
    proto: true,
    forced: regexpExec !== /./.exec
  }, {
    exec: regexpExec
  });
  
  },{"./_export":47,"./_regexp-exec":103}],232:[function(require,module,exports){
  // 21.2.5.3 get RegExp.prototype.flags()
  if (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {
    configurable: true,
    get: require('./_flags')
  });
  
  },{"./_descriptors":43,"./_flags":51,"./_object-dp":82}],233:[function(require,module,exports){
  'use strict';
  
  var anObject = require('./_an-object');
  var toLength = require('./_to-length');
  var advanceStringIndex = require('./_advance-string-index');
  var regExpExec = require('./_regexp-exec-abstract');
  
  // @@match logic
  require('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {
    return [
      // `String.prototype.match` method
      // https://tc39.github.io/ecma262/#sec-string.prototype.match
      function match(regexp) {
        var O = defined(this);
        var fn = regexp == undefined ? undefined : regexp[MATCH];
        return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));
      },
      // `RegExp.prototype[@@match]` method
      // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match
      function (regexp) {
        var res = maybeCallNative($match, regexp, this);
        if (res.done) return res.value;
        var rx = anObject(regexp);
        var S = String(this);
        if (!rx.global) return regExpExec(rx, S);
        var fullUnicode = rx.unicode;
        rx.lastIndex = 0;
        var A = [];
        var n = 0;
        var result;
        while ((result = regExpExec(rx, S)) !== null) {
          var matchStr = String(result[0]);
          A[n] = matchStr;
          if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
          n++;
        }
        return n === 0 ? null : A;
      }
    ];
  });
  
  },{"./_advance-string-index":21,"./_an-object":23,"./_fix-re-wks":50,"./_regexp-exec-abstract":102,"./_to-length":124}],234:[function(require,module,exports){
  'use strict';
  
  var anObject = require('./_an-object');
  var toObject = require('./_to-object');
  var toLength = require('./_to-length');
  var toInteger = require('./_to-integer');
  var advanceStringIndex = require('./_advance-string-index');
  var regExpExec = require('./_regexp-exec-abstract');
  var max = Math.max;
  var min = Math.min;
  var floor = Math.floor;
  var SUBSTITUTION_SYMBOLS = /\$([$&`']|\d\d?|<[^>]*>)/g;
  var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&`']|\d\d?)/g;
  
  var maybeToString = function (it) {
    return it === undefined ? it : String(it);
  };
  
  // @@replace logic
  require('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {
    return [
      // `String.prototype.replace` method
      // https://tc39.github.io/ecma262/#sec-string.prototype.replace
      function replace(searchValue, replaceValue) {
        var O = defined(this);
        var fn = searchValue == undefined ? undefined : searchValue[REPLACE];
        return fn !== undefined
          ? fn.call(searchValue, O, replaceValue)
          : $replace.call(String(O), searchValue, replaceValue);
      },
      // `RegExp.prototype[@@replace]` method
      // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace
      function (regexp, replaceValue) {
        var res = maybeCallNative($replace, regexp, this, replaceValue);
        if (res.done) return res.value;
  
        var rx = anObject(regexp);
        var S = String(this);
        var functionalReplace = typeof replaceValue === 'function';
        if (!functionalReplace) replaceValue = String(replaceValue);
        var global = rx.global;
        if (global) {
          var fullUnicode = rx.unicode;
          rx.lastIndex = 0;
        }
        var results = [];
        while (true) {
          var result = regExpExec(rx, S);
          if (result === null) break;
          results.push(result);
          if (!global) break;
          var matchStr = String(result[0]);
          if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
        }
        var accumulatedResult = '';
        var nextSourcePosition = 0;
        for (var i = 0; i < results.length; i++) {
          result = results[i];
          var matched = String(result[0]);
          var position = max(min(toInteger(result.index), S.length), 0);
          var captures = [];
          // NOTE: This is equivalent to
          //   captures = result.slice(1).map(maybeToString)
          // but for some reason `nativeSlice.call(result, 1, result.length)` (called in
          // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
          // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
          for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));
          var namedCaptures = result.groups;
          if (functionalReplace) {
            var replacerArgs = [matched].concat(captures, position, S);
            if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);
            var replacement = String(replaceValue.apply(undefined, replacerArgs));
          } else {
            replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
          }
          if (position >= nextSourcePosition) {
            accumulatedResult += S.slice(nextSourcePosition, position) + replacement;
            nextSourcePosition = position + matched.length;
          }
        }
        return accumulatedResult + S.slice(nextSourcePosition);
      }
    ];
  
      // https://tc39.github.io/ecma262/#sec-getsubstitution
    function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {
      var tailPos = position + matched.length;
      var m = captures.length;
      var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
      if (namedCaptures !== undefined) {
        namedCaptures = toObject(namedCaptures);
        symbols = SUBSTITUTION_SYMBOLS;
      }
      return $replace.call(replacement, symbols, function (match, ch) {
        var capture;
        switch (ch.charAt(0)) {
          case '$': return '$';
          case '&': return matched;
          case '`': return str.slice(0, position);
          case "'": return str.slice(tailPos);
          case '<':
            capture = namedCaptures[ch.slice(1, -1)];
            break;
          default: // \d\d?
            var n = +ch;
            if (n === 0) return ch;
            if (n > m) {
              var f = floor(n / 10);
              if (f === 0) return ch;
              if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);
              return ch;
            }
            capture = captures[n - 1];
        }
        return capture === undefined ? '' : capture;
      });
    }
  });
  
  },{"./_advance-string-index":21,"./_an-object":23,"./_fix-re-wks":50,"./_regexp-exec-abstract":102,"./_to-integer":122,"./_to-length":124,"./_to-object":125}],235:[function(require,module,exports){
  'use strict';
  
  var anObject = require('./_an-object');
  var sameValue = require('./_same-value');
  var regExpExec = require('./_regexp-exec-abstract');
  
  // @@search logic
  require('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {
    return [
      // `String.prototype.search` method
      // https://tc39.github.io/ecma262/#sec-string.prototype.search
      function search(regexp) {
        var O = defined(this);
        var fn = regexp == undefined ? undefined : regexp[SEARCH];
        return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));
      },
      // `RegExp.prototype[@@search]` method
      // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search
      function (regexp) {
        var res = maybeCallNative($search, regexp, this);
        if (res.done) return res.value;
        var rx = anObject(regexp);
        var S = String(this);
        var previousLastIndex = rx.lastIndex;
        if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;
        var result = regExpExec(rx, S);
        if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;
        return result === null ? -1 : result.index;
      }
    ];
  });
  
  },{"./_an-object":23,"./_fix-re-wks":50,"./_regexp-exec-abstract":102,"./_same-value":104}],236:[function(require,module,exports){
  'use strict';
  
  var isRegExp = require('./_is-regexp');
  var anObject = require('./_an-object');
  var speciesConstructor = require('./_species-constructor');
  var advanceStringIndex = require('./_advance-string-index');
  var toLength = require('./_to-length');
  var callRegExpExec = require('./_regexp-exec-abstract');
  var regexpExec = require('./_regexp-exec');
  var $min = Math.min;
  var $push = [].push;
  var $SPLIT = 'split';
  var LENGTH = 'length';
  var LAST_INDEX = 'lastIndex';
  
  // eslint-disable-next-line no-empty
  var SUPPORTS_Y = !!(function () { try { return new RegExp('x', 'y'); } catch (e) {} })();
  
  // @@split logic
  require('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {
    var internalSplit;
    if (
      'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||
      'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||
      'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||
      '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||
      '.'[$SPLIT](/()()/)[LENGTH] > 1 ||
      ''[$SPLIT](/.?/)[LENGTH]
    ) {
      // based on es5-shim implementation, need to rework it
      internalSplit = function (separator, limit) {
        var string = String(this);
        if (separator === undefined && limit === 0) return [];
        // If `separator` is not a regex, use native split
        if (!isRegExp(separator)) return $split.call(string, separator, limit);
        var output = [];
        var flags = (separator.ignoreCase ? 'i' : '') +
                    (separator.multiline ? 'm' : '') +
                    (separator.unicode ? 'u' : '') +
                    (separator.sticky ? 'y' : '');
        var lastLastIndex = 0;
        var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;
        // Make `global` and avoid `lastIndex` issues by working with a copy
        var separatorCopy = new RegExp(separator.source, flags + 'g');
        var match, lastIndex, lastLength;
        while (match = regexpExec.call(separatorCopy, string)) {
          lastIndex = separatorCopy[LAST_INDEX];
          if (lastIndex > lastLastIndex) {
            output.push(string.slice(lastLastIndex, match.index));
            if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));
            lastLength = match[0][LENGTH];
            lastLastIndex = lastIndex;
            if (output[LENGTH] >= splitLimit) break;
          }
          if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop
        }
        if (lastLastIndex === string[LENGTH]) {
          if (lastLength || !separatorCopy.test('')) output.push('');
        } else output.push(string.slice(lastLastIndex));
        return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;
      };
    // Chakra, V8
    } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {
      internalSplit = function (separator, limit) {
        return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);
      };
    } else {
      internalSplit = $split;
    }
  
    return [
      // `String.prototype.split` method
      // https://tc39.github.io/ecma262/#sec-string.prototype.split
      function split(separator, limit) {
        var O = defined(this);
        var splitter = separator == undefined ? undefined : separator[SPLIT];
        return splitter !== undefined
          ? splitter.call(separator, O, limit)
          : internalSplit.call(String(O), separator, limit);
      },
      // `RegExp.prototype[@@split]` method
      // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split
      //
      // NOTE: This cannot be properly polyfilled in engines that don't support
      // the 'y' flag.
      function (regexp, limit) {
        var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);
        if (res.done) return res.value;
  
        var rx = anObject(regexp);
        var S = String(this);
        var C = speciesConstructor(rx, RegExp);
  
        var unicodeMatching = rx.unicode;
        var flags = (rx.ignoreCase ? 'i' : '') +
                      (rx.multiline ? 'm' : '') +
                      (rx.unicode ? 'u' : '') +
                      (SUPPORTS_Y ? 'y' : 'g');
  
        // ^(? + rx + ) is needed, in combination with some S slicing, to
        // simulate the 'y' flag.
        var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);
        var lim = limit === undefined ? 0xffffffff : limit >>> 0;
        if (lim === 0) return [];
        if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];
        var p = 0;
        var q = 0;
        var A = [];
        while (q < S.length) {
          splitter.lastIndex = SUPPORTS_Y ? q : 0;
          var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));
          var e;
          if (
            z === null ||
            (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p
          ) {
            q = advanceStringIndex(S, q, unicodeMatching);
          } else {
            A.push(S.slice(p, q));
            if (A.length === lim) return A;
            for (var i = 1; i <= z.length - 1; i++) {
              A.push(z[i]);
              if (A.length === lim) return A;
            }
            q = p = e;
          }
        }
        A.push(S.slice(p));
        return A;
      }
    ];
  });
  
  },{"./_advance-string-index":21,"./_an-object":23,"./_fix-re-wks":50,"./_is-regexp":65,"./_regexp-exec":103,"./_regexp-exec-abstract":102,"./_species-constructor":110,"./_to-length":124}],237:[function(require,module,exports){
  'use strict';
  require('./es6.regexp.flags');
  var anObject = require('./_an-object');
  var $flags = require('./_flags');
  var DESCRIPTORS = require('./_descriptors');
  var TO_STRING = 'toString';
  var $toString = /./[TO_STRING];
  
  var define = function (fn) {
    require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);
  };
  
  // 21.2.5.14 RegExp.prototype.toString()
  if (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {
    define(function toString() {
      var R = anObject(this);
      return '/'.concat(R.source, '/',
        'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);
    });
  // FF44- RegExp#toString has a wrong name
  } else if ($toString.name != TO_STRING) {
    define(function toString() {
      return $toString.call(this);
    });
  }
  
  },{"./_an-object":23,"./_descriptors":43,"./_fails":49,"./_flags":51,"./_redefine":101,"./es6.regexp.flags":232}],238:[function(require,module,exports){
  'use strict';
  var strong = require('./_collection-strong');
  var validate = require('./_validate-collection');
  var SET = 'Set';
  
  // 23.2 Set Objects
  module.exports = require('./_collection')(SET, function (get) {
    return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
  }, {
    // 23.2.3.1 Set.prototype.add(value)
    add: function add(value) {
      return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);
    }
  }, strong);
  
  },{"./_collection":36,"./_collection-strong":34,"./_validate-collection":132}],239:[function(require,module,exports){
  'use strict';
  // B.2.3.2 String.prototype.anchor(name)
  require('./_string-html')('anchor', function (createHTML) {
    return function anchor(name) {
      return createHTML(this, 'a', 'name', name);
    };
  });
  
  },{"./_string-html":114}],240:[function(require,module,exports){
  'use strict';
  // B.2.3.3 String.prototype.big()
  require('./_string-html')('big', function (createHTML) {
    return function big() {
      return createHTML(this, 'big', '', '');
    };
  });
  
  },{"./_string-html":114}],241:[function(require,module,exports){
  'use strict';
  // B.2.3.4 String.prototype.blink()
  require('./_string-html')('blink', function (createHTML) {
    return function blink() {
      return createHTML(this, 'blink', '', '');
    };
  });
  
  },{"./_string-html":114}],242:[function(require,module,exports){
  'use strict';
  // B.2.3.5 String.prototype.bold()
  require('./_string-html')('bold', function (createHTML) {
    return function bold() {
      return createHTML(this, 'b', '', '');
    };
  });
  
  },{"./_string-html":114}],243:[function(require,module,exports){
  'use strict';
  var $export = require('./_export');
  var $at = require('./_string-at')(false);
  $export($export.P, 'String', {
    // 21.1.3.3 String.prototype.codePointAt(pos)
    codePointAt: function codePointAt(pos) {
      return $at(this, pos);
    }
  });
  
  },{"./_export":47,"./_string-at":112}],244:[function(require,module,exports){
  // 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])
  'use strict';
  var $export = require('./_export');
  var toLength = require('./_to-length');
  var context = require('./_string-context');
  var ENDS_WITH = 'endsWith';
  var $endsWith = ''[ENDS_WITH];
  
  $export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {
    endsWith: function endsWith(searchString /* , endPosition = @length */) {
      var that = context(this, searchString, ENDS_WITH);
      var endPosition = arguments.length > 1 ? arguments[1] : undefined;
      var len = toLength(that.length);
      var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);
      var search = String(searchString);
      return $endsWith
        ? $endsWith.call(that, search, end)
        : that.slice(end - search.length, end) === search;
    }
  });
  
  },{"./_export":47,"./_fails-is-regexp":48,"./_string-context":113,"./_to-length":124}],245:[function(require,module,exports){
  'use strict';
  // B.2.3.6 String.prototype.fixed()
  require('./_string-html')('fixed', function (createHTML) {
    return function fixed() {
      return createHTML(this, 'tt', '', '');
    };
  });
  
  },{"./_string-html":114}],246:[function(require,module,exports){
  'use strict';
  // B.2.3.7 String.prototype.fontcolor(color)
  require('./_string-html')('fontcolor', function (createHTML) {
    return function fontcolor(color) {
      return createHTML(this, 'font', 'color', color);
    };
  });
  
  },{"./_string-html":114}],247:[function(require,module,exports){
  'use strict';
  // B.2.3.8 String.prototype.fontsize(size)
  require('./_string-html')('fontsize', function (createHTML) {
    return function fontsize(size) {
      return createHTML(this, 'font', 'size', size);
    };
  });
  
  },{"./_string-html":114}],248:[function(require,module,exports){
  var $export = require('./_export');
  var toAbsoluteIndex = require('./_to-absolute-index');
  var fromCharCode = String.fromCharCode;
  var $fromCodePoint = String.fromCodePoint;
  
  // length should be 1, old FF problem
  $export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {
    // 21.1.2.2 String.fromCodePoint(...codePoints)
    fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars
      var res = [];
      var aLen = arguments.length;
      var i = 0;
      var code;
      while (aLen > i) {
        code = +arguments[i++];
        if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');
        res.push(code < 0x10000
          ? fromCharCode(code)
          : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)
        );
      } return res.join('');
    }
  });
  
  },{"./_export":47,"./_to-absolute-index":120}],249:[function(require,module,exports){
  // 21.1.3.7 String.prototype.includes(searchString, position = 0)
  'use strict';
  var $export = require('./_export');
  var context = require('./_string-context');
  var INCLUDES = 'includes';
  
  $export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {
    includes: function includes(searchString /* , position = 0 */) {
      return !!~context(this, searchString, INCLUDES)
        .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);
    }
  });
  
  },{"./_export":47,"./_fails-is-regexp":48,"./_string-context":113}],250:[function(require,module,exports){
  'use strict';
  // B.2.3.9 String.prototype.italics()
  require('./_string-html')('italics', function (createHTML) {
    return function italics() {
      return createHTML(this, 'i', '', '');
    };
  });
  
  },{"./_string-html":114}],251:[function(require,module,exports){
  'use strict';
  var $at = require('./_string-at')(true);
  
  // 21.1.3.27 String.prototype[@@iterator]()
  require('./_iter-define')(String, 'String', function (iterated) {
    this._t = String(iterated); // target
    this._i = 0;                // next index
  // 21.1.5.2.1 %StringIteratorPrototype%.next()
  }, function () {
    var O = this._t;
    var index = this._i;
    var point;
    if (index >= O.length) return { value: undefined, done: true };
    point = $at(O, index);
    this._i += point.length;
    return { value: point, done: false };
  });
  
  },{"./_iter-define":68,"./_string-at":112}],252:[function(require,module,exports){
  'use strict';
  // B.2.3.10 String.prototype.link(url)
  require('./_string-html')('link', function (createHTML) {
    return function link(url) {
      return createHTML(this, 'a', 'href', url);
    };
  });
  
  },{"./_string-html":114}],253:[function(require,module,exports){
  var $export = require('./_export');
  var toIObject = require('./_to-iobject');
  var toLength = require('./_to-length');
  
  $export($export.S, 'String', {
    // 21.1.2.4 String.raw(callSite, ...substitutions)
    raw: function raw(callSite) {
      var tpl = toIObject(callSite.raw);
      var len = toLength(tpl.length);
      var aLen = arguments.length;
      var res = [];
      var i = 0;
      while (len > i) {
        res.push(String(tpl[i++]));
        if (i < aLen) res.push(String(arguments[i]));
      } return res.join('');
    }
  });
  
  },{"./_export":47,"./_to-iobject":123,"./_to-length":124}],254:[function(require,module,exports){
  var $export = require('./_export');
  
  $export($export.P, 'String', {
    // 21.1.3.13 String.prototype.repeat(count)
    repeat: require('./_string-repeat')
  });
  
  },{"./_export":47,"./_string-repeat":116}],255:[function(require,module,exports){
  'use strict';
  // B.2.3.11 String.prototype.small()
  require('./_string-html')('small', function (createHTML) {
    return function small() {
      return createHTML(this, 'small', '', '');
    };
  });
  
  },{"./_string-html":114}],256:[function(require,module,exports){
  // 21.1.3.18 String.prototype.startsWith(searchString [, position ])
  'use strict';
  var $export = require('./_export');
  var toLength = require('./_to-length');
  var context = require('./_string-context');
  var STARTS_WITH = 'startsWith';
  var $startsWith = ''[STARTS_WITH];
  
  $export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {
    startsWith: function startsWith(searchString /* , position = 0 */) {
      var that = context(this, searchString, STARTS_WITH);
      var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));
      var search = String(searchString);
      return $startsWith
        ? $startsWith.call(that, search, index)
        : that.slice(index, index + search.length) === search;
    }
  });
  
  },{"./_export":47,"./_fails-is-regexp":48,"./_string-context":113,"./_to-length":124}],257:[function(require,module,exports){
  'use strict';
  // B.2.3.12 String.prototype.strike()
  require('./_string-html')('strike', function (createHTML) {
    return function strike() {
      return createHTML(this, 'strike', '', '');
    };
  });
  
  },{"./_string-html":114}],258:[function(require,module,exports){
  'use strict';
  // B.2.3.13 String.prototype.sub()
  require('./_string-html')('sub', function (createHTML) {
    return function sub() {
      return createHTML(this, 'sub', '', '');
    };
  });
  
  },{"./_string-html":114}],259:[function(require,module,exports){
  'use strict';
  // B.2.3.14 String.prototype.sup()
  require('./_string-html')('sup', function (createHTML) {
    return function sup() {
      return createHTML(this, 'sup', '', '');
    };
  });
  
  },{"./_string-html":114}],260:[function(require,module,exports){
  'use strict';
  // 21.1.3.25 String.prototype.trim()
  require('./_string-trim')('trim', function ($trim) {
    return function trim() {
      return $trim(this, 3);
    };
  });
  
  },{"./_string-trim":117}],261:[function(require,module,exports){
  'use strict';
  // ECMAScript 6 symbols shim
  var global = require('./_global');
  var has = require('./_has');
  var DESCRIPTORS = require('./_descriptors');
  var $export = require('./_export');
  var redefine = require('./_redefine');
  var META = require('./_meta').KEY;
  var $fails = require('./_fails');
  var shared = require('./_shared');
  var setToStringTag = require('./_set-to-string-tag');
  var uid = require('./_uid');
  var wks = require('./_wks');
  var wksExt = require('./_wks-ext');
  var wksDefine = require('./_wks-define');
  var enumKeys = require('./_enum-keys');
  var isArray = require('./_is-array');
  var anObject = require('./_an-object');
  var isObject = require('./_is-object');
  var toIObject = require('./_to-iobject');
  var toPrimitive = require('./_to-primitive');
  var createDesc = require('./_property-desc');
  var _create = require('./_object-create');
  var gOPNExt = require('./_object-gopn-ext');
  var $GOPD = require('./_object-gopd');
  var $DP = require('./_object-dp');
  var $keys = require('./_object-keys');
  var gOPD = $GOPD.f;
  var dP = $DP.f;
  var gOPN = gOPNExt.f;
  var $Symbol = global.Symbol;
  var $JSON = global.JSON;
  var _stringify = $JSON && $JSON.stringify;
  var PROTOTYPE = 'prototype';
  var HIDDEN = wks('_hidden');
  var TO_PRIMITIVE = wks('toPrimitive');
  var isEnum = {}.propertyIsEnumerable;
  var SymbolRegistry = shared('symbol-registry');
  var AllSymbols = shared('symbols');
  var OPSymbols = shared('op-symbols');
  var ObjectProto = Object[PROTOTYPE];
  var USE_NATIVE = typeof $Symbol == 'function';
  var QObject = global.QObject;
  // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
  var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
  
  // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
  var setSymbolDesc = DESCRIPTORS && $fails(function () {
    return _create(dP({}, 'a', {
      get: function () { return dP(this, 'a', { value: 7 }).a; }
    })).a != 7;
  }) ? function (it, key, D) {
    var protoDesc = gOPD(ObjectProto, key);
    if (protoDesc) delete ObjectProto[key];
    dP(it, key, D);
    if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);
  } : dP;
  
  var wrap = function (tag) {
    var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
    sym._k = tag;
    return sym;
  };
  
  var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {
    return typeof it == 'symbol';
  } : function (it) {
    return it instanceof $Symbol;
  };
  
  var $defineProperty = function defineProperty(it, key, D) {
    if (it === ObjectProto) $defineProperty(OPSymbols, key, D);
    anObject(it);
    key = toPrimitive(key, true);
    anObject(D);
    if (has(AllSymbols, key)) {
      if (!D.enumerable) {
        if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));
        it[HIDDEN][key] = true;
      } else {
        if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
        D = _create(D, { enumerable: createDesc(0, false) });
      } return setSymbolDesc(it, key, D);
    } return dP(it, key, D);
  };
  var $defineProperties = function defineProperties(it, P) {
    anObject(it);
    var keys = enumKeys(P = toIObject(P));
    var i = 0;
    var l = keys.length;
    var key;
    while (l > i) $defineProperty(it, key = keys[i++], P[key]);
    return it;
  };
  var $create = function create(it, P) {
    return P === undefined ? _create(it) : $defineProperties(_create(it), P);
  };
  var $propertyIsEnumerable = function propertyIsEnumerable(key) {
    var E = isEnum.call(this, key = toPrimitive(key, true));
    if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;
    return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
  };
  var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
    it = toIObject(it);
    key = toPrimitive(key, true);
    if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;
    var D = gOPD(it, key);
    if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
    return D;
  };
  var $getOwnPropertyNames = function getOwnPropertyNames(it) {
    var names = gOPN(toIObject(it));
    var result = [];
    var i = 0;
    var key;
    while (names.length > i) {
      if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
    } return result;
  };
  var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
    var IS_OP = it === ObjectProto;
    var names = gOPN(IS_OP ? OPSymbols : toIObject(it));
    var result = [];
    var i = 0;
    var key;
    while (names.length > i) {
      if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);
    } return result;
  };
  
  // 19.4.1.1 Symbol([description])
  if (!USE_NATIVE) {
    $Symbol = function Symbol() {
      if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
      var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
      var $set = function (value) {
        if (this === ObjectProto) $set.call(OPSymbols, value);
        if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
        setSymbolDesc(this, tag, createDesc(1, value));
      };
      if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });
      return wrap(tag);
    };
    redefine($Symbol[PROTOTYPE], 'toString', function toString() {
      return this._k;
    });
  
    $GOPD.f = $getOwnPropertyDescriptor;
    $DP.f = $defineProperty;
    require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;
    require('./_object-pie').f = $propertyIsEnumerable;
    require('./_object-gops').f = $getOwnPropertySymbols;
  
    if (DESCRIPTORS && !require('./_library')) {
      redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
    }
  
    wksExt.f = function (name) {
      return wrap(wks(name));
    };
  }
  
  $export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });
  
  for (var es6Symbols = (
    // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
    'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
  ).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);
  
  for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);
  
  $export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
    // 19.4.2.1 Symbol.for(key)
    'for': function (key) {
      return has(SymbolRegistry, key += '')
        ? SymbolRegistry[key]
        : SymbolRegistry[key] = $Symbol(key);
    },
    // 19.4.2.5 Symbol.keyFor(sym)
    keyFor: function keyFor(sym) {
      if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');
      for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;
    },
    useSetter: function () { setter = true; },
    useSimple: function () { setter = false; }
  });
  
  $export($export.S + $export.F * !USE_NATIVE, 'Object', {
    // 19.1.2.2 Object.create(O [, Properties])
    create: $create,
    // 19.1.2.4 Object.defineProperty(O, P, Attributes)
    defineProperty: $defineProperty,
    // 19.1.2.3 Object.defineProperties(O, Properties)
    defineProperties: $defineProperties,
    // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
    getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
    // 19.1.2.7 Object.getOwnPropertyNames(O)
    getOwnPropertyNames: $getOwnPropertyNames,
    // 19.1.2.8 Object.getOwnPropertySymbols(O)
    getOwnPropertySymbols: $getOwnPropertySymbols
  });
  
  // 24.3.2 JSON.stringify(value [, replacer [, space]])
  $JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {
    var S = $Symbol();
    // MS Edge converts symbol values to JSON as {}
    // WebKit converts symbol values to JSON as null
    // V8 throws on boxed symbols
    return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';
  })), 'JSON', {
    stringify: function stringify(it) {
      var args = [it];
      var i = 1;
      var replacer, $replacer;
      while (arguments.length > i) args.push(arguments[i++]);
      $replacer = replacer = args[1];
      if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
      if (!isArray(replacer)) replacer = function (key, value) {
        if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
        if (!isSymbol(value)) return value;
      };
      args[1] = replacer;
      return _stringify.apply($JSON, args);
    }
  });
  
  // 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
  $Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
  // 19.4.3.5 Symbol.prototype[@@toStringTag]
  setToStringTag($Symbol, 'Symbol');
  // 20.2.1.9 Math[@@toStringTag]
  setToStringTag(Math, 'Math', true);
  // 24.3.3 JSON[@@toStringTag]
  setToStringTag(global.JSON, 'JSON', true);
  
  },{"./_an-object":23,"./_descriptors":43,"./_enum-keys":46,"./_export":47,"./_fails":49,"./_global":53,"./_has":54,"./_hide":55,"./_is-array":62,"./_is-object":64,"./_library":72,"./_meta":77,"./_object-create":81,"./_object-dp":82,"./_object-gopd":84,"./_object-gopn":86,"./_object-gopn-ext":85,"./_object-gops":87,"./_object-keys":90,"./_object-pie":91,"./_property-desc":99,"./_redefine":101,"./_set-to-string-tag":107,"./_shared":109,"./_to-iobject":123,"./_to-primitive":126,"./_uid":130,"./_wks":135,"./_wks-define":133,"./_wks-ext":134}],262:[function(require,module,exports){
  'use strict';
  var $export = require('./_export');
  var $typed = require('./_typed');
  var buffer = require('./_typed-buffer');
  var anObject = require('./_an-object');
  var toAbsoluteIndex = require('./_to-absolute-index');
  var toLength = require('./_to-length');
  var isObject = require('./_is-object');
  var ArrayBuffer = require('./_global').ArrayBuffer;
  var speciesConstructor = require('./_species-constructor');
  var $ArrayBuffer = buffer.ArrayBuffer;
  var $DataView = buffer.DataView;
  var $isView = $typed.ABV && ArrayBuffer.isView;
  var $slice = $ArrayBuffer.prototype.slice;
  var VIEW = $typed.VIEW;
  var ARRAY_BUFFER = 'ArrayBuffer';
  
  $export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });
  
  $export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {
    // 24.1.3.1 ArrayBuffer.isView(arg)
    isView: function isView(it) {
      return $isView && $isView(it) || isObject(it) && VIEW in it;
    }
  });
  
  $export($export.P + $export.U + $export.F * require('./_fails')(function () {
    return !new $ArrayBuffer(2).slice(1, undefined).byteLength;
  }), ARRAY_BUFFER, {
    // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)
    slice: function slice(start, end) {
      if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix
      var len = anObject(this).byteLength;
      var first = toAbsoluteIndex(start, len);
      var fin = toAbsoluteIndex(end === undefined ? len : end, len);
      var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));
      var viewS = new $DataView(this);
      var viewT = new $DataView(result);
      var index = 0;
      while (first < fin) {
        viewT.setUint8(index++, viewS.getUint8(first++));
      } return result;
    }
  });
  
  require('./_set-species')(ARRAY_BUFFER);
  
  },{"./_an-object":23,"./_export":47,"./_fails":49,"./_global":53,"./_is-object":64,"./_set-species":106,"./_species-constructor":110,"./_to-absolute-index":120,"./_to-length":124,"./_typed":129,"./_typed-buffer":128}],263:[function(require,module,exports){
  var $export = require('./_export');
  $export($export.G + $export.W + $export.F * !require('./_typed').ABV, {
    DataView: require('./_typed-buffer').DataView
  });
  
  },{"./_export":47,"./_typed":129,"./_typed-buffer":128}],264:[function(require,module,exports){
  require('./_typed-array')('Float32', 4, function (init) {
    return function Float32Array(data, byteOffset, length) {
      return init(this, data, byteOffset, length);
    };
  });
  
  },{"./_typed-array":127}],265:[function(require,module,exports){
  require('./_typed-array')('Float64', 8, function (init) {
    return function Float64Array(data, byteOffset, length) {
      return init(this, data, byteOffset, length);
    };
  });
  
  },{"./_typed-array":127}],266:[function(require,module,exports){
  require('./_typed-array')('Int16', 2, function (init) {
    return function Int16Array(data, byteOffset, length) {
      return init(this, data, byteOffset, length);
    };
  });
  
  },{"./_typed-array":127}],267:[function(require,module,exports){
  require('./_typed-array')('Int32', 4, function (init) {
    return function Int32Array(data, byteOffset, length) {
      return init(this, data, byteOffset, length);
    };
  });
  
  },{"./_typed-array":127}],268:[function(require,module,exports){
  require('./_typed-array')('Int8', 1, function (init) {
    return function Int8Array(data, byteOffset, length) {
      return init(this, data, byteOffset, length);
    };
  });
  
  },{"./_typed-array":127}],269:[function(require,module,exports){
  require('./_typed-array')('Uint16', 2, function (init) {
    return function Uint16Array(data, byteOffset, length) {
      return init(this, data, byteOffset, length);
    };
  });
  
  },{"./_typed-array":127}],270:[function(require,module,exports){
  require('./_typed-array')('Uint32', 4, function (init) {
    return function Uint32Array(data, byteOffset, length) {
      return init(this, data, byteOffset, length);
    };
  });
  
  },{"./_typed-array":127}],271:[function(require,module,exports){
  require('./_typed-array')('Uint8', 1, function (init) {
    return function Uint8Array(data, byteOffset, length) {
      return init(this, data, byteOffset, length);
    };
  });
  
  },{"./_typed-array":127}],272:[function(require,module,exports){
  require('./_typed-array')('Uint8', 1, function (init) {
    return function Uint8ClampedArray(data, byteOffset, length) {
      return init(this, data, byteOffset, length);
    };
  }, true);
  
  },{"./_typed-array":127}],273:[function(require,module,exports){
  'use strict';
  var each = require('./_array-methods')(0);
  var redefine = require('./_redefine');
  var meta = require('./_meta');
  var assign = require('./_object-assign');
  var weak = require('./_collection-weak');
  var isObject = require('./_is-object');
  var fails = require('./_fails');
  var validate = require('./_validate-collection');
  var WEAK_MAP = 'WeakMap';
  var getWeak = meta.getWeak;
  var isExtensible = Object.isExtensible;
  var uncaughtFrozenStore = weak.ufstore;
  var tmp = {};
  var InternalMap;
  
  var wrapper = function (get) {
    return function WeakMap() {
      return get(this, arguments.length > 0 ? arguments[0] : undefined);
    };
  };
  
  var methods = {
    // 23.3.3.3 WeakMap.prototype.get(key)
    get: function get(key) {
      if (isObject(key)) {
        var data = getWeak(key);
        if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);
        return data ? data[this._i] : undefined;
      }
    },
    // 23.3.3.5 WeakMap.prototype.set(key, value)
    set: function set(key, value) {
      return weak.def(validate(this, WEAK_MAP), key, value);
    }
  };
  
  // 23.3 WeakMap Objects
  var $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);
  
  // IE11 WeakMap frozen keys fix
  if (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {
    InternalMap = weak.getConstructor(wrapper, WEAK_MAP);
    assign(InternalMap.prototype, methods);
    meta.NEED = true;
    each(['delete', 'has', 'get', 'set'], function (key) {
      var proto = $WeakMap.prototype;
      var method = proto[key];
      redefine(proto, key, function (a, b) {
        // store frozen objects on internal weakmap shim
        if (isObject(a) && !isExtensible(a)) {
          if (!this._f) this._f = new InternalMap();
          var result = this._f[key](a, b);
          return key == 'set' ? this : result;
        // store all the rest on native weakmap
        } return method.call(this, a, b);
      });
    });
  }
  
  },{"./_array-methods":27,"./_collection":36,"./_collection-weak":35,"./_fails":49,"./_is-object":64,"./_meta":77,"./_object-assign":80,"./_redefine":101,"./_validate-collection":132}],274:[function(require,module,exports){
  'use strict';
  var weak = require('./_collection-weak');
  var validate = require('./_validate-collection');
  var WEAK_SET = 'WeakSet';
  
  // 23.4 WeakSet Objects
  require('./_collection')(WEAK_SET, function (get) {
    return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
  }, {
    // 23.4.3.1 WeakSet.prototype.add(value)
    add: function add(value) {
      return weak.def(validate(this, WEAK_SET), value, true);
    }
  }, weak, false, true);
  
  },{"./_collection":36,"./_collection-weak":35,"./_validate-collection":132}],275:[function(require,module,exports){
  'use strict';
  // https://github.com/tc39/Array.prototype.includes
  var $export = require('./_export');
  var $includes = require('./_array-includes')(true);
  
  $export($export.P, 'Array', {
    includes: function includes(el /* , fromIndex = 0 */) {
      return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
    }
  });
  
  require('./_add-to-unscopables')('includes');
  
  },{"./_add-to-unscopables":20,"./_array-includes":26,"./_export":47}],276:[function(require,module,exports){
  // https://github.com/tc39/proposal-object-values-entries
  var $export = require('./_export');
  var $entries = require('./_object-to-array')(true);
  
  $export($export.S, 'Object', {
    entries: function entries(it) {
      return $entries(it);
    }
  });
  
  },{"./_export":47,"./_object-to-array":93}],277:[function(require,module,exports){
  // https://github.com/tc39/proposal-object-getownpropertydescriptors
  var $export = require('./_export');
  var ownKeys = require('./_own-keys');
  var toIObject = require('./_to-iobject');
  var gOPD = require('./_object-gopd');
  var createProperty = require('./_create-property');
  
  $export($export.S, 'Object', {
    getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {
      var O = toIObject(object);
      var getDesc = gOPD.f;
      var keys = ownKeys(O);
      var result = {};
      var i = 0;
      var key, desc;
      while (keys.length > i) {
        desc = getDesc(O, key = keys[i++]);
        if (desc !== undefined) createProperty(result, key, desc);
      }
      return result;
    }
  });
  
  },{"./_create-property":38,"./_export":47,"./_object-gopd":84,"./_own-keys":94,"./_to-iobject":123}],278:[function(require,module,exports){
  // https://github.com/tc39/proposal-object-values-entries
  var $export = require('./_export');
  var $values = require('./_object-to-array')(false);
  
  $export($export.S, 'Object', {
    values: function values(it) {
      return $values(it);
    }
  });
  
  },{"./_export":47,"./_object-to-array":93}],279:[function(require,module,exports){
  // https://github.com/tc39/proposal-promise-finally
  'use strict';
  var $export = require('./_export');
  var core = require('./_core');
  var global = require('./_global');
  var speciesConstructor = require('./_species-constructor');
  var promiseResolve = require('./_promise-resolve');
  
  $export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {
    var C = speciesConstructor(this, core.Promise || global.Promise);
    var isFunction = typeof onFinally == 'function';
    return this.then(
      isFunction ? function (x) {
        return promiseResolve(C, onFinally()).then(function () { return x; });
      } : onFinally,
      isFunction ? function (e) {
        return promiseResolve(C, onFinally()).then(function () { throw e; });
      } : onFinally
    );
  } });
  
  },{"./_core":37,"./_export":47,"./_global":53,"./_promise-resolve":98,"./_species-constructor":110}],280:[function(require,module,exports){
  'use strict';
  // https://github.com/tc39/proposal-string-pad-start-end
  var $export = require('./_export');
  var $pad = require('./_string-pad');
  var userAgent = require('./_user-agent');
  
  // https://github.com/zloirock/core-js/issues/280
  $export($export.P + $export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', {
    padEnd: function padEnd(maxLength /* , fillString = ' ' */) {
      return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);
    }
  });
  
  },{"./_export":47,"./_string-pad":115,"./_user-agent":131}],281:[function(require,module,exports){
  'use strict';
  // https://github.com/tc39/proposal-string-pad-start-end
  var $export = require('./_export');
  var $pad = require('./_string-pad');
  var userAgent = require('./_user-agent');
  
  // https://github.com/zloirock/core-js/issues/280
  $export($export.P + $export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', {
    padStart: function padStart(maxLength /* , fillString = ' ' */) {
      return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);
    }
  });
  
  },{"./_export":47,"./_string-pad":115,"./_user-agent":131}],282:[function(require,module,exports){
  require('./_wks-define')('asyncIterator');
  
  },{"./_wks-define":133}],283:[function(require,module,exports){
  var $iterators = require('./es6.array.iterator');
  var getKeys = require('./_object-keys');
  var redefine = require('./_redefine');
  var global = require('./_global');
  var hide = require('./_hide');
  var Iterators = require('./_iterators');
  var wks = require('./_wks');
  var ITERATOR = wks('iterator');
  var TO_STRING_TAG = wks('toStringTag');
  var ArrayValues = Iterators.Array;
  
  var DOMIterables = {
    CSSRuleList: true, // TODO: Not spec compliant, should be false.
    CSSStyleDeclaration: false,
    CSSValueList: false,
    ClientRectList: false,
    DOMRectList: false,
    DOMStringList: false,
    DOMTokenList: true,
    DataTransferItemList: false,
    FileList: false,
    HTMLAllCollection: false,
    HTMLCollection: false,
    HTMLFormElement: false,
    HTMLSelectElement: false,
    MediaList: true, // TODO: Not spec compliant, should be false.
    MimeTypeArray: false,
    NamedNodeMap: false,
    NodeList: true,
    PaintRequestList: false,
    Plugin: false,
    PluginArray: false,
    SVGLengthList: false,
    SVGNumberList: false,
    SVGPathSegList: false,
    SVGPointList: false,
    SVGStringList: false,
    SVGTransformList: false,
    SourceBufferList: false,
    StyleSheetList: true, // TODO: Not spec compliant, should be false.
    TextTrackCueList: false,
    TextTrackList: false,
    TouchList: false
  };
  
  for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {
    var NAME = collections[i];
    var explicit = DOMIterables[NAME];
    var Collection = global[NAME];
    var proto = Collection && Collection.prototype;
    var key;
    if (proto) {
      if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);
      if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
      Iterators[NAME] = ArrayValues;
      if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);
    }
  }
  
  },{"./_global":53,"./_hide":55,"./_iterators":71,"./_object-keys":90,"./_redefine":101,"./_wks":135,"./es6.array.iterator":147}],284:[function(require,module,exports){
  var $export = require('./_export');
  var $task = require('./_task');
  $export($export.G + $export.B, {
    setImmediate: $task.set,
    clearImmediate: $task.clear
  });
  
  },{"./_export":47,"./_task":119}],285:[function(require,module,exports){
  // ie9- setTimeout & setInterval additional parameters fix
  var global = require('./_global');
  var $export = require('./_export');
  var userAgent = require('./_user-agent');
  var slice = [].slice;
  var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check
  var wrap = function (set) {
    return function (fn, time /* , ...args */) {
      var boundArgs = arguments.length > 2;
      var args = boundArgs ? slice.call(arguments, 2) : false;
      return set(boundArgs ? function () {
        // eslint-disable-next-line no-new-func
        (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);
      } : fn, time);
    };
  };
  $export($export.G + $export.B + $export.F * MSIE, {
    setTimeout: wrap(global.setTimeout),
    setInterval: wrap(global.setInterval)
  });
  
  },{"./_export":47,"./_global":53,"./_user-agent":131}],286:[function(require,module,exports){
  require('../modules/web.timers');
  require('../modules/web.immediate');
  require('../modules/web.dom.iterable');
  module.exports = require('../modules/_core');
  
  },{"../modules/_core":37,"../modules/web.dom.iterable":283,"../modules/web.immediate":284,"../modules/web.timers":285}],287:[function(require,module,exports){
  // Copyright Joyent, Inc. and other Node contributors.
  //
  // Permission is hereby granted, free of charge, to any person obtaining a
  // copy of this software and associated documentation files (the
  // "Software"), to deal in the Software without restriction, including
  // without limitation the rights to use, copy, modify, merge, publish,
  // distribute, sublicense, and/or sell copies of the Software, and to permit
  // persons to whom the Software is furnished to do so, subject to the
  // following conditions:
  //
  // The above copyright notice and this permission notice shall be included
  // in all copies or substantial portions of the Software.
  //
  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  // USE OR OTHER DEALINGS IN THE SOFTWARE.
  
  // NOTE: These type checking functions intentionally don't use `instanceof`
  // because it is fragile and can be easily faked with `Object.create()`.
  
  function isArray(arg) {
    if (Array.isArray) {
      return Array.isArray(arg);
    }
    return objectToString(arg) === '[object Array]';
  }
  exports.isArray = isArray;
  
  function isBoolean(arg) {
    return typeof arg === 'boolean';
  }
  exports.isBoolean = isBoolean;
  
  function isNull(arg) {
    return arg === null;
  }
  exports.isNull = isNull;
  
  function isNullOrUndefined(arg) {
    return arg == null;
  }
  exports.isNullOrUndefined = isNullOrUndefined;
  
  function isNumber(arg) {
    return typeof arg === 'number';
  }
  exports.isNumber = isNumber;
  
  function isString(arg) {
    return typeof arg === 'string';
  }
  exports.isString = isString;
  
  function isSymbol(arg) {
    return typeof arg === 'symbol';
  }
  exports.isSymbol = isSymbol;
  
  function isUndefined(arg) {
    return arg === void 0;
  }
  exports.isUndefined = isUndefined;
  
  function isRegExp(re) {
    return objectToString(re) === '[object RegExp]';
  }
  exports.isRegExp = isRegExp;
  
  function isObject(arg) {
    return typeof arg === 'object' && arg !== null;
  }
  exports.isObject = isObject;
  
  function isDate(d) {
    return objectToString(d) === '[object Date]';
  }
  exports.isDate = isDate;
  
  function isError(e) {
    return (objectToString(e) === '[object Error]' || e instanceof Error);
  }
  exports.isError = isError;
  
  function isFunction(arg) {
    return typeof arg === 'function';
  }
  exports.isFunction = isFunction;
  
  function isPrimitive(arg) {
    return arg === null ||
           typeof arg === 'boolean' ||
           typeof arg === 'number' ||
           typeof arg === 'string' ||
           typeof arg === 'symbol' ||  // ES6 symbol
           typeof arg === 'undefined';
  }
  exports.isPrimitive = isPrimitive;
  
  exports.isBuffer = Buffer.isBuffer;
  
  function objectToString(o) {
    return Object.prototype.toString.call(o);
  }
  
  },{}],288:[function(require,module,exports){
  var stream = require('readable-stream')
  var eos = require('end-of-stream')
  var inherits = require('inherits')
  var shift = require('stream-shift')
  
  var SIGNAL_FLUSH = (Buffer.from && Buffer.from !== Uint8Array.from)
    ? Buffer.from([0])
    : new Buffer([0])
  
  var onuncork = function(self, fn) {
    if (self._corked) self.once('uncork', fn)
    else fn()
  }
  
  var autoDestroy = function (self, err) {
    if (self._autoDestroy) self.destroy(err)
  }
  
  var destroyer = function(self, end) {
    return function(err) {
      if (err) autoDestroy(self, err.message === 'premature close' ? null : err)
      else if (end && !self._ended) self.end()
    }
  }
  
  var end = function(ws, fn) {
    if (!ws) return fn()
    if (ws._writableState && ws._writableState.finished) return fn()
    if (ws._writableState) return ws.end(fn)
    ws.end()
    fn()
  }
  
  var toStreams2 = function(rs) {
    return new (stream.Readable)({objectMode:true, highWaterMark:16}).wrap(rs)
  }
  
  var Duplexify = function(writable, readable, opts) {
    if (!(this instanceof Duplexify)) return new Duplexify(writable, readable, opts)
    stream.Duplex.call(this, opts)
  
    this._writable = null
    this._readable = null
    this._readable2 = null
  
    this._autoDestroy = !opts || opts.autoDestroy !== false
    this._forwardDestroy = !opts || opts.destroy !== false
    this._forwardEnd = !opts || opts.end !== false
    this._corked = 1 // start corked
    this._ondrain = null
    this._drained = false
    this._forwarding = false
    this._unwrite = null
    this._unread = null
    this._ended = false
  
    this.destroyed = false
  
    if (writable) this.setWritable(writable)
    if (readable) this.setReadable(readable)
  }
  
  inherits(Duplexify, stream.Duplex)
  
  Duplexify.obj = function(writable, readable, opts) {
    if (!opts) opts = {}
    opts.objectMode = true
    opts.highWaterMark = 16
    return new Duplexify(writable, readable, opts)
  }
  
  Duplexify.prototype.cork = function() {
    if (++this._corked === 1) this.emit('cork')
  }
  
  Duplexify.prototype.uncork = function() {
    if (this._corked && --this._corked === 0) this.emit('uncork')
  }
  
  Duplexify.prototype.setWritable = function(writable) {
    if (this._unwrite) this._unwrite()
  
    if (this.destroyed) {
      if (writable && writable.destroy) writable.destroy()
      return
    }
  
    if (writable === null || writable === false) {
      this.end()
      return
    }
  
    var self = this
    var unend = eos(writable, {writable:true, readable:false}, destroyer(this, this._forwardEnd))
  
    var ondrain = function() {
      var ondrain = self._ondrain
      self._ondrain = null
      if (ondrain) ondrain()
    }
  
    var clear = function() {
      self._writable.removeListener('drain', ondrain)
      unend()
    }
  
    if (this._unwrite) process.nextTick(ondrain) // force a drain on stream reset to avoid livelocks
  
    this._writable = writable
    this._writable.on('drain', ondrain)
    this._unwrite = clear
  
    this.uncork() // always uncork setWritable
  }
  
  Duplexify.prototype.setReadable = function(readable) {
    if (this._unread) this._unread()
  
    if (this.destroyed) {
      if (readable && readable.destroy) readable.destroy()
      return
    }
  
    if (readable === null || readable === false) {
      this.push(null)
      this.resume()
      return
    }
  
    var self = this
    var unend = eos(readable, {writable:false, readable:true}, destroyer(this))
  
    var onreadable = function() {
      self._forward()
    }
  
    var onend = function() {
      self.push(null)
    }
  
    var clear = function() {
      self._readable2.removeListener('readable', onreadable)
      self._readable2.removeListener('end', onend)
      unend()
    }
  
    this._drained = true
    this._readable = readable
    this._readable2 = readable._readableState ? readable : toStreams2(readable)
    this._readable2.on('readable', onreadable)
    this._readable2.on('end', onend)
    this._unread = clear
  
    this._forward()
  }
  
  Duplexify.prototype._read = function() {
    this._drained = true
    this._forward()
  }
  
  Duplexify.prototype._forward = function() {
    if (this._forwarding || !this._readable2 || !this._drained) return
    this._forwarding = true
  
    var data
  
    while (this._drained && (data = shift(this._readable2)) !== null) {
      if (this.destroyed) continue
      this._drained = this.push(data)
    }
  
    this._forwarding = false
  }
  
  Duplexify.prototype.destroy = function(err) {
    if (this.destroyed) return
    this.destroyed = true
  
    var self = this
    process.nextTick(function() {
      self._destroy(err)
    })
  }
  
  Duplexify.prototype._destroy = function(err) {
    if (err) {
      var ondrain = this._ondrain
      this._ondrain = null
      if (ondrain) ondrain(err)
      else this.emit('error', err)
    }
  
    if (this._forwardDestroy) {
      if (this._readable && this._readable.destroy) this._readable.destroy()
      if (this._writable && this._writable.destroy) this._writable.destroy()
    }
  
    this.emit('close')
  }
  
  Duplexify.prototype._write = function(data, enc, cb) {
    if (this.destroyed) return cb()
    if (this._corked) return onuncork(this, this._write.bind(this, data, enc, cb))
    if (data === SIGNAL_FLUSH) return this._finish(cb)
    if (!this._writable) return cb()
  
    if (this._writable.write(data) === false) this._ondrain = cb
    else cb()
  }
  
  Duplexify.prototype._finish = function(cb) {
    var self = this
    this.emit('preend')
    onuncork(this, function() {
      end(self._forwardEnd && self._writable, function() {
        // haxx to not emit prefinish twice
        if (self._writableState.prefinished === false) self._writableState.prefinished = true
        self.emit('prefinish')
        onuncork(self, cb)
      })
    })
  }
  
  Duplexify.prototype.end = function(data, enc, cb) {
    if (typeof data === 'function') return this.end(null, null, data)
    if (typeof enc === 'function') return this.end(data, null, enc)
    this._ended = true
    if (data) this.write(data)
    if (!this._writableState.ending) this.write(SIGNAL_FLUSH)
    return stream.Writable.prototype.end.call(this, cb)
  }
  
  module.exports = Duplexify
  
  },{"end-of-stream":289,"inherits":292,"readable-stream":315,"stream-shift":318}],289:[function(require,module,exports){
  var once = require('once');
  
  var noop = function() {};
  
  var isRequest = function(stream) {
  	return stream.setHeader && typeof stream.abort === 'function';
  };
  
  var isChildProcess = function(stream) {
  	return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3
  };
  
  var eos = function(stream, opts, callback) {
  	if (typeof opts === 'function') return eos(stream, null, opts);
  	if (!opts) opts = {};
  
  	callback = once(callback || noop);
  
  	var ws = stream._writableState;
  	var rs = stream._readableState;
  	var readable = opts.readable || (opts.readable !== false && stream.readable);
  	var writable = opts.writable || (opts.writable !== false && stream.writable);
  
  	var onlegacyfinish = function() {
  		if (!stream.writable) onfinish();
  	};
  
  	var onfinish = function() {
  		writable = false;
  		if (!readable) callback.call(stream);
  	};
  
  	var onend = function() {
  		readable = false;
  		if (!writable) callback.call(stream);
  	};
  
  	var onexit = function(exitCode) {
  		callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);
  	};
  
  	var onerror = function(err) {
  		callback.call(stream, err);
  	};
  
  	var onclose = function() {
  		if (readable && !(rs && rs.ended)) return callback.call(stream, new Error('premature close'));
  		if (writable && !(ws && ws.ended)) return callback.call(stream, new Error('premature close'));
  	};
  
  	var onrequest = function() {
  		stream.req.on('finish', onfinish);
  	};
  
  	if (isRequest(stream)) {
  		stream.on('complete', onfinish);
  		stream.on('abort', onclose);
  		if (stream.req) onrequest();
  		else stream.on('request', onrequest);
  	} else if (writable && !ws) { // legacy streams
  		stream.on('end', onlegacyfinish);
  		stream.on('close', onlegacyfinish);
  	}
  
  	if (isChildProcess(stream)) stream.on('exit', onexit);
  
  	stream.on('end', onend);
  	stream.on('finish', onfinish);
  	if (opts.error !== false) stream.on('error', onerror);
  	stream.on('close', onclose);
  
  	return function() {
  		stream.removeListener('complete', onfinish);
  		stream.removeListener('abort', onclose);
  		stream.removeListener('request', onrequest);
  		if (stream.req) stream.req.removeListener('finish', onfinish);
  		stream.removeListener('end', onlegacyfinish);
  		stream.removeListener('close', onlegacyfinish);
  		stream.removeListener('finish', onfinish);
  		stream.removeListener('exit', onexit);
  		stream.removeListener('end', onend);
  		stream.removeListener('error', onerror);
  		stream.removeListener('close', onclose);
  	};
  };
  
  module.exports = eos;
  
  },{"once":297}],290:[function(require,module,exports){
  module.exports = require('fs').constants || require('constants')
  
  },{"constants":undefined,"fs":undefined}],291:[function(require,module,exports){
  var zlib = require('zlib')
  var peek = require('peek-stream')
  var through = require('through2')
  var pumpify = require('pumpify')
  var isGzip = require('is-gzip')
  var isDeflate = require('is-deflate')
  
  var isCompressed = function (data) {
    if (isGzip(data)) return 1
    if (isDeflate(data)) return 2
    return 0
  }
  
  var gunzip = function (maxRecursion) {
    if (!(maxRecursion >= 0)) maxRecursion = 3
  
    return peek({newline: false, maxBuffer: 10}, function (data, swap) {
      if (maxRecursion < 0) return swap(new Error('Maximum recursion reached'))
      switch (isCompressed(data)) {
        case 1:
          swap(null, pumpify(zlib.createGunzip(), gunzip(maxRecursion - 1)))
          break
        case 2:
          swap(null, pumpify(zlib.createInflate(), gunzip(maxRecursion - 1)))
          break
        default:
          swap(null, through())
      }
    })
  }
  
  module.exports = gunzip
  
  },{"is-deflate":294,"is-gzip":295,"peek-stream":298,"pumpify":302,"through2":324,"zlib":undefined}],292:[function(require,module,exports){
  try {
    var util = require('util');
    /* istanbul ignore next */
    if (typeof util.inherits !== 'function') throw '';
    module.exports = util.inherits;
  } catch (e) {
    /* istanbul ignore next */
    module.exports = require('./inherits_browser.js');
  }
  
  },{"./inherits_browser.js":293,"util":undefined}],293:[function(require,module,exports){
  if (typeof Object.create === 'function') {
    // implementation from standard node.js 'util' module
    module.exports = function inherits(ctor, superCtor) {
      if (superCtor) {
        ctor.super_ = superCtor
        ctor.prototype = Object.create(superCtor.prototype, {
          constructor: {
            value: ctor,
            enumerable: false,
            writable: true,
            configurable: true
          }
        })
      }
    };
  } else {
    // old school shim for old browsers
    module.exports = function inherits(ctor, superCtor) {
      if (superCtor) {
        ctor.super_ = superCtor
        var TempCtor = function () {}
        TempCtor.prototype = superCtor.prototype
        ctor.prototype = new TempCtor()
        ctor.prototype.constructor = ctor
      }
    }
  }
  
  },{}],294:[function(require,module,exports){
  'use strict'
  
  module.exports = function (buf) {
    if (!buf || buf.length < 2) return false
    return buf[0] === 0x78 && (buf[1] === 1 || buf[1] === 0x9c || buf[1] === 0xda)
  }
  
  },{}],295:[function(require,module,exports){
  'use strict';
  
  /**
   * Check if a Buffer/Uint8Array is a GZIP file
   *
   * @param {Buffer} buf
   * @api public
   */
  
  module.exports = function (buf) {
      if (!buf || buf.length < 3) {
          return false;
      }
  
      return buf[0] === 31 && buf[1] === 139 && buf[2] === 8;
  };
  
  },{}],296:[function(require,module,exports){
  var path = require('path');
  var fs = require('fs');
  var _0777 = parseInt('0777', 8);
  
  module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP;
  
  function mkdirP (p, opts, f, made) {
      if (typeof opts === 'function') {
          f = opts;
          opts = {};
      }
      else if (!opts || typeof opts !== 'object') {
          opts = { mode: opts };
      }
      
      var mode = opts.mode;
      var xfs = opts.fs || fs;
      
      if (mode === undefined) {
          mode = _0777 & (~process.umask());
      }
      if (!made) made = null;
      
      var cb = f || function () {};
      p = path.resolve(p);
      
      xfs.mkdir(p, mode, function (er) {
          if (!er) {
              made = made || p;
              return cb(null, made);
          }
          switch (er.code) {
              case 'ENOENT':
                  mkdirP(path.dirname(p), opts, function (er, made) {
                      if (er) cb(er, made);
                      else mkdirP(p, opts, cb, made);
                  });
                  break;
  
              // In the case of any other error, just see if there's a dir
              // there already.  If so, then hooray!  If not, then something
              // is borked.
              default:
                  xfs.stat(p, function (er2, stat) {
                      // if the stat fails, then that's super weird.
                      // let the original error be the failure reason.
                      if (er2 || !stat.isDirectory()) cb(er, made)
                      else cb(null, made);
                  });
                  break;
          }
      });
  }
  
  mkdirP.sync = function sync (p, opts, made) {
      if (!opts || typeof opts !== 'object') {
          opts = { mode: opts };
      }
      
      var mode = opts.mode;
      var xfs = opts.fs || fs;
      
      if (mode === undefined) {
          mode = _0777 & (~process.umask());
      }
      if (!made) made = null;
  
      p = path.resolve(p);
  
      try {
          xfs.mkdirSync(p, mode);
          made = made || p;
      }
      catch (err0) {
          switch (err0.code) {
              case 'ENOENT' :
                  made = sync(path.dirname(p), opts, made);
                  sync(p, opts, made);
                  break;
  
              // In the case of any other error, just see if there's a dir
              // there already.  If so, then hooray!  If not, then something
              // is borked.
              default:
                  var stat;
                  try {
                      stat = xfs.statSync(p);
                  }
                  catch (err1) {
                      throw err0;
                  }
                  if (!stat.isDirectory()) throw err0;
                  break;
          }
      }
  
      return made;
  };
  
  },{"fs":undefined,"path":undefined}],297:[function(require,module,exports){
  var wrappy = require('wrappy')
  module.exports = wrappy(once)
  module.exports.strict = wrappy(onceStrict)
  
  once.proto = once(function () {
    Object.defineProperty(Function.prototype, 'once', {
      value: function () {
        return once(this)
      },
      configurable: true
    })
  
    Object.defineProperty(Function.prototype, 'onceStrict', {
      value: function () {
        return onceStrict(this)
      },
      configurable: true
    })
  })
  
  function once (fn) {
    var f = function () {
      if (f.called) return f.value
      f.called = true
      return f.value = fn.apply(this, arguments)
    }
    f.called = false
    return f
  }
  
  function onceStrict (fn) {
    var f = function () {
      if (f.called)
        throw new Error(f.onceError)
      f.called = true
      return f.value = fn.apply(this, arguments)
    }
    var name = fn.name || 'Function wrapped with `once`'
    f.onceError = name + " shouldn't be called more than once"
    f.called = false
    return f
  }
  
  },{"wrappy":327}],298:[function(require,module,exports){
  var duplexify = require('duplexify')
  var through = require('through2')
  var bufferFrom = require('buffer-from')
  
  var noop = function() {}
  
  var isObject = function(data) {
    return !Buffer.isBuffer(data) && typeof data !== 'string'
  }
  
  var peek = function(opts, onpeek) {
    if (typeof opts === 'number') opts = {maxBuffer:opts}
    if (typeof opts === 'function') return peek(null, opts)
    if (!opts) opts = {}
  
    var maxBuffer = typeof opts.maxBuffer === 'number' ? opts.maxBuffer : 65535
    var strict = opts.strict
    var newline = opts.newline !== false
  
    var buffer = []
    var bufferSize = 0
    var dup = duplexify.obj()
  
    var peeker = through.obj({highWaterMark:1}, function(data, enc, cb) {
      if (isObject(data)) return ready(data, null, cb)
      if (!Buffer.isBuffer(data)) data = bufferFrom(data)
  
      if (newline) {
        var nl = Array.prototype.indexOf.call(data, 10)
        if (nl > 0 && data[nl-1] === 13) nl--
  
        if (nl > -1) {
          buffer.push(data.slice(0, nl))
          return ready(Buffer.concat(buffer), data.slice(nl), cb)
        }
      }
  
      buffer.push(data)
      bufferSize += data.length
  
      if (bufferSize < maxBuffer) return cb()
      if (strict) return cb(new Error('No newline found'))
      ready(Buffer.concat(buffer), null, cb)
    })
  
    var onpreend = function() {
      if (strict) return dup.destroy(new Error('No newline found'))
      dup.cork()
      ready(Buffer.concat(buffer), null, function(err) {
        if (err) return dup.destroy(err)
        dup.uncork()
      })
    }
  
    var ready = function(data, overflow, cb) {
      dup.removeListener('preend', onpreend)
      onpeek(data, function(err, parser) {
        if (err) return cb(err)
  
        dup.setWritable(parser)
        dup.setReadable(parser)
  
        if (data) parser.write(data)
        if (overflow) parser.write(overflow)
  
        overflow = buffer = peeker = null // free the data
        cb()
      })
    }
  
    dup.on('preend', onpreend)
    dup.setWritable(peeker)
  
    return dup
  }
  
  module.exports = peek
  
  },{"buffer-from":7,"duplexify":288,"through2":324}],299:[function(require,module,exports){
  'use strict';
  
  if (!process.version ||
      process.version.indexOf('v0.') === 0 ||
      process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
    module.exports = { nextTick: nextTick };
  } else {
    module.exports = process
  }
  
  function nextTick(fn, arg1, arg2, arg3) {
    if (typeof fn !== 'function') {
      throw new TypeError('"callback" argument must be a function');
    }
    var len = arguments.length;
    var args, i;
    switch (len) {
    case 0:
    case 1:
      return process.nextTick(fn);
    case 2:
      return process.nextTick(function afterTickOne() {
        fn.call(null, arg1);
      });
    case 3:
      return process.nextTick(function afterTickTwo() {
        fn.call(null, arg1, arg2);
      });
    case 4:
      return process.nextTick(function afterTickThree() {
        fn.call(null, arg1, arg2, arg3);
      });
    default:
      args = new Array(len - 1);
      i = 0;
      while (i < args.length) {
        args[i++] = arguments[i];
      }
      return process.nextTick(function afterTick() {
        fn.apply(null, args);
      });
    }
  }
  
  
  },{}],300:[function(require,module,exports){
  'use strict';
  
  class StreamError extends Error {
    constructor(err, source) {
      const message = err && err.message || err;
      super(message);
      this.source = source;
      this.originalError = err;
    }
  }
  
  const events = ['error', 'end', 'close', 'finish'];
  
  function cleanupEventHandlers(stream, listener) {
    events.map(e => stream.removeListener(e, listener));
  }
  
  function streamPromise(stream, state) {
    if (stream === process.stdout || stream === process.stderr) {
      return Promise.resolve(stream);
    }
  
    // see https://github.com/epeli/node-promisepipe/issues/2
    // and https://github.com/epeli/node-promisepipe/issues/15
    const isReadable = stream.readable || typeof stream._read === 'function';
  
    function on(evt) {
      function executor(resolve, reject) {
        const fn = evt === 'error' ?
          err => reject(new StreamError(err, stream)) :
          () => {
            // For readable streams, we ignore the "finish" event. However, if there
            // already was an error on another stream, the "end" event may never come,
            // so in that case we accept "finish" too.
            if (isReadable && evt === 'finish' && !state.error) {
              return;
            }
  
            cleanupEventHandlers(stream, fn);
            resolve(stream);
          };
        stream.on(evt, fn);
      }
  
      return new Promise(executor);
    }
  
    return Promise.race(events.map(on));
  }
  
  /**
   * @param {...Stream} stream
   */
  function promisePipe(stream) {
    let i = arguments.length;
    const streams = [];
    while ( i-- ) streams[i] = arguments[i];
  
    const allStreams = streams
      .reduce((current, next) => current.concat(next), []);
  
    allStreams.reduce((current, next) => current.pipe(next));
    return allStreamsDone(streams);
  }
  
  function allStreamsDone(allStreams) {
    let state = {};
    let firstRejection;
  
    return Promise.all(allStreams.map(stream => streamPromise(stream, state).catch((e) => {
      if (!firstRejection) {
        firstRejection = e;
        state.error = true;
  
        // Close all streams as they are not closed automatically on error.
        allStreams.forEach(stream => {
          if (stream !== process.stdout && stream !== process.stderr) {
            stream.destroy();
          }
        });
      }
    }))).then((allResults) => {
  		if (firstRejection) {
  			throw firstRejection;
  		}
  
  		return allResults;
  	});
  }
  
  module.exports = Object.assign(promisePipe, {
    __esModule: true,
    default: promisePipe,
    justPromise: streams => allStreamsDone(streams),
    StreamError,
  });
  
  },{}],301:[function(require,module,exports){
  var once = require('once')
  var eos = require('end-of-stream')
  var fs = require('fs') // we only need fs to get the ReadStream and WriteStream prototypes
  
  var noop = function () {}
  
  var isFn = function (fn) {
    return typeof fn === 'function'
  }
  
  var isFS = function (stream) {
    if (!fs) return false // browser
    return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)
  }
  
  var isRequest = function (stream) {
    return stream.setHeader && isFn(stream.abort)
  }
  
  var destroyer = function (stream, reading, writing, callback) {
    callback = once(callback)
  
    var closed = false
    stream.on('close', function () {
      closed = true
    })
  
    eos(stream, {readable: reading, writable: writing}, function (err) {
      if (err) return callback(err)
      closed = true
      callback()
    })
  
    var destroyed = false
    return function (err) {
      if (closed) return
      if (destroyed) return
      destroyed = true
  
      if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks
      if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want
  
      if (isFn(stream.destroy)) return stream.destroy()
  
      callback(err || new Error('stream was destroyed'))
    }
  }
  
  var call = function (fn) {
    fn()
  }
  
  var pipe = function (from, to) {
    return from.pipe(to)
  }
  
  var pump = function () {
    var streams = Array.prototype.slice.call(arguments)
    var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop
  
    if (Array.isArray(streams[0])) streams = streams[0]
    if (streams.length < 2) throw new Error('pump requires two streams per minimum')
  
    var error
    var destroys = streams.map(function (stream, i) {
      var reading = i < streams.length - 1
      var writing = i > 0
      return destroyer(stream, reading, writing, function (err) {
        if (!error) error = err
        if (err) destroys.forEach(call)
        if (reading) return
        destroys.forEach(call)
        callback(error)
      })
    })
  
    return streams.reduce(pipe)
  }
  
  module.exports = pump
  
  },{"end-of-stream":289,"fs":undefined,"once":297}],302:[function(require,module,exports){
  var pump = require('pump')
  var inherits = require('inherits')
  var Duplexify = require('duplexify')
  
  var toArray = function(args) {
    if (!args.length) return []
    return Array.isArray(args[0]) ? args[0] : Array.prototype.slice.call(args)
  }
  
  var define = function(opts) {
    var Pumpify = function() {
      var streams = toArray(arguments)
      if (!(this instanceof Pumpify)) return new Pumpify(streams)
      Duplexify.call(this, null, null, opts)
      if (streams.length) this.setPipeline(streams)
    }
  
    inherits(Pumpify, Duplexify)
  
    Pumpify.prototype.setPipeline = function() {
      var streams = toArray(arguments)
      var self = this
      var ended = false
      var w = streams[0]
      var r = streams[streams.length-1]
  
      r = r.readable ? r : null
      w = w.writable ? w : null
  
      var onclose = function() {
        streams[0].emit('error', new Error('stream was destroyed'))
      }
  
      this.on('close', onclose)
      this.on('prefinish', function() {
        if (!ended) self.cork()
      })
  
      pump(streams, function(err) {
        self.removeListener('close', onclose)
        if (err) return self.destroy(err.message === 'premature close' ? null : err)
        ended = true
        // pump ends after the last stream is not writable *but*
        // pumpify still forwards the readable part so we need to catch errors
        // still, so reenable autoDestroy in this case
        if (self._autoDestroy === false) self._autoDestroy = true
        self.uncork()
      })
  
      if (this.destroyed) return onclose()
      this.setWritable(w)
      this.setReadable(r)
    }
  
    return Pumpify
  }
  
  module.exports = define({autoDestroy:false, destroy:false})
  module.exports.obj = define({autoDestroy: false, destroy:false, objectMode:true, highWaterMark:16})
  module.exports.ctor = define
  
  },{"duplexify":288,"inherits":292,"pump":303}],303:[function(require,module,exports){
  var once = require('once')
  var eos = require('end-of-stream')
  var fs = require('fs') // we only need fs to get the ReadStream and WriteStream prototypes
  
  var noop = function () {}
  var ancient = /^v?\.0/.test(process.version)
  
  var isFn = function (fn) {
    return typeof fn === 'function'
  }
  
  var isFS = function (stream) {
    if (!ancient) return false // newer node version do not need to care about fs is a special way
    if (!fs) return false // browser
    return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)
  }
  
  var isRequest = function (stream) {
    return stream.setHeader && isFn(stream.abort)
  }
  
  var destroyer = function (stream, reading, writing, callback) {
    callback = once(callback)
  
    var closed = false
    stream.on('close', function () {
      closed = true
    })
  
    eos(stream, {readable: reading, writable: writing}, function (err) {
      if (err) return callback(err)
      closed = true
      callback()
    })
  
    var destroyed = false
    return function (err) {
      if (closed) return
      if (destroyed) return
      destroyed = true
  
      if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks
      if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want
  
      if (isFn(stream.destroy)) return stream.destroy()
  
      callback(err || new Error('stream was destroyed'))
    }
  }
  
  var call = function (fn) {
    fn()
  }
  
  var pipe = function (from, to) {
    return from.pipe(to)
  }
  
  var pump = function () {
    var streams = Array.prototype.slice.call(arguments)
    var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop
  
    if (Array.isArray(streams[0])) streams = streams[0]
    if (streams.length < 2) throw new Error('pump requires two streams per minimum')
  
    var error
    var destroys = streams.map(function (stream, i) {
      var reading = i < streams.length - 1
      var writing = i > 0
      return destroyer(stream, reading, writing, function (err) {
        if (!error) error = err
        if (err) destroys.forEach(call)
        if (reading) return
        destroys.forEach(call)
        callback(error)
      })
    })
  
    streams.reduce(pipe)
  }
  
  module.exports = pump
  
  },{"end-of-stream":289,"fs":undefined,"once":297}],304:[function(require,module,exports){
  module.exports = require('./readable').Duplex
  
  },{"./readable":315}],305:[function(require,module,exports){
  // Copyright Joyent, Inc. and other Node contributors.
  //
  // Permission is hereby granted, free of charge, to any person obtaining a
  // copy of this software and associated documentation files (the
  // "Software"), to deal in the Software without restriction, including
  // without limitation the rights to use, copy, modify, merge, publish,
  // distribute, sublicense, and/or sell copies of the Software, and to permit
  // persons to whom the Software is furnished to do so, subject to the
  // following conditions:
  //
  // The above copyright notice and this permission notice shall be included
  // in all copies or substantial portions of the Software.
  //
  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  // USE OR OTHER DEALINGS IN THE SOFTWARE.
  
  // a duplex stream is just a stream that is both readable and writable.
  // Since JS doesn't have multiple prototypal inheritance, this class
  // prototypally inherits from Readable, and then parasitically from
  // Writable.
  
  'use strict';
  
  /*<replacement>*/
  
  var pna = require('process-nextick-args');
  /*</replacement>*/
  
  /*<replacement>*/
  var objectKeys = Object.keys || function (obj) {
    var keys = [];
    for (var key in obj) {
      keys.push(key);
    }return keys;
  };
  /*</replacement>*/
  
  module.exports = Duplex;
  
  /*<replacement>*/
  var util = require('core-util-is');
  util.inherits = require('inherits');
  /*</replacement>*/
  
  var Readable = require('./_stream_readable');
  var Writable = require('./_stream_writable');
  
  util.inherits(Duplex, Readable);
  
  {
    // avoid scope creep, the keys array can then be collected
    var keys = objectKeys(Writable.prototype);
    for (var v = 0; v < keys.length; v++) {
      var method = keys[v];
      if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
    }
  }
  
  function Duplex(options) {
    if (!(this instanceof Duplex)) return new Duplex(options);
  
    Readable.call(this, options);
    Writable.call(this, options);
  
    if (options && options.readable === false) this.readable = false;
  
    if (options && options.writable === false) this.writable = false;
  
    this.allowHalfOpen = true;
    if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
  
    this.once('end', onend);
  }
  
  Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
    // making it explicit this property is not enumerable
    // because otherwise some prototype manipulation in
    // userland will fail
    enumerable: false,
    get: function () {
      return this._writableState.highWaterMark;
    }
  });
  
  // the no-half-open enforcer
  function onend() {
    // if we allow half-open state, or if the writable side ended,
    // then we're ok.
    if (this.allowHalfOpen || this._writableState.ended) return;
  
    // no more data can be written.
    // But allow more writes to happen in this tick.
    pna.nextTick(onEndNT, this);
  }
  
  function onEndNT(self) {
    self.end();
  }
  
  Object.defineProperty(Duplex.prototype, 'destroyed', {
    get: function () {
      if (this._readableState === undefined || this._writableState === undefined) {
        return false;
      }
      return this._readableState.destroyed && this._writableState.destroyed;
    },
    set: function (value) {
      // we ignore the value if the stream
      // has not been initialized yet
      if (this._readableState === undefined || this._writableState === undefined) {
        return;
      }
  
      // backward compatibility, the user is explicitly
      // managing destroyed
      this._readableState.destroyed = value;
      this._writableState.destroyed = value;
    }
  });
  
  Duplex.prototype._destroy = function (err, cb) {
    this.push(null);
    this.end();
  
    pna.nextTick(cb, err);
  };
  },{"./_stream_readable":307,"./_stream_writable":309,"core-util-is":287,"inherits":292,"process-nextick-args":299}],306:[function(require,module,exports){
  // Copyright Joyent, Inc. and other Node contributors.
  //
  // Permission is hereby granted, free of charge, to any person obtaining a
  // copy of this software and associated documentation files (the
  // "Software"), to deal in the Software without restriction, including
  // without limitation the rights to use, copy, modify, merge, publish,
  // distribute, sublicense, and/or sell copies of the Software, and to permit
  // persons to whom the Software is furnished to do so, subject to the
  // following conditions:
  //
  // The above copyright notice and this permission notice shall be included
  // in all copies or substantial portions of the Software.
  //
  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  // USE OR OTHER DEALINGS IN THE SOFTWARE.
  
  // a passthrough stream.
  // basically just the most minimal sort of Transform stream.
  // Every written chunk gets output as-is.
  
  'use strict';
  
  module.exports = PassThrough;
  
  var Transform = require('./_stream_transform');
  
  /*<replacement>*/
  var util = require('core-util-is');
  util.inherits = require('inherits');
  /*</replacement>*/
  
  util.inherits(PassThrough, Transform);
  
  function PassThrough(options) {
    if (!(this instanceof PassThrough)) return new PassThrough(options);
  
    Transform.call(this, options);
  }
  
  PassThrough.prototype._transform = function (chunk, encoding, cb) {
    cb(null, chunk);
  };
  },{"./_stream_transform":308,"core-util-is":287,"inherits":292}],307:[function(require,module,exports){
  // Copyright Joyent, Inc. and other Node contributors.
  //
  // Permission is hereby granted, free of charge, to any person obtaining a
  // copy of this software and associated documentation files (the
  // "Software"), to deal in the Software without restriction, including
  // without limitation the rights to use, copy, modify, merge, publish,
  // distribute, sublicense, and/or sell copies of the Software, and to permit
  // persons to whom the Software is furnished to do so, subject to the
  // following conditions:
  //
  // The above copyright notice and this permission notice shall be included
  // in all copies or substantial portions of the Software.
  //
  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  // USE OR OTHER DEALINGS IN THE SOFTWARE.
  
  'use strict';
  
  /*<replacement>*/
  
  var pna = require('process-nextick-args');
  /*</replacement>*/
  
  module.exports = Readable;
  
  /*<replacement>*/
  var isArray = require('isarray');
  /*</replacement>*/
  
  /*<replacement>*/
  var Duplex;
  /*</replacement>*/
  
  Readable.ReadableState = ReadableState;
  
  /*<replacement>*/
  var EE = require('events').EventEmitter;
  
  var EElistenerCount = function (emitter, type) {
    return emitter.listeners(type).length;
  };
  /*</replacement>*/
  
  /*<replacement>*/
  var Stream = require('./internal/streams/stream');
  /*</replacement>*/
  
  /*<replacement>*/
  
  var Buffer = require('safe-buffer').Buffer;
  var OurUint8Array = global.Uint8Array || function () {};
  function _uint8ArrayToBuffer(chunk) {
    return Buffer.from(chunk);
  }
  function _isUint8Array(obj) {
    return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
  }
  
  /*</replacement>*/
  
  /*<replacement>*/
  var util = require('core-util-is');
  util.inherits = require('inherits');
  /*</replacement>*/
  
  /*<replacement>*/
  var debugUtil = require('util');
  var debug = void 0;
  if (debugUtil && debugUtil.debuglog) {
    debug = debugUtil.debuglog('stream');
  } else {
    debug = function () {};
  }
  /*</replacement>*/
  
  var BufferList = require('./internal/streams/BufferList');
  var destroyImpl = require('./internal/streams/destroy');
  var StringDecoder;
  
  util.inherits(Readable, Stream);
  
  var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
  
  function prependListener(emitter, event, fn) {
    // Sadly this is not cacheable as some libraries bundle their own
    // event emitter implementation with them.
    if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);
  
    // This is a hack to make sure that our error handler is attached before any
    // userland ones.  NEVER DO THIS. This is here only because this code needs
    // to continue to work with older versions of Node.js that do not include
    // the prependListener() method. The goal is to eventually remove this hack.
    if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
  }
  
  function ReadableState(options, stream) {
    Duplex = Duplex || require('./_stream_duplex');
  
    options = options || {};
  
    // Duplex streams are both readable and writable, but share
    // the same options object.
    // However, some cases require setting options to different
    // values for the readable and the writable sides of the duplex stream.
    // These options can be provided separately as readableXXX and writableXXX.
    var isDuplex = stream instanceof Duplex;
  
    // object stream flag. Used to make read(n) ignore n and to
    // make all the buffer merging and length checks go away
    this.objectMode = !!options.objectMode;
  
    if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
  
    // the point at which it stops calling _read() to fill the buffer
    // Note: 0 is a valid value, means "don't call _read preemptively ever"
    var hwm = options.highWaterMark;
    var readableHwm = options.readableHighWaterMark;
    var defaultHwm = this.objectMode ? 16 : 16 * 1024;
  
    if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;
  
    // cast to ints.
    this.highWaterMark = Math.floor(this.highWaterMark);
  
    // A linked list is used to store data chunks instead of an array because the
    // linked list can remove elements from the beginning faster than
    // array.shift()
    this.buffer = new BufferList();
    this.length = 0;
    this.pipes = null;
    this.pipesCount = 0;
    this.flowing = null;
    this.ended = false;
    this.endEmitted = false;
    this.reading = false;
  
    // a flag to be able to tell if the event 'readable'/'data' is emitted
    // immediately, or on a later tick.  We set this to true at first, because
    // any actions that shouldn't happen until "later" should generally also
    // not happen before the first read call.
    this.sync = true;
  
    // whenever we return null, then we set a flag to say
    // that we're awaiting a 'readable' event emission.
    this.needReadable = false;
    this.emittedReadable = false;
    this.readableListening = false;
    this.resumeScheduled = false;
  
    // has it been destroyed
    this.destroyed = false;
  
    // Crypto is kind of old and crusty.  Historically, its default string
    // encoding is 'binary' so we have to make this configurable.
    // Everything else in the universe uses 'utf8', though.
    this.defaultEncoding = options.defaultEncoding || 'utf8';
  
    // the number of writers that are awaiting a drain event in .pipe()s
    this.awaitDrain = 0;
  
    // if true, a maybeReadMore has been scheduled
    this.readingMore = false;
  
    this.decoder = null;
    this.encoding = null;
    if (options.encoding) {
      if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
      this.decoder = new StringDecoder(options.encoding);
      this.encoding = options.encoding;
    }
  }
  
  function Readable(options) {
    Duplex = Duplex || require('./_stream_duplex');
  
    if (!(this instanceof Readable)) return new Readable(options);
  
    this._readableState = new ReadableState(options, this);
  
    // legacy
    this.readable = true;
  
    if (options) {
      if (typeof options.read === 'function') this._read = options.read;
  
      if (typeof options.destroy === 'function') this._destroy = options.destroy;
    }
  
    Stream.call(this);
  }
  
  Object.defineProperty(Readable.prototype, 'destroyed', {
    get: function () {
      if (this._readableState === undefined) {
        return false;
      }
      return this._readableState.destroyed;
    },
    set: function (value) {
      // we ignore the value if the stream
      // has not been initialized yet
      if (!this._readableState) {
        return;
      }
  
      // backward compatibility, the user is explicitly
      // managing destroyed
      this._readableState.destroyed = value;
    }
  });
  
  Readable.prototype.destroy = destroyImpl.destroy;
  Readable.prototype._undestroy = destroyImpl.undestroy;
  Readable.prototype._destroy = function (err, cb) {
    this.push(null);
    cb(err);
  };
  
  // Manually shove something into the read() buffer.
  // This returns true if the highWaterMark has not been hit yet,
  // similar to how Writable.write() returns true if you should
  // write() some more.
  Readable.prototype.push = function (chunk, encoding) {
    var state = this._readableState;
    var skipChunkCheck;
  
    if (!state.objectMode) {
      if (typeof chunk === 'string') {
        encoding = encoding || state.defaultEncoding;
        if (encoding !== state.encoding) {
          chunk = Buffer.from(chunk, encoding);
          encoding = '';
        }
        skipChunkCheck = true;
      }
    } else {
      skipChunkCheck = true;
    }
  
    return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
  };
  
  // Unshift should *always* be something directly out of read()
  Readable.prototype.unshift = function (chunk) {
    return readableAddChunk(this, chunk, null, true, false);
  };
  
  function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
    var state = stream._readableState;
    if (chunk === null) {
      state.reading = false;
      onEofChunk(stream, state);
    } else {
      var er;
      if (!skipChunkCheck) er = chunkInvalid(state, chunk);
      if (er) {
        stream.emit('error', er);
      } else if (state.objectMode || chunk && chunk.length > 0) {
        if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
          chunk = _uint8ArrayToBuffer(chunk);
        }
  
        if (addToFront) {
          if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
        } else if (state.ended) {
          stream.emit('error', new Error('stream.push() after EOF'));
        } else {
          state.reading = false;
          if (state.decoder && !encoding) {
            chunk = state.decoder.write(chunk);
            if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
          } else {
            addChunk(stream, state, chunk, false);
          }
        }
      } else if (!addToFront) {
        state.reading = false;
      }
    }
  
    return needMoreData(state);
  }
  
  function addChunk(stream, state, chunk, addToFront) {
    if (state.flowing && state.length === 0 && !state.sync) {
      stream.emit('data', chunk);
      stream.read(0);
    } else {
      // update the buffer info.
      state.length += state.objectMode ? 1 : chunk.length;
      if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
  
      if (state.needReadable) emitReadable(stream);
    }
    maybeReadMore(stream, state);
  }
  
  function chunkInvalid(state, chunk) {
    var er;
    if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
      er = new TypeError('Invalid non-string/buffer chunk');
    }
    return er;
  }
  
  // if it's past the high water mark, we can push in some more.
  // Also, if we have no data yet, we can stand some
  // more bytes.  This is to work around cases where hwm=0,
  // such as the repl.  Also, if the push() triggered a
  // readable event, and the user called read(largeNumber) such that
  // needReadable was set, then we ought to push more, so that another
  // 'readable' event will be triggered.
  function needMoreData(state) {
    return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
  }
  
  Readable.prototype.isPaused = function () {
    return this._readableState.flowing === false;
  };
  
  // backwards compatibility.
  Readable.prototype.setEncoding = function (enc) {
    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
    this._readableState.decoder = new StringDecoder(enc);
    this._readableState.encoding = enc;
    return this;
  };
  
  // Don't raise the hwm > 8MB
  var MAX_HWM = 0x800000;
  function computeNewHighWaterMark(n) {
    if (n >= MAX_HWM) {
      n = MAX_HWM;
    } else {
      // Get the next highest power of 2 to prevent increasing hwm excessively in
      // tiny amounts
      n--;
      n |= n >>> 1;
      n |= n >>> 2;
      n |= n >>> 4;
      n |= n >>> 8;
      n |= n >>> 16;
      n++;
    }
    return n;
  }
  
  // This function is designed to be inlinable, so please take care when making
  // changes to the function body.
  function howMuchToRead(n, state) {
    if (n <= 0 || state.length === 0 && state.ended) return 0;
    if (state.objectMode) return 1;
    if (n !== n) {
      // Only flow one buffer at a time
      if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
    }
    // If we're asking for more than the current hwm, then raise the hwm.
    if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
    if (n <= state.length) return n;
    // Don't have enough
    if (!state.ended) {
      state.needReadable = true;
      return 0;
    }
    return state.length;
  }
  
  // you can override either this method, or the async _read(n) below.
  Readable.prototype.read = function (n) {
    debug('read', n);
    n = parseInt(n, 10);
    var state = this._readableState;
    var nOrig = n;
  
    if (n !== 0) state.emittedReadable = false;
  
    // if we're doing read(0) to trigger a readable event, but we
    // already have a bunch of data in the buffer, then just trigger
    // the 'readable' event and move on.
    if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
      debug('read: emitReadable', state.length, state.ended);
      if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
      return null;
    }
  
    n = howMuchToRead(n, state);
  
    // if we've ended, and we're now clear, then finish it up.
    if (n === 0 && state.ended) {
      if (state.length === 0) endReadable(this);
      return null;
    }
  
    // All the actual chunk generation logic needs to be
    // *below* the call to _read.  The reason is that in certain
    // synthetic stream cases, such as passthrough streams, _read
    // may be a completely synchronous operation which may change
    // the state of the read buffer, providing enough data when
    // before there was *not* enough.
    //
    // So, the steps are:
    // 1. Figure out what the state of things will be after we do
    // a read from the buffer.
    //
    // 2. If that resulting state will trigger a _read, then call _read.
    // Note that this may be asynchronous, or synchronous.  Yes, it is
    // deeply ugly to write APIs this way, but that still doesn't mean
    // that the Readable class should behave improperly, as streams are
    // designed to be sync/async agnostic.
    // Take note if the _read call is sync or async (ie, if the read call
    // has returned yet), so that we know whether or not it's safe to emit
    // 'readable' etc.
    //
    // 3. Actually pull the requested chunks out of the buffer and return.
  
    // if we need a readable event, then we need to do some reading.
    var doRead = state.needReadable;
    debug('need readable', doRead);
  
    // if we currently have less than the highWaterMark, then also read some
    if (state.length === 0 || state.length - n < state.highWaterMark) {
      doRead = true;
      debug('length less than watermark', doRead);
    }
  
    // however, if we've ended, then there's no point, and if we're already
    // reading, then it's unnecessary.
    if (state.ended || state.reading) {
      doRead = false;
      debug('reading or ended', doRead);
    } else if (doRead) {
      debug('do read');
      state.reading = true;
      state.sync = true;
      // if the length is currently zero, then we *need* a readable event.
      if (state.length === 0) state.needReadable = true;
      // call internal read method
      this._read(state.highWaterMark);
      state.sync = false;
      // If _read pushed data synchronously, then `reading` will be false,
      // and we need to re-evaluate how much data we can return to the user.
      if (!state.reading) n = howMuchToRead(nOrig, state);
    }
  
    var ret;
    if (n > 0) ret = fromList(n, state);else ret = null;
  
    if (ret === null) {
      state.needReadable = true;
      n = 0;
    } else {
      state.length -= n;
    }
  
    if (state.length === 0) {
      // If we have nothing in the buffer, then we want to know
      // as soon as we *do* get something into the buffer.
      if (!state.ended) state.needReadable = true;
  
      // If we tried to read() past the EOF, then emit end on the next tick.
      if (nOrig !== n && state.ended) endReadable(this);
    }
  
    if (ret !== null) this.emit('data', ret);
  
    return ret;
  };
  
  function onEofChunk(stream, state) {
    if (state.ended) return;
    if (state.decoder) {
      var chunk = state.decoder.end();
      if (chunk && chunk.length) {
        state.buffer.push(chunk);
        state.length += state.objectMode ? 1 : chunk.length;
      }
    }
    state.ended = true;
  
    // emit 'readable' now to make sure it gets picked up.
    emitReadable(stream);
  }
  
  // Don't emit readable right away in sync mode, because this can trigger
  // another read() call => stack overflow.  This way, it might trigger
  // a nextTick recursion warning, but that's not so bad.
  function emitReadable(stream) {
    var state = stream._readableState;
    state.needReadable = false;
    if (!state.emittedReadable) {
      debug('emitReadable', state.flowing);
      state.emittedReadable = true;
      if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);
    }
  }
  
  function emitReadable_(stream) {
    debug('emit readable');
    stream.emit('readable');
    flow(stream);
  }
  
  // at this point, the user has presumably seen the 'readable' event,
  // and called read() to consume some data.  that may have triggered
  // in turn another _read(n) call, in which case reading = true if
  // it's in progress.
  // However, if we're not ended, or reading, and the length < hwm,
  // then go ahead and try to read some more preemptively.
  function maybeReadMore(stream, state) {
    if (!state.readingMore) {
      state.readingMore = true;
      pna.nextTick(maybeReadMore_, stream, state);
    }
  }
  
  function maybeReadMore_(stream, state) {
    var len = state.length;
    while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
      debug('maybeReadMore read 0');
      stream.read(0);
      if (len === state.length)
        // didn't get any data, stop spinning.
        break;else len = state.length;
    }
    state.readingMore = false;
  }
  
  // abstract method.  to be overridden in specific implementation classes.
  // call cb(er, data) where data is <= n in length.
  // for virtual (non-string, non-buffer) streams, "length" is somewhat
  // arbitrary, and perhaps not very meaningful.
  Readable.prototype._read = function (n) {
    this.emit('error', new Error('_read() is not implemented'));
  };
  
  Readable.prototype.pipe = function (dest, pipeOpts) {
    var src = this;
    var state = this._readableState;
  
    switch (state.pipesCount) {
      case 0:
        state.pipes = dest;
        break;
      case 1:
        state.pipes = [state.pipes, dest];
        break;
      default:
        state.pipes.push(dest);
        break;
    }
    state.pipesCount += 1;
    debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
  
    var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
  
    var endFn = doEnd ? onend : unpipe;
    if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);
  
    dest.on('unpipe', onunpipe);
    function onunpipe(readable, unpipeInfo) {
      debug('onunpipe');
      if (readable === src) {
        if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
          unpipeInfo.hasUnpiped = true;
          cleanup();
        }
      }
    }
  
    function onend() {
      debug('onend');
      dest.end();
    }
  
    // when the dest drains, it reduces the awaitDrain counter
    // on the source.  This would be more elegant with a .once()
    // handler in flow(), but adding and removing repeatedly is
    // too slow.
    var ondrain = pipeOnDrain(src);
    dest.on('drain', ondrain);
  
    var cleanedUp = false;
    function cleanup() {
      debug('cleanup');
      // cleanup event handlers once the pipe is broken
      dest.removeListener('close', onclose);
      dest.removeListener('finish', onfinish);
      dest.removeListener('drain', ondrain);
      dest.removeListener('error', onerror);
      dest.removeListener('unpipe', onunpipe);
      src.removeListener('end', onend);
      src.removeListener('end', unpipe);
      src.removeListener('data', ondata);
  
      cleanedUp = true;
  
      // if the reader is waiting for a drain event from this
      // specific writer, then it would cause it to never start
      // flowing again.
      // So, if this is awaiting a drain, then we just call it now.
      // If we don't know, then assume that we are waiting for one.
      if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
    }
  
    // If the user pushes more data while we're writing to dest then we'll end up
    // in ondata again. However, we only want to increase awaitDrain once because
    // dest will only emit one 'drain' event for the multiple writes.
    // => Introduce a guard on increasing awaitDrain.
    var increasedAwaitDrain = false;
    src.on('data', ondata);
    function ondata(chunk) {
      debug('ondata');
      increasedAwaitDrain = false;
      var ret = dest.write(chunk);
      if (false === ret && !increasedAwaitDrain) {
        // If the user unpiped during `dest.write()`, it is possible
        // to get stuck in a permanently paused state if that write
        // also returned false.
        // => Check whether `dest` is still a piping destination.
        if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
          debug('false write response, pause', src._readableState.awaitDrain);
          src._readableState.awaitDrain++;
          increasedAwaitDrain = true;
        }
        src.pause();
      }
    }
  
    // if the dest has an error, then stop piping into it.
    // however, don't suppress the throwing behavior for this.
    function onerror(er) {
      debug('onerror', er);
      unpipe();
      dest.removeListener('error', onerror);
      if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
    }
  
    // Make sure our error handler is attached before userland ones.
    prependListener(dest, 'error', onerror);
  
    // Both close and finish should trigger unpipe, but only once.
    function onclose() {
      dest.removeListener('finish', onfinish);
      unpipe();
    }
    dest.once('close', onclose);
    function onfinish() {
      debug('onfinish');
      dest.removeListener('close', onclose);
      unpipe();
    }
    dest.once('finish', onfinish);
  
    function unpipe() {
      debug('unpipe');
      src.unpipe(dest);
    }
  
    // tell the dest that it's being piped to
    dest.emit('pipe', src);
  
    // start the flow if it hasn't been started already.
    if (!state.flowing) {
      debug('pipe resume');
      src.resume();
    }
  
    return dest;
  };
  
  function pipeOnDrain(src) {
    return function () {
      var state = src._readableState;
      debug('pipeOnDrain', state.awaitDrain);
      if (state.awaitDrain) state.awaitDrain--;
      if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
        state.flowing = true;
        flow(src);
      }
    };
  }
  
  Readable.prototype.unpipe = function (dest) {
    var state = this._readableState;
    var unpipeInfo = { hasUnpiped: false };
  
    // if we're not piping anywhere, then do nothing.
    if (state.pipesCount === 0) return this;
  
    // just one destination.  most common case.
    if (state.pipesCount === 1) {
      // passed in one, but it's not the right one.
      if (dest && dest !== state.pipes) return this;
  
      if (!dest) dest = state.pipes;
  
      // got a match.
      state.pipes = null;
      state.pipesCount = 0;
      state.flowing = false;
      if (dest) dest.emit('unpipe', this, unpipeInfo);
      return this;
    }
  
    // slow case. multiple pipe destinations.
  
    if (!dest) {
      // remove all.
      var dests = state.pipes;
      var len = state.pipesCount;
      state.pipes = null;
      state.pipesCount = 0;
      state.flowing = false;
  
      for (var i = 0; i < len; i++) {
        dests[i].emit('unpipe', this, unpipeInfo);
      }return this;
    }
  
    // try to find the right one.
    var index = indexOf(state.pipes, dest);
    if (index === -1) return this;
  
    state.pipes.splice(index, 1);
    state.pipesCount -= 1;
    if (state.pipesCount === 1) state.pipes = state.pipes[0];
  
    dest.emit('unpipe', this, unpipeInfo);
  
    return this;
  };
  
  // set up data events if they are asked for
  // Ensure readable listeners eventually get something
  Readable.prototype.on = function (ev, fn) {
    var res = Stream.prototype.on.call(this, ev, fn);
  
    if (ev === 'data') {
      // Start flowing on next tick if stream isn't explicitly paused
      if (this._readableState.flowing !== false) this.resume();
    } else if (ev === 'readable') {
      var state = this._readableState;
      if (!state.endEmitted && !state.readableListening) {
        state.readableListening = state.needReadable = true;
        state.emittedReadable = false;
        if (!state.reading) {
          pna.nextTick(nReadingNextTick, this);
        } else if (state.length) {
          emitReadable(this);
        }
      }
    }
  
    return res;
  };
  Readable.prototype.addListener = Readable.prototype.on;
  
  function nReadingNextTick(self) {
    debug('readable nexttick read 0');
    self.read(0);
  }
  
  // pause() and resume() are remnants of the legacy readable stream API
  // If the user uses them, then switch into old mode.
  Readable.prototype.resume = function () {
    var state = this._readableState;
    if (!state.flowing) {
      debug('resume');
      state.flowing = true;
      resume(this, state);
    }
    return this;
  };
  
  function resume(stream, state) {
    if (!state.resumeScheduled) {
      state.resumeScheduled = true;
      pna.nextTick(resume_, stream, state);
    }
  }
  
  function resume_(stream, state) {
    if (!state.reading) {
      debug('resume read 0');
      stream.read(0);
    }
  
    state.resumeScheduled = false;
    state.awaitDrain = 0;
    stream.emit('resume');
    flow(stream);
    if (state.flowing && !state.reading) stream.read(0);
  }
  
  Readable.prototype.pause = function () {
    debug('call pause flowing=%j', this._readableState.flowing);
    if (false !== this._readableState.flowing) {
      debug('pause');
      this._readableState.flowing = false;
      this.emit('pause');
    }
    return this;
  };
  
  function flow(stream) {
    var state = stream._readableState;
    debug('flow', state.flowing);
    while (state.flowing && stream.read() !== null) {}
  }
  
  // wrap an old-style stream as the async data source.
  // This is *not* part of the readable stream interface.
  // It is an ugly unfortunate mess of history.
  Readable.prototype.wrap = function (stream) {
    var _this = this;
  
    var state = this._readableState;
    var paused = false;
  
    stream.on('end', function () {
      debug('wrapped end');
      if (state.decoder && !state.ended) {
        var chunk = state.decoder.end();
        if (chunk && chunk.length) _this.push(chunk);
      }
  
      _this.push(null);
    });
  
    stream.on('data', function (chunk) {
      debug('wrapped data');
      if (state.decoder) chunk = state.decoder.write(chunk);
  
      // don't skip over falsy values in objectMode
      if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
  
      var ret = _this.push(chunk);
      if (!ret) {
        paused = true;
        stream.pause();
      }
    });
  
    // proxy all the other methods.
    // important when wrapping filters and duplexes.
    for (var i in stream) {
      if (this[i] === undefined && typeof stream[i] === 'function') {
        this[i] = function (method) {
          return function () {
            return stream[method].apply(stream, arguments);
          };
        }(i);
      }
    }
  
    // proxy certain important events.
    for (var n = 0; n < kProxyEvents.length; n++) {
      stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
    }
  
    // when we try to consume some more bytes, simply unpause the
    // underlying stream.
    this._read = function (n) {
      debug('wrapped _read', n);
      if (paused) {
        paused = false;
        stream.resume();
      }
    };
  
    return this;
  };
  
  Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
    // making it explicit this property is not enumerable
    // because otherwise some prototype manipulation in
    // userland will fail
    enumerable: false,
    get: function () {
      return this._readableState.highWaterMark;
    }
  });
  
  // exposed for testing purposes only.
  Readable._fromList = fromList;
  
  // Pluck off n bytes from an array of buffers.
  // Length is the combined lengths of all the buffers in the list.
  // This function is designed to be inlinable, so please take care when making
  // changes to the function body.
  function fromList(n, state) {
    // nothing buffered
    if (state.length === 0) return null;
  
    var ret;
    if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
      // read it all, truncate the list
      if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
      state.buffer.clear();
    } else {
      // read part of list
      ret = fromListPartial(n, state.buffer, state.decoder);
    }
  
    return ret;
  }
  
  // Extracts only enough buffered data to satisfy the amount requested.
  // This function is designed to be inlinable, so please take care when making
  // changes to the function body.
  function fromListPartial(n, list, hasStrings) {
    var ret;
    if (n < list.head.data.length) {
      // slice is the same for buffers and strings
      ret = list.head.data.slice(0, n);
      list.head.data = list.head.data.slice(n);
    } else if (n === list.head.data.length) {
      // first chunk is a perfect match
      ret = list.shift();
    } else {
      // result spans more than one buffer
      ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
    }
    return ret;
  }
  
  // Copies a specified amount of characters from the list of buffered data
  // chunks.
  // This function is designed to be inlinable, so please take care when making
  // changes to the function body.
  function copyFromBufferString(n, list) {
    var p = list.head;
    var c = 1;
    var ret = p.data;
    n -= ret.length;
    while (p = p.next) {
      var str = p.data;
      var nb = n > str.length ? str.length : n;
      if (nb === str.length) ret += str;else ret += str.slice(0, n);
      n -= nb;
      if (n === 0) {
        if (nb === str.length) {
          ++c;
          if (p.next) list.head = p.next;else list.head = list.tail = null;
        } else {
          list.head = p;
          p.data = str.slice(nb);
        }
        break;
      }
      ++c;
    }
    list.length -= c;
    return ret;
  }
  
  // Copies a specified amount of bytes from the list of buffered data chunks.
  // This function is designed to be inlinable, so please take care when making
  // changes to the function body.
  function copyFromBuffer(n, list) {
    var ret = Buffer.allocUnsafe(n);
    var p = list.head;
    var c = 1;
    p.data.copy(ret);
    n -= p.data.length;
    while (p = p.next) {
      var buf = p.data;
      var nb = n > buf.length ? buf.length : n;
      buf.copy(ret, ret.length - n, 0, nb);
      n -= nb;
      if (n === 0) {
        if (nb === buf.length) {
          ++c;
          if (p.next) list.head = p.next;else list.head = list.tail = null;
        } else {
          list.head = p;
          p.data = buf.slice(nb);
        }
        break;
      }
      ++c;
    }
    list.length -= c;
    return ret;
  }
  
  function endReadable(stream) {
    var state = stream._readableState;
  
    // If we get here before consuming all the bytes, then that is a
    // bug in node.  Should never happen.
    if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
  
    if (!state.endEmitted) {
      state.ended = true;
      pna.nextTick(endReadableNT, state, stream);
    }
  }
  
  function endReadableNT(state, stream) {
    // Check that we didn't get one last unshift.
    if (!state.endEmitted && state.length === 0) {
      state.endEmitted = true;
      stream.readable = false;
      stream.emit('end');
    }
  }
  
  function indexOf(xs, x) {
    for (var i = 0, l = xs.length; i < l; i++) {
      if (xs[i] === x) return i;
    }
    return -1;
  }
  },{"./_stream_duplex":305,"./internal/streams/BufferList":310,"./internal/streams/destroy":311,"./internal/streams/stream":312,"core-util-is":287,"events":undefined,"inherits":292,"isarray":313,"process-nextick-args":299,"safe-buffer":317,"string_decoder/":314,"util":undefined}],308:[function(require,module,exports){
  // Copyright Joyent, Inc. and other Node contributors.
  //
  // Permission is hereby granted, free of charge, to any person obtaining a
  // copy of this software and associated documentation files (the
  // "Software"), to deal in the Software without restriction, including
  // without limitation the rights to use, copy, modify, merge, publish,
  // distribute, sublicense, and/or sell copies of the Software, and to permit
  // persons to whom the Software is furnished to do so, subject to the
  // following conditions:
  //
  // The above copyright notice and this permission notice shall be included
  // in all copies or substantial portions of the Software.
  //
  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  // USE OR OTHER DEALINGS IN THE SOFTWARE.
  
  // a transform stream is a readable/writable stream where you do
  // something with the data.  Sometimes it's called a "filter",
  // but that's not a great name for it, since that implies a thing where
  // some bits pass through, and others are simply ignored.  (That would
  // be a valid example of a transform, of course.)
  //
  // While the output is causally related to the input, it's not a
  // necessarily symmetric or synchronous transformation.  For example,
  // a zlib stream might take multiple plain-text writes(), and then
  // emit a single compressed chunk some time in the future.
  //
  // Here's how this works:
  //
  // The Transform stream has all the aspects of the readable and writable
  // stream classes.  When you write(chunk), that calls _write(chunk,cb)
  // internally, and returns false if there's a lot of pending writes
  // buffered up.  When you call read(), that calls _read(n) until
  // there's enough pending readable data buffered up.
  //
  // In a transform stream, the written data is placed in a buffer.  When
  // _read(n) is called, it transforms the queued up data, calling the
  // buffered _write cb's as it consumes chunks.  If consuming a single
  // written chunk would result in multiple output chunks, then the first
  // outputted bit calls the readcb, and subsequent chunks just go into
  // the read buffer, and will cause it to emit 'readable' if necessary.
  //
  // This way, back-pressure is actually determined by the reading side,
  // since _read has to be called to start processing a new chunk.  However,
  // a pathological inflate type of transform can cause excessive buffering
  // here.  For example, imagine a stream where every byte of input is
  // interpreted as an integer from 0-255, and then results in that many
  // bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in
  // 1kb of data being output.  In this case, you could write a very small
  // amount of input, and end up with a very large amount of output.  In
  // such a pathological inflating mechanism, there'd be no way to tell
  // the system to stop doing the transform.  A single 4MB write could
  // cause the system to run out of memory.
  //
  // However, even in such a pathological case, only a single written chunk
  // would be consumed, and then the rest would wait (un-transformed) until
  // the results of the previous transformed chunk were consumed.
  
  'use strict';
  
  module.exports = Transform;
  
  var Duplex = require('./_stream_duplex');
  
  /*<replacement>*/
  var util = require('core-util-is');
  util.inherits = require('inherits');
  /*</replacement>*/
  
  util.inherits(Transform, Duplex);
  
  function afterTransform(er, data) {
    var ts = this._transformState;
    ts.transforming = false;
  
    var cb = ts.writecb;
  
    if (!cb) {
      return this.emit('error', new Error('write callback called multiple times'));
    }
  
    ts.writechunk = null;
    ts.writecb = null;
  
    if (data != null) // single equals check for both `null` and `undefined`
      this.push(data);
  
    cb(er);
  
    var rs = this._readableState;
    rs.reading = false;
    if (rs.needReadable || rs.length < rs.highWaterMark) {
      this._read(rs.highWaterMark);
    }
  }
  
  function Transform(options) {
    if (!(this instanceof Transform)) return new Transform(options);
  
    Duplex.call(this, options);
  
    this._transformState = {
      afterTransform: afterTransform.bind(this),
      needTransform: false,
      transforming: false,
      writecb: null,
      writechunk: null,
      writeencoding: null
    };
  
    // start out asking for a readable event once data is transformed.
    this._readableState.needReadable = true;
  
    // we have implemented the _read method, and done the other things
    // that Readable wants before the first _read call, so unset the
    // sync guard flag.
    this._readableState.sync = false;
  
    if (options) {
      if (typeof options.transform === 'function') this._transform = options.transform;
  
      if (typeof options.flush === 'function') this._flush = options.flush;
    }
  
    // When the writable side finishes, then flush out anything remaining.
    this.on('prefinish', prefinish);
  }
  
  function prefinish() {
    var _this = this;
  
    if (typeof this._flush === 'function') {
      this._flush(function (er, data) {
        done(_this, er, data);
      });
    } else {
      done(this, null, null);
    }
  }
  
  Transform.prototype.push = function (chunk, encoding) {
    this._transformState.needTransform = false;
    return Duplex.prototype.push.call(this, chunk, encoding);
  };
  
  // This is the part where you do stuff!
  // override this function in implementation classes.
  // 'chunk' is an input chunk.
  //
  // Call `push(newChunk)` to pass along transformed output
  // to the readable side.  You may call 'push' zero or more times.
  //
  // Call `cb(err)` when you are done with this chunk.  If you pass
  // an error, then that'll put the hurt on the whole operation.  If you
  // never call cb(), then you'll never get another chunk.
  Transform.prototype._transform = function (chunk, encoding, cb) {
    throw new Error('_transform() is not implemented');
  };
  
  Transform.prototype._write = function (chunk, encoding, cb) {
    var ts = this._transformState;
    ts.writecb = cb;
    ts.writechunk = chunk;
    ts.writeencoding = encoding;
    if (!ts.transforming) {
      var rs = this._readableState;
      if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
    }
  };
  
  // Doesn't matter what the args are here.
  // _transform does all the work.
  // That we got here means that the readable side wants more data.
  Transform.prototype._read = function (n) {
    var ts = this._transformState;
  
    if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
      ts.transforming = true;
      this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
    } else {
      // mark that we need a transform, so that any data that comes in
      // will get processed, now that we've asked for it.
      ts.needTransform = true;
    }
  };
  
  Transform.prototype._destroy = function (err, cb) {
    var _this2 = this;
  
    Duplex.prototype._destroy.call(this, err, function (err2) {
      cb(err2);
      _this2.emit('close');
    });
  };
  
  function done(stream, er, data) {
    if (er) return stream.emit('error', er);
  
    if (data != null) // single equals check for both `null` and `undefined`
      stream.push(data);
  
    // if there's nothing in the write buffer, then that means
    // that nothing more will ever be provided
    if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');
  
    if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');
  
    return stream.push(null);
  }
  },{"./_stream_duplex":305,"core-util-is":287,"inherits":292}],309:[function(require,module,exports){
  // Copyright Joyent, Inc. and other Node contributors.
  //
  // Permission is hereby granted, free of charge, to any person obtaining a
  // copy of this software and associated documentation files (the
  // "Software"), to deal in the Software without restriction, including
  // without limitation the rights to use, copy, modify, merge, publish,
  // distribute, sublicense, and/or sell copies of the Software, and to permit
  // persons to whom the Software is furnished to do so, subject to the
  // following conditions:
  //
  // The above copyright notice and this permission notice shall be included
  // in all copies or substantial portions of the Software.
  //
  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  // USE OR OTHER DEALINGS IN THE SOFTWARE.
  
  // A bit simpler than readable streams.
  // Implement an async ._write(chunk, encoding, cb), and it'll handle all
  // the drain event emission and buffering.
  
  'use strict';
  
  /*<replacement>*/
  
  var pna = require('process-nextick-args');
  /*</replacement>*/
  
  module.exports = Writable;
  
  /* <replacement> */
  function WriteReq(chunk, encoding, cb) {
    this.chunk = chunk;
    this.encoding = encoding;
    this.callback = cb;
    this.next = null;
  }
  
  // It seems a linked list but it is not
  // there will be only 2 of these for each stream
  function CorkedRequest(state) {
    var _this = this;
  
    this.next = null;
    this.entry = null;
    this.finish = function () {
      onCorkedFinish(_this, state);
    };
  }
  /* </replacement> */
  
  /*<replacement>*/
  var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
  /*</replacement>*/
  
  /*<replacement>*/
  var Duplex;
  /*</replacement>*/
  
  Writable.WritableState = WritableState;
  
  /*<replacement>*/
  var util = require('core-util-is');
  util.inherits = require('inherits');
  /*</replacement>*/
  
  /*<replacement>*/
  var internalUtil = {
    deprecate: require('util-deprecate')
  };
  /*</replacement>*/
  
  /*<replacement>*/
  var Stream = require('./internal/streams/stream');
  /*</replacement>*/
  
  /*<replacement>*/
  
  var Buffer = require('safe-buffer').Buffer;
  var OurUint8Array = global.Uint8Array || function () {};
  function _uint8ArrayToBuffer(chunk) {
    return Buffer.from(chunk);
  }
  function _isUint8Array(obj) {
    return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
  }
  
  /*</replacement>*/
  
  var destroyImpl = require('./internal/streams/destroy');
  
  util.inherits(Writable, Stream);
  
  function nop() {}
  
  function WritableState(options, stream) {
    Duplex = Duplex || require('./_stream_duplex');
  
    options = options || {};
  
    // Duplex streams are both readable and writable, but share
    // the same options object.
    // However, some cases require setting options to different
    // values for the readable and the writable sides of the duplex stream.
    // These options can be provided separately as readableXXX and writableXXX.
    var isDuplex = stream instanceof Duplex;
  
    // object stream flag to indicate whether or not this stream
    // contains buffers or objects.
    this.objectMode = !!options.objectMode;
  
    if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
  
    // the point at which write() starts returning false
    // Note: 0 is a valid value, means that we always return false if
    // the entire buffer is not flushed immediately on write()
    var hwm = options.highWaterMark;
    var writableHwm = options.writableHighWaterMark;
    var defaultHwm = this.objectMode ? 16 : 16 * 1024;
  
    if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;
  
    // cast to ints.
    this.highWaterMark = Math.floor(this.highWaterMark);
  
    // if _final has been called
    this.finalCalled = false;
  
    // drain event flag.
    this.needDrain = false;
    // at the start of calling end()
    this.ending = false;
    // when end() has been called, and returned
    this.ended = false;
    // when 'finish' is emitted
    this.finished = false;
  
    // has it been destroyed
    this.destroyed = false;
  
    // should we decode strings into buffers before passing to _write?
    // this is here so that some node-core streams can optimize string
    // handling at a lower level.
    var noDecode = options.decodeStrings === false;
    this.decodeStrings = !noDecode;
  
    // Crypto is kind of old and crusty.  Historically, its default string
    // encoding is 'binary' so we have to make this configurable.
    // Everything else in the universe uses 'utf8', though.
    this.defaultEncoding = options.defaultEncoding || 'utf8';
  
    // not an actual buffer we keep track of, but a measurement
    // of how much we're waiting to get pushed to some underlying
    // socket or file.
    this.length = 0;
  
    // a flag to see when we're in the middle of a write.
    this.writing = false;
  
    // when true all writes will be buffered until .uncork() call
    this.corked = 0;
  
    // a flag to be able to tell if the onwrite cb is called immediately,
    // or on a later tick.  We set this to true at first, because any
    // actions that shouldn't happen until "later" should generally also
    // not happen before the first write call.
    this.sync = true;
  
    // a flag to know if we're processing previously buffered items, which
    // may call the _write() callback in the same tick, so that we don't
    // end up in an overlapped onwrite situation.
    this.bufferProcessing = false;
  
    // the callback that's passed to _write(chunk,cb)
    this.onwrite = function (er) {
      onwrite(stream, er);
    };
  
    // the callback that the user supplies to write(chunk,encoding,cb)
    this.writecb = null;
  
    // the amount that is being written when _write is called.
    this.writelen = 0;
  
    this.bufferedRequest = null;
    this.lastBufferedRequest = null;
  
    // number of pending user-supplied write callbacks
    // this must be 0 before 'finish' can be emitted
    this.pendingcb = 0;
  
    // emit prefinish if the only thing we're waiting for is _write cbs
    // This is relevant for synchronous Transform streams
    this.prefinished = false;
  
    // True if the error was already emitted and should not be thrown again
    this.errorEmitted = false;
  
    // count buffered requests
    this.bufferedRequestCount = 0;
  
    // allocate the first CorkedRequest, there is always
    // one allocated and free to use, and we maintain at most two
    this.corkedRequestsFree = new CorkedRequest(this);
  }
  
  WritableState.prototype.getBuffer = function getBuffer() {
    var current = this.bufferedRequest;
    var out = [];
    while (current) {
      out.push(current);
      current = current.next;
    }
    return out;
  };
  
  (function () {
    try {
      Object.defineProperty(WritableState.prototype, 'buffer', {
        get: internalUtil.deprecate(function () {
          return this.getBuffer();
        }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
      });
    } catch (_) {}
  })();
  
  // Test _writableState for inheritance to account for Duplex streams,
  // whose prototype chain only points to Readable.
  var realHasInstance;
  if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
    realHasInstance = Function.prototype[Symbol.hasInstance];
    Object.defineProperty(Writable, Symbol.hasInstance, {
      value: function (object) {
        if (realHasInstance.call(this, object)) return true;
        if (this !== Writable) return false;
  
        return object && object._writableState instanceof WritableState;
      }
    });
  } else {
    realHasInstance = function (object) {
      return object instanceof this;
    };
  }
  
  function Writable(options) {
    Duplex = Duplex || require('./_stream_duplex');
  
    // Writable ctor is applied to Duplexes, too.
    // `realHasInstance` is necessary because using plain `instanceof`
    // would return false, as no `_writableState` property is attached.
  
    // Trying to use the custom `instanceof` for Writable here will also break the
    // Node.js LazyTransform implementation, which has a non-trivial getter for
    // `_writableState` that would lead to infinite recursion.
    if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
      return new Writable(options);
    }
  
    this._writableState = new WritableState(options, this);
  
    // legacy.
    this.writable = true;
  
    if (options) {
      if (typeof options.write === 'function') this._write = options.write;
  
      if (typeof options.writev === 'function') this._writev = options.writev;
  
      if (typeof options.destroy === 'function') this._destroy = options.destroy;
  
      if (typeof options.final === 'function') this._final = options.final;
    }
  
    Stream.call(this);
  }
  
  // Otherwise people can pipe Writable streams, which is just wrong.
  Writable.prototype.pipe = function () {
    this.emit('error', new Error('Cannot pipe, not readable'));
  };
  
  function writeAfterEnd(stream, cb) {
    var er = new Error('write after end');
    // TODO: defer error events consistently everywhere, not just the cb
    stream.emit('error', er);
    pna.nextTick(cb, er);
  }
  
  // Checks that a user-supplied chunk is valid, especially for the particular
  // mode the stream is in. Currently this means that `null` is never accepted
  // and undefined/non-string values are only allowed in object mode.
  function validChunk(stream, state, chunk, cb) {
    var valid = true;
    var er = false;
  
    if (chunk === null) {
      er = new TypeError('May not write null values to stream');
    } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
      er = new TypeError('Invalid non-string/buffer chunk');
    }
    if (er) {
      stream.emit('error', er);
      pna.nextTick(cb, er);
      valid = false;
    }
    return valid;
  }
  
  Writable.prototype.write = function (chunk, encoding, cb) {
    var state = this._writableState;
    var ret = false;
    var isBuf = !state.objectMode && _isUint8Array(chunk);
  
    if (isBuf && !Buffer.isBuffer(chunk)) {
      chunk = _uint8ArrayToBuffer(chunk);
    }
  
    if (typeof encoding === 'function') {
      cb = encoding;
      encoding = null;
    }
  
    if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
  
    if (typeof cb !== 'function') cb = nop;
  
    if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
      state.pendingcb++;
      ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
    }
  
    return ret;
  };
  
  Writable.prototype.cork = function () {
    var state = this._writableState;
  
    state.corked++;
  };
  
  Writable.prototype.uncork = function () {
    var state = this._writableState;
  
    if (state.corked) {
      state.corked--;
  
      if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
    }
  };
  
  Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
    // node::ParseEncoding() requires lower case.
    if (typeof encoding === 'string') encoding = encoding.toLowerCase();
    if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
    this._writableState.defaultEncoding = encoding;
    return this;
  };
  
  function decodeChunk(state, chunk, encoding) {
    if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
      chunk = Buffer.from(chunk, encoding);
    }
    return chunk;
  }
  
  Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
    // making it explicit this property is not enumerable
    // because otherwise some prototype manipulation in
    // userland will fail
    enumerable: false,
    get: function () {
      return this._writableState.highWaterMark;
    }
  });
  
  // if we're already writing something, then just put this
  // in the queue, and wait our turn.  Otherwise, call _write
  // If we return false, then we need a drain event, so set that flag.
  function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
    if (!isBuf) {
      var newChunk = decodeChunk(state, chunk, encoding);
      if (chunk !== newChunk) {
        isBuf = true;
        encoding = 'buffer';
        chunk = newChunk;
      }
    }
    var len = state.objectMode ? 1 : chunk.length;
  
    state.length += len;
  
    var ret = state.length < state.highWaterMark;
    // we must ensure that previous needDrain will not be reset to false.
    if (!ret) state.needDrain = true;
  
    if (state.writing || state.corked) {
      var last = state.lastBufferedRequest;
      state.lastBufferedRequest = {
        chunk: chunk,
        encoding: encoding,
        isBuf: isBuf,
        callback: cb,
        next: null
      };
      if (last) {
        last.next = state.lastBufferedRequest;
      } else {
        state.bufferedRequest = state.lastBufferedRequest;
      }
      state.bufferedRequestCount += 1;
    } else {
      doWrite(stream, state, false, len, chunk, encoding, cb);
    }
  
    return ret;
  }
  
  function doWrite(stream, state, writev, len, chunk, encoding, cb) {
    state.writelen = len;
    state.writecb = cb;
    state.writing = true;
    state.sync = true;
    if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
    state.sync = false;
  }
  
  function onwriteError(stream, state, sync, er, cb) {
    --state.pendingcb;
  
    if (sync) {
      // defer the callback if we are being called synchronously
      // to avoid piling up things on the stack
      pna.nextTick(cb, er);
      // this can emit finish, and it will always happen
      // after error
      pna.nextTick(finishMaybe, stream, state);
      stream._writableState.errorEmitted = true;
      stream.emit('error', er);
    } else {
      // the caller expect this to happen before if
      // it is async
      cb(er);
      stream._writableState.errorEmitted = true;
      stream.emit('error', er);
      // this can emit finish, but finish must
      // always follow error
      finishMaybe(stream, state);
    }
  }
  
  function onwriteStateUpdate(state) {
    state.writing = false;
    state.writecb = null;
    state.length -= state.writelen;
    state.writelen = 0;
  }
  
  function onwrite(stream, er) {
    var state = stream._writableState;
    var sync = state.sync;
    var cb = state.writecb;
  
    onwriteStateUpdate(state);
  
    if (er) onwriteError(stream, state, sync, er, cb);else {
      // Check if we're actually ready to finish, but don't emit yet
      var finished = needFinish(state);
  
      if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
        clearBuffer(stream, state);
      }
  
      if (sync) {
        /*<replacement>*/
        asyncWrite(afterWrite, stream, state, finished, cb);
        /*</replacement>*/
      } else {
        afterWrite(stream, state, finished, cb);
      }
    }
  }
  
  function afterWrite(stream, state, finished, cb) {
    if (!finished) onwriteDrain(stream, state);
    state.pendingcb--;
    cb();
    finishMaybe(stream, state);
  }
  
  // Must force callback to be called on nextTick, so that we don't
  // emit 'drain' before the write() consumer gets the 'false' return
  // value, and has a chance to attach a 'drain' listener.
  function onwriteDrain(stream, state) {
    if (state.length === 0 && state.needDrain) {
      state.needDrain = false;
      stream.emit('drain');
    }
  }
  
  // if there's something in the buffer waiting, then process it
  function clearBuffer(stream, state) {
    state.bufferProcessing = true;
    var entry = state.bufferedRequest;
  
    if (stream._writev && entry && entry.next) {
      // Fast case, write everything using _writev()
      var l = state.bufferedRequestCount;
      var buffer = new Array(l);
      var holder = state.corkedRequestsFree;
      holder.entry = entry;
  
      var count = 0;
      var allBuffers = true;
      while (entry) {
        buffer[count] = entry;
        if (!entry.isBuf) allBuffers = false;
        entry = entry.next;
        count += 1;
      }
      buffer.allBuffers = allBuffers;
  
      doWrite(stream, state, true, state.length, buffer, '', holder.finish);
  
      // doWrite is almost always async, defer these to save a bit of time
      // as the hot path ends with doWrite
      state.pendingcb++;
      state.lastBufferedRequest = null;
      if (holder.next) {
        state.corkedRequestsFree = holder.next;
        holder.next = null;
      } else {
        state.corkedRequestsFree = new CorkedRequest(state);
      }
      state.bufferedRequestCount = 0;
    } else {
      // Slow case, write chunks one-by-one
      while (entry) {
        var chunk = entry.chunk;
        var encoding = entry.encoding;
        var cb = entry.callback;
        var len = state.objectMode ? 1 : chunk.length;
  
        doWrite(stream, state, false, len, chunk, encoding, cb);
        entry = entry.next;
        state.bufferedRequestCount--;
        // if we didn't call the onwrite immediately, then
        // it means that we need to wait until it does.
        // also, that means that the chunk and cb are currently
        // being processed, so move the buffer counter past them.
        if (state.writing) {
          break;
        }
      }
  
      if (entry === null) state.lastBufferedRequest = null;
    }
  
    state.bufferedRequest = entry;
    state.bufferProcessing = false;
  }
  
  Writable.prototype._write = function (chunk, encoding, cb) {
    cb(new Error('_write() is not implemented'));
  };
  
  Writable.prototype._writev = null;
  
  Writable.prototype.end = function (chunk, encoding, cb) {
    var state = this._writableState;
  
    if (typeof chunk === 'function') {
      cb = chunk;
      chunk = null;
      encoding = null;
    } else if (typeof encoding === 'function') {
      cb = encoding;
      encoding = null;
    }
  
    if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
  
    // .end() fully uncorks
    if (state.corked) {
      state.corked = 1;
      this.uncork();
    }
  
    // ignore unnecessary end() calls.
    if (!state.ending && !state.finished) endWritable(this, state, cb);
  };
  
  function needFinish(state) {
    return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
  }
  function callFinal(stream, state) {
    stream._final(function (err) {
      state.pendingcb--;
      if (err) {
        stream.emit('error', err);
      }
      state.prefinished = true;
      stream.emit('prefinish');
      finishMaybe(stream, state);
    });
  }
  function prefinish(stream, state) {
    if (!state.prefinished && !state.finalCalled) {
      if (typeof stream._final === 'function') {
        state.pendingcb++;
        state.finalCalled = true;
        pna.nextTick(callFinal, stream, state);
      } else {
        state.prefinished = true;
        stream.emit('prefinish');
      }
    }
  }
  
  function finishMaybe(stream, state) {
    var need = needFinish(state);
    if (need) {
      prefinish(stream, state);
      if (state.pendingcb === 0) {
        state.finished = true;
        stream.emit('finish');
      }
    }
    return need;
  }
  
  function endWritable(stream, state, cb) {
    state.ending = true;
    finishMaybe(stream, state);
    if (cb) {
      if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);
    }
    state.ended = true;
    stream.writable = false;
  }
  
  function onCorkedFinish(corkReq, state, err) {
    var entry = corkReq.entry;
    corkReq.entry = null;
    while (entry) {
      var cb = entry.callback;
      state.pendingcb--;
      cb(err);
      entry = entry.next;
    }
    if (state.corkedRequestsFree) {
      state.corkedRequestsFree.next = corkReq;
    } else {
      state.corkedRequestsFree = corkReq;
    }
  }
  
  Object.defineProperty(Writable.prototype, 'destroyed', {
    get: function () {
      if (this._writableState === undefined) {
        return false;
      }
      return this._writableState.destroyed;
    },
    set: function (value) {
      // we ignore the value if the stream
      // has not been initialized yet
      if (!this._writableState) {
        return;
      }
  
      // backward compatibility, the user is explicitly
      // managing destroyed
      this._writableState.destroyed = value;
    }
  });
  
  Writable.prototype.destroy = destroyImpl.destroy;
  Writable.prototype._undestroy = destroyImpl.undestroy;
  Writable.prototype._destroy = function (err, cb) {
    this.end();
    cb(err);
  };
  },{"./_stream_duplex":305,"./internal/streams/destroy":311,"./internal/streams/stream":312,"core-util-is":287,"inherits":292,"process-nextick-args":299,"safe-buffer":317,"util-deprecate":326}],310:[function(require,module,exports){
  'use strict';
  
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  
  var Buffer = require('safe-buffer').Buffer;
  var util = require('util');
  
  function copyBuffer(src, target, offset) {
    src.copy(target, offset);
  }
  
  module.exports = function () {
    function BufferList() {
      _classCallCheck(this, BufferList);
  
      this.head = null;
      this.tail = null;
      this.length = 0;
    }
  
    BufferList.prototype.push = function push(v) {
      var entry = { data: v, next: null };
      if (this.length > 0) this.tail.next = entry;else this.head = entry;
      this.tail = entry;
      ++this.length;
    };
  
    BufferList.prototype.unshift = function unshift(v) {
      var entry = { data: v, next: this.head };
      if (this.length === 0) this.tail = entry;
      this.head = entry;
      ++this.length;
    };
  
    BufferList.prototype.shift = function shift() {
      if (this.length === 0) return;
      var ret = this.head.data;
      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
      --this.length;
      return ret;
    };
  
    BufferList.prototype.clear = function clear() {
      this.head = this.tail = null;
      this.length = 0;
    };
  
    BufferList.prototype.join = function join(s) {
      if (this.length === 0) return '';
      var p = this.head;
      var ret = '' + p.data;
      while (p = p.next) {
        ret += s + p.data;
      }return ret;
    };
  
    BufferList.prototype.concat = function concat(n) {
      if (this.length === 0) return Buffer.alloc(0);
      if (this.length === 1) return this.head.data;
      var ret = Buffer.allocUnsafe(n >>> 0);
      var p = this.head;
      var i = 0;
      while (p) {
        copyBuffer(p.data, ret, i);
        i += p.data.length;
        p = p.next;
      }
      return ret;
    };
  
    return BufferList;
  }();
  
  if (util && util.inspect && util.inspect.custom) {
    module.exports.prototype[util.inspect.custom] = function () {
      var obj = util.inspect({ length: this.length });
      return this.constructor.name + ' ' + obj;
    };
  }
  },{"safe-buffer":317,"util":undefined}],311:[function(require,module,exports){
  'use strict';
  
  /*<replacement>*/
  
  var pna = require('process-nextick-args');
  /*</replacement>*/
  
  // undocumented cb() API, needed for core, not for public API
  function destroy(err, cb) {
    var _this = this;
  
    var readableDestroyed = this._readableState && this._readableState.destroyed;
    var writableDestroyed = this._writableState && this._writableState.destroyed;
  
    if (readableDestroyed || writableDestroyed) {
      if (cb) {
        cb(err);
      } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {
        pna.nextTick(emitErrorNT, this, err);
      }
      return this;
    }
  
    // we set destroyed to true before firing error callbacks in order
    // to make it re-entrance safe in case destroy() is called within callbacks
  
    if (this._readableState) {
      this._readableState.destroyed = true;
    }
  
    // if this is a duplex stream mark the writable part as destroyed as well
    if (this._writableState) {
      this._writableState.destroyed = true;
    }
  
    this._destroy(err || null, function (err) {
      if (!cb && err) {
        pna.nextTick(emitErrorNT, _this, err);
        if (_this._writableState) {
          _this._writableState.errorEmitted = true;
        }
      } else if (cb) {
        cb(err);
      }
    });
  
    return this;
  }
  
  function undestroy() {
    if (this._readableState) {
      this._readableState.destroyed = false;
      this._readableState.reading = false;
      this._readableState.ended = false;
      this._readableState.endEmitted = false;
    }
  
    if (this._writableState) {
      this._writableState.destroyed = false;
      this._writableState.ended = false;
      this._writableState.ending = false;
      this._writableState.finished = false;
      this._writableState.errorEmitted = false;
    }
  }
  
  function emitErrorNT(self, err) {
    self.emit('error', err);
  }
  
  module.exports = {
    destroy: destroy,
    undestroy: undestroy
  };
  },{"process-nextick-args":299}],312:[function(require,module,exports){
  module.exports = require('stream');
  
  },{"stream":undefined}],313:[function(require,module,exports){
  var toString = {}.toString;
  
  module.exports = Array.isArray || function (arr) {
    return toString.call(arr) == '[object Array]';
  };
  
  },{}],314:[function(require,module,exports){
  // Copyright Joyent, Inc. and other Node contributors.
  //
  // Permission is hereby granted, free of charge, to any person obtaining a
  // copy of this software and associated documentation files (the
  // "Software"), to deal in the Software without restriction, including
  // without limitation the rights to use, copy, modify, merge, publish,
  // distribute, sublicense, and/or sell copies of the Software, and to permit
  // persons to whom the Software is furnished to do so, subject to the
  // following conditions:
  //
  // The above copyright notice and this permission notice shall be included
  // in all copies or substantial portions of the Software.
  //
  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  // USE OR OTHER DEALINGS IN THE SOFTWARE.
  
  'use strict';
  
  /*<replacement>*/
  
  var Buffer = require('safe-buffer').Buffer;
  /*</replacement>*/
  
  var isEncoding = Buffer.isEncoding || function (encoding) {
    encoding = '' + encoding;
    switch (encoding && encoding.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 true;
      default:
        return false;
    }
  };
  
  function _normalizeEncoding(enc) {
    if (!enc) return 'utf8';
    var retried;
    while (true) {
      switch (enc) {
        case 'utf8':
        case 'utf-8':
          return 'utf8';
        case 'ucs2':
        case 'ucs-2':
        case 'utf16le':
        case 'utf-16le':
          return 'utf16le';
        case 'latin1':
        case 'binary':
          return 'latin1';
        case 'base64':
        case 'ascii':
        case 'hex':
          return enc;
        default:
          if (retried) return; // undefined
          enc = ('' + enc).toLowerCase();
          retried = true;
      }
    }
  };
  
  // Do not cache `Buffer.isEncoding` when checking encoding names as some
  // modules monkey-patch it to support additional encodings
  function normalizeEncoding(enc) {
    var nenc = _normalizeEncoding(enc);
    if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
    return nenc || enc;
  }
  
  // StringDecoder provides an interface for efficiently splitting a series of
  // buffers into a series of JS strings without breaking apart multi-byte
  // characters.
  exports.StringDecoder = StringDecoder;
  function StringDecoder(encoding) {
    this.encoding = normalizeEncoding(encoding);
    var nb;
    switch (this.encoding) {
      case 'utf16le':
        this.text = utf16Text;
        this.end = utf16End;
        nb = 4;
        break;
      case 'utf8':
        this.fillLast = utf8FillLast;
        nb = 4;
        break;
      case 'base64':
        this.text = base64Text;
        this.end = base64End;
        nb = 3;
        break;
      default:
        this.write = simpleWrite;
        this.end = simpleEnd;
        return;
    }
    this.lastNeed = 0;
    this.lastTotal = 0;
    this.lastChar = Buffer.allocUnsafe(nb);
  }
  
  StringDecoder.prototype.write = function (buf) {
    if (buf.length === 0) return '';
    var r;
    var i;
    if (this.lastNeed) {
      r = this.fillLast(buf);
      if (r === undefined) return '';
      i = this.lastNeed;
      this.lastNeed = 0;
    } else {
      i = 0;
    }
    if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
    return r || '';
  };
  
  StringDecoder.prototype.end = utf8End;
  
  // Returns only complete characters in a Buffer
  StringDecoder.prototype.text = utf8Text;
  
  // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
  StringDecoder.prototype.fillLast = function (buf) {
    if (this.lastNeed <= buf.length) {
      buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
      return this.lastChar.toString(this.encoding, 0, this.lastTotal);
    }
    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
    this.lastNeed -= buf.length;
  };
  
  // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
  // continuation byte. If an invalid byte is detected, -2 is returned.
  function utf8CheckByte(byte) {
    if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
    return byte >> 6 === 0x02 ? -1 : -2;
  }
  
  // Checks at most 3 bytes at the end of a Buffer in order to detect an
  // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
  // needed to complete the UTF-8 character (if applicable) are returned.
  function utf8CheckIncomplete(self, buf, i) {
    var j = buf.length - 1;
    if (j < i) return 0;
    var nb = utf8CheckByte(buf[j]);
    if (nb >= 0) {
      if (nb > 0) self.lastNeed = nb - 1;
      return nb;
    }
    if (--j < i || nb === -2) return 0;
    nb = utf8CheckByte(buf[j]);
    if (nb >= 0) {
      if (nb > 0) self.lastNeed = nb - 2;
      return nb;
    }
    if (--j < i || nb === -2) return 0;
    nb = utf8CheckByte(buf[j]);
    if (nb >= 0) {
      if (nb > 0) {
        if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
      }
      return nb;
    }
    return 0;
  }
  
  // Validates as many continuation bytes for a multi-byte UTF-8 character as
  // needed or are available. If we see a non-continuation byte where we expect
  // one, we "replace" the validated continuation bytes we've seen so far with
  // a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding
  // behavior. The continuation byte check is included three times in the case
  // where all of the continuation bytes for a character exist in the same buffer.
  // It is also done this way as a slight performance increase instead of using a
  // loop.
  function utf8CheckExtraBytes(self, buf, p) {
    if ((buf[0] & 0xC0) !== 0x80) {
      self.lastNeed = 0;
      return '\ufffd';
    }
    if (self.lastNeed > 1 && buf.length > 1) {
      if ((buf[1] & 0xC0) !== 0x80) {
        self.lastNeed = 1;
        return '\ufffd';
      }
      if (self.lastNeed > 2 && buf.length > 2) {
        if ((buf[2] & 0xC0) !== 0x80) {
          self.lastNeed = 2;
          return '\ufffd';
        }
      }
    }
  }
  
  // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
  function utf8FillLast(buf) {
    var p = this.lastTotal - this.lastNeed;
    var r = utf8CheckExtraBytes(this, buf, p);
    if (r !== undefined) return r;
    if (this.lastNeed <= buf.length) {
      buf.copy(this.lastChar, p, 0, this.lastNeed);
      return this.lastChar.toString(this.encoding, 0, this.lastTotal);
    }
    buf.copy(this.lastChar, p, 0, buf.length);
    this.lastNeed -= buf.length;
  }
  
  // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
  // partial character, the character's bytes are buffered until the required
  // number of bytes are available.
  function utf8Text(buf, i) {
    var total = utf8CheckIncomplete(this, buf, i);
    if (!this.lastNeed) return buf.toString('utf8', i);
    this.lastTotal = total;
    var end = buf.length - (total - this.lastNeed);
    buf.copy(this.lastChar, 0, end);
    return buf.toString('utf8', i, end);
  }
  
  // For UTF-8, a replacement character is added when ending on a partial
  // character.
  function utf8End(buf) {
    var r = buf && buf.length ? this.write(buf) : '';
    if (this.lastNeed) return r + '\ufffd';
    return r;
  }
  
  // UTF-16LE typically needs two bytes per character, but even if we have an even
  // number of bytes available, we need to check if we end on a leading/high
  // surrogate. In that case, we need to wait for the next two bytes in order to
  // decode the last character properly.
  function utf16Text(buf, i) {
    if ((buf.length - i) % 2 === 0) {
      var r = buf.toString('utf16le', i);
      if (r) {
        var c = r.charCodeAt(r.length - 1);
        if (c >= 0xD800 && c <= 0xDBFF) {
          this.lastNeed = 2;
          this.lastTotal = 4;
          this.lastChar[0] = buf[buf.length - 2];
          this.lastChar[1] = buf[buf.length - 1];
          return r.slice(0, -1);
        }
      }
      return r;
    }
    this.lastNeed = 1;
    this.lastTotal = 2;
    this.lastChar[0] = buf[buf.length - 1];
    return buf.toString('utf16le', i, buf.length - 1);
  }
  
  // For UTF-16LE we do not explicitly append special replacement characters if we
  // end on a partial character, we simply let v8 handle that.
  function utf16End(buf) {
    var r = buf && buf.length ? this.write(buf) : '';
    if (this.lastNeed) {
      var end = this.lastTotal - this.lastNeed;
      return r + this.lastChar.toString('utf16le', 0, end);
    }
    return r;
  }
  
  function base64Text(buf, i) {
    var n = (buf.length - i) % 3;
    if (n === 0) return buf.toString('base64', i);
    this.lastNeed = 3 - n;
    this.lastTotal = 3;
    if (n === 1) {
      this.lastChar[0] = buf[buf.length - 1];
    } else {
      this.lastChar[0] = buf[buf.length - 2];
      this.lastChar[1] = buf[buf.length - 1];
    }
    return buf.toString('base64', i, buf.length - n);
  }
  
  function base64End(buf) {
    var r = buf && buf.length ? this.write(buf) : '';
    if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
    return r;
  }
  
  // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
  function simpleWrite(buf) {
    return buf.toString(this.encoding);
  }
  
  function simpleEnd(buf) {
    return buf && buf.length ? this.write(buf) : '';
  }
  },{"safe-buffer":317}],315:[function(require,module,exports){
  var Stream = require('stream');
  if (process.env.READABLE_STREAM === 'disable' && Stream) {
    module.exports = Stream;
    exports = module.exports = Stream.Readable;
    exports.Readable = Stream.Readable;
    exports.Writable = Stream.Writable;
    exports.Duplex = Stream.Duplex;
    exports.Transform = Stream.Transform;
    exports.PassThrough = Stream.PassThrough;
    exports.Stream = Stream;
  } else {
    exports = module.exports = require('./lib/_stream_readable.js');
    exports.Stream = Stream || exports;
    exports.Readable = exports;
    exports.Writable = require('./lib/_stream_writable.js');
    exports.Duplex = require('./lib/_stream_duplex.js');
    exports.Transform = require('./lib/_stream_transform.js');
    exports.PassThrough = require('./lib/_stream_passthrough.js');
  }
  
  },{"./lib/_stream_duplex.js":305,"./lib/_stream_passthrough.js":306,"./lib/_stream_readable.js":307,"./lib/_stream_transform.js":308,"./lib/_stream_writable.js":309,"stream":undefined}],316:[function(require,module,exports){
  /**
   * Copyright (c) 2014-present, Facebook, Inc.
   *
   * This source code is licensed under the MIT license found in the
   * LICENSE file in the root directory of this source tree.
   */
  
  !(function(global) {
    "use strict";
  
    var Op = Object.prototype;
    var hasOwn = Op.hasOwnProperty;
    var undefined; // More compressible than void 0.
    var $Symbol = typeof Symbol === "function" ? Symbol : {};
    var iteratorSymbol = $Symbol.iterator || "@@iterator";
    var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
    var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
  
    var inModule = typeof module === "object";
    var runtime = global.regeneratorRuntime;
    if (runtime) {
      if (inModule) {
        // If regeneratorRuntime is defined globally and we're in a module,
        // make the exports object identical to regeneratorRuntime.
        module.exports = runtime;
      }
      // Don't bother evaluating the rest of this file if the runtime was
      // already defined globally.
      return;
    }
  
    // Define the runtime globally (as expected by generated code) as either
    // module.exports (if we're in a module) or a new, empty object.
    runtime = global.regeneratorRuntime = inModule ? module.exports : {};
  
    function wrap(innerFn, outerFn, self, tryLocsList) {
      // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
      var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
      var generator = Object.create(protoGenerator.prototype);
      var context = new Context(tryLocsList || []);
  
      // The ._invoke method unifies the implementations of the .next,
      // .throw, and .return methods.
      generator._invoke = makeInvokeMethod(innerFn, self, context);
  
      return generator;
    }
    runtime.wrap = wrap;
  
    // Try/catch helper to minimize deoptimizations. Returns a completion
    // record like context.tryEntries[i].completion. This interface could
    // have been (and was previously) designed to take a closure to be
    // invoked without arguments, but in all the cases we care about we
    // already have an existing method we want to call, so there's no need
    // to create a new function object. We can even get away with assuming
    // the method takes exactly one argument, since that happens to be true
    // in every case, so we don't have to touch the arguments object. The
    // only additional allocation required is the completion record, which
    // has a stable shape and so hopefully should be cheap to allocate.
    function tryCatch(fn, obj, arg) {
      try {
        return { type: "normal", arg: fn.call(obj, arg) };
      } catch (err) {
        return { type: "throw", arg: err };
      }
    }
  
    var GenStateSuspendedStart = "suspendedStart";
    var GenStateSuspendedYield = "suspendedYield";
    var GenStateExecuting = "executing";
    var GenStateCompleted = "completed";
  
    // Returning this object from the innerFn has the same effect as
    // breaking out of the dispatch switch statement.
    var ContinueSentinel = {};
  
    // Dummy constructor functions that we use as the .constructor and
    // .constructor.prototype properties for functions that return Generator
    // objects. For full spec compliance, you may wish to configure your
    // minifier not to mangle the names of these two functions.
    function Generator() {}
    function GeneratorFunction() {}
    function GeneratorFunctionPrototype() {}
  
    // This is a polyfill for %IteratorPrototype% for environments that
    // don't natively support it.
    var IteratorPrototype = {};
    IteratorPrototype[iteratorSymbol] = function () {
      return this;
    };
  
    var getProto = Object.getPrototypeOf;
    var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
    if (NativeIteratorPrototype &&
        NativeIteratorPrototype !== Op &&
        hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
      // This environment has a native %IteratorPrototype%; use it instead
      // of the polyfill.
      IteratorPrototype = NativeIteratorPrototype;
    }
  
    var Gp = GeneratorFunctionPrototype.prototype =
      Generator.prototype = Object.create(IteratorPrototype);
    GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
    GeneratorFunctionPrototype.constructor = GeneratorFunction;
    GeneratorFunctionPrototype[toStringTagSymbol] =
      GeneratorFunction.displayName = "GeneratorFunction";
  
    // Helper for defining the .next, .throw, and .return methods of the
    // Iterator interface in terms of a single ._invoke method.
    function defineIteratorMethods(prototype) {
      ["next", "throw", "return"].forEach(function(method) {
        prototype[method] = function(arg) {
          return this._invoke(method, arg);
        };
      });
    }
  
    runtime.isGeneratorFunction = function(genFun) {
      var ctor = typeof genFun === "function" && genFun.constructor;
      return ctor
        ? ctor === GeneratorFunction ||
          // For the native GeneratorFunction constructor, the best we can
          // do is to check its .name property.
          (ctor.displayName || ctor.name) === "GeneratorFunction"
        : false;
    };
  
    runtime.mark = function(genFun) {
      if (Object.setPrototypeOf) {
        Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
      } else {
        genFun.__proto__ = GeneratorFunctionPrototype;
        if (!(toStringTagSymbol in genFun)) {
          genFun[toStringTagSymbol] = "GeneratorFunction";
        }
      }
      genFun.prototype = Object.create(Gp);
      return genFun;
    };
  
    // Within the body of any async function, `await x` is transformed to
    // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
    // `hasOwn.call(value, "__await")` to determine if the yielded value is
    // meant to be awaited.
    runtime.awrap = function(arg) {
      return { __await: arg };
    };
  
    function AsyncIterator(generator) {
      function invoke(method, arg, resolve, reject) {
        var record = tryCatch(generator[method], generator, arg);
        if (record.type === "throw") {
          reject(record.arg);
        } else {
          var result = record.arg;
          var value = result.value;
          if (value &&
              typeof value === "object" &&
              hasOwn.call(value, "__await")) {
            return Promise.resolve(value.__await).then(function(value) {
              invoke("next", value, resolve, reject);
            }, function(err) {
              invoke("throw", err, resolve, reject);
            });
          }
  
          return Promise.resolve(value).then(function(unwrapped) {
            // When a yielded Promise is resolved, its final value becomes
            // the .value of the Promise<{value,done}> result for the
            // current iteration.
            result.value = unwrapped;
            resolve(result);
          }, function(error) {
            // If a rejected Promise was yielded, throw the rejection back
            // into the async generator function so it can be handled there.
            return invoke("throw", error, resolve, reject);
          });
        }
      }
  
      var previousPromise;
  
      function enqueue(method, arg) {
        function callInvokeWithMethodAndArg() {
          return new Promise(function(resolve, reject) {
            invoke(method, arg, resolve, reject);
          });
        }
  
        return previousPromise =
          // If enqueue has been called before, then we want to wait until
          // all previous Promises have been resolved before calling invoke,
          // so that results are always delivered in the correct order. If
          // enqueue has not been called before, then it is important to
          // call invoke immediately, without waiting on a callback to fire,
          // so that the async generator function has the opportunity to do
          // any necessary setup in a predictable way. This predictability
          // is why the Promise constructor synchronously invokes its
          // executor callback, and why async functions synchronously
          // execute code before the first await. Since we implement simple
          // async functions in terms of async generators, it is especially
          // important to get this right, even though it requires care.
          previousPromise ? previousPromise.then(
            callInvokeWithMethodAndArg,
            // Avoid propagating failures to Promises returned by later
            // invocations of the iterator.
            callInvokeWithMethodAndArg
          ) : callInvokeWithMethodAndArg();
      }
  
      // Define the unified helper method that is used to implement .next,
      // .throw, and .return (see defineIteratorMethods).
      this._invoke = enqueue;
    }
  
    defineIteratorMethods(AsyncIterator.prototype);
    AsyncIterator.prototype[asyncIteratorSymbol] = function () {
      return this;
    };
    runtime.AsyncIterator = AsyncIterator;
  
    // Note that simple async functions are implemented on top of
    // AsyncIterator objects; they just return a Promise for the value of
    // the final result produced by the iterator.
    runtime.async = function(innerFn, outerFn, self, tryLocsList) {
      var iter = new AsyncIterator(
        wrap(innerFn, outerFn, self, tryLocsList)
      );
  
      return runtime.isGeneratorFunction(outerFn)
        ? iter // If outerFn is a generator, return the full iterator.
        : iter.next().then(function(result) {
            return result.done ? result.value : iter.next();
          });
    };
  
    function makeInvokeMethod(innerFn, self, context) {
      var state = GenStateSuspendedStart;
  
      return function invoke(method, arg) {
        if (state === GenStateExecuting) {
          throw new Error("Generator is already running");
        }
  
        if (state === GenStateCompleted) {
          if (method === "throw") {
            throw arg;
          }
  
          // Be forgiving, per 25.3.3.3.3 of the spec:
          // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
          return doneResult();
        }
  
        context.method = method;
        context.arg = arg;
  
        while (true) {
          var delegate = context.delegate;
          if (delegate) {
            var delegateResult = maybeInvokeDelegate(delegate, context);
            if (delegateResult) {
              if (delegateResult === ContinueSentinel) continue;
              return delegateResult;
            }
          }
  
          if (context.method === "next") {
            // Setting context._sent for legacy support of Babel's
            // function.sent implementation.
            context.sent = context._sent = context.arg;
  
          } else if (context.method === "throw") {
            if (state === GenStateSuspendedStart) {
              state = GenStateCompleted;
              throw context.arg;
            }
  
            context.dispatchException(context.arg);
  
          } else if (context.method === "return") {
            context.abrupt("return", context.arg);
          }
  
          state = GenStateExecuting;
  
          var record = tryCatch(innerFn, self, context);
          if (record.type === "normal") {
            // If an exception is thrown from innerFn, we leave state ===
            // GenStateExecuting and loop back for another invocation.
            state = context.done
              ? GenStateCompleted
              : GenStateSuspendedYield;
  
            if (record.arg === ContinueSentinel) {
              continue;
            }
  
            return {
              value: record.arg,
              done: context.done
            };
  
          } else if (record.type === "throw") {
            state = GenStateCompleted;
            // Dispatch the exception by looping back around to the
            // context.dispatchException(context.arg) call above.
            context.method = "throw";
            context.arg = record.arg;
          }
        }
      };
    }
  
    // Call delegate.iterator[context.method](context.arg) and handle the
    // result, either by returning a { value, done } result from the
    // delegate iterator, or by modifying context.method and context.arg,
    // setting context.delegate to null, and returning the ContinueSentinel.
    function maybeInvokeDelegate(delegate, context) {
      var method = delegate.iterator[context.method];
      if (method === undefined) {
        // A .throw or .return when the delegate iterator has no .throw
        // method always terminates the yield* loop.
        context.delegate = null;
  
        if (context.method === "throw") {
          if (delegate.iterator.return) {
            // If the delegate iterator has a return method, give it a
            // chance to clean up.
            context.method = "return";
            context.arg = undefined;
            maybeInvokeDelegate(delegate, context);
  
            if (context.method === "throw") {
              // If maybeInvokeDelegate(context) changed context.method from
              // "return" to "throw", let that override the TypeError below.
              return ContinueSentinel;
            }
          }
  
          context.method = "throw";
          context.arg = new TypeError(
            "The iterator does not provide a 'throw' method");
        }
  
        return ContinueSentinel;
      }
  
      var record = tryCatch(method, delegate.iterator, context.arg);
  
      if (record.type === "throw") {
        context.method = "throw";
        context.arg = record.arg;
        context.delegate = null;
        return ContinueSentinel;
      }
  
      var info = record.arg;
  
      if (! info) {
        context.method = "throw";
        context.arg = new TypeError("iterator result is not an object");
        context.delegate = null;
        return ContinueSentinel;
      }
  
      if (info.done) {
        // Assign the result of the finished delegate to the temporary
        // variable specified by delegate.resultName (see delegateYield).
        context[delegate.resultName] = info.value;
  
        // Resume execution at the desired location (see delegateYield).
        context.next = delegate.nextLoc;
  
        // If context.method was "throw" but the delegate handled the
        // exception, let the outer generator proceed normally. If
        // context.method was "next", forget context.arg since it has been
        // "consumed" by the delegate iterator. If context.method was
        // "return", allow the original .return call to continue in the
        // outer generator.
        if (context.method !== "return") {
          context.method = "next";
          context.arg = undefined;
        }
  
      } else {
        // Re-yield the result returned by the delegate method.
        return info;
      }
  
      // The delegate iterator is finished, so forget it and continue with
      // the outer generator.
      context.delegate = null;
      return ContinueSentinel;
    }
  
    // Define Generator.prototype.{next,throw,return} in terms of the
    // unified ._invoke helper method.
    defineIteratorMethods(Gp);
  
    Gp[toStringTagSymbol] = "Generator";
  
    // A Generator should always return itself as the iterator object when the
    // @@iterator function is called on it. Some browsers' implementations of the
    // iterator prototype chain incorrectly implement this, causing the Generator
    // object to not be returned from this call. This ensures that doesn't happen.
    // See https://github.com/facebook/regenerator/issues/274 for more details.
    Gp[iteratorSymbol] = function() {
      return this;
    };
  
    Gp.toString = function() {
      return "[object Generator]";
    };
  
    function pushTryEntry(locs) {
      var entry = { tryLoc: locs[0] };
  
      if (1 in locs) {
        entry.catchLoc = locs[1];
      }
  
      if (2 in locs) {
        entry.finallyLoc = locs[2];
        entry.afterLoc = locs[3];
      }
  
      this.tryEntries.push(entry);
    }
  
    function resetTryEntry(entry) {
      var record = entry.completion || {};
      record.type = "normal";
      delete record.arg;
      entry.completion = record;
    }
  
    function Context(tryLocsList) {
      // The root entry object (effectively a try statement without a catch
      // or a finally block) gives us a place to store values thrown from
      // locations where there is no enclosing try statement.
      this.tryEntries = [{ tryLoc: "root" }];
      tryLocsList.forEach(pushTryEntry, this);
      this.reset(true);
    }
  
    runtime.keys = function(object) {
      var keys = [];
      for (var key in object) {
        keys.push(key);
      }
      keys.reverse();
  
      // Rather than returning an object with a next method, we keep
      // things simple and return the next function itself.
      return function next() {
        while (keys.length) {
          var key = keys.pop();
          if (key in object) {
            next.value = key;
            next.done = false;
            return next;
          }
        }
  
        // To avoid creating an additional object, we just hang the .value
        // and .done properties off the next function object itself. This
        // also ensures that the minifier will not anonymize the function.
        next.done = true;
        return next;
      };
    };
  
    function values(iterable) {
      if (iterable) {
        var iteratorMethod = iterable[iteratorSymbol];
        if (iteratorMethod) {
          return iteratorMethod.call(iterable);
        }
  
        if (typeof iterable.next === "function") {
          return iterable;
        }
  
        if (!isNaN(iterable.length)) {
          var i = -1, next = function next() {
            while (++i < iterable.length) {
              if (hasOwn.call(iterable, i)) {
                next.value = iterable[i];
                next.done = false;
                return next;
              }
            }
  
            next.value = undefined;
            next.done = true;
  
            return next;
          };
  
          return next.next = next;
        }
      }
  
      // Return an iterator with no values.
      return { next: doneResult };
    }
    runtime.values = values;
  
    function doneResult() {
      return { value: undefined, done: true };
    }
  
    Context.prototype = {
      constructor: Context,
  
      reset: function(skipTempReset) {
        this.prev = 0;
        this.next = 0;
        // Resetting context._sent for legacy support of Babel's
        // function.sent implementation.
        this.sent = this._sent = undefined;
        this.done = false;
        this.delegate = null;
  
        this.method = "next";
        this.arg = undefined;
  
        this.tryEntries.forEach(resetTryEntry);
  
        if (!skipTempReset) {
          for (var name in this) {
            // Not sure about the optimal order of these conditions:
            if (name.charAt(0) === "t" &&
                hasOwn.call(this, name) &&
                !isNaN(+name.slice(1))) {
              this[name] = undefined;
            }
          }
        }
      },
  
      stop: function() {
        this.done = true;
  
        var rootEntry = this.tryEntries[0];
        var rootRecord = rootEntry.completion;
        if (rootRecord.type === "throw") {
          throw rootRecord.arg;
        }
  
        return this.rval;
      },
  
      dispatchException: function(exception) {
        if (this.done) {
          throw exception;
        }
  
        var context = this;
        function handle(loc, caught) {
          record.type = "throw";
          record.arg = exception;
          context.next = loc;
  
          if (caught) {
            // If the dispatched exception was caught by a catch block,
            // then let that catch block handle the exception normally.
            context.method = "next";
            context.arg = undefined;
          }
  
          return !! caught;
        }
  
        for (var i = this.tryEntries.length - 1; i >= 0; --i) {
          var entry = this.tryEntries[i];
          var record = entry.completion;
  
          if (entry.tryLoc === "root") {
            // Exception thrown outside of any try block that could handle
            // it, so set the completion value of the entire function to
            // throw the exception.
            return handle("end");
          }
  
          if (entry.tryLoc <= this.prev) {
            var hasCatch = hasOwn.call(entry, "catchLoc");
            var hasFinally = hasOwn.call(entry, "finallyLoc");
  
            if (hasCatch && hasFinally) {
              if (this.prev < entry.catchLoc) {
                return handle(entry.catchLoc, true);
              } else if (this.prev < entry.finallyLoc) {
                return handle(entry.finallyLoc);
              }
  
            } else if (hasCatch) {
              if (this.prev < entry.catchLoc) {
                return handle(entry.catchLoc, true);
              }
  
            } else if (hasFinally) {
              if (this.prev < entry.finallyLoc) {
                return handle(entry.finallyLoc);
              }
  
            } else {
              throw new Error("try statement without catch or finally");
            }
          }
        }
      },
  
      abrupt: function(type, arg) {
        for (var i = this.tryEntries.length - 1; i >= 0; --i) {
          var entry = this.tryEntries[i];
          if (entry.tryLoc <= this.prev &&
              hasOwn.call(entry, "finallyLoc") &&
              this.prev < entry.finallyLoc) {
            var finallyEntry = entry;
            break;
          }
        }
  
        if (finallyEntry &&
            (type === "break" ||
             type === "continue") &&
            finallyEntry.tryLoc <= arg &&
            arg <= finallyEntry.finallyLoc) {
          // Ignore the finally entry if control is not jumping to a
          // location outside the try/catch block.
          finallyEntry = null;
        }
  
        var record = finallyEntry ? finallyEntry.completion : {};
        record.type = type;
        record.arg = arg;
  
        if (finallyEntry) {
          this.method = "next";
          this.next = finallyEntry.finallyLoc;
          return ContinueSentinel;
        }
  
        return this.complete(record);
      },
  
      complete: function(record, afterLoc) {
        if (record.type === "throw") {
          throw record.arg;
        }
  
        if (record.type === "break" ||
            record.type === "continue") {
          this.next = record.arg;
        } else if (record.type === "return") {
          this.rval = this.arg = record.arg;
          this.method = "return";
          this.next = "end";
        } else if (record.type === "normal" && afterLoc) {
          this.next = afterLoc;
        }
  
        return ContinueSentinel;
      },
  
      finish: function(finallyLoc) {
        for (var i = this.tryEntries.length - 1; i >= 0; --i) {
          var entry = this.tryEntries[i];
          if (entry.finallyLoc === finallyLoc) {
            this.complete(entry.completion, entry.afterLoc);
            resetTryEntry(entry);
            return ContinueSentinel;
          }
        }
      },
  
      "catch": function(tryLoc) {
        for (var i = this.tryEntries.length - 1; i >= 0; --i) {
          var entry = this.tryEntries[i];
          if (entry.tryLoc === tryLoc) {
            var record = entry.completion;
            if (record.type === "throw") {
              var thrown = record.arg;
              resetTryEntry(entry);
            }
            return thrown;
          }
        }
  
        // The context.catch method must only be called with a location
        // argument that corresponds to a known catch block.
        throw new Error("illegal catch attempt");
      },
  
      delegateYield: function(iterable, resultName, nextLoc) {
        this.delegate = {
          iterator: values(iterable),
          resultName: resultName,
          nextLoc: nextLoc
        };
  
        if (this.method === "next") {
          // Deliberately forget the last sent value so that we don't
          // accidentally pass it on to the delegate.
          this.arg = undefined;
        }
  
        return ContinueSentinel;
      }
    };
  })(
    // In sloppy mode, unbound `this` refers to the global object, fallback to
    // Function constructor if we're in global strict mode. That is sadly a form
    // of indirect eval which violates Content Security Policy.
    (function() {
      return this || (typeof self === "object" && self);
    })() || Function("return this")()
  );
  
  },{}],317:[function(require,module,exports){
  /* eslint-disable node/no-deprecated-api */
  var buffer = require('buffer')
  var Buffer = buffer.Buffer
  
  // alternative to using Object.keys for old browsers
  function copyProps (src, dst) {
    for (var key in src) {
      dst[key] = src[key]
    }
  }
  if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
    module.exports = buffer
  } else {
    // Copy properties from require('buffer')
    copyProps(buffer, exports)
    exports.Buffer = SafeBuffer
  }
  
  function SafeBuffer (arg, encodingOrOffset, length) {
    return Buffer(arg, encodingOrOffset, length)
  }
  
  // Copy static methods from Buffer
  copyProps(Buffer, SafeBuffer)
  
  SafeBuffer.from = function (arg, encodingOrOffset, length) {
    if (typeof arg === 'number') {
      throw new TypeError('Argument must not be a number')
    }
    return Buffer(arg, encodingOrOffset, length)
  }
  
  SafeBuffer.alloc = function (size, fill, encoding) {
    if (typeof size !== 'number') {
      throw new TypeError('Argument must be a number')
    }
    var buf = Buffer(size)
    if (fill !== undefined) {
      if (typeof encoding === 'string') {
        buf.fill(fill, encoding)
      } else {
        buf.fill(fill)
      }
    } else {
      buf.fill(0)
    }
    return buf
  }
  
  SafeBuffer.allocUnsafe = function (size) {
    if (typeof size !== 'number') {
      throw new TypeError('Argument must be a number')
    }
    return Buffer(size)
  }
  
  SafeBuffer.allocUnsafeSlow = function (size) {
    if (typeof size !== 'number') {
      throw new TypeError('Argument must be a number')
    }
    return buffer.SlowBuffer(size)
  }
  
  },{"buffer":undefined}],318:[function(require,module,exports){
  module.exports = shift
  
  function shift (stream) {
    var rs = stream._readableState
    if (!rs) return null
    return rs.objectMode ? stream.read() : stream.read(getStateLength(rs))
  }
  
  function getStateLength (state) {
    if (state.buffer.length) {
      // Since node 6.3.0 state.buffer is a BufferList not an array
      if (state.buffer.head) {
        return state.buffer.head.data.length
      }
  
      return state.buffer[0].length
    }
  
    return state.length
  }
  
  },{}],319:[function(require,module,exports){
  var chownr = require('chownr')
  var tar = require('tar-stream')
  var pump = require('pump')
  var mkdirp = require('mkdirp')
  var fs = require('fs')
  var path = require('path')
  var os = require('os')
  
  var win32 = os.platform() === 'win32'
  
  var noop = function () {}
  
  var echo = function (name) {
    return name
  }
  
  var normalize = !win32 ? echo : function (name) {
    return name.replace(/\\/g, '/').replace(/[:?<>|]/g, '_')
  }
  
  var statAll = function (fs, stat, cwd, ignore, entries, sort) {
    var queue = entries || ['.']
  
    return function loop (callback) {
      if (!queue.length) return callback()
      var next = queue.shift()
      var nextAbs = path.join(cwd, next)
  
      stat(nextAbs, function (err, stat) {
        if (err) return callback(err)
  
        if (!stat.isDirectory()) return callback(null, next, stat)
  
        fs.readdir(nextAbs, function (err, files) {
          if (err) return callback(err)
  
          if (sort) files.sort()
          for (var i = 0; i < files.length; i++) {
            if (!ignore(path.join(cwd, next, files[i]))) queue.push(path.join(next, files[i]))
          }
  
          callback(null, next, stat)
        })
      })
    }
  }
  
  var strip = function (map, level) {
    return function (header) {
      header.name = header.name.split('/').slice(level).join('/')
  
      var linkname = header.linkname
      if (linkname && (header.type === 'link' || path.isAbsolute(linkname))) {
        header.linkname = linkname.split('/').slice(level).join('/')
      }
  
      return map(header)
    }
  }
  
  exports.pack = function (cwd, opts) {
    if (!cwd) cwd = '.'
    if (!opts) opts = {}
  
    var xfs = opts.fs || fs
    var ignore = opts.ignore || opts.filter || noop
    var map = opts.map || noop
    var mapStream = opts.mapStream || echo
    var statNext = statAll(xfs, opts.dereference ? xfs.stat : xfs.lstat, cwd, ignore, opts.entries, opts.sort)
    var strict = opts.strict !== false
    var umask = typeof opts.umask === 'number' ? ~opts.umask : ~processUmask()
    var dmode = typeof opts.dmode === 'number' ? opts.dmode : 0
    var fmode = typeof opts.fmode === 'number' ? opts.fmode : 0
    var pack = opts.pack || tar.pack()
    var finish = opts.finish || noop
  
    if (opts.strip) map = strip(map, opts.strip)
  
    if (opts.readable) {
      dmode |= parseInt(555, 8)
      fmode |= parseInt(444, 8)
    }
    if (opts.writable) {
      dmode |= parseInt(333, 8)
      fmode |= parseInt(222, 8)
    }
  
    var onsymlink = function (filename, header) {
      xfs.readlink(path.join(cwd, filename), function (err, linkname) {
        if (err) return pack.destroy(err)
        header.linkname = normalize(linkname)
        pack.entry(header, onnextentry)
      })
    }
  
    var onstat = function (err, filename, stat) {
      if (err) return pack.destroy(err)
      if (!filename) {
        if (opts.finalize !== false) pack.finalize()
        return finish(pack)
      }
  
      if (stat.isSocket()) return onnextentry() // tar does not support sockets...
  
      var header = {
        name: normalize(filename),
        mode: (stat.mode | (stat.isDirectory() ? dmode : fmode)) & umask,
        mtime: stat.mtime,
        size: stat.size,
        type: 'file',
        uid: stat.uid,
        gid: stat.gid
      }
  
      if (stat.isDirectory()) {
        header.size = 0
        header.type = 'directory'
        header = map(header) || header
        return pack.entry(header, onnextentry)
      }
  
      if (stat.isSymbolicLink()) {
        header.size = 0
        header.type = 'symlink'
        header = map(header) || header
        return onsymlink(filename, header)
      }
  
      // TODO: add fifo etc...
  
      header = map(header) || header
  
      if (!stat.isFile()) {
        if (strict) return pack.destroy(new Error('unsupported type for ' + filename))
        return onnextentry()
      }
  
      var entry = pack.entry(header, onnextentry)
      if (!entry) return
  
      var rs = mapStream(xfs.createReadStream(path.join(cwd, filename)), header)
  
      rs.on('error', function (err) { // always forward errors on destroy
        entry.destroy(err)
      })
  
      pump(rs, entry)
    }
  
    var onnextentry = function (err) {
      if (err) return pack.destroy(err)
      statNext(onstat)
    }
  
    onnextentry()
  
    return pack
  }
  
  var head = function (list) {
    return list.length ? list[list.length - 1] : null
  }
  
  var processGetuid = function () {
    return process.getuid ? process.getuid() : -1
  }
  
  var processUmask = function () {
    return process.umask ? process.umask() : 0
  }
  
  exports.extract = function (cwd, opts) {
    if (!cwd) cwd = '.'
    if (!opts) opts = {}
  
    var xfs = opts.fs || fs
    var ignore = opts.ignore || opts.filter || noop
    var map = opts.map || noop
    var mapStream = opts.mapStream || echo
    var own = opts.chown !== false && !win32 && processGetuid() === 0
    var extract = opts.extract || tar.extract()
    var stack = []
    var now = new Date()
    var umask = typeof opts.umask === 'number' ? ~opts.umask : ~processUmask()
    var dmode = typeof opts.dmode === 'number' ? opts.dmode : 0
    var fmode = typeof opts.fmode === 'number' ? opts.fmode : 0
    var strict = opts.strict !== false
  
    if (opts.strip) map = strip(map, opts.strip)
  
    if (opts.readable) {
      dmode |= parseInt(555, 8)
      fmode |= parseInt(444, 8)
    }
    if (opts.writable) {
      dmode |= parseInt(333, 8)
      fmode |= parseInt(222, 8)
    }
  
    var utimesParent = function (name, cb) { // we just set the mtime on the parent dir again everytime we write an entry
      var top
      while ((top = head(stack)) && name.slice(0, top[0].length) !== top[0]) stack.pop()
      if (!top) return cb()
      xfs.utimes(top[0], now, top[1], cb)
    }
  
    var utimes = function (name, header, cb) {
      if (opts.utimes === false) return cb()
  
      if (header.type === 'directory') return xfs.utimes(name, now, header.mtime, cb)
      if (header.type === 'symlink') return utimesParent(name, cb) // TODO: how to set mtime on link?
  
      xfs.utimes(name, now, header.mtime, function (err) {
        if (err) return cb(err)
        utimesParent(name, cb)
      })
    }
  
    var chperm = function (name, header, cb) {
      var link = header.type === 'symlink'
      var chmod = link ? xfs.lchmod : xfs.chmod
      var chown = link ? xfs.lchown : xfs.chown
  
      if (!chmod) return cb()
  
      var mode = (header.mode | (header.type === 'directory' ? dmode : fmode)) & umask
      chmod(name, mode, function (err) {
        if (err) return cb(err)
        if (!own) return cb()
        if (!chown) return cb()
        chown(name, header.uid, header.gid, cb)
      })
    }
  
    extract.on('entry', function (header, stream, next) {
      header = map(header) || header
      header.name = normalize(header.name)
      var name = path.join(cwd, path.join('/', header.name))
  
      if (ignore(name, header)) {
        stream.resume()
        return next()
      }
  
      var stat = function (err) {
        if (err) return next(err)
        utimes(name, header, function (err) {
          if (err) return next(err)
          if (win32) return next()
          chperm(name, header, next)
        })
      }
  
      var onsymlink = function () {
        if (win32) return next() // skip symlinks on win for now before it can be tested
        xfs.unlink(name, function () {
          xfs.symlink(header.linkname, name, stat)
        })
      }
  
      var onlink = function () {
        if (win32) return next() // skip links on win for now before it can be tested
        xfs.unlink(name, function () {
          var srcpath = path.join(cwd, path.join('/', header.linkname))
  
          xfs.link(srcpath, name, function (err) {
            if (err && err.code === 'EPERM' && opts.hardlinkAsFilesFallback) {
              stream = xfs.createReadStream(srcpath)
              return onfile()
            }
  
            stat(err)
          })
        })
      }
  
      var onfile = function () {
        var ws = xfs.createWriteStream(name)
        var rs = mapStream(stream, header)
  
        ws.on('error', function (err) { // always forward errors on destroy
          rs.destroy(err)
        })
  
        pump(rs, ws, function (err) {
          if (err) return next(err)
          ws.on('close', stat)
        })
      }
  
      if (header.type === 'directory') {
        stack.push([name, header.mtime])
        return mkdirfix(name, {
          fs: xfs, own: own, uid: header.uid, gid: header.gid
        }, stat)
      }
  
      var dir = path.dirname(name)
  
      validate(xfs, dir, path.join(cwd, '.'), function (err, valid) {
        if (err) return next(err)
        if (!valid) return next(new Error(dir + ' is not a valid path'))
  
        mkdirfix(dir, {
          fs: xfs, own: own, uid: header.uid, gid: header.gid
        }, function (err) {
          if (err) return next(err)
  
          switch (header.type) {
            case 'file': return onfile()
            case 'link': return onlink()
            case 'symlink': return onsymlink()
          }
  
          if (strict) return next(new Error('unsupported type for ' + name + ' (' + header.type + ')'))
  
          stream.resume()
          next()
        })
      })
    })
  
    if (opts.finish) extract.on('finish', opts.finish)
  
    return extract
  }
  
  function validate (fs, name, root, cb) {
    if (name === root) return cb(null, true)
    fs.lstat(name, function (err, st) {
      if (err && err.code !== 'ENOENT') return cb(err)
      if (err || st.isDirectory()) return validate(fs, path.join(name, '..'), root, cb)
      cb(null, false)
    })
  }
  
  function mkdirfix (name, opts, cb) {
    mkdirp(name, {fs: opts.fs}, function (err, made) {
      if (!err && made && opts.own) {
        chownr(made, opts.uid, opts.gid, cb)
      } else {
        cb(err)
      }
    })
  }
  
  },{"chownr":8,"fs":undefined,"mkdirp":296,"os":undefined,"path":undefined,"pump":301,"tar-stream":322}],320:[function(require,module,exports){
  var util = require('util')
  var bl = require('bl')
  var xtend = require('xtend')
  var headers = require('./headers')
  
  var Writable = require('readable-stream').Writable
  var PassThrough = require('readable-stream').PassThrough
  
  var noop = function () {}
  
  var overflow = function (size) {
    size &= 511
    return size && 512 - size
  }
  
  var emptyStream = function (self, offset) {
    var s = new Source(self, offset)
    s.end()
    return s
  }
  
  var mixinPax = function (header, pax) {
    if (pax.path) header.name = pax.path
    if (pax.linkpath) header.linkname = pax.linkpath
    if (pax.size) header.size = parseInt(pax.size, 10)
    header.pax = pax
    return header
  }
  
  var Source = function (self, offset) {
    this._parent = self
    this.offset = offset
    PassThrough.call(this)
  }
  
  util.inherits(Source, PassThrough)
  
  Source.prototype.destroy = function (err) {
    this._parent.destroy(err)
  }
  
  var Extract = function (opts) {
    if (!(this instanceof Extract)) return new Extract(opts)
    Writable.call(this, opts)
  
    opts = opts || {}
  
    this._offset = 0
    this._buffer = bl()
    this._missing = 0
    this._partial = false
    this._onparse = noop
    this._header = null
    this._stream = null
    this._overflow = null
    this._cb = null
    this._locked = false
    this._destroyed = false
    this._pax = null
    this._paxGlobal = null
    this._gnuLongPath = null
    this._gnuLongLinkPath = null
  
    var self = this
    var b = self._buffer
  
    var oncontinue = function () {
      self._continue()
    }
  
    var onunlock = function (err) {
      self._locked = false
      if (err) return self.destroy(err)
      if (!self._stream) oncontinue()
    }
  
    var onstreamend = function () {
      self._stream = null
      var drain = overflow(self._header.size)
      if (drain) self._parse(drain, ondrain)
      else self._parse(512, onheader)
      if (!self._locked) oncontinue()
    }
  
    var ondrain = function () {
      self._buffer.consume(overflow(self._header.size))
      self._parse(512, onheader)
      oncontinue()
    }
  
    var onpaxglobalheader = function () {
      var size = self._header.size
      self._paxGlobal = headers.decodePax(b.slice(0, size))
      b.consume(size)
      onstreamend()
    }
  
    var onpaxheader = function () {
      var size = self._header.size
      self._pax = headers.decodePax(b.slice(0, size))
      if (self._paxGlobal) self._pax = xtend(self._paxGlobal, self._pax)
      b.consume(size)
      onstreamend()
    }
  
    var ongnulongpath = function () {
      var size = self._header.size
      this._gnuLongPath = headers.decodeLongPath(b.slice(0, size), opts.filenameEncoding)
      b.consume(size)
      onstreamend()
    }
  
    var ongnulonglinkpath = function () {
      var size = self._header.size
      this._gnuLongLinkPath = headers.decodeLongPath(b.slice(0, size), opts.filenameEncoding)
      b.consume(size)
      onstreamend()
    }
  
    var onheader = function () {
      var offset = self._offset
      var header
      try {
        header = self._header = headers.decode(b.slice(0, 512), opts.filenameEncoding)
      } catch (err) {
        self.emit('error', err)
      }
      b.consume(512)
  
      if (!header) {
        self._parse(512, onheader)
        oncontinue()
        return
      }
      if (header.type === 'gnu-long-path') {
        self._parse(header.size, ongnulongpath)
        oncontinue()
        return
      }
      if (header.type === 'gnu-long-link-path') {
        self._parse(header.size, ongnulonglinkpath)
        oncontinue()
        return
      }
      if (header.type === 'pax-global-header') {
        self._parse(header.size, onpaxglobalheader)
        oncontinue()
        return
      }
      if (header.type === 'pax-header') {
        self._parse(header.size, onpaxheader)
        oncontinue()
        return
      }
  
      if (self._gnuLongPath) {
        header.name = self._gnuLongPath
        self._gnuLongPath = null
      }
  
      if (self._gnuLongLinkPath) {
        header.linkname = self._gnuLongLinkPath
        self._gnuLongLinkPath = null
      }
  
      if (self._pax) {
        self._header = header = mixinPax(header, self._pax)
        self._pax = null
      }
  
      self._locked = true
  
      if (!header.size || header.type === 'directory') {
        self._parse(512, onheader)
        self.emit('entry', header, emptyStream(self, offset), onunlock)
        return
      }
  
      self._stream = new Source(self, offset)
  
      self.emit('entry', header, self._stream, onunlock)
      self._parse(header.size, onstreamend)
      oncontinue()
    }
  
    this._onheader = onheader
    this._parse(512, onheader)
  }
  
  util.inherits(Extract, Writable)
  
  Extract.prototype.destroy = function (err) {
    if (this._destroyed) return
    this._destroyed = true
  
    if (err) this.emit('error', err)
    this.emit('close')
    if (this._stream) this._stream.emit('close')
  }
  
  Extract.prototype._parse = function (size, onparse) {
    if (this._destroyed) return
    this._offset += size
    this._missing = size
    if (onparse === this._onheader) this._partial = false
    this._onparse = onparse
  }
  
  Extract.prototype._continue = function () {
    if (this._destroyed) return
    var cb = this._cb
    this._cb = noop
    if (this._overflow) this._write(this._overflow, undefined, cb)
    else cb()
  }
  
  Extract.prototype._write = function (data, enc, cb) {
    if (this._destroyed) return
  
    var s = this._stream
    var b = this._buffer
    var missing = this._missing
    if (data.length) this._partial = true
  
    // we do not reach end-of-chunk now. just forward it
  
    if (data.length < missing) {
      this._missing -= data.length
      this._overflow = null
      if (s) return s.write(data, cb)
      b.append(data)
      return cb()
    }
  
    // end-of-chunk. the parser should call cb.
  
    this._cb = cb
    this._missing = 0
  
    var overflow = null
    if (data.length > missing) {
      overflow = data.slice(missing)
      data = data.slice(0, missing)
    }
  
    if (s) s.end(data)
    else b.append(data)
  
    this._overflow = overflow
    this._onparse()
  }
  
  Extract.prototype._final = function (cb) {
    if (this._partial) return this.destroy(new Error('Unexpected end of data'))
    cb()
  }
  
  module.exports = Extract
  
  },{"./headers":321,"bl":3,"readable-stream":315,"util":undefined,"xtend":328}],321:[function(require,module,exports){
  var toBuffer = require('to-buffer')
  var alloc = require('buffer-alloc')
  
  var ZEROS = '0000000000000000000'
  var SEVENS = '7777777777777777777'
  var ZERO_OFFSET = '0'.charCodeAt(0)
  var USTAR = 'ustar\x0000'
  var MASK = parseInt('7777', 8)
  
  var clamp = function (index, len, defaultValue) {
    if (typeof index !== 'number') return defaultValue
    index = ~~index // Coerce to integer.
    if (index >= len) return len
    if (index >= 0) return index
    index += len
    if (index >= 0) return index
    return 0
  }
  
  var toType = function (flag) {
    switch (flag) {
      case 0:
        return 'file'
      case 1:
        return 'link'
      case 2:
        return 'symlink'
      case 3:
        return 'character-device'
      case 4:
        return 'block-device'
      case 5:
        return 'directory'
      case 6:
        return 'fifo'
      case 7:
        return 'contiguous-file'
      case 72:
        return 'pax-header'
      case 55:
        return 'pax-global-header'
      case 27:
        return 'gnu-long-link-path'
      case 28:
      case 30:
        return 'gnu-long-path'
    }
  
    return null
  }
  
  var toTypeflag = function (flag) {
    switch (flag) {
      case 'file':
        return 0
      case 'link':
        return 1
      case 'symlink':
        return 2
      case 'character-device':
        return 3
      case 'block-device':
        return 4
      case 'directory':
        return 5
      case 'fifo':
        return 6
      case 'contiguous-file':
        return 7
      case 'pax-header':
        return 72
    }
  
    return 0
  }
  
  var indexOf = function (block, num, offset, end) {
    for (; offset < end; offset++) {
      if (block[offset] === num) return offset
    }
    return end
  }
  
  var cksum = function (block) {
    var sum = 8 * 32
    for (var i = 0; i < 148; i++) sum += block[i]
    for (var j = 156; j < 512; j++) sum += block[j]
    return sum
  }
  
  var encodeOct = function (val, n) {
    val = val.toString(8)
    if (val.length > n) return SEVENS.slice(0, n) + ' '
    else return ZEROS.slice(0, n - val.length) + val + ' '
  }
  
  /* Copied from the node-tar repo and modified to meet
   * tar-stream coding standard.
   *
   * Source: https://github.com/npm/node-tar/blob/51b6627a1f357d2eb433e7378e5f05e83b7aa6cd/lib/header.js#L349
   */
  function parse256 (buf) {
    // first byte MUST be either 80 or FF
    // 80 for positive, FF for 2's comp
    var positive
    if (buf[0] === 0x80) positive = true
    else if (buf[0] === 0xFF) positive = false
    else return null
  
    // build up a base-256 tuple from the least sig to the highest
    var zero = false
    var tuple = []
    for (var i = buf.length - 1; i > 0; i--) {
      var byte = buf[i]
      if (positive) tuple.push(byte)
      else if (zero && byte === 0) tuple.push(0)
      else if (zero) {
        zero = false
        tuple.push(0x100 - byte)
      } else tuple.push(0xFF - byte)
    }
  
    var sum = 0
    var l = tuple.length
    for (i = 0; i < l; i++) {
      sum += tuple[i] * Math.pow(256, i)
    }
  
    return positive ? sum : -1 * sum
  }
  
  var decodeOct = function (val, offset, length) {
    val = val.slice(offset, offset + length)
    offset = 0
  
    // If prefixed with 0x80 then parse as a base-256 integer
    if (val[offset] & 0x80) {
      return parse256(val)
    } else {
      // Older versions of tar can prefix with spaces
      while (offset < val.length && val[offset] === 32) offset++
      var end = clamp(indexOf(val, 32, offset, val.length), val.length, val.length)
      while (offset < end && val[offset] === 0) offset++
      if (end === offset) return 0
      return parseInt(val.slice(offset, end).toString(), 8)
    }
  }
  
  var decodeStr = function (val, offset, length, encoding) {
    return val.slice(offset, indexOf(val, 0, offset, offset + length)).toString(encoding)
  }
  
  var addLength = function (str) {
    var len = Buffer.byteLength(str)
    var digits = Math.floor(Math.log(len) / Math.log(10)) + 1
    if (len + digits >= Math.pow(10, digits)) digits++
  
    return (len + digits) + str
  }
  
  exports.decodeLongPath = function (buf, encoding) {
    return decodeStr(buf, 0, buf.length, encoding)
  }
  
  exports.encodePax = function (opts) { // TODO: encode more stuff in pax
    var result = ''
    if (opts.name) result += addLength(' path=' + opts.name + '\n')
    if (opts.linkname) result += addLength(' linkpath=' + opts.linkname + '\n')
    var pax = opts.pax
    if (pax) {
      for (var key in pax) {
        result += addLength(' ' + key + '=' + pax[key] + '\n')
      }
    }
    return toBuffer(result)
  }
  
  exports.decodePax = function (buf) {
    var result = {}
  
    while (buf.length) {
      var i = 0
      while (i < buf.length && buf[i] !== 32) i++
      var len = parseInt(buf.slice(0, i).toString(), 10)
      if (!len) return result
  
      var b = buf.slice(i + 1, len - 1).toString()
      var keyIndex = b.indexOf('=')
      if (keyIndex === -1) return result
      result[b.slice(0, keyIndex)] = b.slice(keyIndex + 1)
  
      buf = buf.slice(len)
    }
  
    return result
  }
  
  exports.encode = function (opts) {
    var buf = alloc(512)
    var name = opts.name
    var prefix = ''
  
    if (opts.typeflag === 5 && name[name.length - 1] !== '/') name += '/'
    if (Buffer.byteLength(name) !== name.length) return null // utf-8
  
    while (Buffer.byteLength(name) > 100) {
      var i = name.indexOf('/')
      if (i === -1) return null
      prefix += prefix ? '/' + name.slice(0, i) : name.slice(0, i)
      name = name.slice(i + 1)
    }
  
    if (Buffer.byteLength(name) > 100 || Buffer.byteLength(prefix) > 155) return null
    if (opts.linkname && Buffer.byteLength(opts.linkname) > 100) return null
  
    buf.write(name)
    buf.write(encodeOct(opts.mode & MASK, 6), 100)
    buf.write(encodeOct(opts.uid, 6), 108)
    buf.write(encodeOct(opts.gid, 6), 116)
    buf.write(encodeOct(opts.size, 11), 124)
    buf.write(encodeOct((opts.mtime.getTime() / 1000) | 0, 11), 136)
  
    buf[156] = ZERO_OFFSET + toTypeflag(opts.type)
  
    if (opts.linkname) buf.write(opts.linkname, 157)
  
    buf.write(USTAR, 257)
    if (opts.uname) buf.write(opts.uname, 265)
    if (opts.gname) buf.write(opts.gname, 297)
    buf.write(encodeOct(opts.devmajor || 0, 6), 329)
    buf.write(encodeOct(opts.devminor || 0, 6), 337)
  
    if (prefix) buf.write(prefix, 345)
  
    buf.write(encodeOct(cksum(buf), 6), 148)
  
    return buf
  }
  
  exports.decode = function (buf, filenameEncoding) {
    var typeflag = buf[156] === 0 ? 0 : buf[156] - ZERO_OFFSET
  
    var name = decodeStr(buf, 0, 100, filenameEncoding)
    var mode = decodeOct(buf, 100, 8)
    var uid = decodeOct(buf, 108, 8)
    var gid = decodeOct(buf, 116, 8)
    var size = decodeOct(buf, 124, 12)
    var mtime = decodeOct(buf, 136, 12)
    var type = toType(typeflag)
    var linkname = buf[157] === 0 ? null : decodeStr(buf, 157, 100, filenameEncoding)
    var uname = decodeStr(buf, 265, 32)
    var gname = decodeStr(buf, 297, 32)
    var devmajor = decodeOct(buf, 329, 8)
    var devminor = decodeOct(buf, 337, 8)
  
    if (buf[345]) name = decodeStr(buf, 345, 155, filenameEncoding) + '/' + name
  
    // to support old tar versions that use trailing / to indicate dirs
    if (typeflag === 0 && name && name[name.length - 1] === '/') typeflag = 5
  
    var c = cksum(buf)
  
    // checksum is still initial value if header was null.
    if (c === 8 * 32) return null
  
    // valid checksum
    if (c !== decodeOct(buf, 148, 8)) throw new Error('Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?')
  
    return {
      name: name,
      mode: mode,
      uid: uid,
      gid: gid,
      size: size,
      mtime: new Date(1000 * mtime),
      type: type,
      linkname: linkname,
      uname: uname,
      gname: gname,
      devmajor: devmajor,
      devminor: devminor
    }
  }
  
  },{"buffer-alloc":5,"to-buffer":325}],322:[function(require,module,exports){
  exports.extract = require('./extract')
  exports.pack = require('./pack')
  
  },{"./extract":320,"./pack":323}],323:[function(require,module,exports){
  var constants = require('fs-constants')
  var eos = require('end-of-stream')
  var util = require('util')
  var alloc = require('buffer-alloc')
  var toBuffer = require('to-buffer')
  
  var Readable = require('readable-stream').Readable
  var Writable = require('readable-stream').Writable
  var StringDecoder = require('string_decoder').StringDecoder
  
  var headers = require('./headers')
  
  var DMODE = parseInt('755', 8)
  var FMODE = parseInt('644', 8)
  
  var END_OF_TAR = alloc(1024)
  
  var noop = function () {}
  
  var overflow = function (self, size) {
    size &= 511
    if (size) self.push(END_OF_TAR.slice(0, 512 - size))
  }
  
  function modeToType (mode) {
    switch (mode & constants.S_IFMT) {
      case constants.S_IFBLK: return 'block-device'
      case constants.S_IFCHR: return 'character-device'
      case constants.S_IFDIR: return 'directory'
      case constants.S_IFIFO: return 'fifo'
      case constants.S_IFLNK: return 'symlink'
    }
  
    return 'file'
  }
  
  var Sink = function (to) {
    Writable.call(this)
    this.written = 0
    this._to = to
    this._destroyed = false
  }
  
  util.inherits(Sink, Writable)
  
  Sink.prototype._write = function (data, enc, cb) {
    this.written += data.length
    if (this._to.push(data)) return cb()
    this._to._drain = cb
  }
  
  Sink.prototype.destroy = function () {
    if (this._destroyed) return
    this._destroyed = true
    this.emit('close')
  }
  
  var LinkSink = function () {
    Writable.call(this)
    this.linkname = ''
    this._decoder = new StringDecoder('utf-8')
    this._destroyed = false
  }
  
  util.inherits(LinkSink, Writable)
  
  LinkSink.prototype._write = function (data, enc, cb) {
    this.linkname += this._decoder.write(data)
    cb()
  }
  
  LinkSink.prototype.destroy = function () {
    if (this._destroyed) return
    this._destroyed = true
    this.emit('close')
  }
  
  var Void = function () {
    Writable.call(this)
    this._destroyed = false
  }
  
  util.inherits(Void, Writable)
  
  Void.prototype._write = function (data, enc, cb) {
    cb(new Error('No body allowed for this entry'))
  }
  
  Void.prototype.destroy = function () {
    if (this._destroyed) return
    this._destroyed = true
    this.emit('close')
  }
  
  var Pack = function (opts) {
    if (!(this instanceof Pack)) return new Pack(opts)
    Readable.call(this, opts)
  
    this._drain = noop
    this._finalized = false
    this._finalizing = false
    this._destroyed = false
    this._stream = null
  }
  
  util.inherits(Pack, Readable)
  
  Pack.prototype.entry = function (header, buffer, callback) {
    if (this._stream) throw new Error('already piping an entry')
    if (this._finalized || this._destroyed) return
  
    if (typeof buffer === 'function') {
      callback = buffer
      buffer = null
    }
  
    if (!callback) callback = noop
  
    var self = this
  
    if (!header.size || header.type === 'symlink') header.size = 0
    if (!header.type) header.type = modeToType(header.mode)
    if (!header.mode) header.mode = header.type === 'directory' ? DMODE : FMODE
    if (!header.uid) header.uid = 0
    if (!header.gid) header.gid = 0
    if (!header.mtime) header.mtime = new Date()
  
    if (typeof buffer === 'string') buffer = toBuffer(buffer)
    if (Buffer.isBuffer(buffer)) {
      header.size = buffer.length
      this._encode(header)
      this.push(buffer)
      overflow(self, header.size)
      process.nextTick(callback)
      return new Void()
    }
  
    if (header.type === 'symlink' && !header.linkname) {
      var linkSink = new LinkSink()
      eos(linkSink, function (err) {
        if (err) { // stream was closed
          self.destroy()
          return callback(err)
        }
  
        header.linkname = linkSink.linkname
        self._encode(header)
        callback()
      })
  
      return linkSink
    }
  
    this._encode(header)
  
    if (header.type !== 'file' && header.type !== 'contiguous-file') {
      process.nextTick(callback)
      return new Void()
    }
  
    var sink = new Sink(this)
  
    this._stream = sink
  
    eos(sink, function (err) {
      self._stream = null
  
      if (err) { // stream was closed
        self.destroy()
        return callback(err)
      }
  
      if (sink.written !== header.size) { // corrupting tar
        self.destroy()
        return callback(new Error('size mismatch'))
      }
  
      overflow(self, header.size)
      if (self._finalizing) self.finalize()
      callback()
    })
  
    return sink
  }
  
  Pack.prototype.finalize = function () {
    if (this._stream) {
      this._finalizing = true
      return
    }
  
    if (this._finalized) return
    this._finalized = true
    this.push(END_OF_TAR)
    this.push(null)
  }
  
  Pack.prototype.destroy = function (err) {
    if (this._destroyed) return
    this._destroyed = true
  
    if (err) this.emit('error', err)
    this.emit('close')
    if (this._stream && this._stream.destroy) this._stream.destroy()
  }
  
  Pack.prototype._encode = function (header) {
    if (!header.pax) {
      var buf = headers.encode(header)
      if (buf) {
        this.push(buf)
        return
      }
    }
    this._encodePax(header)
  }
  
  Pack.prototype._encodePax = function (header) {
    var paxHeader = headers.encodePax({
      name: header.name,
      linkname: header.linkname,
      pax: header.pax
    })
  
    var newHeader = {
      name: 'PaxHeader',
      mode: header.mode,
      uid: header.uid,
      gid: header.gid,
      size: paxHeader.length,
      mtime: header.mtime,
      type: 'pax-header',
      linkname: header.linkname && 'PaxHeader',
      uname: header.uname,
      gname: header.gname,
      devmajor: header.devmajor,
      devminor: header.devminor
    }
  
    this.push(headers.encode(newHeader))
    this.push(paxHeader)
    overflow(this, paxHeader.length)
  
    newHeader.size = header.size
    newHeader.type = header.type
    this.push(headers.encode(newHeader))
  }
  
  Pack.prototype._read = function (n) {
    var drain = this._drain
    this._drain = noop
    drain()
  }
  
  module.exports = Pack
  
  },{"./headers":321,"buffer-alloc":5,"end-of-stream":289,"fs-constants":290,"readable-stream":315,"string_decoder":undefined,"to-buffer":325,"util":undefined}],324:[function(require,module,exports){
  var Transform = require('readable-stream').Transform
    , inherits  = require('util').inherits
    , xtend     = require('xtend')
  
  function DestroyableTransform(opts) {
    Transform.call(this, opts)
    this._destroyed = false
  }
  
  inherits(DestroyableTransform, Transform)
  
  DestroyableTransform.prototype.destroy = function(err) {
    if (this._destroyed) return
    this._destroyed = true
    
    var self = this
    process.nextTick(function() {
      if (err)
        self.emit('error', err)
      self.emit('close')
    })
  }
  
  // a noop _transform function
  function noop (chunk, enc, callback) {
    callback(null, chunk)
  }
  
  
  // create a new export function, used by both the main export and
  // the .ctor export, contains common logic for dealing with arguments
  function through2 (construct) {
    return function (options, transform, flush) {
      if (typeof options == 'function') {
        flush     = transform
        transform = options
        options   = {}
      }
  
      if (typeof transform != 'function')
        transform = noop
  
      if (typeof flush != 'function')
        flush = null
  
      return construct(options, transform, flush)
    }
  }
  
  
  // main export, just make me a transform stream!
  module.exports = through2(function (options, transform, flush) {
    var t2 = new DestroyableTransform(options)
  
    t2._transform = transform
  
    if (flush)
      t2._flush = flush
  
    return t2
  })
  
  
  // make me a reusable prototype that I can `new`, or implicitly `new`
  // with a constructor call
  module.exports.ctor = through2(function (options, transform, flush) {
    function Through2 (override) {
      if (!(this instanceof Through2))
        return new Through2(override)
  
      this.options = xtend(options, override)
  
      DestroyableTransform.call(this, this.options)
    }
  
    inherits(Through2, DestroyableTransform)
  
    Through2.prototype._transform = transform
  
    if (flush)
      Through2.prototype._flush = flush
  
    return Through2
  })
  
  
  module.exports.obj = through2(function (options, transform, flush) {
    var t2 = new DestroyableTransform(xtend({ objectMode: true, highWaterMark: 16 }, options))
  
    t2._transform = transform
  
    if (flush)
      t2._flush = flush
  
    return t2
  })
  
  },{"readable-stream":315,"util":undefined,"xtend":328}],325:[function(require,module,exports){
  module.exports = toBuffer
  
  var makeBuffer = Buffer.from && Buffer.from !== Uint8Array.from ? Buffer.from : bufferFrom
  
  function bufferFrom (buf, enc) {
    return new Buffer(buf, enc)
  }
  
  function toBuffer (buf, enc) {
    if (Buffer.isBuffer(buf)) return buf
    if (typeof buf === 'string') return makeBuffer(buf, enc)
    if (Array.isArray(buf)) return makeBuffer(buf)
    throw new Error('Input should be a buffer or a string')
  }
  
  },{}],326:[function(require,module,exports){
  
  /**
   * For Node.js, simply re-export the core `util.deprecate` function.
   */
  
  module.exports = require('util').deprecate;
  
  },{"util":undefined}],327:[function(require,module,exports){
  // Returns a wrapper function that returns a wrapped callback
  // The wrapper function should do some stuff, and return a
  // presumably different callback function.
  // This makes sure that own properties are retained, so that
  // decorations and such are not lost along the way.
  module.exports = wrappy
  function wrappy (fn, cb) {
    if (fn && cb) return wrappy(fn)(cb)
  
    if (typeof fn !== 'function')
      throw new TypeError('need wrapper function')
  
    Object.keys(fn).forEach(function (k) {
      wrapper[k] = fn[k]
    })
  
    return wrapper
  
    function wrapper() {
      var args = new Array(arguments.length)
      for (var i = 0; i < args.length; i++) {
        args[i] = arguments[i]
      }
      var ret = fn.apply(this, args)
      var cb = args[args.length-1]
      if (typeof ret === 'function' && ret !== cb) {
        Object.keys(cb).forEach(function (k) {
          ret[k] = cb[k]
        })
      }
      return ret
    }
  }
  
  },{}],328:[function(require,module,exports){
  module.exports = extend
  
  var hasOwnProperty = Object.prototype.hasOwnProperty;
  
  function extend() {
      var target = {}
  
      for (var i = 0; i < arguments.length; i++) {
          var source = arguments[i]
  
          for (var key in source) {
              if (hasOwnProperty.call(source, key)) {
                  target[key] = source[key]
              }
          }
      }
  
      return target
  }
  
  },{}]},{},[1]);
  