vbapm 0.6.3-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +246 -0
- package/lib/_commonjsHelpers-553b27b3.js +2 -0
- package/lib/_commonjsHelpers-553b27b3.js.map +1 -0
- package/lib/build-project-55e5df48.js +4 -0
- package/lib/build-project-55e5df48.js.map +1 -0
- package/lib/build-target-283e1e7d.js +10 -0
- package/lib/build-target-283e1e7d.js.map +1 -0
- package/lib/create-project-905598ca.js +11 -0
- package/lib/create-project-905598ca.js.map +1 -0
- package/lib/debug.js +2 -0
- package/lib/debug.js.map +1 -0
- package/lib/export-project-55168787.js +5 -0
- package/lib/export-project-55168787.js.map +1 -0
- package/lib/export-target-c9ddd2fa.js +5 -0
- package/lib/export-target-c9ddd2fa.js.map +1 -0
- package/lib/get-target-23b8cc04.js +12 -0
- package/lib/get-target-23b8cc04.js.map +1 -0
- package/lib/index-35cff1d5.js +38 -0
- package/lib/index-35cff1d5.js.map +1 -0
- package/lib/index-87f55e79.js +4 -0
- package/lib/index-87f55e79.js.map +1 -0
- package/lib/index-b49bd5b2.js +2 -0
- package/lib/index-b49bd5b2.js.map +1 -0
- package/lib/index-c97017db.js +2 -0
- package/lib/index-c97017db.js.map +1 -0
- package/lib/index-d9ba3ba0.js +6 -0
- package/lib/index-d9ba3ba0.js.map +1 -0
- package/lib/index-ffbba08f.js +3 -0
- package/lib/index-ffbba08f.js.map +1 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/lib/inherits-713f4554.js +2 -0
- package/lib/inherits-713f4554.js.map +1 -0
- package/lib/init-project-a62cb644.js +16 -0
- package/lib/init-project-a62cb644.js.map +1 -0
- package/lib/load-from-project-e6530a69.js +6 -0
- package/lib/load-from-project-e6530a69.js.map +1 -0
- package/lib/minimatch-3a1d1fa9.js +2 -0
- package/lib/minimatch-3a1d1fa9.js.map +1 -0
- package/lib/once-9eb67b4f.js +2 -0
- package/lib/once-9eb67b4f.js.map +1 -0
- package/lib/project-d43b4e0c.js +30 -0
- package/lib/project-d43b4e0c.js.map +1 -0
- package/lib/run-macro-f4aa7c14.js +2 -0
- package/lib/run-macro-f4aa7c14.js.map +1 -0
- package/lib/sat-solver-01d6409e.js +2 -0
- package/lib/sat-solver-01d6409e.js.map +1 -0
- package/lib/src/actions/build-project.d.ts +2 -0
- package/lib/src/actions/create-project.d.ts +8 -0
- package/lib/src/actions/export-project.d.ts +6 -0
- package/lib/src/actions/increment-version.d.ts +5 -0
- package/lib/src/actions/init-project.d.ts +9 -0
- package/lib/src/actions/run-macro.d.ts +8 -0
- package/lib/src/actions/test-project.d.ts +5 -0
- package/lib/src/addin.d.ts +36 -0
- package/lib/src/bin/vba-blocks-build.d.ts +2 -0
- package/lib/src/bin/vba-blocks-export.d.ts +2 -0
- package/lib/src/bin/vba-blocks-init.d.ts +2 -0
- package/lib/src/bin/vba-blocks-new.d.ts +2 -0
- package/lib/src/bin/vba-blocks-run.d.ts +2 -0
- package/lib/src/bin/vba-blocks-test.d.ts +2 -0
- package/lib/src/bin/vba-blocks-version.d.ts +2 -0
- package/lib/src/bin/vba-blocks.d.ts +2 -0
- package/lib/src/build/apply-changeset.d.ts +3 -0
- package/lib/src/build/build-graph.d.ts +18 -0
- package/lib/src/build/changeset.d.ts +14 -0
- package/lib/src/build/compare-build-graphs.d.ts +3 -0
- package/lib/src/build/component.d.ts +25 -0
- package/lib/src/build/index.d.ts +7 -0
- package/lib/src/build/load-from-export.d.ts +2 -0
- package/lib/src/build/load-from-project.d.ts +5 -0
- package/lib/src/build/stage-build-graph.d.ts +2 -0
- package/lib/src/build/transform-build-graph.d.ts +3 -0
- package/lib/src/build/transforms/editor-config.d.ts +3 -0
- package/lib/src/cache.d.ts +9 -0
- package/lib/src/config.d.ts +29 -0
- package/lib/src/debug.d.ts +2 -0
- package/lib/src/env.d.ts +21 -0
- package/lib/src/errors.d.ts +56 -0
- package/lib/src/index.d.ts +16 -0
- package/lib/src/installer.d.ts +3 -0
- package/lib/src/lockfile/index.d.ts +23 -0
- package/lib/src/lockfile/is-lockfile-valid.d.ts +10 -0
- package/lib/src/lockfile/lockfile.d.ts +26 -0
- package/lib/src/manifest/dependency.d.ts +25 -0
- package/lib/src/manifest/index.d.ts +34 -0
- package/lib/src/manifest/reference.d.ts +12 -0
- package/lib/src/manifest/source.d.ts +8 -0
- package/lib/src/manifest/target.d.ts +10 -0
- package/lib/src/manifest/version.d.ts +3 -0
- package/lib/src/messages.d.ts +22 -0
- package/lib/src/professional/sources/git-source.d.ts +7 -0
- package/lib/src/professional/workspace.d.ts +10 -0
- package/lib/src/project.d.ts +48 -0
- package/lib/src/reporter.d.ts +12 -0
- package/lib/src/resolve/dependency-graph.d.ts +4 -0
- package/lib/src/resolve/index.d.ts +6 -0
- package/lib/src/resolve/latest-solver.d.ts +8 -0
- package/lib/src/resolve/resolver.d.ts +23 -0
- package/lib/src/resolve/sat-solver.d.ts +7 -0
- package/lib/src/sources/index.d.ts +16 -0
- package/lib/src/sources/path-source.d.ts +7 -0
- package/lib/src/sources/registration.d.ts +17 -0
- package/lib/src/sources/registry-source.d.ts +32 -0
- package/lib/src/sources/source.d.ts +6 -0
- package/lib/src/targets/add-target.d.ts +8 -0
- package/lib/src/targets/build-target.d.ts +41 -0
- package/lib/src/targets/export-target.d.ts +15 -0
- package/lib/src/targets/get-target.d.ts +7 -0
- package/lib/src/targets/index.d.ts +3 -0
- package/lib/src/targets/project-info.d.ts +7 -0
- package/lib/src/targets/transform-target.d.ts +3 -0
- package/lib/src/targets/transforms/core-xml.d.ts +2 -0
- package/lib/src/targets/transforms/workbook-xml.d.ts +2 -0
- package/lib/src/utils/async-map.d.ts +4 -0
- package/lib/src/utils/download.d.ts +1 -0
- package/lib/src/utils/fs.d.ts +23 -0
- package/lib/src/utils/get-staging.d.ts +1 -0
- package/lib/src/utils/git.d.ts +4 -0
- package/lib/src/utils/github.d.ts +9 -0
- package/lib/src/utils/has.d.ts +1 -0
- package/lib/src/utils/hash.d.ts +8 -0
- package/lib/src/utils/interop.d.ts +1 -0
- package/lib/src/utils/is.d.ts +5 -0
- package/lib/src/utils/noop.d.ts +1 -0
- package/lib/src/utils/observable.d.ts +15 -0
- package/lib/src/utils/parallel.d.ts +6 -0
- package/lib/src/utils/path.d.ts +7 -0
- package/lib/src/utils/pipe.d.ts +5 -0
- package/lib/src/utils/run.d.ts +17 -0
- package/lib/src/utils/stdout-file.d.ts +3 -0
- package/lib/src/utils/text.d.ts +4 -0
- package/lib/src/utils/toml.d.ts +4 -0
- package/lib/src/utils/unique.d.ts +1 -0
- package/lib/src/utils/without.d.ts +1 -0
- package/lib/src/utils/xml.d.ts +10 -0
- package/lib/src/utils/zip.d.ts +17 -0
- package/lib/test-project-d4f237d1.js +2 -0
- package/lib/test-project-d4f237d1.js.map +1 -0
- package/lib/text-ba532b40.js +10 -0
- package/lib/text-ba532b40.js.map +1 -0
- package/lib/tmp-bc08ebcf.js +10 -0
- package/lib/tmp-bc08ebcf.js.map +1 -0
- package/lib/toml-patch.es-6bd2145d.js +4 -0
- package/lib/toml-patch.es-6bd2145d.js.map +1 -0
- package/lib/vba-blocks-build-a717fcdb.js +10 -0
- package/lib/vba-blocks-build-a717fcdb.js.map +1 -0
- package/lib/vba-blocks-export-7e2c75cc.js +8 -0
- package/lib/vba-blocks-export-7e2c75cc.js.map +1 -0
- package/lib/vba-blocks-init-54531020.js +17 -0
- package/lib/vba-blocks-init-54531020.js.map +1 -0
- package/lib/vba-blocks-new-3210d92c.js +18 -0
- package/lib/vba-blocks-new-3210d92c.js.map +1 -0
- package/lib/vba-blocks-run-ab9d4ad4.js +11 -0
- package/lib/vba-blocks-run-ab9d4ad4.js.map +1 -0
- package/lib/vba-blocks-test-da5dba90.js +16 -0
- package/lib/vba-blocks-test-da5dba90.js.map +1 -0
- package/lib/vba-blocks-version-e1b3c35a.js +9 -0
- package/lib/vba-blocks-version-e1b3c35a.js.map +1 -0
- package/lib/vba-blocks.js +43 -0
- package/lib/vba-blocks.js.map +1 -0
- package/lib/workbook-xml-69fff4ae.js +3 -0
- package/lib/workbook-xml-69fff4ae.js.map +1 -0
- package/package.json +116 -0
- package/run-scripts/run.applescript +78 -0
- package/run-scripts/run.ps1 +211 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-d9ba3ba0.js","sources":["../node_modules/file-type/index.js","../node_modules/is-stream/index.js","../node_modules/decompress-tar/node_modules/readable-stream/duplex.js","../node_modules/decompress-tar/node_modules/bl/bl.js","../node_modules/xtend/immutable.js","../node_modules/to-buffer/index.js","../node_modules/buffer-fill/index.js","../node_modules/buffer-alloc-unsafe/index.js","../node_modules/buffer-alloc/index.js","../node_modules/decompress-tar/node_modules/tar-stream/headers.js","../node_modules/decompress-tar/node_modules/readable-stream/readable.js","../node_modules/decompress-tar/node_modules/tar-stream/extract.js","../node_modules/decompress-tar/node_modules/tar-stream/pack.js","../node_modules/decompress-tar/node_modules/tar-stream/index.js","../node_modules/decompress-tar/index.js","../node_modules/decompress-tarbz2/node_modules/file-type/index.js","../node_modules/seek-bzip/lib/bitreader.js","../node_modules/seek-bzip/lib/stream.js","../node_modules/seek-bzip/lib/crc32.js","../node_modules/seek-bzip/lib/index.js","../node_modules/through/index.js","../node_modules/unbzip2-stream/lib/bzip2.js","../node_modules/unbzip2-stream/lib/bit_iterator.js","../node_modules/unbzip2-stream/index.js","../node_modules/decompress-tarbz2/index.js","../node_modules/pinkie/index.js","../node_modules/decompress-unzip/node_modules/file-type/index.js","../node_modules/pinkie-promise/index.js","../node_modules/object-assign/index.js","../node_modules/decompress-unzip/node_modules/get-stream/buffer-stream.js","../node_modules/decompress-unzip/node_modules/get-stream/index.js","../node_modules/decompress-unzip/node_modules/pify/index.js","../node_modules/pend/index.js","../node_modules/fd-slicer/index.js","../node_modules/yauzl/index.js","../node_modules/decompress-unzip/index.js","../node_modules/decompress/node_modules/make-dir/node_modules/pify/index.js","../node_modules/decompress/node_modules/make-dir/index.js","../node_modules/decompress/node_modules/pify/index.js","../node_modules/strip-dirs/index.js","../node_modules/is-natural-number/index.js","../node_modules/decompress/index.js","../node_modules/decompress-targz/index.js"],"sourcesContent":["'use strict';\n\nmodule.exports = input => {\n\tconst buf = new Uint8Array(input);\n\n\tif (!(buf && buf.length > 1)) {\n\t\treturn null;\n\t}\n\n\tconst check = (header, opts) => {\n\t\topts = Object.assign({\n\t\t\toffset: 0\n\t\t}, opts);\n\n\t\tfor (let i = 0; i < header.length; i++) {\n\t\t\tif (header[i] !== buf[i + opts.offset]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t};\n\n\tif (check([0xFF, 0xD8, 0xFF])) {\n\t\treturn {\n\t\t\text: 'jpg',\n\t\t\tmime: 'image/jpeg'\n\t\t};\n\t}\n\n\tif (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\treturn {\n\t\t\text: 'png',\n\t\t\tmime: 'image/png'\n\t\t};\n\t}\n\n\tif (check([0x47, 0x49, 0x46])) {\n\t\treturn {\n\t\t\text: 'gif',\n\t\t\tmime: 'image/gif'\n\t\t};\n\t}\n\n\tif (check([0x57, 0x45, 0x42, 0x50], {offset: 8})) {\n\t\treturn {\n\t\t\text: 'webp',\n\t\t\tmime: 'image/webp'\n\t\t};\n\t}\n\n\tif (check([0x46, 0x4C, 0x49, 0x46])) {\n\t\treturn {\n\t\t\text: 'flif',\n\t\t\tmime: 'image/flif'\n\t\t};\n\t}\n\n\t// Needs to be before `tif` check\n\tif (\n\t\t(check([0x49, 0x49, 0x2A, 0x0]) || check([0x4D, 0x4D, 0x0, 0x2A])) &&\n\t\tcheck([0x43, 0x52], {offset: 8})\n\t) {\n\t\treturn {\n\t\t\text: 'cr2',\n\t\t\tmime: 'image/x-canon-cr2'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x49, 0x49, 0x2A, 0x0]) ||\n\t\tcheck([0x4D, 0x4D, 0x0, 0x2A])\n\t) {\n\t\treturn {\n\t\t\text: 'tif',\n\t\t\tmime: 'image/tiff'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x4D])) {\n\t\treturn {\n\t\t\text: 'bmp',\n\t\t\tmime: 'image/bmp'\n\t\t};\n\t}\n\n\tif (check([0x49, 0x49, 0xBC])) {\n\t\treturn {\n\t\t\text: 'jxr',\n\t\t\tmime: 'image/vnd.ms-photo'\n\t\t};\n\t}\n\n\tif (check([0x38, 0x42, 0x50, 0x53])) {\n\t\treturn {\n\t\t\text: 'psd',\n\t\t\tmime: 'image/vnd.adobe.photoshop'\n\t\t};\n\t}\n\n\t// Needs to be before the `zip` check\n\tif (\n\t\tcheck([0x50, 0x4B, 0x3, 0x4]) &&\n\t\tcheck([0x6D, 0x69, 0x6D, 0x65, 0x74, 0x79, 0x70, 0x65, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x65, 0x70, 0x75, 0x62, 0x2B, 0x7A, 0x69, 0x70], {offset: 30})\n\t) {\n\t\treturn {\n\t\t\text: 'epub',\n\t\t\tmime: 'application/epub+zip'\n\t\t};\n\t}\n\n\t// Needs to be before `zip` check\n\t// Assumes signed `.xpi` from addons.mozilla.org\n\tif (\n\t\tcheck([0x50, 0x4B, 0x3, 0x4]) &&\n\t\tcheck([0x4D, 0x45, 0x54, 0x41, 0x2D, 0x49, 0x4E, 0x46, 0x2F, 0x6D, 0x6F, 0x7A, 0x69, 0x6C, 0x6C, 0x61, 0x2E, 0x72, 0x73, 0x61], {offset: 30})\n\t) {\n\t\treturn {\n\t\t\text: 'xpi',\n\t\t\tmime: 'application/x-xpinstall'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x50, 0x4B]) &&\n\t\t(buf[2] === 0x3 || buf[2] === 0x5 || buf[2] === 0x7) &&\n\t\t(buf[3] === 0x4 || buf[3] === 0x6 || buf[3] === 0x8)\n\t) {\n\t\treturn {\n\t\t\text: 'zip',\n\t\t\tmime: 'application/zip'\n\t\t};\n\t}\n\n\tif (check([0x75, 0x73, 0x74, 0x61, 0x72], {offset: 257})) {\n\t\treturn {\n\t\t\text: 'tar',\n\t\t\tmime: 'application/x-tar'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7]) &&\n\t\t(buf[6] === 0x0 || buf[6] === 0x1)\n\t) {\n\t\treturn {\n\t\t\text: 'rar',\n\t\t\tmime: 'application/x-rar-compressed'\n\t\t};\n\t}\n\n\tif (check([0x1F, 0x8B, 0x8])) {\n\t\treturn {\n\t\t\text: 'gz',\n\t\t\tmime: 'application/gzip'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x5A, 0x68])) {\n\t\treturn {\n\t\t\text: 'bz2',\n\t\t\tmime: 'application/x-bzip2'\n\t\t};\n\t}\n\n\tif (check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) {\n\t\treturn {\n\t\t\text: '7z',\n\t\t\tmime: 'application/x-7z-compressed'\n\t\t};\n\t}\n\n\tif (check([0x78, 0x01])) {\n\t\treturn {\n\t\t\text: 'dmg',\n\t\t\tmime: 'application/x-apple-diskimage'\n\t\t};\n\t}\n\n\tif (\n\t\t(\n\t\t\tcheck([0x0, 0x0, 0x0]) &&\n\t\t\t(buf[3] === 0x18 || buf[3] === 0x20) &&\n\t\t\tcheck([0x66, 0x74, 0x79, 0x70], {offset: 4})\n\t\t) ||\n\t\tcheck([0x33, 0x67, 0x70, 0x35]) ||\n\t\t(\n\t\t\tcheck([0x0, 0x0, 0x0, 0x1C, 0x66, 0x74, 0x79, 0x70, 0x6D, 0x70, 0x34, 0x32]) &&\n\t\t\tcheck([0x6D, 0x70, 0x34, 0x31, 0x6D, 0x70, 0x34, 0x32, 0x69, 0x73, 0x6F, 0x6D], {offset: 16})\n\t\t) ||\n\t\tcheck([0x0, 0x0, 0x0, 0x1C, 0x66, 0x74, 0x79, 0x70, 0x69, 0x73, 0x6F, 0x6D]) ||\n\t\tcheck([0x0, 0x0, 0x0, 0x1C, 0x66, 0x74, 0x79, 0x70, 0x6D, 0x70, 0x34, 0x32, 0x0, 0x0, 0x0, 0x0])\n\t) {\n\t\treturn {\n\t\t\text: 'mp4',\n\t\t\tmime: 'video/mp4'\n\t\t};\n\t}\n\n\tif (check([0x0, 0x0, 0x0, 0x1C, 0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x56])) {\n\t\treturn {\n\t\t\text: 'm4v',\n\t\t\tmime: 'video/x-m4v'\n\t\t};\n\t}\n\n\tif (check([0x4D, 0x54, 0x68, 0x64])) {\n\t\treturn {\n\t\t\text: 'mid',\n\t\t\tmime: 'audio/midi'\n\t\t};\n\t}\n\n\t// https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska\n\tif (check([0x1A, 0x45, 0xDF, 0xA3])) {\n\t\tconst sliced = buf.subarray(4, 4 + 4096);\n\t\tconst idPos = sliced.findIndex((el, i, arr) => arr[i] === 0x42 && arr[i + 1] === 0x82);\n\n\t\tif (idPos >= 0) {\n\t\t\tconst docTypePos = idPos + 3;\n\t\t\tconst findDocType = type => Array.from(type).every((c, i) => sliced[docTypePos + i] === c.charCodeAt(0));\n\n\t\t\tif (findDocType('matroska')) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mkv',\n\t\t\t\t\tmime: 'video/x-matroska'\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (findDocType('webm')) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'webm',\n\t\t\t\t\tmime: 'video/webm'\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\tif (check([0x0, 0x0, 0x0, 0x14, 0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20]) ||\n\t\tcheck([0x66, 0x72, 0x65, 0x65], {offset: 4}) ||\n\t\tcheck([0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20], {offset: 4}) ||\n\t\tcheck([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // MJPEG\n\t\tcheck([0x77, 0x69, 0x64, 0x65], {offset: 4})) {\n\t\treturn {\n\t\t\text: 'mov',\n\t\t\tmime: 'video/quicktime'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x52, 0x49, 0x46, 0x46]) &&\n\t\tcheck([0x41, 0x56, 0x49], {offset: 8})\n\t) {\n\t\treturn {\n\t\t\text: 'avi',\n\t\t\tmime: 'video/x-msvideo'\n\t\t};\n\t}\n\n\tif (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) {\n\t\treturn {\n\t\t\text: 'wmv',\n\t\t\tmime: 'video/x-ms-wmv'\n\t\t};\n\t}\n\n\tif (check([0x0, 0x0, 0x1, 0xBA])) {\n\t\treturn {\n\t\t\text: 'mpg',\n\t\t\tmime: 'video/mpeg'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x49, 0x44, 0x33]) ||\n\t\tcheck([0xFF, 0xFB])\n\t) {\n\t\treturn {\n\t\t\text: 'mp3',\n\t\t\tmime: 'audio/mpeg'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41], {offset: 4}) ||\n\t\tcheck([0x4D, 0x34, 0x41, 0x20])\n\t) {\n\t\treturn {\n\t\t\text: 'm4a',\n\t\t\tmime: 'audio/m4a'\n\t\t};\n\t}\n\n\t// Needs to be before `ogg` check\n\tif (check([0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64], {offset: 28})) {\n\t\treturn {\n\t\t\text: 'opus',\n\t\t\tmime: 'audio/opus'\n\t\t};\n\t}\n\n\tif (check([0x4F, 0x67, 0x67, 0x53])) {\n\t\treturn {\n\t\t\text: 'ogg',\n\t\t\tmime: 'audio/ogg'\n\t\t};\n\t}\n\n\tif (check([0x66, 0x4C, 0x61, 0x43])) {\n\t\treturn {\n\t\t\text: 'flac',\n\t\t\tmime: 'audio/x-flac'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x52, 0x49, 0x46, 0x46]) &&\n\t\tcheck([0x57, 0x41, 0x56, 0x45], {offset: 8})\n\t) {\n\t\treturn {\n\t\t\text: 'wav',\n\t\t\tmime: 'audio/x-wav'\n\t\t};\n\t}\n\n\tif (check([0x23, 0x21, 0x41, 0x4D, 0x52, 0x0A])) {\n\t\treturn {\n\t\t\text: 'amr',\n\t\t\tmime: 'audio/amr'\n\t\t};\n\t}\n\n\tif (check([0x25, 0x50, 0x44, 0x46])) {\n\t\treturn {\n\t\t\text: 'pdf',\n\t\t\tmime: 'application/pdf'\n\t\t};\n\t}\n\n\tif (check([0x4D, 0x5A])) {\n\t\treturn {\n\t\t\text: 'exe',\n\t\t\tmime: 'application/x-msdownload'\n\t\t};\n\t}\n\n\tif (\n\t\t(buf[0] === 0x43 || buf[0] === 0x46) &&\n\t\tcheck([0x57, 0x53], {offset: 1})\n\t) {\n\t\treturn {\n\t\t\text: 'swf',\n\t\t\tmime: 'application/x-shockwave-flash'\n\t\t};\n\t}\n\n\tif (check([0x7B, 0x5C, 0x72, 0x74, 0x66])) {\n\t\treturn {\n\t\t\text: 'rtf',\n\t\t\tmime: 'application/rtf'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x61, 0x73, 0x6D])) {\n\t\treturn {\n\t\t\text: 'wasm',\n\t\t\tmime: 'application/wasm'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x77, 0x4F, 0x46, 0x46]) &&\n\t\t(\n\t\t\tcheck([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||\n\t\t\tcheck([0x4F, 0x54, 0x54, 0x4F], {offset: 4})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff',\n\t\t\tmime: 'font/woff'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x77, 0x4F, 0x46, 0x32]) &&\n\t\t(\n\t\t\tcheck([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||\n\t\t\tcheck([0x4F, 0x54, 0x54, 0x4F], {offset: 4})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff2',\n\t\t\tmime: 'font/woff2'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x4C, 0x50], {offset: 34}) &&\n\t\t(\n\t\t\tcheck([0x00, 0x00, 0x01], {offset: 8}) ||\n\t\t\tcheck([0x01, 0x00, 0x02], {offset: 8}) ||\n\t\t\tcheck([0x02, 0x00, 0x02], {offset: 8})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'eot',\n\t\t\tmime: 'application/octet-stream'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x01, 0x00, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'ttf',\n\t\t\tmime: 'font/ttf'\n\t\t};\n\t}\n\n\tif (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) {\n\t\treturn {\n\t\t\text: 'otf',\n\t\t\tmime: 'font/otf'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x01, 0x00])) {\n\t\treturn {\n\t\t\text: 'ico',\n\t\t\tmime: 'image/x-icon'\n\t\t};\n\t}\n\n\tif (check([0x46, 0x4C, 0x56, 0x01])) {\n\t\treturn {\n\t\t\text: 'flv',\n\t\t\tmime: 'video/x-flv'\n\t\t};\n\t}\n\n\tif (check([0x25, 0x21])) {\n\t\treturn {\n\t\t\text: 'ps',\n\t\t\tmime: 'application/postscript'\n\t\t};\n\t}\n\n\tif (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) {\n\t\treturn {\n\t\t\text: 'xz',\n\t\t\tmime: 'application/x-xz'\n\t\t};\n\t}\n\n\tif (check([0x53, 0x51, 0x4C, 0x69])) {\n\t\treturn {\n\t\t\text: 'sqlite',\n\t\t\tmime: 'application/x-sqlite3'\n\t\t};\n\t}\n\n\tif (check([0x4E, 0x45, 0x53, 0x1A])) {\n\t\treturn {\n\t\t\text: 'nes',\n\t\t\tmime: 'application/x-nintendo-nes-rom'\n\t\t};\n\t}\n\n\tif (check([0x43, 0x72, 0x32, 0x34])) {\n\t\treturn {\n\t\t\text: 'crx',\n\t\t\tmime: 'application/x-google-chrome-extension'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x4D, 0x53, 0x43, 0x46]) ||\n\t\tcheck([0x49, 0x53, 0x63, 0x28])\n\t) {\n\t\treturn {\n\t\t\text: 'cab',\n\t\t\tmime: 'application/vnd.ms-cab-compressed'\n\t\t};\n\t}\n\n\t// Needs to be before `ar` check\n\tif (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E, 0x0A, 0x64, 0x65, 0x62, 0x69, 0x61, 0x6E, 0x2D, 0x62, 0x69, 0x6E, 0x61, 0x72, 0x79])) {\n\t\treturn {\n\t\t\text: 'deb',\n\t\t\tmime: 'application/x-deb'\n\t\t};\n\t}\n\n\tif (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E])) {\n\t\treturn {\n\t\t\text: 'ar',\n\t\t\tmime: 'application/x-unix-archive'\n\t\t};\n\t}\n\n\tif (check([0xED, 0xAB, 0xEE, 0xDB])) {\n\t\treturn {\n\t\t\text: 'rpm',\n\t\t\tmime: 'application/x-rpm'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x1F, 0xA0]) ||\n\t\tcheck([0x1F, 0x9D])\n\t) {\n\t\treturn {\n\t\t\text: 'Z',\n\t\t\tmime: 'application/x-compress'\n\t\t};\n\t}\n\n\tif (check([0x4C, 0x5A, 0x49, 0x50])) {\n\t\treturn {\n\t\t\text: 'lz',\n\t\t\tmime: 'application/x-lzip'\n\t\t};\n\t}\n\n\tif (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {\n\t\treturn {\n\t\t\text: 'msi',\n\t\t\tmime: 'application/x-msi'\n\t\t};\n\t}\n\n\tif (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) {\n\t\treturn {\n\t\t\text: 'mxf',\n\t\t\tmime: 'application/mxf'\n\t\t};\n\t}\n\n\tif (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) {\n\t\treturn {\n\t\t\text: 'mts',\n\t\t\tmime: 'video/mp2t'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x4C, 0x45, 0x4E, 0x44, 0x45, 0x52])) {\n\t\treturn {\n\t\t\text: 'blend',\n\t\t\tmime: 'application/x-blender'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x50, 0x47, 0xFB])) {\n\t\treturn {\n\t\t\text: 'bpg',\n\t\t\tmime: 'image/bpg'\n\t\t};\n\t}\n\n\treturn null;\n};\n","'use strict';\n\nvar isStream = module.exports = function (stream) {\n\treturn stream !== null && typeof stream === 'object' && typeof stream.pipe === 'function';\n};\n\nisStream.writable = function (stream) {\n\treturn isStream(stream) && stream.writable !== false && typeof stream._write === 'function' && typeof stream._writableState === 'object';\n};\n\nisStream.readable = function (stream) {\n\treturn isStream(stream) && stream.readable !== false && typeof stream._read === 'function' && typeof stream._readableState === 'object';\n};\n\nisStream.duplex = function (stream) {\n\treturn isStream.writable(stream) && isStream.readable(stream);\n};\n\nisStream.transform = function (stream) {\n\treturn isStream.duplex(stream) && typeof stream._transform === 'function' && typeof stream._transformState === 'object';\n};\n","module.exports = require('stream').Duplex;","var DuplexStream = require('readable-stream/duplex')\n , util = require('util')\n , Buffer = require('safe-buffer').Buffer\n\n\nfunction BufferList (callback) {\n if (!(this instanceof BufferList))\n return new BufferList(callback)\n\n this._bufs = []\n this.length = 0\n\n if (typeof callback == 'function') {\n this._callback = callback\n\n var piper = function piper (err) {\n if (this._callback) {\n this._callback(err)\n this._callback = null\n }\n }.bind(this)\n\n this.on('pipe', function onPipe (src) {\n src.on('error', piper)\n })\n this.on('unpipe', function onUnpipe (src) {\n src.removeListener('error', piper)\n })\n } else {\n this.append(callback)\n }\n\n DuplexStream.call(this)\n}\n\n\nutil.inherits(BufferList, DuplexStream)\n\n\nBufferList.prototype._offset = function _offset (offset) {\n var tot = 0, i = 0, _t\n if (offset === 0) return [ 0, 0 ]\n for (; i < this._bufs.length; i++) {\n _t = tot + this._bufs[i].length\n if (offset < _t || i == this._bufs.length - 1)\n return [ i, offset - tot ]\n tot = _t\n }\n}\n\n\nBufferList.prototype.append = function append (buf) {\n var i = 0\n\n if (Buffer.isBuffer(buf)) {\n this._appendBuffer(buf);\n } else if (Array.isArray(buf)) {\n for (; i < buf.length; i++)\n this.append(buf[i])\n } else if (buf instanceof BufferList) {\n // unwrap argument into individual BufferLists\n for (; i < buf._bufs.length; i++)\n this.append(buf._bufs[i])\n } else if (buf != null) {\n // coerce number arguments to strings, since Buffer(number) does\n // uninitialized memory allocation\n if (typeof buf == 'number')\n buf = buf.toString()\n\n this._appendBuffer(Buffer.from(buf));\n }\n\n return this\n}\n\n\nBufferList.prototype._appendBuffer = function appendBuffer (buf) {\n this._bufs.push(buf)\n this.length += buf.length\n}\n\n\nBufferList.prototype._write = function _write (buf, encoding, callback) {\n this._appendBuffer(buf)\n\n if (typeof callback == 'function')\n callback()\n}\n\n\nBufferList.prototype._read = function _read (size) {\n if (!this.length)\n return this.push(null)\n\n size = Math.min(size, this.length)\n this.push(this.slice(0, size))\n this.consume(size)\n}\n\n\nBufferList.prototype.end = function end (chunk) {\n DuplexStream.prototype.end.call(this, chunk)\n\n if (this._callback) {\n this._callback(null, this.slice())\n this._callback = null\n }\n}\n\n\nBufferList.prototype.get = function get (index) {\n return this.slice(index, index + 1)[0]\n}\n\n\nBufferList.prototype.slice = function slice (start, end) {\n if (typeof start == 'number' && start < 0)\n start += this.length\n if (typeof end == 'number' && end < 0)\n end += this.length\n return this.copy(null, 0, start, end)\n}\n\n\nBufferList.prototype.copy = function copy (dst, dstStart, srcStart, srcEnd) {\n if (typeof srcStart != 'number' || srcStart < 0)\n srcStart = 0\n if (typeof srcEnd != 'number' || srcEnd > this.length)\n srcEnd = this.length\n if (srcStart >= this.length)\n return dst || Buffer.alloc(0)\n if (srcEnd <= 0)\n return dst || Buffer.alloc(0)\n\n var copy = !!dst\n , off = this._offset(srcStart)\n , len = srcEnd - srcStart\n , bytes = len\n , bufoff = (copy && dstStart) || 0\n , start = off[1]\n , l\n , i\n\n // copy/slice everything\n if (srcStart === 0 && srcEnd == this.length) {\n if (!copy) { // slice, but full concat if multiple buffers\n return this._bufs.length === 1\n ? this._bufs[0]\n : Buffer.concat(this._bufs, this.length)\n }\n\n // copy, need to copy individual buffers\n for (i = 0; i < this._bufs.length; i++) {\n this._bufs[i].copy(dst, bufoff)\n bufoff += this._bufs[i].length\n }\n\n return dst\n }\n\n // easy, cheap case where it's a subset of one of the buffers\n if (bytes <= this._bufs[off[0]].length - start) {\n return copy\n ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes)\n : this._bufs[off[0]].slice(start, start + bytes)\n }\n\n if (!copy) // a slice, we need something to copy in to\n dst = Buffer.allocUnsafe(len)\n\n for (i = off[0]; i < this._bufs.length; i++) {\n l = this._bufs[i].length - start\n\n if (bytes > l) {\n this._bufs[i].copy(dst, bufoff, start)\n bufoff += l\n } else {\n this._bufs[i].copy(dst, bufoff, start, start + bytes)\n bufoff += l\n break\n }\n\n bytes -= l\n\n if (start)\n start = 0\n }\n\n // safeguard so that we don't return uninitialized memory\n if (dst.length > bufoff) return dst.slice(0, bufoff)\n\n return dst\n}\n\nBufferList.prototype.shallowSlice = function shallowSlice (start, end) {\n start = start || 0\n end = end || this.length\n\n if (start < 0)\n start += this.length\n if (end < 0)\n end += this.length\n\n var startOffset = this._offset(start)\n , endOffset = this._offset(end)\n , buffers = this._bufs.slice(startOffset[0], endOffset[0] + 1)\n\n if (endOffset[1] == 0)\n buffers.pop()\n else\n buffers[buffers.length-1] = buffers[buffers.length-1].slice(0, endOffset[1])\n\n if (startOffset[1] != 0)\n buffers[0] = buffers[0].slice(startOffset[1])\n\n return new BufferList(buffers)\n}\n\nBufferList.prototype.toString = function toString (encoding, start, end) {\n return this.slice(start, end).toString(encoding)\n}\n\nBufferList.prototype.consume = function consume (bytes) {\n // first, normalize the argument, in accordance with how Buffer does it\n bytes = Math.trunc(bytes)\n // do nothing if not a positive number\n if (Number.isNaN(bytes) || bytes <= 0) return this\n\n while (this._bufs.length) {\n if (bytes >= this._bufs[0].length) {\n bytes -= this._bufs[0].length\n this.length -= this._bufs[0].length\n this._bufs.shift()\n } else {\n this._bufs[0] = this._bufs[0].slice(bytes)\n this.length -= bytes\n break\n }\n }\n return this\n}\n\n\nBufferList.prototype.duplicate = function duplicate () {\n var i = 0\n , copy = new BufferList()\n\n for (; i < this._bufs.length; i++)\n copy.append(this._bufs[i])\n\n return copy\n}\n\n\nBufferList.prototype.destroy = function destroy () {\n this._bufs.length = 0\n this.length = 0\n this.push(null)\n}\n\n\n;(function () {\n var methods = {\n 'readDoubleBE' : 8\n , 'readDoubleLE' : 8\n , 'readFloatBE' : 4\n , 'readFloatLE' : 4\n , 'readInt32BE' : 4\n , 'readInt32LE' : 4\n , 'readUInt32BE' : 4\n , 'readUInt32LE' : 4\n , 'readInt16BE' : 2\n , 'readInt16LE' : 2\n , 'readUInt16BE' : 2\n , 'readUInt16LE' : 2\n , 'readInt8' : 1\n , 'readUInt8' : 1\n }\n\n for (var m in methods) {\n (function (m) {\n BufferList.prototype[m] = function (offset) {\n return this.slice(offset, offset + methods[m])[m](0)\n }\n }(m))\n }\n}())\n\n\nmodule.exports = BufferList\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n","module.exports = toBuffer\n\nvar makeBuffer = Buffer.from && Buffer.from !== Uint8Array.from ? Buffer.from : bufferFrom\n\nfunction bufferFrom (buf, enc) {\n return new Buffer(buf, enc)\n}\n\nfunction toBuffer (buf, enc) {\n if (Buffer.isBuffer(buf)) return buf\n if (typeof buf === 'string') return makeBuffer(buf, enc)\n if (Array.isArray(buf)) return makeBuffer(buf)\n throw new Error('Input should be a buffer or a string')\n}\n","/* Node.js 6.4.0 and up has full support */\nvar hasFullSupport = (function () {\n try {\n if (!Buffer.isEncoding('latin1')) {\n return false\n }\n\n var buf = Buffer.alloc ? Buffer.alloc(4) : new Buffer(4)\n\n buf.fill('ab', 'ucs2')\n\n return (buf.toString('hex') === '61006200')\n } catch (_) {\n return false\n }\n}())\n\nfunction isSingleByte (val) {\n return (val.length === 1 && val.charCodeAt(0) < 256)\n}\n\nfunction fillWithNumber (buffer, val, start, end) {\n if (start < 0 || end > buffer.length) {\n throw new RangeError('Out of range index')\n }\n\n start = start >>> 0\n end = end === undefined ? buffer.length : end >>> 0\n\n if (end > start) {\n buffer.fill(val, start, end)\n }\n\n return buffer\n}\n\nfunction fillWithBuffer (buffer, val, start, end) {\n if (start < 0 || end > buffer.length) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return buffer\n }\n\n start = start >>> 0\n end = end === undefined ? buffer.length : end >>> 0\n\n var pos = start\n var len = val.length\n while (pos <= (end - len)) {\n val.copy(buffer, pos)\n pos += len\n }\n\n if (pos !== end) {\n val.copy(buffer, pos, 0, end - pos)\n }\n\n return buffer\n}\n\nfunction fill (buffer, val, start, end, encoding) {\n if (hasFullSupport) {\n return buffer.fill(val, start, end, encoding)\n }\n\n if (typeof val === 'number') {\n return fillWithNumber(buffer, val, start, end)\n }\n\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = buffer.length\n } else if (typeof end === 'string') {\n encoding = end\n end = buffer.length\n }\n\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n\n if (encoding === 'latin1') {\n encoding = 'binary'\n }\n\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n if (val === '') {\n return fillWithNumber(buffer, 0, start, end)\n }\n\n if (isSingleByte(val)) {\n return fillWithNumber(buffer, val.charCodeAt(0), start, end)\n }\n\n val = new Buffer(val, encoding)\n }\n\n if (Buffer.isBuffer(val)) {\n return fillWithBuffer(buffer, val, start, end)\n }\n\n // Other values (e.g. undefined, boolean, object) results in zero-fill\n return fillWithNumber(buffer, 0, start, end)\n}\n\nmodule.exports = fill\n","function allocUnsafe (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n }\n\n if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n\n if (Buffer.allocUnsafe) {\n return Buffer.allocUnsafe(size)\n } else {\n return new Buffer(size)\n }\n}\n\nmodule.exports = allocUnsafe\n","var bufferFill = require('buffer-fill')\nvar allocUnsafe = require('buffer-alloc-unsafe')\n\nmodule.exports = function alloc (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n }\n\n if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n\n if (Buffer.alloc) {\n return Buffer.alloc(size, fill, encoding)\n }\n\n var buffer = allocUnsafe(size)\n\n if (size === 0) {\n return buffer\n }\n\n if (fill === undefined) {\n return bufferFill(buffer, 0)\n }\n\n if (typeof encoding !== 'string') {\n encoding = undefined\n }\n\n return bufferFill(buffer, fill, encoding)\n}\n","var toBuffer = require('to-buffer')\nvar alloc = require('buffer-alloc')\n\nvar ZEROS = '0000000000000000000'\nvar SEVENS = '7777777777777777777'\nvar ZERO_OFFSET = '0'.charCodeAt(0)\nvar USTAR = 'ustar\\x0000'\nvar MASK = parseInt('7777', 8)\n\nvar clamp = function (index, len, defaultValue) {\n if (typeof index !== 'number') return defaultValue\n index = ~~index // Coerce to integer.\n if (index >= len) return len\n if (index >= 0) return index\n index += len\n if (index >= 0) return index\n return 0\n}\n\nvar toType = function (flag) {\n switch (flag) {\n case 0:\n return 'file'\n case 1:\n return 'link'\n case 2:\n return 'symlink'\n case 3:\n return 'character-device'\n case 4:\n return 'block-device'\n case 5:\n return 'directory'\n case 6:\n return 'fifo'\n case 7:\n return 'contiguous-file'\n case 72:\n return 'pax-header'\n case 55:\n return 'pax-global-header'\n case 27:\n return 'gnu-long-link-path'\n case 28:\n case 30:\n return 'gnu-long-path'\n }\n\n return null\n}\n\nvar toTypeflag = function (flag) {\n switch (flag) {\n case 'file':\n return 0\n case 'link':\n return 1\n case 'symlink':\n return 2\n case 'character-device':\n return 3\n case 'block-device':\n return 4\n case 'directory':\n return 5\n case 'fifo':\n return 6\n case 'contiguous-file':\n return 7\n case 'pax-header':\n return 72\n }\n\n return 0\n}\n\nvar indexOf = function (block, num, offset, end) {\n for (; offset < end; offset++) {\n if (block[offset] === num) return offset\n }\n return end\n}\n\nvar cksum = function (block) {\n var sum = 8 * 32\n for (var i = 0; i < 148; i++) sum += block[i]\n for (var j = 156; j < 512; j++) sum += block[j]\n return sum\n}\n\nvar encodeOct = function (val, n) {\n val = val.toString(8)\n if (val.length > n) return SEVENS.slice(0, n) + ' '\n else return ZEROS.slice(0, n - val.length) + val + ' '\n}\n\n/* Copied from the node-tar repo and modified to meet\n * tar-stream coding standard.\n *\n * Source: https://github.com/npm/node-tar/blob/51b6627a1f357d2eb433e7378e5f05e83b7aa6cd/lib/header.js#L349\n */\nfunction parse256 (buf) {\n // first byte MUST be either 80 or FF\n // 80 for positive, FF for 2's comp\n var positive\n if (buf[0] === 0x80) positive = true\n else if (buf[0] === 0xFF) positive = false\n else return null\n\n // build up a base-256 tuple from the least sig to the highest\n var zero = false\n var tuple = []\n for (var i = buf.length - 1; i > 0; i--) {\n var byte = buf[i]\n if (positive) tuple.push(byte)\n else if (zero && byte === 0) tuple.push(0)\n else if (zero) {\n zero = false\n tuple.push(0x100 - byte)\n } else tuple.push(0xFF - byte)\n }\n\n var sum = 0\n var l = tuple.length\n for (i = 0; i < l; i++) {\n sum += tuple[i] * Math.pow(256, i)\n }\n\n return positive ? sum : -1 * sum\n}\n\nvar decodeOct = function (val, offset, length) {\n val = val.slice(offset, offset + length)\n offset = 0\n\n // If prefixed with 0x80 then parse as a base-256 integer\n if (val[offset] & 0x80) {\n return parse256(val)\n } else {\n // Older versions of tar can prefix with spaces\n while (offset < val.length && val[offset] === 32) offset++\n var end = clamp(indexOf(val, 32, offset, val.length), val.length, val.length)\n while (offset < end && val[offset] === 0) offset++\n if (end === offset) return 0\n return parseInt(val.slice(offset, end).toString(), 8)\n }\n}\n\nvar decodeStr = function (val, offset, length, encoding) {\n return val.slice(offset, indexOf(val, 0, offset, offset + length)).toString(encoding)\n}\n\nvar addLength = function (str) {\n var len = Buffer.byteLength(str)\n var digits = Math.floor(Math.log(len) / Math.log(10)) + 1\n if (len + digits >= Math.pow(10, digits)) digits++\n\n return (len + digits) + str\n}\n\nexports.decodeLongPath = function (buf, encoding) {\n return decodeStr(buf, 0, buf.length, encoding)\n}\n\nexports.encodePax = function (opts) { // TODO: encode more stuff in pax\n var result = ''\n if (opts.name) result += addLength(' path=' + opts.name + '\\n')\n if (opts.linkname) result += addLength(' linkpath=' + opts.linkname + '\\n')\n var pax = opts.pax\n if (pax) {\n for (var key in pax) {\n result += addLength(' ' + key + '=' + pax[key] + '\\n')\n }\n }\n return toBuffer(result)\n}\n\nexports.decodePax = function (buf) {\n var result = {}\n\n while (buf.length) {\n var i = 0\n while (i < buf.length && buf[i] !== 32) i++\n var len = parseInt(buf.slice(0, i).toString(), 10)\n if (!len) return result\n\n var b = buf.slice(i + 1, len - 1).toString()\n var keyIndex = b.indexOf('=')\n if (keyIndex === -1) return result\n result[b.slice(0, keyIndex)] = b.slice(keyIndex + 1)\n\n buf = buf.slice(len)\n }\n\n return result\n}\n\nexports.encode = function (opts) {\n var buf = alloc(512)\n var name = opts.name\n var prefix = ''\n\n if (opts.typeflag === 5 && name[name.length - 1] !== '/') name += '/'\n if (Buffer.byteLength(name) !== name.length) return null // utf-8\n\n while (Buffer.byteLength(name) > 100) {\n var i = name.indexOf('/')\n if (i === -1) return null\n prefix += prefix ? '/' + name.slice(0, i) : name.slice(0, i)\n name = name.slice(i + 1)\n }\n\n if (Buffer.byteLength(name) > 100 || Buffer.byteLength(prefix) > 155) return null\n if (opts.linkname && Buffer.byteLength(opts.linkname) > 100) return null\n\n buf.write(name)\n buf.write(encodeOct(opts.mode & MASK, 6), 100)\n buf.write(encodeOct(opts.uid, 6), 108)\n buf.write(encodeOct(opts.gid, 6), 116)\n buf.write(encodeOct(opts.size, 11), 124)\n buf.write(encodeOct((opts.mtime.getTime() / 1000) | 0, 11), 136)\n\n buf[156] = ZERO_OFFSET + toTypeflag(opts.type)\n\n if (opts.linkname) buf.write(opts.linkname, 157)\n\n buf.write(USTAR, 257)\n if (opts.uname) buf.write(opts.uname, 265)\n if (opts.gname) buf.write(opts.gname, 297)\n buf.write(encodeOct(opts.devmajor || 0, 6), 329)\n buf.write(encodeOct(opts.devminor || 0, 6), 337)\n\n if (prefix) buf.write(prefix, 345)\n\n buf.write(encodeOct(cksum(buf), 6), 148)\n\n return buf\n}\n\nexports.decode = function (buf, filenameEncoding) {\n var typeflag = buf[156] === 0 ? 0 : buf[156] - ZERO_OFFSET\n\n var name = decodeStr(buf, 0, 100, filenameEncoding)\n var mode = decodeOct(buf, 100, 8)\n var uid = decodeOct(buf, 108, 8)\n var gid = decodeOct(buf, 116, 8)\n var size = decodeOct(buf, 124, 12)\n var mtime = decodeOct(buf, 136, 12)\n var type = toType(typeflag)\n var linkname = buf[157] === 0 ? null : decodeStr(buf, 157, 100, filenameEncoding)\n var uname = decodeStr(buf, 265, 32)\n var gname = decodeStr(buf, 297, 32)\n var devmajor = decodeOct(buf, 329, 8)\n var devminor = decodeOct(buf, 337, 8)\n\n if (buf[345]) name = decodeStr(buf, 345, 155, filenameEncoding) + '/' + name\n\n // to support old tar versions that use trailing / to indicate dirs\n if (typeflag === 0 && name && name[name.length - 1] === '/') typeflag = 5\n\n var c = cksum(buf)\n\n // checksum is still initial value if header was null.\n if (c === 8 * 32) return null\n\n // valid checksum\n if (c !== decodeOct(buf, 148, 8)) throw new Error('Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?')\n\n return {\n name: name,\n mode: mode,\n uid: uid,\n gid: gid,\n size: size,\n mtime: new Date(1000 * mtime),\n type: type,\n linkname: linkname,\n uname: uname,\n gname: gname,\n devmajor: devmajor,\n devminor: devminor\n }\n}\n","\n const Stream = require('stream');\n\n exports = module.exports = Stream.Readable;\n exports.Readable = Stream.Readable;\n exports.Writable = Stream.Writable;\n exports.Duplex = Stream.Duplex;\n exports.Transform = Stream.Transform;\n exports.PassThrough = Stream.PassThrough;\n exports.Stream = Stream;\n ","var util = require('util')\nvar bl = require('bl')\nvar xtend = require('xtend')\nvar headers = require('./headers')\n\nvar Writable = require('readable-stream').Writable\nvar PassThrough = require('readable-stream').PassThrough\n\nvar noop = function () {}\n\nvar overflow = function (size) {\n size &= 511\n return size && 512 - size\n}\n\nvar emptyStream = function (self, offset) {\n var s = new Source(self, offset)\n s.end()\n return s\n}\n\nvar mixinPax = function (header, pax) {\n if (pax.path) header.name = pax.path\n if (pax.linkpath) header.linkname = pax.linkpath\n if (pax.size) header.size = parseInt(pax.size, 10)\n header.pax = pax\n return header\n}\n\nvar Source = function (self, offset) {\n this._parent = self\n this.offset = offset\n PassThrough.call(this)\n}\n\nutil.inherits(Source, PassThrough)\n\nSource.prototype.destroy = function (err) {\n this._parent.destroy(err)\n}\n\nvar Extract = function (opts) {\n if (!(this instanceof Extract)) return new Extract(opts)\n Writable.call(this, opts)\n\n opts = opts || {}\n\n this._offset = 0\n this._buffer = bl()\n this._missing = 0\n this._partial = false\n this._onparse = noop\n this._header = null\n this._stream = null\n this._overflow = null\n this._cb = null\n this._locked = false\n this._destroyed = false\n this._pax = null\n this._paxGlobal = null\n this._gnuLongPath = null\n this._gnuLongLinkPath = null\n\n var self = this\n var b = self._buffer\n\n var oncontinue = function () {\n self._continue()\n }\n\n var onunlock = function (err) {\n self._locked = false\n if (err) return self.destroy(err)\n if (!self._stream) oncontinue()\n }\n\n var onstreamend = function () {\n self._stream = null\n var drain = overflow(self._header.size)\n if (drain) self._parse(drain, ondrain)\n else self._parse(512, onheader)\n if (!self._locked) oncontinue()\n }\n\n var ondrain = function () {\n self._buffer.consume(overflow(self._header.size))\n self._parse(512, onheader)\n oncontinue()\n }\n\n var onpaxglobalheader = function () {\n var size = self._header.size\n self._paxGlobal = headers.decodePax(b.slice(0, size))\n b.consume(size)\n onstreamend()\n }\n\n var onpaxheader = function () {\n var size = self._header.size\n self._pax = headers.decodePax(b.slice(0, size))\n if (self._paxGlobal) self._pax = xtend(self._paxGlobal, self._pax)\n b.consume(size)\n onstreamend()\n }\n\n var ongnulongpath = function () {\n var size = self._header.size\n this._gnuLongPath = headers.decodeLongPath(b.slice(0, size), opts.filenameEncoding)\n b.consume(size)\n onstreamend()\n }\n\n var ongnulonglinkpath = function () {\n var size = self._header.size\n this._gnuLongLinkPath = headers.decodeLongPath(b.slice(0, size), opts.filenameEncoding)\n b.consume(size)\n onstreamend()\n }\n\n var onheader = function () {\n var offset = self._offset\n var header\n try {\n header = self._header = headers.decode(b.slice(0, 512), opts.filenameEncoding)\n } catch (err) {\n self.emit('error', err)\n }\n b.consume(512)\n\n if (!header) {\n self._parse(512, onheader)\n oncontinue()\n return\n }\n if (header.type === 'gnu-long-path') {\n self._parse(header.size, ongnulongpath)\n oncontinue()\n return\n }\n if (header.type === 'gnu-long-link-path') {\n self._parse(header.size, ongnulonglinkpath)\n oncontinue()\n return\n }\n if (header.type === 'pax-global-header') {\n self._parse(header.size, onpaxglobalheader)\n oncontinue()\n return\n }\n if (header.type === 'pax-header') {\n self._parse(header.size, onpaxheader)\n oncontinue()\n return\n }\n\n if (self._gnuLongPath) {\n header.name = self._gnuLongPath\n self._gnuLongPath = null\n }\n\n if (self._gnuLongLinkPath) {\n header.linkname = self._gnuLongLinkPath\n self._gnuLongLinkPath = null\n }\n\n if (self._pax) {\n self._header = header = mixinPax(header, self._pax)\n self._pax = null\n }\n\n self._locked = true\n\n if (!header.size || header.type === 'directory') {\n self._parse(512, onheader)\n self.emit('entry', header, emptyStream(self, offset), onunlock)\n return\n }\n\n self._stream = new Source(self, offset)\n\n self.emit('entry', header, self._stream, onunlock)\n self._parse(header.size, onstreamend)\n oncontinue()\n }\n\n this._onheader = onheader\n this._parse(512, onheader)\n}\n\nutil.inherits(Extract, Writable)\n\nExtract.prototype.destroy = function (err) {\n if (this._destroyed) return\n this._destroyed = true\n\n if (err) this.emit('error', err)\n this.emit('close')\n if (this._stream) this._stream.emit('close')\n}\n\nExtract.prototype._parse = function (size, onparse) {\n if (this._destroyed) return\n this._offset += size\n this._missing = size\n if (onparse === this._onheader) this._partial = false\n this._onparse = onparse\n}\n\nExtract.prototype._continue = function () {\n if (this._destroyed) return\n var cb = this._cb\n this._cb = noop\n if (this._overflow) this._write(this._overflow, undefined, cb)\n else cb()\n}\n\nExtract.prototype._write = function (data, enc, cb) {\n if (this._destroyed) return\n\n var s = this._stream\n var b = this._buffer\n var missing = this._missing\n if (data.length) this._partial = true\n\n // we do not reach end-of-chunk now. just forward it\n\n if (data.length < missing) {\n this._missing -= data.length\n this._overflow = null\n if (s) return s.write(data, cb)\n b.append(data)\n return cb()\n }\n\n // end-of-chunk. the parser should call cb.\n\n this._cb = cb\n this._missing = 0\n\n var overflow = null\n if (data.length > missing) {\n overflow = data.slice(missing)\n data = data.slice(0, missing)\n }\n\n if (s) s.end(data)\n else b.append(data)\n\n this._overflow = overflow\n this._onparse()\n}\n\nExtract.prototype._final = function (cb) {\n if (this._partial) return this.destroy(new Error('Unexpected end of data'))\n cb()\n}\n\nmodule.exports = Extract\n","var constants = require('fs-constants')\nvar eos = require('end-of-stream')\nvar util = require('util')\nvar alloc = require('buffer-alloc')\nvar toBuffer = require('to-buffer')\n\nvar Readable = require('readable-stream').Readable\nvar Writable = require('readable-stream').Writable\nvar StringDecoder = require('string_decoder').StringDecoder\n\nvar headers = require('./headers')\n\nvar DMODE = parseInt('755', 8)\nvar FMODE = parseInt('644', 8)\n\nvar END_OF_TAR = alloc(1024)\n\nvar noop = function () {}\n\nvar overflow = function (self, size) {\n size &= 511\n if (size) self.push(END_OF_TAR.slice(0, 512 - size))\n}\n\nfunction modeToType (mode) {\n switch (mode & constants.S_IFMT) {\n case constants.S_IFBLK: return 'block-device'\n case constants.S_IFCHR: return 'character-device'\n case constants.S_IFDIR: return 'directory'\n case constants.S_IFIFO: return 'fifo'\n case constants.S_IFLNK: return 'symlink'\n }\n\n return 'file'\n}\n\nvar Sink = function (to) {\n Writable.call(this)\n this.written = 0\n this._to = to\n this._destroyed = false\n}\n\nutil.inherits(Sink, Writable)\n\nSink.prototype._write = function (data, enc, cb) {\n this.written += data.length\n if (this._to.push(data)) return cb()\n this._to._drain = cb\n}\n\nSink.prototype.destroy = function () {\n if (this._destroyed) return\n this._destroyed = true\n this.emit('close')\n}\n\nvar LinkSink = function () {\n Writable.call(this)\n this.linkname = ''\n this._decoder = new StringDecoder('utf-8')\n this._destroyed = false\n}\n\nutil.inherits(LinkSink, Writable)\n\nLinkSink.prototype._write = function (data, enc, cb) {\n this.linkname += this._decoder.write(data)\n cb()\n}\n\nLinkSink.prototype.destroy = function () {\n if (this._destroyed) return\n this._destroyed = true\n this.emit('close')\n}\n\nvar Void = function () {\n Writable.call(this)\n this._destroyed = false\n}\n\nutil.inherits(Void, Writable)\n\nVoid.prototype._write = function (data, enc, cb) {\n cb(new Error('No body allowed for this entry'))\n}\n\nVoid.prototype.destroy = function () {\n if (this._destroyed) return\n this._destroyed = true\n this.emit('close')\n}\n\nvar Pack = function (opts) {\n if (!(this instanceof Pack)) return new Pack(opts)\n Readable.call(this, opts)\n\n this._drain = noop\n this._finalized = false\n this._finalizing = false\n this._destroyed = false\n this._stream = null\n}\n\nutil.inherits(Pack, Readable)\n\nPack.prototype.entry = function (header, buffer, callback) {\n if (this._stream) throw new Error('already piping an entry')\n if (this._finalized || this._destroyed) return\n\n if (typeof buffer === 'function') {\n callback = buffer\n buffer = null\n }\n\n if (!callback) callback = noop\n\n var self = this\n\n if (!header.size || header.type === 'symlink') header.size = 0\n if (!header.type) header.type = modeToType(header.mode)\n if (!header.mode) header.mode = header.type === 'directory' ? DMODE : FMODE\n if (!header.uid) header.uid = 0\n if (!header.gid) header.gid = 0\n if (!header.mtime) header.mtime = new Date()\n\n if (typeof buffer === 'string') buffer = toBuffer(buffer)\n if (Buffer.isBuffer(buffer)) {\n header.size = buffer.length\n this._encode(header)\n this.push(buffer)\n overflow(self, header.size)\n process.nextTick(callback)\n return new Void()\n }\n\n if (header.type === 'symlink' && !header.linkname) {\n var linkSink = new LinkSink()\n eos(linkSink, function (err) {\n if (err) { // stream was closed\n self.destroy()\n return callback(err)\n }\n\n header.linkname = linkSink.linkname\n self._encode(header)\n callback()\n })\n\n return linkSink\n }\n\n this._encode(header)\n\n if (header.type !== 'file' && header.type !== 'contiguous-file') {\n process.nextTick(callback)\n return new Void()\n }\n\n var sink = new Sink(this)\n\n this._stream = sink\n\n eos(sink, function (err) {\n self._stream = null\n\n if (err) { // stream was closed\n self.destroy()\n return callback(err)\n }\n\n if (sink.written !== header.size) { // corrupting tar\n self.destroy()\n return callback(new Error('size mismatch'))\n }\n\n overflow(self, header.size)\n if (self._finalizing) self.finalize()\n callback()\n })\n\n return sink\n}\n\nPack.prototype.finalize = function () {\n if (this._stream) {\n this._finalizing = true\n return\n }\n\n if (this._finalized) return\n this._finalized = true\n this.push(END_OF_TAR)\n this.push(null)\n}\n\nPack.prototype.destroy = function (err) {\n if (this._destroyed) return\n this._destroyed = true\n\n if (err) this.emit('error', err)\n this.emit('close')\n if (this._stream && this._stream.destroy) this._stream.destroy()\n}\n\nPack.prototype._encode = function (header) {\n if (!header.pax) {\n var buf = headers.encode(header)\n if (buf) {\n this.push(buf)\n return\n }\n }\n this._encodePax(header)\n}\n\nPack.prototype._encodePax = function (header) {\n var paxHeader = headers.encodePax({\n name: header.name,\n linkname: header.linkname,\n pax: header.pax\n })\n\n var newHeader = {\n name: 'PaxHeader',\n mode: header.mode,\n uid: header.uid,\n gid: header.gid,\n size: paxHeader.length,\n mtime: header.mtime,\n type: 'pax-header',\n linkname: header.linkname && 'PaxHeader',\n uname: header.uname,\n gname: header.gname,\n devmajor: header.devmajor,\n devminor: header.devminor\n }\n\n this.push(headers.encode(newHeader))\n this.push(paxHeader)\n overflow(this, paxHeader.length)\n\n newHeader.size = header.size\n newHeader.type = header.type\n this.push(headers.encode(newHeader))\n}\n\nPack.prototype._read = function (n) {\n var drain = this._drain\n this._drain = noop\n drain()\n}\n\nmodule.exports = Pack\n","exports.extract = require('./extract')\nexports.pack = require('./pack')\n","'use strict';\nconst fileType = require('file-type');\nconst isStream = require('is-stream');\nconst tarStream = require('tar-stream');\n\nmodule.exports = () => input => {\n\tif (!Buffer.isBuffer(input) && !isStream(input)) {\n\t\treturn Promise.reject(new TypeError(`Expected a Buffer or Stream, got ${typeof input}`));\n\t}\n\n\tif (Buffer.isBuffer(input) && (!fileType(input) || fileType(input).ext !== 'tar')) {\n\t\treturn Promise.resolve([]);\n\t}\n\n\tconst extract = tarStream.extract();\n\tconst files = [];\n\n\textract.on('entry', (header, stream, cb) => {\n\t\tconst chunk = [];\n\n\t\tstream.on('data', data => chunk.push(data));\n\t\tstream.on('end', () => {\n\t\t\tconst file = {\n\t\t\t\tdata: Buffer.concat(chunk),\n\t\t\t\tmode: header.mode,\n\t\t\t\tmtime: header.mtime,\n\t\t\t\tpath: header.name,\n\t\t\t\ttype: header.type\n\t\t\t};\n\n\t\t\tif (header.type === 'symlink' || header.type === 'link') {\n\t\t\t\tfile.linkname = header.linkname;\n\t\t\t}\n\n\t\t\tfiles.push(file);\n\t\t\tcb();\n\t\t});\n\t});\n\n\tconst promise = new Promise((resolve, reject) => {\n\t\tif (!Buffer.isBuffer(input)) {\n\t\t\tinput.on('error', reject);\n\t\t}\n\n\t\textract.on('finish', () => resolve(files));\n\t\textract.on('error', reject);\n\t});\n\n\textract.then = promise.then.bind(promise);\n\textract.catch = promise.catch.bind(promise);\n\n\tif (Buffer.isBuffer(input)) {\n\t\textract.end(input);\n\t} else {\n\t\tinput.pipe(extract);\n\t}\n\n\treturn extract;\n};\n","'use strict';\nconst toBytes = s => Array.from(s).map(c => c.charCodeAt(0));\nconst xpiZipFilename = toBytes('META-INF/mozilla.rsa');\nconst oxmlContentTypes = toBytes('[Content_Types].xml');\nconst oxmlRels = toBytes('_rels/.rels');\n\nmodule.exports = input => {\n\tconst buf = new Uint8Array(input);\n\n\tif (!(buf && buf.length > 1)) {\n\t\treturn null;\n\t}\n\n\tconst check = (header, opts) => {\n\t\topts = Object.assign({\n\t\t\toffset: 0\n\t\t}, opts);\n\n\t\tfor (let i = 0; i < header.length; i++) {\n\t\t\t// If a bitmask is set\n\t\t\tif (opts.mask) {\n\t\t\t\t// If header doesn't equal `buf` with bits masked off\n\t\t\t\tif (header[i] !== (opts.mask[i] & buf[i + opts.offset])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else if (header[i] !== buf[i + opts.offset]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t};\n\n\tif (check([0xFF, 0xD8, 0xFF])) {\n\t\treturn {\n\t\t\text: 'jpg',\n\t\t\tmime: 'image/jpeg'\n\t\t};\n\t}\n\n\tif (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\treturn {\n\t\t\text: 'png',\n\t\t\tmime: 'image/png'\n\t\t};\n\t}\n\n\tif (check([0x47, 0x49, 0x46])) {\n\t\treturn {\n\t\t\text: 'gif',\n\t\t\tmime: 'image/gif'\n\t\t};\n\t}\n\n\tif (check([0x57, 0x45, 0x42, 0x50], {offset: 8})) {\n\t\treturn {\n\t\t\text: 'webp',\n\t\t\tmime: 'image/webp'\n\t\t};\n\t}\n\n\tif (check([0x46, 0x4C, 0x49, 0x46])) {\n\t\treturn {\n\t\t\text: 'flif',\n\t\t\tmime: 'image/flif'\n\t\t};\n\t}\n\n\t// Needs to be before `tif` check\n\tif (\n\t\t(check([0x49, 0x49, 0x2A, 0x0]) || check([0x4D, 0x4D, 0x0, 0x2A])) &&\n\t\tcheck([0x43, 0x52], {offset: 8})\n\t) {\n\t\treturn {\n\t\t\text: 'cr2',\n\t\t\tmime: 'image/x-canon-cr2'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x49, 0x49, 0x2A, 0x0]) ||\n\t\tcheck([0x4D, 0x4D, 0x0, 0x2A])\n\t) {\n\t\treturn {\n\t\t\text: 'tif',\n\t\t\tmime: 'image/tiff'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x4D])) {\n\t\treturn {\n\t\t\text: 'bmp',\n\t\t\tmime: 'image/bmp'\n\t\t};\n\t}\n\n\tif (check([0x49, 0x49, 0xBC])) {\n\t\treturn {\n\t\t\text: 'jxr',\n\t\t\tmime: 'image/vnd.ms-photo'\n\t\t};\n\t}\n\n\tif (check([0x38, 0x42, 0x50, 0x53])) {\n\t\treturn {\n\t\t\text: 'psd',\n\t\t\tmime: 'image/vnd.adobe.photoshop'\n\t\t};\n\t}\n\n\t// Zip-based file formats\n\t// Need to be before the `zip` check\n\tif (check([0x50, 0x4B, 0x3, 0x4])) {\n\t\tif (\n\t\t\tcheck([0x6D, 0x69, 0x6D, 0x65, 0x74, 0x79, 0x70, 0x65, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x65, 0x70, 0x75, 0x62, 0x2B, 0x7A, 0x69, 0x70], {offset: 30})\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'epub',\n\t\t\t\tmime: 'application/epub+zip'\n\t\t\t};\n\t\t}\n\n\t\t// Assumes signed `.xpi` from addons.mozilla.org\n\t\tif (check(xpiZipFilename, {offset: 30})) {\n\t\t\treturn {\n\t\t\t\text: 'xpi',\n\t\t\t\tmime: 'application/x-xpinstall'\n\t\t\t};\n\t\t}\n\n\t\t// https://github.com/file/file/blob/master/magic/Magdir/msooxml\n\t\tif (check(oxmlContentTypes, {offset: 30}) || check(oxmlRels, {offset: 30})) {\n\t\t\tconst sliced = buf.subarray(4, 4 + 2000);\n\t\t\tconst nextZipHeaderIndex = arr => arr.findIndex((el, i, arr) => arr[i] === 0x50 && arr[i + 1] === 0x4B && arr[i + 2] === 0x3 && arr[i + 3] === 0x4);\n\t\t\tconst header2Pos = nextZipHeaderIndex(sliced);\n\n\t\t\tif (header2Pos !== -1) {\n\t\t\t\tconst slicedAgain = buf.subarray(header2Pos + 8, header2Pos + 8 + 1000);\n\t\t\t\tconst header3Pos = nextZipHeaderIndex(slicedAgain);\n\n\t\t\t\tif (header3Pos !== -1) {\n\t\t\t\t\tconst offset = 8 + header2Pos + header3Pos + 30;\n\n\t\t\t\t\tif (check(toBytes('word/'), {offset})) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'docx',\n\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (check(toBytes('ppt/'), {offset})) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'pptx',\n\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.presentationml.presentation'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (check(toBytes('xl/'), {offset})) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'xlsx',\n\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (\n\t\tcheck([0x50, 0x4B]) &&\n\t\t(buf[2] === 0x3 || buf[2] === 0x5 || buf[2] === 0x7) &&\n\t\t(buf[3] === 0x4 || buf[3] === 0x6 || buf[3] === 0x8)\n\t) {\n\t\treturn {\n\t\t\text: 'zip',\n\t\t\tmime: 'application/zip'\n\t\t};\n\t}\n\n\tif (check([0x75, 0x73, 0x74, 0x61, 0x72], {offset: 257})) {\n\t\treturn {\n\t\t\text: 'tar',\n\t\t\tmime: 'application/x-tar'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7]) &&\n\t\t(buf[6] === 0x0 || buf[6] === 0x1)\n\t) {\n\t\treturn {\n\t\t\text: 'rar',\n\t\t\tmime: 'application/x-rar-compressed'\n\t\t};\n\t}\n\n\tif (check([0x1F, 0x8B, 0x8])) {\n\t\treturn {\n\t\t\text: 'gz',\n\t\t\tmime: 'application/gzip'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x5A, 0x68])) {\n\t\treturn {\n\t\t\text: 'bz2',\n\t\t\tmime: 'application/x-bzip2'\n\t\t};\n\t}\n\n\tif (check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) {\n\t\treturn {\n\t\t\text: '7z',\n\t\t\tmime: 'application/x-7z-compressed'\n\t\t};\n\t}\n\n\tif (check([0x78, 0x01])) {\n\t\treturn {\n\t\t\text: 'dmg',\n\t\t\tmime: 'application/x-apple-diskimage'\n\t\t};\n\t}\n\n\tif (check([0x33, 0x67, 0x70, 0x35]) || // 3gp5\n\t\t(\n\t\t\tcheck([0x0, 0x0, 0x0]) && check([0x66, 0x74, 0x79, 0x70], {offset: 4}) &&\n\t\t\t\t(\n\t\t\t\t\tcheck([0x6D, 0x70, 0x34, 0x31], {offset: 8}) || // MP41\n\t\t\t\t\tcheck([0x6D, 0x70, 0x34, 0x32], {offset: 8}) || // MP42\n\t\t\t\t\tcheck([0x69, 0x73, 0x6F, 0x6D], {offset: 8}) || // ISOM\n\t\t\t\t\tcheck([0x69, 0x73, 0x6F, 0x32], {offset: 8}) || // ISO2\n\t\t\t\t\tcheck([0x6D, 0x6D, 0x70, 0x34], {offset: 8}) || // MMP4\n\t\t\t\t\tcheck([0x4D, 0x34, 0x56], {offset: 8}) || // M4V\n\t\t\t\t\tcheck([0x64, 0x61, 0x73, 0x68], {offset: 8}) // DASH\n\t\t\t\t)\n\t\t)) {\n\t\treturn {\n\t\t\text: 'mp4',\n\t\t\tmime: 'video/mp4'\n\t\t};\n\t}\n\n\tif (check([0x4D, 0x54, 0x68, 0x64])) {\n\t\treturn {\n\t\t\text: 'mid',\n\t\t\tmime: 'audio/midi'\n\t\t};\n\t}\n\n\t// https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska\n\tif (check([0x1A, 0x45, 0xDF, 0xA3])) {\n\t\tconst sliced = buf.subarray(4, 4 + 4096);\n\t\tconst idPos = sliced.findIndex((el, i, arr) => arr[i] === 0x42 && arr[i + 1] === 0x82);\n\n\t\tif (idPos !== -1) {\n\t\t\tconst docTypePos = idPos + 3;\n\t\t\tconst findDocType = type => Array.from(type).every((c, i) => sliced[docTypePos + i] === c.charCodeAt(0));\n\n\t\t\tif (findDocType('matroska')) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mkv',\n\t\t\t\t\tmime: 'video/x-matroska'\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (findDocType('webm')) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'webm',\n\t\t\t\t\tmime: 'video/webm'\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\tif (check([0x0, 0x0, 0x0, 0x14, 0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20]) ||\n\t\tcheck([0x66, 0x72, 0x65, 0x65], {offset: 4}) ||\n\t\tcheck([0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20], {offset: 4}) ||\n\t\tcheck([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // MJPEG\n\t\tcheck([0x77, 0x69, 0x64, 0x65], {offset: 4})) {\n\t\treturn {\n\t\t\text: 'mov',\n\t\t\tmime: 'video/quicktime'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x52, 0x49, 0x46, 0x46]) &&\n\t\tcheck([0x41, 0x56, 0x49], {offset: 8})\n\t) {\n\t\treturn {\n\t\t\text: 'avi',\n\t\t\tmime: 'video/x-msvideo'\n\t\t};\n\t}\n\n\tif (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) {\n\t\treturn {\n\t\t\text: 'wmv',\n\t\t\tmime: 'video/x-ms-wmv'\n\t\t};\n\t}\n\n\tif (check([0x0, 0x0, 0x1, 0xBA])) {\n\t\treturn {\n\t\t\text: 'mpg',\n\t\t\tmime: 'video/mpeg'\n\t\t};\n\t}\n\n\t// Check for MP3 header at different starting offsets\n\tfor (let start = 0; start < 2 && start < (buf.length - 16); start++) {\n\t\tif (\n\t\t\tcheck([0x49, 0x44, 0x33], {offset: start}) || // ID3 header\n\t\t\tcheck([0xFF, 0xE2], {offset: start, mask: [0xFF, 0xE2]}) // MPEG 1 or 2 Layer 3 header\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mp3',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\t}\n\n\tif (\n\t\tcheck([0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41], {offset: 4}) ||\n\t\tcheck([0x4D, 0x34, 0x41, 0x20])\n\t) {\n\t\treturn {\n\t\t\text: 'm4a',\n\t\t\tmime: 'audio/m4a'\n\t\t};\n\t}\n\n\t// Needs to be before `ogg` check\n\tif (check([0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64], {offset: 28})) {\n\t\treturn {\n\t\t\text: 'opus',\n\t\t\tmime: 'audio/opus'\n\t\t};\n\t}\n\n\tif (check([0x4F, 0x67, 0x67, 0x53])) {\n\t\treturn {\n\t\t\text: 'ogg',\n\t\t\tmime: 'audio/ogg'\n\t\t};\n\t}\n\n\tif (check([0x66, 0x4C, 0x61, 0x43])) {\n\t\treturn {\n\t\t\text: 'flac',\n\t\t\tmime: 'audio/x-flac'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x52, 0x49, 0x46, 0x46]) &&\n\t\tcheck([0x57, 0x41, 0x56, 0x45], {offset: 8})\n\t) {\n\t\treturn {\n\t\t\text: 'wav',\n\t\t\tmime: 'audio/x-wav'\n\t\t};\n\t}\n\n\tif (check([0x23, 0x21, 0x41, 0x4D, 0x52, 0x0A])) {\n\t\treturn {\n\t\t\text: 'amr',\n\t\t\tmime: 'audio/amr'\n\t\t};\n\t}\n\n\tif (check([0x25, 0x50, 0x44, 0x46])) {\n\t\treturn {\n\t\t\text: 'pdf',\n\t\t\tmime: 'application/pdf'\n\t\t};\n\t}\n\n\tif (check([0x4D, 0x5A])) {\n\t\treturn {\n\t\t\text: 'exe',\n\t\t\tmime: 'application/x-msdownload'\n\t\t};\n\t}\n\n\tif (\n\t\t(buf[0] === 0x43 || buf[0] === 0x46) &&\n\t\tcheck([0x57, 0x53], {offset: 1})\n\t) {\n\t\treturn {\n\t\t\text: 'swf',\n\t\t\tmime: 'application/x-shockwave-flash'\n\t\t};\n\t}\n\n\tif (check([0x7B, 0x5C, 0x72, 0x74, 0x66])) {\n\t\treturn {\n\t\t\text: 'rtf',\n\t\t\tmime: 'application/rtf'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x61, 0x73, 0x6D])) {\n\t\treturn {\n\t\t\text: 'wasm',\n\t\t\tmime: 'application/wasm'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x77, 0x4F, 0x46, 0x46]) &&\n\t\t(\n\t\t\tcheck([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||\n\t\t\tcheck([0x4F, 0x54, 0x54, 0x4F], {offset: 4})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff',\n\t\t\tmime: 'font/woff'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x77, 0x4F, 0x46, 0x32]) &&\n\t\t(\n\t\t\tcheck([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||\n\t\t\tcheck([0x4F, 0x54, 0x54, 0x4F], {offset: 4})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff2',\n\t\t\tmime: 'font/woff2'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x4C, 0x50], {offset: 34}) &&\n\t\t(\n\t\t\tcheck([0x00, 0x00, 0x01], {offset: 8}) ||\n\t\t\tcheck([0x01, 0x00, 0x02], {offset: 8}) ||\n\t\t\tcheck([0x02, 0x00, 0x02], {offset: 8})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'eot',\n\t\t\tmime: 'application/octet-stream'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x01, 0x00, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'ttf',\n\t\t\tmime: 'font/ttf'\n\t\t};\n\t}\n\n\tif (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) {\n\t\treturn {\n\t\t\text: 'otf',\n\t\t\tmime: 'font/otf'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x01, 0x00])) {\n\t\treturn {\n\t\t\text: 'ico',\n\t\t\tmime: 'image/x-icon'\n\t\t};\n\t}\n\n\tif (check([0x46, 0x4C, 0x56, 0x01])) {\n\t\treturn {\n\t\t\text: 'flv',\n\t\t\tmime: 'video/x-flv'\n\t\t};\n\t}\n\n\tif (check([0x25, 0x21])) {\n\t\treturn {\n\t\t\text: 'ps',\n\t\t\tmime: 'application/postscript'\n\t\t};\n\t}\n\n\tif (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) {\n\t\treturn {\n\t\t\text: 'xz',\n\t\t\tmime: 'application/x-xz'\n\t\t};\n\t}\n\n\tif (check([0x53, 0x51, 0x4C, 0x69])) {\n\t\treturn {\n\t\t\text: 'sqlite',\n\t\t\tmime: 'application/x-sqlite3'\n\t\t};\n\t}\n\n\tif (check([0x4E, 0x45, 0x53, 0x1A])) {\n\t\treturn {\n\t\t\text: 'nes',\n\t\t\tmime: 'application/x-nintendo-nes-rom'\n\t\t};\n\t}\n\n\tif (check([0x43, 0x72, 0x32, 0x34])) {\n\t\treturn {\n\t\t\text: 'crx',\n\t\t\tmime: 'application/x-google-chrome-extension'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x4D, 0x53, 0x43, 0x46]) ||\n\t\tcheck([0x49, 0x53, 0x63, 0x28])\n\t) {\n\t\treturn {\n\t\t\text: 'cab',\n\t\t\tmime: 'application/vnd.ms-cab-compressed'\n\t\t};\n\t}\n\n\t// Needs to be before `ar` check\n\tif (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E, 0x0A, 0x64, 0x65, 0x62, 0x69, 0x61, 0x6E, 0x2D, 0x62, 0x69, 0x6E, 0x61, 0x72, 0x79])) {\n\t\treturn {\n\t\t\text: 'deb',\n\t\t\tmime: 'application/x-deb'\n\t\t};\n\t}\n\n\tif (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E])) {\n\t\treturn {\n\t\t\text: 'ar',\n\t\t\tmime: 'application/x-unix-archive'\n\t\t};\n\t}\n\n\tif (check([0xED, 0xAB, 0xEE, 0xDB])) {\n\t\treturn {\n\t\t\text: 'rpm',\n\t\t\tmime: 'application/x-rpm'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x1F, 0xA0]) ||\n\t\tcheck([0x1F, 0x9D])\n\t) {\n\t\treturn {\n\t\t\text: 'Z',\n\t\t\tmime: 'application/x-compress'\n\t\t};\n\t}\n\n\tif (check([0x4C, 0x5A, 0x49, 0x50])) {\n\t\treturn {\n\t\t\text: 'lz',\n\t\t\tmime: 'application/x-lzip'\n\t\t};\n\t}\n\n\tif (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {\n\t\treturn {\n\t\t\text: 'msi',\n\t\t\tmime: 'application/x-msi'\n\t\t};\n\t}\n\n\tif (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) {\n\t\treturn {\n\t\t\text: 'mxf',\n\t\t\tmime: 'application/mxf'\n\t\t};\n\t}\n\n\tif (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) {\n\t\treturn {\n\t\t\text: 'mts',\n\t\t\tmime: 'video/mp2t'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x4C, 0x45, 0x4E, 0x44, 0x45, 0x52])) {\n\t\treturn {\n\t\t\text: 'blend',\n\t\t\tmime: 'application/x-blender'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x50, 0x47, 0xFB])) {\n\t\treturn {\n\t\t\text: 'bpg',\n\t\t\tmime: 'image/bpg'\n\t\t};\n\t}\n\n\treturn null;\n};\n","/*\nnode-bzip - a pure-javascript Node.JS module for decoding bzip2 data\n\nCopyright (C) 2012 Eli Skeggs\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nAdapted from bzip2.js, copyright 2011 antimatter15 (antimatter15@gmail.com).\n\nBased on micro-bunzip by Rob Landley (rob@landley.net).\n\nBased on bzip2 decompression code by Julian R Seward (jseward@acm.org),\nwhich also acknowledges contributions by Mike Burrows, David Wheeler,\nPeter Fenwick, Alistair Moffat, Radford Neal, Ian H. Witten,\nRobert Sedgewick, and Jon L. Bentley.\n*/\n\nvar BITMASK = [0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF];\n\n// offset in bytes\nvar BitReader = function(stream) {\n this.stream = stream;\n this.bitOffset = 0;\n this.curByte = 0;\n this.hasByte = false;\n};\n\nBitReader.prototype._ensureByte = function() {\n if (!this.hasByte) {\n this.curByte = this.stream.readByte();\n this.hasByte = true;\n }\n};\n\n// reads bits from the buffer\nBitReader.prototype.read = function(bits) {\n var result = 0;\n while (bits > 0) {\n this._ensureByte();\n var remaining = 8 - this.bitOffset;\n // if we're in a byte\n if (bits >= remaining) {\n result <<= remaining;\n result |= BITMASK[remaining] & this.curByte;\n this.hasByte = false;\n this.bitOffset = 0;\n bits -= remaining;\n } else {\n result <<= bits;\n var shift = remaining - bits;\n result |= (this.curByte & (BITMASK[bits] << shift)) >> shift;\n this.bitOffset += bits;\n bits = 0;\n }\n }\n return result;\n};\n\n// seek to an arbitrary point in the buffer (expressed in bits)\nBitReader.prototype.seek = function(pos) {\n var n_bit = pos % 8;\n var n_byte = (pos - n_bit) / 8;\n this.bitOffset = n_bit;\n this.stream.seek(n_byte);\n this.hasByte = false;\n};\n\n// reads 6 bytes worth of data using the read method\nBitReader.prototype.pi = function() {\n var buf = new Buffer(6), i;\n for (i = 0; i < buf.length; i++) {\n buf[i] = this.read(8);\n }\n return buf.toString('hex');\n};\n\nmodule.exports = BitReader;\n","/* very simple input/output stream interface */\nvar Stream = function() {\n};\n\n// input streams //////////////\n/** Returns the next byte, or -1 for EOF. */\nStream.prototype.readByte = function() {\n throw new Error(\"abstract method readByte() not implemented\");\n};\n/** Attempts to fill the buffer; returns number of bytes read, or\n * -1 for EOF. */\nStream.prototype.read = function(buffer, bufOffset, length) {\n var bytesRead = 0;\n while (bytesRead < length) {\n var c = this.readByte();\n if (c < 0) { // EOF\n return (bytesRead===0) ? -1 : bytesRead;\n }\n buffer[bufOffset++] = c;\n bytesRead++;\n }\n return bytesRead;\n};\nStream.prototype.seek = function(new_pos) {\n throw new Error(\"abstract method seek() not implemented\");\n};\n\n// output streams ///////////\nStream.prototype.writeByte = function(_byte) {\n throw new Error(\"abstract method readByte() not implemented\");\n};\nStream.prototype.write = function(buffer, bufOffset, length) {\n var i;\n for (i=0; i<length; i++) {\n this.writeByte(buffer[bufOffset++]);\n }\n return length;\n};\nStream.prototype.flush = function() {\n};\n\nmodule.exports = Stream;\n","/* CRC32, used in Bzip2 implementation.\n * This is a port of CRC32.java from the jbzip2 implementation at\n * https://code.google.com/p/jbzip2\n * which is:\n * Copyright (c) 2011 Matthew Francis\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n * This JavaScript implementation is:\n * Copyright (c) 2013 C. Scott Ananian\n * with the same licensing terms as Matthew Francis' original implementation.\n */\nmodule.exports = (function() {\n\n /**\n * A static CRC lookup table\n */\n var crc32Lookup = new Uint32Array([\n 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,\n 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,\n 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,\n 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd,\n 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5,\n 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,\n 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,\n 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d,\n 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,\n 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca,\n 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02,\n 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,\n 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692,\n 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,\n 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,\n 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a,\n 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,\n 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,\n 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b,\n 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623,\n 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,\n 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,\n 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b,\n 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,\n 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c,\n 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24,\n 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,\n 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,\n 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c,\n 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,\n 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c,\n 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4\n ]);\n\n var CRC32 = function() {\n /**\n * The current CRC\n */\n var crc = 0xffffffff;\n\n /**\n * @return The current CRC\n */\n this.getCRC = function() {\n return (~crc) >>> 0; // return an unsigned value\n };\n\n /**\n * Update the CRC with a single byte\n * @param value The value to update the CRC with\n */\n this.updateCRC = function(value) {\n crc = (crc << 8) ^ crc32Lookup[((crc >>> 24) ^ value) & 0xff];\n };\n\n /**\n * Update the CRC with a sequence of identical bytes\n * @param value The value to update the CRC with\n * @param count The number of bytes\n */\n this.updateCRCRun = function(value, count) {\n while (count-- > 0) {\n crc = (crc << 8) ^ crc32Lookup[((crc >>> 24) ^ value) & 0xff];\n }\n };\n };\n return CRC32;\n})();\n","/*\nseek-bzip - a pure-javascript module for seeking within bzip2 data\n\nCopyright (C) 2013 C. Scott Ananian\nCopyright (C) 2012 Eli Skeggs\nCopyright (C) 2011 Kevin Kwok\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nAdapted from node-bzip, copyright 2012 Eli Skeggs.\nAdapted from bzip2.js, copyright 2011 Kevin Kwok (antimatter15@gmail.com).\n\nBased on micro-bunzip by Rob Landley (rob@landley.net).\n\nBased on bzip2 decompression code by Julian R Seward (jseward@acm.org),\nwhich also acknowledges contributions by Mike Burrows, David Wheeler,\nPeter Fenwick, Alistair Moffat, Radford Neal, Ian H. Witten,\nRobert Sedgewick, and Jon L. Bentley.\n*/\n\nvar BitReader = require('./bitreader');\nvar Stream = require('./stream');\nvar CRC32 = require('./crc32');\nvar pjson = require('../package.json');\n\nvar MAX_HUFCODE_BITS = 20;\nvar MAX_SYMBOLS = 258;\nvar SYMBOL_RUNA = 0;\nvar SYMBOL_RUNB = 1;\nvar MIN_GROUPS = 2;\nvar MAX_GROUPS = 6;\nvar GROUP_SIZE = 50;\n\nvar WHOLEPI = \"314159265359\";\nvar SQRTPI = \"177245385090\";\n\nvar mtf = function(array, index) {\n var src = array[index], i;\n for (i = index; i > 0; i--) {\n array[i] = array[i-1];\n }\n array[0] = src;\n return src;\n};\n\nvar Err = {\n OK: 0,\n LAST_BLOCK: -1,\n NOT_BZIP_DATA: -2,\n UNEXPECTED_INPUT_EOF: -3,\n UNEXPECTED_OUTPUT_EOF: -4,\n DATA_ERROR: -5,\n OUT_OF_MEMORY: -6,\n OBSOLETE_INPUT: -7,\n END_OF_BLOCK: -8\n};\nvar ErrorMessages = {};\nErrorMessages[Err.LAST_BLOCK] = \"Bad file checksum\";\nErrorMessages[Err.NOT_BZIP_DATA] = \"Not bzip data\";\nErrorMessages[Err.UNEXPECTED_INPUT_EOF] = \"Unexpected input EOF\";\nErrorMessages[Err.UNEXPECTED_OUTPUT_EOF] = \"Unexpected output EOF\";\nErrorMessages[Err.DATA_ERROR] = \"Data error\";\nErrorMessages[Err.OUT_OF_MEMORY] = \"Out of memory\";\nErrorMessages[Err.OBSOLETE_INPUT] = \"Obsolete (pre 0.9.5) bzip format not supported.\";\n\nvar _throw = function(status, optDetail) {\n var msg = ErrorMessages[status] || 'unknown error';\n if (optDetail) { msg += ': '+optDetail; }\n var e = new TypeError(msg);\n e.errorCode = status;\n throw e;\n};\n\nvar Bunzip = function(inputStream, outputStream) {\n this.writePos = this.writeCurrent = this.writeCount = 0;\n\n this._start_bunzip(inputStream, outputStream);\n};\nBunzip.prototype._init_block = function() {\n var moreBlocks = this._get_next_block();\n if ( !moreBlocks ) {\n this.writeCount = -1;\n return false; /* no more blocks */\n }\n this.blockCRC = new CRC32();\n return true;\n};\n/* XXX micro-bunzip uses (inputStream, inputBuffer, len) as arguments */\nBunzip.prototype._start_bunzip = function(inputStream, outputStream) {\n /* Ensure that file starts with \"BZh['1'-'9'].\" */\n var buf = new Buffer(4);\n if (inputStream.read(buf, 0, 4) !== 4 ||\n String.fromCharCode(buf[0], buf[1], buf[2]) !== 'BZh')\n _throw(Err.NOT_BZIP_DATA, 'bad magic');\n\n var level = buf[3] - 0x30;\n if (level < 1 || level > 9)\n _throw(Err.NOT_BZIP_DATA, 'level out of range');\n\n this.reader = new BitReader(inputStream);\n\n /* Fourth byte (ascii '1'-'9'), indicates block size in units of 100k of\n uncompressed data. Allocate intermediate buffer for block. */\n this.dbufSize = 100000 * level;\n this.nextoutput = 0;\n this.outputStream = outputStream;\n this.streamCRC = 0;\n};\nBunzip.prototype._get_next_block = function() {\n var i, j, k;\n var reader = this.reader;\n // this is get_next_block() function from micro-bunzip:\n /* Read in header signature and CRC, then validate signature.\n (last block signature means CRC is for whole file, return now) */\n var h = reader.pi();\n if (h === SQRTPI) { // last block\n return false; /* no more blocks */\n }\n if (h !== WHOLEPI)\n _throw(Err.NOT_BZIP_DATA);\n this.targetBlockCRC = reader.read(32) >>> 0; // (convert to unsigned)\n this.streamCRC = (this.targetBlockCRC ^\n ((this.streamCRC << 1) | (this.streamCRC>>>31))) >>> 0;\n /* We can add support for blockRandomised if anybody complains. There was\n some code for this in busybox 1.0.0-pre3, but nobody ever noticed that\n it didn't actually work. */\n if (reader.read(1))\n _throw(Err.OBSOLETE_INPUT);\n var origPointer = reader.read(24);\n if (origPointer > this.dbufSize)\n _throw(Err.DATA_ERROR, 'initial position out of bounds');\n /* mapping table: if some byte values are never used (encoding things\n like ascii text), the compression code removes the gaps to have fewer\n symbols to deal with, and writes a sparse bitfield indicating which\n values were present. We make a translation table to convert the symbols\n back to the corresponding bytes. */\n var t = reader.read(16);\n var symToByte = new Buffer(256), symTotal = 0;\n for (i = 0; i < 16; i++) {\n if (t & (1 << (0xF - i))) {\n var o = i * 16;\n k = reader.read(16);\n for (j = 0; j < 16; j++)\n if (k & (1 << (0xF - j)))\n symToByte[symTotal++] = o + j;\n }\n }\n\n /* How many different huffman coding groups does this block use? */\n var groupCount = reader.read(3);\n if (groupCount < MIN_GROUPS || groupCount > MAX_GROUPS)\n _throw(Err.DATA_ERROR);\n /* nSelectors: Every GROUP_SIZE many symbols we select a new huffman coding\n group. Read in the group selector list, which is stored as MTF encoded\n bit runs. (MTF=Move To Front, as each value is used it's moved to the\n start of the list.) */\n var nSelectors = reader.read(15);\n if (nSelectors === 0)\n _throw(Err.DATA_ERROR);\n\n var mtfSymbol = new Buffer(256);\n for (i = 0; i < groupCount; i++)\n mtfSymbol[i] = i;\n\n var selectors = new Buffer(nSelectors); // was 32768...\n\n for (i = 0; i < nSelectors; i++) {\n /* Get next value */\n for (j = 0; reader.read(1); j++)\n if (j >= groupCount) _throw(Err.DATA_ERROR);\n /* Decode MTF to get the next selector */\n selectors[i] = mtf(mtfSymbol, j);\n }\n\n /* Read the huffman coding tables for each group, which code for symTotal\n literal symbols, plus two run symbols (RUNA, RUNB) */\n var symCount = symTotal + 2;\n var groups = [], hufGroup;\n for (j = 0; j < groupCount; j++) {\n var length = new Buffer(symCount), temp = new Uint16Array(MAX_HUFCODE_BITS + 1);\n /* Read huffman code lengths for each symbol. They're stored in\n a way similar to mtf; record a starting value for the first symbol,\n and an offset from the previous value for everys symbol after that. */\n t = reader.read(5); // lengths\n for (i = 0; i < symCount; i++) {\n for (;;) {\n if (t < 1 || t > MAX_HUFCODE_BITS) _throw(Err.DATA_ERROR);\n /* If first bit is 0, stop. Else second bit indicates whether\n to increment or decrement the value. */\n if(!reader.read(1))\n break;\n if(!reader.read(1))\n t++;\n else\n t--;\n }\n length[i] = t;\n }\n\n /* Find largest and smallest lengths in this group */\n var minLen, maxLen;\n minLen = maxLen = length[0];\n for (i = 1; i < symCount; i++) {\n if (length[i] > maxLen)\n maxLen = length[i];\n else if (length[i] < minLen)\n minLen = length[i];\n }\n\n /* Calculate permute[], base[], and limit[] tables from length[].\n *\n * permute[] is the lookup table for converting huffman coded symbols\n * into decoded symbols. base[] is the amount to subtract from the\n * value of a huffman symbol of a given length when using permute[].\n *\n * limit[] indicates the largest numerical value a symbol with a given\n * number of bits can have. This is how the huffman codes can vary in\n * length: each code with a value>limit[length] needs another bit.\n */\n hufGroup = {};\n groups.push(hufGroup);\n hufGroup.permute = new Uint16Array(MAX_SYMBOLS);\n hufGroup.limit = new Uint32Array(MAX_HUFCODE_BITS + 2);\n hufGroup.base = new Uint32Array(MAX_HUFCODE_BITS + 1);\n hufGroup.minLen = minLen;\n hufGroup.maxLen = maxLen;\n /* Calculate permute[]. Concurently, initialize temp[] and limit[]. */\n var pp = 0;\n for (i = minLen; i <= maxLen; i++) {\n temp[i] = hufGroup.limit[i] = 0;\n for (t = 0; t < symCount; t++)\n if (length[t] === i)\n hufGroup.permute[pp++] = t;\n }\n /* Count symbols coded for at each bit length */\n for (i = 0; i < symCount; i++)\n temp[length[i]]++;\n /* Calculate limit[] (the largest symbol-coding value at each bit\n * length, which is (previous limit<<1)+symbols at this level), and\n * base[] (number of symbols to ignore at each bit length, which is\n * limit minus the cumulative count of symbols coded for already). */\n pp = t = 0;\n for (i = minLen; i < maxLen; i++) {\n pp += temp[i];\n /* We read the largest possible symbol size and then unget bits\n after determining how many we need, and those extra bits could\n be set to anything. (They're noise from future symbols.) At\n each level we're really only interested in the first few bits,\n so here we set all the trailing to-be-ignored bits to 1 so they\n don't affect the value>limit[length] comparison. */\n hufGroup.limit[i] = pp - 1;\n pp <<= 1;\n t += temp[i];\n hufGroup.base[i + 1] = pp - t;\n }\n hufGroup.limit[maxLen + 1] = Number.MAX_VALUE; /* Sentinal value for reading next sym. */\n hufGroup.limit[maxLen] = pp + temp[maxLen] - 1;\n hufGroup.base[minLen] = 0;\n }\n /* We've finished reading and digesting the block header. Now read this\n block's huffman coded symbols from the file and undo the huffman coding\n and run length encoding, saving the result into dbuf[dbufCount++]=uc */\n\n /* Initialize symbol occurrence counters and symbol Move To Front table */\n var byteCount = new Uint32Array(256);\n for (i = 0; i < 256; i++)\n mtfSymbol[i] = i;\n /* Loop through compressed symbols. */\n var runPos = 0, dbufCount = 0, selector = 0, uc;\n var dbuf = this.dbuf = new Uint32Array(this.dbufSize);\n symCount = 0;\n for (;;) {\n /* Determine which huffman coding group to use. */\n if (!(symCount--)) {\n symCount = GROUP_SIZE - 1;\n if (selector >= nSelectors) { _throw(Err.DATA_ERROR); }\n hufGroup = groups[selectors[selector++]];\n }\n /* Read next huffman-coded symbol. */\n i = hufGroup.minLen;\n j = reader.read(i);\n for (;;i++) {\n if (i > hufGroup.maxLen) { _throw(Err.DATA_ERROR); }\n if (j <= hufGroup.limit[i])\n break;\n j = (j << 1) | reader.read(1);\n }\n /* Huffman decode value to get nextSym (with bounds checking) */\n j -= hufGroup.base[i];\n if (j < 0 || j >= MAX_SYMBOLS) { _throw(Err.DATA_ERROR); }\n var nextSym = hufGroup.permute[j];\n /* We have now decoded the symbol, which indicates either a new literal\n byte, or a repeated run of the most recent literal byte. First,\n check if nextSym indicates a repeated run, and if so loop collecting\n how many times to repeat the last literal. */\n if (nextSym === SYMBOL_RUNA || nextSym === SYMBOL_RUNB) {\n /* If this is the start of a new run, zero out counter */\n if (!runPos){\n runPos = 1;\n t = 0;\n }\n /* Neat trick that saves 1 symbol: instead of or-ing 0 or 1 at\n each bit position, add 1 or 2 instead. For example,\n 1011 is 1<<0 + 1<<1 + 2<<2. 1010 is 2<<0 + 2<<1 + 1<<2.\n You can make any bit pattern that way using 1 less symbol than\n the basic or 0/1 method (except all bits 0, which would use no\n symbols, but a run of length 0 doesn't mean anything in this\n context). Thus space is saved. */\n if (nextSym === SYMBOL_RUNA)\n t += runPos;\n else\n t += 2 * runPos;\n runPos <<= 1;\n continue;\n }\n /* When we hit the first non-run symbol after a run, we now know\n how many times to repeat the last literal, so append that many\n copies to our buffer of decoded symbols (dbuf) now. (The last\n literal used is the one at the head of the mtfSymbol array.) */\n if (runPos){\n runPos = 0;\n if (dbufCount + t > this.dbufSize) { _throw(Err.DATA_ERROR); }\n uc = symToByte[mtfSymbol[0]];\n byteCount[uc] += t;\n while (t--)\n dbuf[dbufCount++] = uc;\n }\n /* Is this the terminating symbol? */\n if (nextSym > symTotal)\n break;\n /* At this point, nextSym indicates a new literal character. Subtract\n one to get the position in the MTF array at which this literal is\n currently to be found. (Note that the result can't be -1 or 0,\n because 0 and 1 are RUNA and RUNB. But another instance of the\n first symbol in the mtf array, position 0, would have been handled\n as part of a run above. Therefore 1 unused mtf position minus\n 2 non-literal nextSym values equals -1.) */\n if (dbufCount >= this.dbufSize) { _throw(Err.DATA_ERROR); }\n i = nextSym - 1;\n uc = mtf(mtfSymbol, i);\n uc = symToByte[uc];\n /* We have our literal byte. Save it into dbuf. */\n byteCount[uc]++;\n dbuf[dbufCount++] = uc;\n }\n /* At this point, we've read all the huffman-coded symbols (and repeated\n runs) for this block from the input stream, and decoded them into the\n intermediate buffer. There are dbufCount many decoded bytes in dbuf[].\n Now undo the Burrows-Wheeler transform on dbuf.\n See http://dogma.net/markn/articles/bwt/bwt.htm\n */\n if (origPointer < 0 || origPointer >= dbufCount) { _throw(Err.DATA_ERROR); }\n /* Turn byteCount into cumulative occurrence counts of 0 to n-1. */\n j = 0;\n for (i = 0; i < 256; i++) {\n k = j + byteCount[i];\n byteCount[i] = j;\n j = k;\n }\n /* Figure out what order dbuf would be in if we sorted it. */\n for (i = 0; i < dbufCount; i++) {\n uc = dbuf[i] & 0xff;\n dbuf[byteCount[uc]] |= (i << 8);\n byteCount[uc]++;\n }\n /* Decode first byte by hand to initialize \"previous\" byte. Note that it\n doesn't get output, and if the first three characters are identical\n it doesn't qualify as a run (hence writeRunCountdown=5). */\n var pos = 0, current = 0, run = 0;\n if (dbufCount) {\n pos = dbuf[origPointer];\n current = (pos & 0xff);\n pos >>= 8;\n run = -1;\n }\n this.writePos = pos;\n this.writeCurrent = current;\n this.writeCount = dbufCount;\n this.writeRun = run;\n\n return true; /* more blocks to come */\n};\n/* Undo burrows-wheeler transform on intermediate buffer to produce output.\n If start_bunzip was initialized with out_fd=-1, then up to len bytes of\n data are written to outbuf. Return value is number of bytes written or\n error (all errors are negative numbers). If out_fd!=-1, outbuf and len\n are ignored, data is written to out_fd and return is RETVAL_OK or error.\n*/\nBunzip.prototype._read_bunzip = function(outputBuffer, len) {\n var copies, previous, outbyte;\n /* james@jamestaylor.org: writeCount goes to -1 when the buffer is fully\n decoded, which results in this returning RETVAL_LAST_BLOCK, also\n equal to -1... Confusing, I'm returning 0 here to indicate no\n bytes written into the buffer */\n if (this.writeCount < 0) { return 0; }\n\n var gotcount = 0;\n var dbuf = this.dbuf, pos = this.writePos, current = this.writeCurrent;\n var dbufCount = this.writeCount, outputsize = this.outputsize;\n var run = this.writeRun;\n\n while (dbufCount) {\n dbufCount--;\n previous = current;\n pos = dbuf[pos];\n current = pos & 0xff;\n pos >>= 8;\n if (run++ === 3){\n copies = current;\n outbyte = previous;\n current = -1;\n } else {\n copies = 1;\n outbyte = current;\n }\n this.blockCRC.updateCRCRun(outbyte, copies);\n while (copies--) {\n this.outputStream.writeByte(outbyte);\n this.nextoutput++;\n }\n if (current != previous)\n run = 0;\n }\n this.writeCount = dbufCount;\n // check CRC\n if (this.blockCRC.getCRC() !== this.targetBlockCRC) {\n _throw(Err.DATA_ERROR, \"Bad block CRC \"+\n \"(got \"+this.blockCRC.getCRC().toString(16)+\n \" expected \"+this.targetBlockCRC.toString(16)+\")\");\n }\n return this.nextoutput;\n};\n\nvar coerceInputStream = function(input) {\n if ('readByte' in input) { return input; }\n var inputStream = new Stream();\n inputStream.pos = 0;\n inputStream.readByte = function() { return input[this.pos++]; };\n inputStream.seek = function(pos) { this.pos = pos; };\n inputStream.eof = function() { return this.pos >= input.length; };\n return inputStream;\n};\nvar coerceOutputStream = function(output) {\n var outputStream = new Stream();\n var resizeOk = true;\n if (output) {\n if (typeof(output)==='number') {\n outputStream.buffer = new Buffer(output);\n resizeOk = false;\n } else if ('writeByte' in output) {\n return output;\n } else {\n outputStream.buffer = output;\n resizeOk = false;\n }\n } else {\n outputStream.buffer = new Buffer(16384);\n }\n outputStream.pos = 0;\n outputStream.writeByte = function(_byte) {\n if (resizeOk && this.pos >= this.buffer.length) {\n var newBuffer = new Buffer(this.buffer.length*2);\n this.buffer.copy(newBuffer);\n this.buffer = newBuffer;\n }\n this.buffer[this.pos++] = _byte;\n };\n outputStream.getBuffer = function() {\n // trim buffer\n if (this.pos !== this.buffer.length) {\n if (!resizeOk)\n throw new TypeError('outputsize does not match decoded input');\n var newBuffer = new Buffer(this.pos);\n this.buffer.copy(newBuffer, 0, 0, this.pos);\n this.buffer = newBuffer;\n }\n return this.buffer;\n };\n outputStream._coerced = true;\n return outputStream;\n};\n\n/* Static helper functions */\nBunzip.Err = Err;\n// 'input' can be a stream or a buffer\n// 'output' can be a stream or a buffer or a number (buffer size)\nBunzip.decode = function(input, output, multistream) {\n // make a stream from a buffer, if necessary\n var inputStream = coerceInputStream(input);\n var outputStream = coerceOutputStream(output);\n\n var bz = new Bunzip(inputStream, outputStream);\n while (true) {\n if ('eof' in inputStream && inputStream.eof()) break;\n if (bz._init_block()) {\n bz._read_bunzip();\n } else {\n var targetStreamCRC = bz.reader.read(32) >>> 0; // (convert to unsigned)\n if (targetStreamCRC !== bz.streamCRC) {\n _throw(Err.DATA_ERROR, \"Bad stream CRC \"+\n \"(got \"+bz.streamCRC.toString(16)+\n \" expected \"+targetStreamCRC.toString(16)+\")\");\n }\n if (multistream &&\n 'eof' in inputStream &&\n !inputStream.eof()) {\n // note that start_bunzip will also resync the bit reader to next byte\n bz._start_bunzip(inputStream, outputStream);\n } else break;\n }\n }\n if ('getBuffer' in outputStream)\n return outputStream.getBuffer();\n};\nBunzip.decodeBlock = function(input, pos, output) {\n // make a stream from a buffer, if necessary\n var inputStream = coerceInputStream(input);\n var outputStream = coerceOutputStream(output);\n var bz = new Bunzip(inputStream, outputStream);\n bz.reader.seek(pos);\n /* Fill the decode buffer for the block */\n var moreBlocks = bz._get_next_block();\n if (moreBlocks) {\n /* Init the CRC for writing */\n bz.blockCRC = new CRC32();\n\n /* Zero this so the current byte from before the seek is not written */\n bz.writeCopies = 0;\n\n /* Decompress the block and write to stdout */\n bz._read_bunzip();\n // XXX keep writing?\n }\n if ('getBuffer' in outputStream)\n return outputStream.getBuffer();\n};\n/* Reads bzip2 file from stream or buffer `input`, and invoke\n * `callback(position, size)` once for each bzip2 block,\n * where position gives the starting position (in *bits*)\n * and size gives uncompressed size of the block (in *bytes*). */\nBunzip.table = function(input, callback, multistream) {\n // make a stream from a buffer, if necessary\n var inputStream = new Stream();\n inputStream.delegate = coerceInputStream(input);\n inputStream.pos = 0;\n inputStream.readByte = function() {\n this.pos++;\n return this.delegate.readByte();\n };\n if (inputStream.delegate.eof) {\n inputStream.eof = inputStream.delegate.eof.bind(inputStream.delegate);\n }\n var outputStream = new Stream();\n outputStream.pos = 0;\n outputStream.writeByte = function() { this.pos++; };\n\n var bz = new Bunzip(inputStream, outputStream);\n var blockSize = bz.dbufSize;\n while (true) {\n if ('eof' in inputStream && inputStream.eof()) break;\n\n var position = inputStream.pos*8 + bz.reader.bitOffset;\n if (bz.reader.hasByte) { position -= 8; }\n\n if (bz._init_block()) {\n var start = outputStream.pos;\n bz._read_bunzip();\n callback(position, outputStream.pos - start);\n } else {\n var crc = bz.reader.read(32); // (but we ignore the crc)\n if (multistream &&\n 'eof' in inputStream &&\n !inputStream.eof()) {\n // note that start_bunzip will also resync the bit reader to next byte\n bz._start_bunzip(inputStream, outputStream);\n console.assert(bz.dbufSize === blockSize,\n \"shouldn't change block size within multistream file\");\n } else break;\n }\n }\n};\n\nBunzip.Stream = Stream;\n\nBunzip.version = pjson.version;\nBunzip.license = pjson.license;\n\nmodule.exports = Bunzip;\n","var Stream = require('stream')\n\n// through\n//\n// a stream that does nothing but re-emit the input.\n// useful for aggregating a series of changing but not ending streams into one stream)\n\nexports = module.exports = through\nthrough.through = through\n\n//create a readable writable stream.\n\nfunction through (write, end, opts) {\n write = write || function (data) { this.queue(data) }\n end = end || function () { this.queue(null) }\n\n var ended = false, destroyed = false, buffer = [], _ended = false\n var stream = new Stream()\n stream.readable = stream.writable = true\n stream.paused = false\n\n// stream.autoPause = !(opts && opts.autoPause === false)\n stream.autoDestroy = !(opts && opts.autoDestroy === false)\n\n stream.write = function (data) {\n write.call(this, data)\n return !stream.paused\n }\n\n function drain() {\n while(buffer.length && !stream.paused) {\n var data = buffer.shift()\n if(null === data)\n return stream.emit('end')\n else\n stream.emit('data', data)\n }\n }\n\n stream.queue = stream.push = function (data) {\n// console.error(ended)\n if(_ended) return stream\n if(data === null) _ended = true\n buffer.push(data)\n drain()\n return stream\n }\n\n //this will be registered as the first 'end' listener\n //must call destroy next tick, to make sure we're after any\n //stream piped from here.\n //this is only a problem if end is not emitted synchronously.\n //a nicer way to do this is to make sure this is the last listener for 'end'\n\n stream.on('end', function () {\n stream.readable = false\n if(!stream.writable && stream.autoDestroy)\n process.nextTick(function () {\n stream.destroy()\n })\n })\n\n function _end () {\n stream.writable = false\n end.call(stream)\n if(!stream.readable && stream.autoDestroy)\n stream.destroy()\n }\n\n stream.end = function (data) {\n if(ended) return\n ended = true\n if(arguments.length) stream.write(data)\n _end() // will emit or queue\n return stream\n }\n\n stream.destroy = function () {\n if(destroyed) return\n destroyed = true\n ended = true\n buffer.length = 0\n stream.writable = stream.readable = false\n stream.emit('close')\n return stream\n }\n\n stream.pause = function () {\n if(stream.paused) return\n stream.paused = true\n return stream\n }\n\n stream.resume = function () {\n if(stream.paused) {\n stream.paused = false\n stream.emit('resume')\n }\n drain()\n //may have become paused again,\n //as drain emits 'data'.\n if(!stream.paused)\n stream.emit('drain')\n return stream\n }\n return stream\n}\n\n","/* \n bzip2.js - a small bzip2 decompression implementation\n \n Copyright 2011 by antimatter15 (antimatter15@gmail.com)\n \n Based on micro-bunzip by Rob Landley (rob@landley.net).\n\n Copyright (c) 2011 by antimatter15 (antimatter15@gmail.com).\n\n Permission is hereby granted, free of charge, to any person obtaining a\n copy of this software and associated documentation files (the \"Software\"),\n to deal in the Software without restriction, including without limitation\n the rights to use, copy, modify, merge, publish, distribute, sublicense,\n and/or sell copies of the Software, and to permit persons to whom the\n Software is furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included\n in all copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH\n THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\nfunction Bzip2Error(message) {\n this.name = 'Bzip2Error';\n this.message = message;\n this.stack = (new Error()).stack;\n}\nBzip2Error.prototype = new Error;\n \nvar message = {\n Error: function(message) {throw new Bzip2Error(message);}\n};\n\nvar bzip2 = {};\nbzip2.Bzip2Error = Bzip2Error;\n\nbzip2.crcTable =\n[\n 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9,\n 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,\n 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,\n 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,\n 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9,\n 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,\n 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,\n 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd,\n 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,\n 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5,\n 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81,\n 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,\n 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49,\n 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,\n 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1,\n 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d,\n 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae,\n 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,\n 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,\n 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca,\n 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,\n 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02,\n 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066,\n 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,\n 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e,\n 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692,\n 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6,\n 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,\n 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,\n 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,\n 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686,\n 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a,\n 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637,\n 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,\n 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,\n 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,\n 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47,\n 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b,\n 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,\n 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623,\n 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7,\n 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,\n 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f,\n 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,\n 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7,\n 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b,\n 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f,\n 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,\n 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,\n 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c,\n 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8,\n 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24,\n 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30,\n 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,\n 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088,\n 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,\n 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0,\n 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c,\n 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,\n 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,\n 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0,\n 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c,\n 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,\n 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4\n];\n\nbzip2.array = function(bytes) {\n var bit = 0, byte = 0;\n var BITMASK = [0, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF ];\n return function(n) {\n var result = 0;\n while(n > 0) {\n var left = 8 - bit;\n if (n >= left) {\n result <<= left;\n result |= (BITMASK[left] & bytes[byte++]);\n bit = 0;\n n -= left;\n } else {\n result <<= n;\n result |= ((bytes[byte] & (BITMASK[n] << (8 - n - bit))) >> (8 - n - bit));\n bit += n;\n n = 0;\n }\n }\n return result;\n }\n}\n\n \nbzip2.simple = function(srcbuffer, stream) {\n var bits = bzip2.array(srcbuffer);\n var size = bzip2.header(bits);\n var ret = false;\n var bufsize = 100000 * size;\n var buf = new Int32Array(bufsize);\n \n do {\n ret = bzip2.decompress(bits, stream, buf, bufsize); \n } while(!ret);\n}\n\nbzip2.header = function(bits) {\n this.byteCount = new Int32Array(256);\n this.symToByte = new Uint8Array(256);\n this.mtfSymbol = new Int32Array(256);\n this.selectors = new Uint8Array(0x8000);\n\n if (bits(8*3) != 4348520) message.Error(\"No magic number found\");\n\n var i = bits(8) - 48;\n if (i < 1 || i > 9) message.Error(\"Not a BZIP archive\");\n return i;\n};\n\n\n//takes a function for reading the block data (starting with 0x314159265359)\n//a block size (0-9) (optional, defaults to 9)\n//a length at which to stop decompressing and return the output\nbzip2.decompress = function(bits, stream, buf, bufsize, streamCRC) {\n var MAX_HUFCODE_BITS = 20;\n var MAX_SYMBOLS = 258;\n var SYMBOL_RUNA = 0;\n var SYMBOL_RUNB = 1;\n var GROUP_SIZE = 50;\n var crc = 0 ^ (-1);\n \n for(var h = '', i = 0; i < 6; i++) h += bits(8).toString(16);\n if (h == \"177245385090\") {\n var finalCRC = bits(32)|0;\n if (finalCRC !== streamCRC) message.Error(\"Error in bzip2: crc32 do not match\");\n // align stream to byte\n bits(null);\n return null; // reset streamCRC for next call\n }\n if (h != \"314159265359\") message.Error(\"eek not valid bzip data\");\n var crcblock = bits(32)|0; // CRC code\n if (bits(1)) message.Error(\"unsupported obsolete version\");\n var origPtr = bits(24);\n if (origPtr > bufsize) message.Error(\"Initial position larger than buffer size\");\n var t = bits(16);\n var symTotal = 0;\n for (i = 0; i < 16; i++) {\n if (t & (1 << (15 - i))) {\n var k = bits(16);\n for(j = 0; j < 16; j++) {\n if (k & (1 << (15 - j))) {\n this.symToByte[symTotal++] = (16 * i) + j;\n }\n }\n }\n }\n\n var groupCount = bits(3);\n if (groupCount < 2 || groupCount > 6) message.Error(\"another error\");\n var nSelectors = bits(15);\n if (nSelectors == 0) message.Error(\"meh\");\n for(var i = 0; i < groupCount; i++) this.mtfSymbol[i] = i;\n\n for(var i = 0; i < nSelectors; i++) {\n for(var j = 0; bits(1); j++) if (j >= groupCount) message.Error(\"whoops another error\");\n var uc = this.mtfSymbol[j];\n for(var k = j-1; k>=0; k--) {\n this.mtfSymbol[k+1] = this.mtfSymbol[k];\n }\n this.mtfSymbol[0] = uc;\n this.selectors[i] = uc;\n }\n\n var symCount = symTotal + 2;\n var groups = [];\n var length = new Uint8Array(MAX_SYMBOLS),\n temp = new Uint16Array(MAX_HUFCODE_BITS+1);\n\n var hufGroup;\n\n for(var j = 0; j < groupCount; j++) {\n t = bits(5); //lengths\n for(var i = 0; i < symCount; i++) {\n while(true){\n if (t < 1 || t > MAX_HUFCODE_BITS) message.Error(\"I gave up a while ago on writing error messages\");\n if (!bits(1)) break;\n if (!bits(1)) t++;\n else t--;\n }\n length[i] = t;\n }\n var minLen, maxLen;\n minLen = maxLen = length[0];\n for(var i = 1; i < symCount; i++) {\n if (length[i] > maxLen) maxLen = length[i];\n else if (length[i] < minLen) minLen = length[i];\n }\n hufGroup = groups[j] = {};\n hufGroup.permute = new Int32Array(MAX_SYMBOLS);\n hufGroup.limit = new Int32Array(MAX_HUFCODE_BITS + 1);\n hufGroup.base = new Int32Array(MAX_HUFCODE_BITS + 1);\n\n hufGroup.minLen = minLen;\n hufGroup.maxLen = maxLen;\n var base = hufGroup.base;\n var limit = hufGroup.limit;\n var pp = 0;\n for(var i = minLen; i <= maxLen; i++)\n for(var t = 0; t < symCount; t++)\n if (length[t] == i) hufGroup.permute[pp++] = t;\n for(i = minLen; i <= maxLen; i++) temp[i] = limit[i] = 0;\n for(i = 0; i < symCount; i++) temp[length[i]]++;\n pp = t = 0;\n for(i = minLen; i < maxLen; i++) {\n pp += temp[i];\n limit[i] = pp - 1;\n pp <<= 1;\n base[i+1] = pp - (t += temp[i]);\n }\n limit[maxLen] = pp + temp[maxLen] - 1;\n base[minLen] = 0;\n }\n\n for(var i = 0; i < 256; i++) { \n this.mtfSymbol[i] = i;\n this.byteCount[i] = 0;\n }\n var runPos, count, symCount, selector;\n runPos = count = symCount = selector = 0; \n while(true) {\n if (!(symCount--)) {\n symCount = GROUP_SIZE - 1;\n if (selector >= nSelectors) message.Error(\"meow i'm a kitty, that's an error\");\n hufGroup = groups[this.selectors[selector++]];\n base = hufGroup.base;\n limit = hufGroup.limit;\n }\n i = hufGroup.minLen;\n j = bits(i);\n while(true) {\n if (i > hufGroup.maxLen) message.Error(\"rawr i'm a dinosaur\");\n if (j <= limit[i]) break;\n i++;\n j = (j << 1) | bits(1);\n }\n j -= base[i];\n if (j < 0 || j >= MAX_SYMBOLS) message.Error(\"moo i'm a cow\");\n var nextSym = hufGroup.permute[j];\n if (nextSym == SYMBOL_RUNA || nextSym == SYMBOL_RUNB) {\n if (!runPos){\n runPos = 1;\n t = 0;\n }\n if (nextSym == SYMBOL_RUNA) t += runPos;\n else t += 2 * runPos;\n runPos <<= 1;\n continue;\n }\n if (runPos) {\n runPos = 0;\n if (count + t > bufsize) message.Error(\"Boom.\");\n uc = this.symToByte[this.mtfSymbol[0]];\n this.byteCount[uc] += t;\n while(t--) buf[count++] = uc;\n }\n if (nextSym > symTotal) break;\n if (count >= bufsize) message.Error(\"I can't think of anything. Error\");\n i = nextSym - 1;\n uc = this.mtfSymbol[i];\n for(var k = i-1; k>=0; k--) {\n this.mtfSymbol[k+1] = this.mtfSymbol[k];\n }\n this.mtfSymbol[0] = uc\n uc = this.symToByte[uc];\n this.byteCount[uc]++;\n buf[count++] = uc;\n }\n if (origPtr < 0 || origPtr >= count) message.Error(\"I'm a monkey and I'm throwing something at someone, namely you\");\n var j = 0;\n for(var i = 0; i < 256; i++) {\n k = j + this.byteCount[i];\n this.byteCount[i] = j;\n j = k;\n }\n for(var i = 0; i < count; i++) {\n uc = buf[i] & 0xff;\n buf[this.byteCount[uc]] |= (i << 8);\n this.byteCount[uc]++;\n }\n var pos = 0, current = 0, run = 0;\n if (count) {\n pos = buf[origPtr];\n current = (pos & 0xff);\n pos >>= 8;\n run = -1;\n }\n count = count;\n var copies, previous, outbyte;\n while(count) {\n count--;\n previous = current;\n pos = buf[pos];\n current = pos & 0xff;\n pos >>= 8;\n if (run++ == 3) {\n copies = current;\n outbyte = previous;\n current = -1;\n } else {\n copies = 1;\n outbyte = current;\n }\n while(copies--) {\n crc = ((crc << 8) ^ this.crcTable[((crc>>24) ^ outbyte) & 0xFF])&0xFFFFFFFF; // crc32\n stream(outbyte);\n }\n if (current != previous) run = 0;\n }\n\n crc = (crc ^ (-1)) >>> 0;\n if ((crc|0) != (crcblock|0)) message.Error(\"Error in bzip2: crc32 do not match\");\n streamCRC = (crc ^ ((streamCRC << 1) | (streamCRC >>> 31))) & 0xFFFFFFFF;\n return streamCRC;\n}\n\nmodule.exports = bzip2;\n","var BITMASK = [0, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF];\n\n// returns a function that reads bits.\n// takes a buffer iterator as input\nmodule.exports = function bitIterator(nextBuffer) {\n var bit = 0, byte = 0;\n var bytes = nextBuffer();\n var f = function(n) {\n if (n === null && bit != 0) { // align to byte boundary\n bit = 0\n byte++;\n return;\n }\n var result = 0;\n while(n > 0) {\n if (byte >= bytes.length) {\n byte = 0;\n bytes = nextBuffer();\n }\n var left = 8 - bit;\n if (bit === 0 && n > 0)\n f.bytesRead++;\n if (n >= left) {\n result <<= left;\n result |= (BITMASK[left] & bytes[byte++]);\n bit = 0;\n n -= left;\n } else {\n result <<= n;\n result |= ((bytes[byte] & (BITMASK[n] << (8 - n - bit))) >> (8 - n - bit));\n bit += n;\n n = 0;\n }\n }\n return result;\n };\n f.bytesRead = 0;\n return f;\n};\n","var through = require('through');\nvar bz2 = require('./lib/bzip2');\nvar bitIterator = require('./lib/bit_iterator');\n\nmodule.exports = unbzip2Stream;\n\nfunction unbzip2Stream() {\n var bufferQueue = [];\n var hasBytes = 0;\n var blockSize = 0;\n var broken = false;\n var done = false;\n var bitReader = null;\n var streamCRC = null;\n\n function decompressBlock(push){\n if(!blockSize){\n blockSize = bz2.header(bitReader);\n //console.error(\"got header of\", blockSize);\n streamCRC = 0;\n return true;\n }else{\n var bufsize = 100000 * blockSize;\n var buf = new Int32Array(bufsize);\n \n var chunk = [];\n var f = function(b) {\n chunk.push(b);\n };\n\n streamCRC = bz2.decompress(bitReader, f, buf, bufsize, streamCRC);\n if (streamCRC === null) {\n // reset for next bzip2 header\n blockSize = 0;\n return false;\n }else{\n //console.error('decompressed', chunk.length,'bytes');\n push(Buffer.from(chunk));\n return true;\n }\n }\n }\n\n var outlength = 0;\n function decompressAndQueue(stream) {\n if (broken) return;\n try {\n return decompressBlock(function(d) {\n stream.queue(d);\n if (d !== null) {\n //console.error('write at', outlength.toString(16));\n outlength += d.length;\n } else {\n //console.error('written EOS');\n }\n });\n } catch(e) {\n //console.error(e);\n stream.emit('error', e);\n broken = true;\n return false;\n }\n }\n\n return through(\n function write(data) {\n //console.error('received', data.length,'bytes in', typeof data);\n bufferQueue.push(data);\n hasBytes += data.length;\n if (bitReader === null) {\n bitReader = bitIterator(function() {\n return bufferQueue.shift();\n });\n }\n while (!broken && hasBytes - bitReader.bytesRead + 1 >= ((25000 + 100000 * blockSize) || 4)){\n //console.error('decompressing with', hasBytes - bitReader.bytesRead + 1, 'bytes in buffer');\n decompressAndQueue(this);\n }\n },\n function end(x) {\n //console.error(x,'last compressing with', hasBytes, 'bytes in buffer');\n while (!broken && bitReader && hasBytes > bitReader.bytesRead){\n decompressAndQueue(this);\n }\n if (!broken) {\n if (streamCRC !== null)\n this.emit('error', new Error(\"input stream ended prematurely\"));\n this.queue(null);\n }\n }\n );\n}\n\n","'use strict';\nconst decompressTar = require('decompress-tar');\nconst fileType = require('file-type');\nconst isStream = require('is-stream');\nconst seekBzip = require('seek-bzip');\nconst unbzip2Stream = require('unbzip2-stream');\n\nmodule.exports = () => input => {\n\tif (!Buffer.isBuffer(input) && !isStream(input)) {\n\t\treturn Promise.reject(new TypeError(`Expected a Buffer or Stream, got ${typeof input}`));\n\t}\n\n\tif (Buffer.isBuffer(input) && (!fileType(input) || fileType(input).ext !== 'bz2')) {\n\t\treturn Promise.resolve([]);\n\t}\n\n\tif (Buffer.isBuffer(input)) {\n\t\treturn decompressTar()(seekBzip.decode(input));\n\t}\n\n\treturn decompressTar()(input.pipe(unbzip2Stream()));\n};\n","'use strict';\n\nvar PENDING = 'pending';\nvar SETTLED = 'settled';\nvar FULFILLED = 'fulfilled';\nvar REJECTED = 'rejected';\nvar NOOP = function () {};\nvar isNode = typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function';\n\nvar asyncSetTimer = typeof setImmediate === 'undefined' ? setTimeout : setImmediate;\nvar asyncQueue = [];\nvar asyncTimer;\n\nfunction asyncFlush() {\n\t// run promise callbacks\n\tfor (var i = 0; i < asyncQueue.length; i++) {\n\t\tasyncQueue[i][0](asyncQueue[i][1]);\n\t}\n\n\t// reset async asyncQueue\n\tasyncQueue = [];\n\tasyncTimer = false;\n}\n\nfunction asyncCall(callback, arg) {\n\tasyncQueue.push([callback, arg]);\n\n\tif (!asyncTimer) {\n\t\tasyncTimer = true;\n\t\tasyncSetTimer(asyncFlush, 0);\n\t}\n}\n\nfunction invokeResolver(resolver, promise) {\n\tfunction resolvePromise(value) {\n\t\tresolve(promise, value);\n\t}\n\n\tfunction rejectPromise(reason) {\n\t\treject(promise, reason);\n\t}\n\n\ttry {\n\t\tresolver(resolvePromise, rejectPromise);\n\t} catch (e) {\n\t\trejectPromise(e);\n\t}\n}\n\nfunction invokeCallback(subscriber) {\n\tvar owner = subscriber.owner;\n\tvar settled = owner._state;\n\tvar value = owner._data;\n\tvar callback = subscriber[settled];\n\tvar promise = subscriber.then;\n\n\tif (typeof callback === 'function') {\n\t\tsettled = FULFILLED;\n\t\ttry {\n\t\t\tvalue = callback(value);\n\t\t} catch (e) {\n\t\t\treject(promise, e);\n\t\t}\n\t}\n\n\tif (!handleThenable(promise, value)) {\n\t\tif (settled === FULFILLED) {\n\t\t\tresolve(promise, value);\n\t\t}\n\n\t\tif (settled === REJECTED) {\n\t\t\treject(promise, value);\n\t\t}\n\t}\n}\n\nfunction handleThenable(promise, value) {\n\tvar resolved;\n\n\ttry {\n\t\tif (promise === value) {\n\t\t\tthrow new TypeError('A promises callback cannot return that same promise.');\n\t\t}\n\n\t\tif (value && (typeof value === 'function' || typeof value === 'object')) {\n\t\t\t// then should be retrieved only once\n\t\t\tvar then = value.then;\n\n\t\t\tif (typeof then === 'function') {\n\t\t\t\tthen.call(value, function (val) {\n\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\tresolved = true;\n\n\t\t\t\t\t\tif (value === val) {\n\t\t\t\t\t\t\tfulfill(promise, val);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(promise, val);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, function (reason) {\n\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\tresolved = true;\n\n\t\t\t\t\t\treject(promise, reason);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tif (!resolved) {\n\t\t\treject(promise, e);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction resolve(promise, value) {\n\tif (promise === value || !handleThenable(promise, value)) {\n\t\tfulfill(promise, value);\n\t}\n}\n\nfunction fulfill(promise, value) {\n\tif (promise._state === PENDING) {\n\t\tpromise._state = SETTLED;\n\t\tpromise._data = value;\n\n\t\tasyncCall(publishFulfillment, promise);\n\t}\n}\n\nfunction reject(promise, reason) {\n\tif (promise._state === PENDING) {\n\t\tpromise._state = SETTLED;\n\t\tpromise._data = reason;\n\n\t\tasyncCall(publishRejection, promise);\n\t}\n}\n\nfunction publish(promise) {\n\tpromise._then = promise._then.forEach(invokeCallback);\n}\n\nfunction publishFulfillment(promise) {\n\tpromise._state = FULFILLED;\n\tpublish(promise);\n}\n\nfunction publishRejection(promise) {\n\tpromise._state = REJECTED;\n\tpublish(promise);\n\tif (!promise._handled && isNode) {\n\t\tglobal.process.emit('unhandledRejection', promise._data, promise);\n\t}\n}\n\nfunction notifyRejectionHandled(promise) {\n\tglobal.process.emit('rejectionHandled', promise);\n}\n\n/**\n * @class\n */\nfunction Promise(resolver) {\n\tif (typeof resolver !== 'function') {\n\t\tthrow new TypeError('Promise resolver ' + resolver + ' is not a function');\n\t}\n\n\tif (this instanceof Promise === false) {\n\t\tthrow new TypeError('Failed to construct \\'Promise\\': Please use the \\'new\\' operator, this object constructor cannot be called as a function.');\n\t}\n\n\tthis._then = [];\n\n\tinvokeResolver(resolver, this);\n}\n\nPromise.prototype = {\n\tconstructor: Promise,\n\n\t_state: PENDING,\n\t_then: null,\n\t_data: undefined,\n\t_handled: false,\n\n\tthen: function (onFulfillment, onRejection) {\n\t\tvar subscriber = {\n\t\t\towner: this,\n\t\t\tthen: new this.constructor(NOOP),\n\t\t\tfulfilled: onFulfillment,\n\t\t\trejected: onRejection\n\t\t};\n\n\t\tif ((onRejection || onFulfillment) && !this._handled) {\n\t\t\tthis._handled = true;\n\t\t\tif (this._state === REJECTED && isNode) {\n\t\t\t\tasyncCall(notifyRejectionHandled, this);\n\t\t\t}\n\t\t}\n\n\t\tif (this._state === FULFILLED || this._state === REJECTED) {\n\t\t\t// already resolved, call callback async\n\t\t\tasyncCall(invokeCallback, subscriber);\n\t\t} else {\n\t\t\t// subscribe\n\t\t\tthis._then.push(subscriber);\n\t\t}\n\n\t\treturn subscriber.then;\n\t},\n\n\tcatch: function (onRejection) {\n\t\treturn this.then(null, onRejection);\n\t}\n};\n\nPromise.all = function (promises) {\n\tif (!Array.isArray(promises)) {\n\t\tthrow new TypeError('You must pass an array to Promise.all().');\n\t}\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar results = [];\n\t\tvar remaining = 0;\n\n\t\tfunction resolver(index) {\n\t\t\tremaining++;\n\t\t\treturn function (value) {\n\t\t\t\tresults[index] = value;\n\t\t\t\tif (!--remaining) {\n\t\t\t\t\tresolve(results);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfor (var i = 0, promise; i < promises.length; i++) {\n\t\t\tpromise = promises[i];\n\n\t\t\tif (promise && typeof promise.then === 'function') {\n\t\t\t\tpromise.then(resolver(i), reject);\n\t\t\t} else {\n\t\t\t\tresults[i] = promise;\n\t\t\t}\n\t\t}\n\n\t\tif (!remaining) {\n\t\t\tresolve(results);\n\t\t}\n\t});\n};\n\nPromise.race = function (promises) {\n\tif (!Array.isArray(promises)) {\n\t\tthrow new TypeError('You must pass an array to Promise.race().');\n\t}\n\n\treturn new Promise(function (resolve, reject) {\n\t\tfor (var i = 0, promise; i < promises.length; i++) {\n\t\t\tpromise = promises[i];\n\n\t\t\tif (promise && typeof promise.then === 'function') {\n\t\t\t\tpromise.then(resolve, reject);\n\t\t\t} else {\n\t\t\t\tresolve(promise);\n\t\t\t}\n\t\t}\n\t});\n};\n\nPromise.resolve = function (value) {\n\tif (value && typeof value === 'object' && value.constructor === Promise) {\n\t\treturn value;\n\t}\n\n\treturn new Promise(function (resolve) {\n\t\tresolve(value);\n\t});\n};\n\nPromise.reject = function (reason) {\n\treturn new Promise(function (resolve, reject) {\n\t\treject(reason);\n\t});\n};\n\nmodule.exports = Promise;\n","'use strict';\nmodule.exports = function (buf) {\n\tif (!(buf && buf.length > 1)) {\n\t\treturn null;\n\t}\n\n\tif (buf[0] === 0xFF && buf[1] === 0xD8 && buf[2] === 0xFF) {\n\t\treturn {\n\t\t\text: 'jpg',\n\t\t\tmime: 'image/jpeg'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x89 && buf[1] === 0x50 && buf[2] === 0x4E && buf[3] === 0x47) {\n\t\treturn {\n\t\t\text: 'png',\n\t\t\tmime: 'image/png'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x47 && buf[1] === 0x49 && buf[2] === 0x46) {\n\t\treturn {\n\t\t\text: 'gif',\n\t\t\tmime: 'image/gif'\n\t\t};\n\t}\n\n\tif (buf[8] === 0x57 && buf[9] === 0x45 && buf[10] === 0x42 && buf[11] === 0x50) {\n\t\treturn {\n\t\t\text: 'webp',\n\t\t\tmime: 'image/webp'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x46 && buf[1] === 0x4C && buf[2] === 0x49 && buf[3] === 0x46) {\n\t\treturn {\n\t\t\text: 'flif',\n\t\t\tmime: 'image/flif'\n\t\t};\n\t}\n\n\t// needs to be before `tif` check\n\tif (((buf[0] === 0x49 && buf[1] === 0x49 && buf[2] === 0x2A && buf[3] === 0x0) || (buf[0] === 0x4D && buf[1] === 0x4D && buf[2] === 0x0 && buf[3] === 0x2A)) && buf[8] === 0x43 && buf[9] === 0x52) {\n\t\treturn {\n\t\t\text: 'cr2',\n\t\t\tmime: 'image/x-canon-cr2'\n\t\t};\n\t}\n\n\tif ((buf[0] === 0x49 && buf[1] === 0x49 && buf[2] === 0x2A && buf[3] === 0x0) || (buf[0] === 0x4D && buf[1] === 0x4D && buf[2] === 0x0 && buf[3] === 0x2A)) {\n\t\treturn {\n\t\t\text: 'tif',\n\t\t\tmime: 'image/tiff'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x42 && buf[1] === 0x4D) {\n\t\treturn {\n\t\t\text: 'bmp',\n\t\t\tmime: 'image/bmp'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x49 && buf[1] === 0x49 && buf[2] === 0xBC) {\n\t\treturn {\n\t\t\text: 'jxr',\n\t\t\tmime: 'image/vnd.ms-photo'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x38 && buf[1] === 0x42 && buf[2] === 0x50 && buf[3] === 0x53) {\n\t\treturn {\n\t\t\text: 'psd',\n\t\t\tmime: 'image/vnd.adobe.photoshop'\n\t\t};\n\t}\n\n\t// needs to be before `zip` check\n\tif (buf[0] === 0x50 && buf[1] === 0x4B && buf[2] === 0x3 && buf[3] === 0x4 && buf[30] === 0x6D && buf[31] === 0x69 && buf[32] === 0x6D && buf[33] === 0x65 && buf[34] === 0x74 && buf[35] === 0x79 && buf[36] === 0x70 && buf[37] === 0x65 && buf[38] === 0x61 && buf[39] === 0x70 && buf[40] === 0x70 && buf[41] === 0x6C && buf[42] === 0x69 && buf[43] === 0x63 && buf[44] === 0x61 && buf[45] === 0x74 && buf[46] === 0x69 && buf[47] === 0x6F && buf[48] === 0x6E && buf[49] === 0x2F && buf[50] === 0x65 && buf[51] === 0x70 && buf[52] === 0x75 && buf[53] === 0x62 && buf[54] === 0x2B && buf[55] === 0x7A && buf[56] === 0x69 && buf[57] === 0x70) {\n\t\treturn {\n\t\t\text: 'epub',\n\t\t\tmime: 'application/epub+zip'\n\t\t};\n\t}\n\n\t// needs to be before `zip` check\n\t// assumes signed .xpi from addons.mozilla.org\n\tif (buf[0] === 0x50 && buf[1] === 0x4B && buf[2] === 0x3 && buf[3] === 0x4 && buf[30] === 0x4D && buf[31] === 0x45 && buf[32] === 0x54 && buf[33] === 0x41 && buf[34] === 0x2D && buf[35] === 0x49 && buf[36] === 0x4E && buf[37] === 0x46 && buf[38] === 0x2F && buf[39] === 0x6D && buf[40] === 0x6F && buf[41] === 0x7A && buf[42] === 0x69 && buf[43] === 0x6C && buf[44] === 0x6C && buf[45] === 0x61 && buf[46] === 0x2E && buf[47] === 0x72 && buf[48] === 0x73 && buf[49] === 0x61) {\n\t\treturn {\n\t\t\text: 'xpi',\n\t\t\tmime: 'application/x-xpinstall'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x50 && buf[1] === 0x4B && (buf[2] === 0x3 || buf[2] === 0x5 || buf[2] === 0x7) && (buf[3] === 0x4 || buf[3] === 0x6 || buf[3] === 0x8)) {\n\t\treturn {\n\t\t\text: 'zip',\n\t\t\tmime: 'application/zip'\n\t\t};\n\t}\n\n\tif (buf[257] === 0x75 && buf[258] === 0x73 && buf[259] === 0x74 && buf[260] === 0x61 && buf[261] === 0x72) {\n\t\treturn {\n\t\t\text: 'tar',\n\t\t\tmime: 'application/x-tar'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x52 && buf[1] === 0x61 && buf[2] === 0x72 && buf[3] === 0x21 && buf[4] === 0x1A && buf[5] === 0x7 && (buf[6] === 0x0 || buf[6] === 0x1)) {\n\t\treturn {\n\t\t\text: 'rar',\n\t\t\tmime: 'application/x-rar-compressed'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x1F && buf[1] === 0x8B && buf[2] === 0x8) {\n\t\treturn {\n\t\t\text: 'gz',\n\t\t\tmime: 'application/gzip'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x42 && buf[1] === 0x5A && buf[2] === 0x68) {\n\t\treturn {\n\t\t\text: 'bz2',\n\t\t\tmime: 'application/x-bzip2'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x37 && buf[1] === 0x7A && buf[2] === 0xBC && buf[3] === 0xAF && buf[4] === 0x27 && buf[5] === 0x1C) {\n\t\treturn {\n\t\t\text: '7z',\n\t\t\tmime: 'application/x-7z-compressed'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x78 && buf[1] === 0x01) {\n\t\treturn {\n\t\t\text: 'dmg',\n\t\t\tmime: 'application/x-apple-diskimage'\n\t\t};\n\t}\n\n\tif (\n\t\t(buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && (buf[3] === 0x18 || buf[3] === 0x20) && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70) ||\n\t\t(buf[0] === 0x33 && buf[1] === 0x67 && buf[2] === 0x70 && buf[3] === 0x35) ||\n\t\t(buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x1C && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x6D && buf[9] === 0x70 && buf[10] === 0x34 && buf[11] === 0x32 && buf[16] === 0x6D && buf[17] === 0x70 && buf[18] === 0x34 && buf[19] === 0x31 && buf[20] === 0x6D && buf[21] === 0x70 && buf[22] === 0x34 && buf[23] === 0x32 && buf[24] === 0x69 && buf[25] === 0x73 && buf[26] === 0x6F && buf[27] === 0x6D) ||\n\t\t(buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x1C && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x69 && buf[9] === 0x73 && buf[10] === 0x6F && buf[11] === 0x6D) ||\n\t\t(buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x1c && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x6D && buf[9] === 0x70 && buf[10] === 0x34 && buf[11] === 0x32 && buf[12] === 0x0 && buf[13] === 0x0 && buf[14] === 0x0 && buf[15] === 0x0)\n\t) {\n\t\treturn {\n\t\t\text: 'mp4',\n\t\t\tmime: 'video/mp4'\n\t\t};\n\t}\n\n\tif ((buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x1C && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x4D && buf[9] === 0x34 && buf[10] === 0x56)) {\n\t\treturn {\n\t\t\text: 'm4v',\n\t\t\tmime: 'video/x-m4v'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x4D && buf[1] === 0x54 && buf[2] === 0x68 && buf[3] === 0x64) {\n\t\treturn {\n\t\t\text: 'mid',\n\t\t\tmime: 'audio/midi'\n\t\t};\n\t}\n\n\t// needs to be before the `webm` check\n\tif (buf[31] === 0x6D && buf[32] === 0x61 && buf[33] === 0x74 && buf[34] === 0x72 && buf[35] === 0x6f && buf[36] === 0x73 && buf[37] === 0x6B && buf[38] === 0x61) {\n\t\treturn {\n\t\t\text: 'mkv',\n\t\t\tmime: 'video/x-matroska'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x1A && buf[1] === 0x45 && buf[2] === 0xDF && buf[3] === 0xA3) {\n\t\treturn {\n\t\t\text: 'webm',\n\t\t\tmime: 'video/webm'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x14 && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70) {\n\t\treturn {\n\t\t\text: 'mov',\n\t\t\tmime: 'video/quicktime'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x52 && buf[1] === 0x49 && buf[2] === 0x46 && buf[3] === 0x46 && buf[8] === 0x41 && buf[9] === 0x56 && buf[10] === 0x49) {\n\t\treturn {\n\t\t\text: 'avi',\n\t\t\tmime: 'video/x-msvideo'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x30 && buf[1] === 0x26 && buf[2] === 0xB2 && buf[3] === 0x75 && buf[4] === 0x8E && buf[5] === 0x66 && buf[6] === 0xCF && buf[7] === 0x11 && buf[8] === 0xA6 && buf[9] === 0xD9) {\n\t\treturn {\n\t\t\text: 'wmv',\n\t\t\tmime: 'video/x-ms-wmv'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x1 && buf[3].toString(16)[0] === 'b') {\n\t\treturn {\n\t\t\text: 'mpg',\n\t\t\tmime: 'video/mpeg'\n\t\t};\n\t}\n\n\tif ((buf[0] === 0x49 && buf[1] === 0x44 && buf[2] === 0x33) || (buf[0] === 0xFF && buf[1] === 0xfb)) {\n\t\treturn {\n\t\t\text: 'mp3',\n\t\t\tmime: 'audio/mpeg'\n\t\t};\n\t}\n\n\tif ((buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x4D && buf[9] === 0x34 && buf[10] === 0x41) || (buf[0] === 0x4D && buf[1] === 0x34 && buf[2] === 0x41 && buf[3] === 0x20)) {\n\t\treturn {\n\t\t\text: 'm4a',\n\t\t\tmime: 'audio/m4a'\n\t\t};\n\t}\n\n\t// needs to be before `ogg` check\n\tif (buf[28] === 0x4F && buf[29] === 0x70 && buf[30] === 0x75 && buf[31] === 0x73 && buf[32] === 0x48 && buf[33] === 0x65 && buf[34] === 0x61 && buf[35] === 0x64) {\n\t\treturn {\n\t\t\text: 'opus',\n\t\t\tmime: 'audio/opus'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x4F && buf[1] === 0x67 && buf[2] === 0x67 && buf[3] === 0x53) {\n\t\treturn {\n\t\t\text: 'ogg',\n\t\t\tmime: 'audio/ogg'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x66 && buf[1] === 0x4C && buf[2] === 0x61 && buf[3] === 0x43) {\n\t\treturn {\n\t\t\text: 'flac',\n\t\t\tmime: 'audio/x-flac'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x52 && buf[1] === 0x49 && buf[2] === 0x46 && buf[3] === 0x46 && buf[8] === 0x57 && buf[9] === 0x41 && buf[10] === 0x56 && buf[11] === 0x45) {\n\t\treturn {\n\t\t\text: 'wav',\n\t\t\tmime: 'audio/x-wav'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x23 && buf[1] === 0x21 && buf[2] === 0x41 && buf[3] === 0x4D && buf[4] === 0x52 && buf[5] === 0x0A) {\n\t\treturn {\n\t\t\text: 'amr',\n\t\t\tmime: 'audio/amr'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x25 && buf[1] === 0x50 && buf[2] === 0x44 && buf[3] === 0x46) {\n\t\treturn {\n\t\t\text: 'pdf',\n\t\t\tmime: 'application/pdf'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x4D && buf[1] === 0x5A) {\n\t\treturn {\n\t\t\text: 'exe',\n\t\t\tmime: 'application/x-msdownload'\n\t\t};\n\t}\n\n\tif ((buf[0] === 0x43 || buf[0] === 0x46) && buf[1] === 0x57 && buf[2] === 0x53) {\n\t\treturn {\n\t\t\text: 'swf',\n\t\t\tmime: 'application/x-shockwave-flash'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x7B && buf[1] === 0x5C && buf[2] === 0x72 && buf[3] === 0x74 && buf[4] === 0x66) {\n\t\treturn {\n\t\t\text: 'rtf',\n\t\t\tmime: 'application/rtf'\n\t\t};\n\t}\n\n\tif (\n\t\t(buf[0] === 0x77 && buf[1] === 0x4F && buf[2] === 0x46 && buf[3] === 0x46) &&\n\t\t(\n\t\t\t(buf[4] === 0x00 && buf[5] === 0x01 && buf[6] === 0x00 && buf[7] === 0x00) ||\n\t\t\t(buf[4] === 0x4F && buf[5] === 0x54 && buf[6] === 0x54 && buf[7] === 0x4F)\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff',\n\t\t\tmime: 'application/font-woff'\n\t\t};\n\t}\n\n\tif (\n\t\t(buf[0] === 0x77 && buf[1] === 0x4F && buf[2] === 0x46 && buf[3] === 0x32) &&\n\t\t(\n\t\t\t(buf[4] === 0x00 && buf[5] === 0x01 && buf[6] === 0x00 && buf[7] === 0x00) ||\n\t\t\t(buf[4] === 0x4F && buf[5] === 0x54 && buf[6] === 0x54 && buf[7] === 0x4F)\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff2',\n\t\t\tmime: 'application/font-woff'\n\t\t};\n\t}\n\n\tif (\n\t\t(buf[34] === 0x4C && buf[35] === 0x50) &&\n\t\t(\n\t\t\t(buf[8] === 0x00 && buf[9] === 0x00 && buf[10] === 0x01) ||\n\t\t\t(buf[8] === 0x01 && buf[9] === 0x00 && buf[10] === 0x02) ||\n\t\t\t(buf[8] === 0x02 && buf[9] === 0x00 && buf[10] === 0x02)\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'eot',\n\t\t\tmime: 'application/octet-stream'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x00 && buf[1] === 0x01 && buf[2] === 0x00 && buf[3] === 0x00 && buf[4] === 0x00) {\n\t\treturn {\n\t\t\text: 'ttf',\n\t\t\tmime: 'application/font-sfnt'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x4F && buf[1] === 0x54 && buf[2] === 0x54 && buf[3] === 0x4F && buf[4] === 0x00) {\n\t\treturn {\n\t\t\text: 'otf',\n\t\t\tmime: 'application/font-sfnt'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x00 && buf[1] === 0x00 && buf[2] === 0x01 && buf[3] === 0x00) {\n\t\treturn {\n\t\t\text: 'ico',\n\t\t\tmime: 'image/x-icon'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x46 && buf[1] === 0x4C && buf[2] === 0x56 && buf[3] === 0x01) {\n\t\treturn {\n\t\t\text: 'flv',\n\t\t\tmime: 'video/x-flv'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x25 && buf[1] === 0x21) {\n\t\treturn {\n\t\t\text: 'ps',\n\t\t\tmime: 'application/postscript'\n\t\t};\n\t}\n\n\tif (buf[0] === 0xFD && buf[1] === 0x37 && buf[2] === 0x7A && buf[3] === 0x58 && buf[4] === 0x5A && buf[5] === 0x00) {\n\t\treturn {\n\t\t\text: 'xz',\n\t\t\tmime: 'application/x-xz'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x53 && buf[1] === 0x51 && buf[2] === 0x4C && buf[3] === 0x69) {\n\t\treturn {\n\t\t\text: 'sqlite',\n\t\t\tmime: 'application/x-sqlite3'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x4E && buf[1] === 0x45 && buf[2] === 0x53 && buf[3] === 0x1A) {\n\t\treturn {\n\t\t\text: 'nes',\n\t\t\tmime: 'application/x-nintendo-nes-rom'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x43 && buf[1] === 0x72 && buf[2] === 0x32 && buf[3] === 0x34) {\n\t\treturn {\n\t\t\text: 'crx',\n\t\t\tmime: 'application/x-google-chrome-extension'\n\t\t};\n\t}\n\n\tif (\n\t\t(buf[0] === 0x4D && buf[1] === 0x53 && buf[2] === 0x43 && buf[3] === 0x46) ||\n\t\t(buf[0] === 0x49 && buf[1] === 0x53 && buf[2] === 0x63 && buf[3] === 0x28)\n\t) {\n\t\treturn {\n\t\t\text: 'cab',\n\t\t\tmime: 'application/vnd.ms-cab-compressed'\n\t\t};\n\t}\n\n\t// needs to be before `ar` check\n\tif (buf[0] === 0x21 && buf[1] === 0x3C && buf[2] === 0x61 && buf[3] === 0x72 && buf[4] === 0x63 && buf[5] === 0x68 && buf[6] === 0x3E && buf[7] === 0x0A && buf[8] === 0x64 && buf[9] === 0x65 && buf[10] === 0x62 && buf[11] === 0x69 && buf[12] === 0x61 && buf[13] === 0x6E && buf[14] === 0x2D && buf[15] === 0x62 && buf[16] === 0x69 && buf[17] === 0x6E && buf[18] === 0x61 && buf[19] === 0x72 && buf[20] === 0x79) {\n\t\treturn {\n\t\t\text: 'deb',\n\t\t\tmime: 'application/x-deb'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x21 && buf[1] === 0x3C && buf[2] === 0x61 && buf[3] === 0x72 && buf[4] === 0x63 && buf[5] === 0x68 && buf[6] === 0x3E) {\n\t\treturn {\n\t\t\text: 'ar',\n\t\t\tmime: 'application/x-unix-archive'\n\t\t};\n\t}\n\n\tif (buf[0] === 0xED && buf[1] === 0xAB && buf[2] === 0xEE && buf[3] === 0xDB) {\n\t\treturn {\n\t\t\text: 'rpm',\n\t\t\tmime: 'application/x-rpm'\n\t\t};\n\t}\n\n\tif (\n\t\t(buf[0] === 0x1F && buf[1] === 0xA0) ||\n\t\t(buf[0] === 0x1F && buf[1] === 0x9D)\n\t) {\n\t\treturn {\n\t\t\text: 'Z',\n\t\t\tmime: 'application/x-compress'\n\t\t};\n\t}\n\n\tif (buf[0] === 0x4C && buf[1] === 0x5A && buf[2] === 0x49 && buf[3] === 0x50) {\n\t\treturn {\n\t\t\text: 'lz',\n\t\t\tmime: 'application/x-lzip'\n\t\t};\n\t}\n\n\tif (buf[0] === 0xD0 && buf[1] === 0xCF && buf[2] === 0x11 && buf[3] === 0xE0 && buf[4] === 0xA1 && buf[5] === 0xB1 && buf[6] === 0x1A && buf[7] === 0xE1) {\n\t\treturn {\n\t\t\text: 'msi',\n\t\t\tmime: 'application/x-msi'\n\t\t};\n\t}\n\n\treturn null;\n};\n","'use strict';\n\nmodule.exports = typeof Promise === 'function' ? Promise : require('pinkie');\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","var PassThrough = require('stream').PassThrough;\nvar objectAssign = require('object-assign');\n\nmodule.exports = function (opts) {\n\topts = objectAssign({}, opts);\n\n\tvar array = opts.array;\n\tvar encoding = opts.encoding;\n\n\tvar buffer = encoding === 'buffer';\n\tvar objectMode = false;\n\n\tif (array) {\n\t\tobjectMode = !(encoding || buffer);\n\t} else {\n\t\tencoding = encoding || 'utf8';\n\t}\n\n\tif (buffer) {\n\t\tencoding = null;\n\t}\n\n\tvar len = 0;\n\tvar ret = [];\n\n\tvar stream = new PassThrough({objectMode: objectMode});\n\n\tif (encoding) {\n\t\tstream.setEncoding(encoding);\n\t}\n\n\tstream.on('data', function (chunk) {\n\t\tret.push(chunk);\n\n\t\tif (objectMode) {\n\t\t\tlen = ret.length;\n\t\t} else {\n\t\t\tlen += chunk.length;\n\t\t}\n\t});\n\n\tstream.getBufferedValue = function () {\n\t\tif (array) {\n\t\t\treturn ret;\n\t\t}\n\t\treturn buffer ? Buffer.concat(ret, len) : ret.join('');\n\t};\n\n\tstream.getBufferedLength = function () {\n\t\treturn len;\n\t};\n\n\treturn stream;\n};\n","'use strict';\nvar Promise = require('pinkie-promise');\nvar objectAssign = require('object-assign');\nvar bufferStream = require('./buffer-stream');\n\nfunction getStream(inputStream, opts) {\n\tif (!inputStream) {\n\t\treturn Promise.reject(new Error('Expected a stream'));\n\t}\n\n\topts = objectAssign({maxBuffer: Infinity}, opts);\n\tvar maxBuffer = opts.maxBuffer;\n\tvar stream;\n\tvar clean;\n\n\tvar p = new Promise(function (resolve, reject) {\n\t\tstream = bufferStream(opts);\n\t\tinputStream.once('error', error);\n\t\tinputStream.pipe(stream);\n\n\t\tstream.on('data', function () {\n\t\t\tif (stream.getBufferedLength() > maxBuffer) {\n\t\t\t\treject(new Error('maxBuffer exceeded'));\n\t\t\t}\n\t\t});\n\t\tstream.once('error', error);\n\t\tstream.on('end', resolve);\n\n\t\tclean = function () {\n\t\t\t// some streams doesn't implement the stream.Readable interface correctly\n\t\t\tif (inputStream.unpipe) {\n\t\t\t\tinputStream.unpipe(stream);\n\t\t\t}\n\t\t};\n\n\t\tfunction error(err) {\n\t\t\tif (err) { // null check\n\t\t\t\terr.bufferedData = stream.getBufferedValue();\n\t\t\t}\n\t\t\treject(err);\n\t\t}\n\t});\n\n\tp.then(clean, clean);\n\n\treturn p.then(function () {\n\t\treturn stream.getBufferedValue();\n\t});\n}\n\nmodule.exports = getStream;\n\nmodule.exports.buffer = function (stream, opts) {\n\treturn getStream(stream, objectAssign({}, opts, {encoding: 'buffer'}));\n};\n\nmodule.exports.array = function (stream, opts) {\n\treturn getStream(stream, objectAssign({}, opts, {array: true}));\n};\n","'use strict';\n\nvar processFn = function (fn, P, opts) {\n\treturn function () {\n\t\tvar that = this;\n\t\tvar args = new Array(arguments.length);\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\n\t\treturn new P(function (resolve, reject) {\n\t\t\targs.push(function (err, result) {\n\t\t\t\tif (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t} else if (opts.multiArgs) {\n\t\t\t\t\tvar results = new Array(arguments.length - 1);\n\n\t\t\t\t\tfor (var i = 1; i < arguments.length; i++) {\n\t\t\t\t\t\tresults[i - 1] = arguments[i];\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(results);\n\t\t\t\t} else {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfn.apply(that, args);\n\t\t});\n\t};\n};\n\nvar pify = module.exports = function (obj, P, opts) {\n\tif (typeof P !== 'function') {\n\t\topts = P;\n\t\tP = Promise;\n\t}\n\n\topts = opts || {};\n\topts.exclude = opts.exclude || [/.+Sync$/];\n\n\tvar filter = function (key) {\n\t\tvar match = function (pattern) {\n\t\t\treturn typeof pattern === 'string' ? key === pattern : pattern.test(key);\n\t\t};\n\n\t\treturn opts.include ? opts.include.some(match) : !opts.exclude.some(match);\n\t};\n\n\tvar ret = typeof obj === 'function' ? function () {\n\t\tif (opts.excludeMain) {\n\t\t\treturn obj.apply(this, arguments);\n\t\t}\n\n\t\treturn processFn(obj, P, opts).apply(this, arguments);\n\t} : {};\n\n\treturn Object.keys(obj).reduce(function (ret, key) {\n\t\tvar x = obj[key];\n\n\t\tret[key] = typeof x === 'function' && filter(key) ? processFn(x, P, opts) : x;\n\n\t\treturn ret;\n\t}, ret);\n};\n\npify.all = pify;\n","module.exports = Pend;\n\nfunction Pend() {\n this.pending = 0;\n this.max = Infinity;\n this.listeners = [];\n this.waiting = [];\n this.error = null;\n}\n\nPend.prototype.go = function(fn) {\n if (this.pending < this.max) {\n pendGo(this, fn);\n } else {\n this.waiting.push(fn);\n }\n};\n\nPend.prototype.wait = function(cb) {\n if (this.pending === 0) {\n cb(this.error);\n } else {\n this.listeners.push(cb);\n }\n};\n\nPend.prototype.hold = function() {\n return pendHold(this);\n};\n\nfunction pendHold(self) {\n self.pending += 1;\n var called = false;\n return onCb;\n function onCb(err) {\n if (called) throw new Error(\"callback called twice\");\n called = true;\n self.error = self.error || err;\n self.pending -= 1;\n if (self.waiting.length > 0 && self.pending < self.max) {\n pendGo(self, self.waiting.shift());\n } else if (self.pending === 0) {\n var listeners = self.listeners;\n self.listeners = [];\n listeners.forEach(cbListener);\n }\n }\n function cbListener(listener) {\n listener(self.error);\n }\n}\n\nfunction pendGo(self, fn) {\n fn(pendHold(self));\n}\n","var fs = require('fs');\nvar util = require('util');\nvar stream = require('stream');\nvar Readable = stream.Readable;\nvar Writable = stream.Writable;\nvar PassThrough = stream.PassThrough;\nvar Pend = require('pend');\nvar EventEmitter = require('events').EventEmitter;\n\nexports.createFromBuffer = createFromBuffer;\nexports.createFromFd = createFromFd;\nexports.BufferSlicer = BufferSlicer;\nexports.FdSlicer = FdSlicer;\n\nutil.inherits(FdSlicer, EventEmitter);\nfunction FdSlicer(fd, options) {\n options = options || {};\n EventEmitter.call(this);\n\n this.fd = fd;\n this.pend = new Pend();\n this.pend.max = 1;\n this.refCount = 0;\n this.autoClose = !!options.autoClose;\n}\n\nFdSlicer.prototype.read = function(buffer, offset, length, position, callback) {\n var self = this;\n self.pend.go(function(cb) {\n fs.read(self.fd, buffer, offset, length, position, function(err, bytesRead, buffer) {\n cb();\n callback(err, bytesRead, buffer);\n });\n });\n};\n\nFdSlicer.prototype.write = function(buffer, offset, length, position, callback) {\n var self = this;\n self.pend.go(function(cb) {\n fs.write(self.fd, buffer, offset, length, position, function(err, written, buffer) {\n cb();\n callback(err, written, buffer);\n });\n });\n};\n\nFdSlicer.prototype.createReadStream = function(options) {\n return new ReadStream(this, options);\n};\n\nFdSlicer.prototype.createWriteStream = function(options) {\n return new WriteStream(this, options);\n};\n\nFdSlicer.prototype.ref = function() {\n this.refCount += 1;\n};\n\nFdSlicer.prototype.unref = function() {\n var self = this;\n self.refCount -= 1;\n\n if (self.refCount > 0) return;\n if (self.refCount < 0) throw new Error(\"invalid unref\");\n\n if (self.autoClose) {\n fs.close(self.fd, onCloseDone);\n }\n\n function onCloseDone(err) {\n if (err) {\n self.emit('error', err);\n } else {\n self.emit('close');\n }\n }\n};\n\nutil.inherits(ReadStream, Readable);\nfunction ReadStream(context, options) {\n options = options || {};\n Readable.call(this, options);\n\n this.context = context;\n this.context.ref();\n\n this.start = options.start || 0;\n this.endOffset = options.end;\n this.pos = this.start;\n this.destroyed = false;\n}\n\nReadStream.prototype._read = function(n) {\n var self = this;\n if (self.destroyed) return;\n\n var toRead = Math.min(self._readableState.highWaterMark, n);\n if (self.endOffset != null) {\n toRead = Math.min(toRead, self.endOffset - self.pos);\n }\n if (toRead <= 0) {\n self.destroyed = true;\n self.push(null);\n self.context.unref();\n return;\n }\n self.context.pend.go(function(cb) {\n if (self.destroyed) return cb();\n var buffer = new Buffer(toRead);\n fs.read(self.context.fd, buffer, 0, toRead, self.pos, function(err, bytesRead) {\n if (err) {\n self.destroy(err);\n } else if (bytesRead === 0) {\n self.destroyed = true;\n self.push(null);\n self.context.unref();\n } else {\n self.pos += bytesRead;\n self.push(buffer.slice(0, bytesRead));\n }\n cb();\n });\n });\n};\n\nReadStream.prototype.destroy = function(err) {\n if (this.destroyed) return;\n err = err || new Error(\"stream destroyed\");\n this.destroyed = true;\n this.emit('error', err);\n this.context.unref();\n};\n\nutil.inherits(WriteStream, Writable);\nfunction WriteStream(context, options) {\n options = options || {};\n Writable.call(this, options);\n\n this.context = context;\n this.context.ref();\n\n this.start = options.start || 0;\n this.endOffset = (options.end == null) ? Infinity : +options.end;\n this.bytesWritten = 0;\n this.pos = this.start;\n this.destroyed = false;\n\n this.on('finish', this.destroy.bind(this));\n}\n\nWriteStream.prototype._write = function(buffer, encoding, callback) {\n var self = this;\n if (self.destroyed) return;\n\n if (self.pos + buffer.length > self.endOffset) {\n var err = new Error(\"maximum file length exceeded\");\n err.code = 'ETOOBIG';\n self.destroy();\n callback(err);\n return;\n }\n self.context.pend.go(function(cb) {\n if (self.destroyed) return cb();\n fs.write(self.context.fd, buffer, 0, buffer.length, self.pos, function(err, bytes) {\n if (err) {\n self.destroy();\n cb();\n callback(err);\n } else {\n self.bytesWritten += bytes;\n self.pos += bytes;\n self.emit('progress');\n cb();\n callback();\n }\n });\n });\n};\n\nWriteStream.prototype.destroy = function() {\n if (this.destroyed) return;\n this.destroyed = true;\n this.context.unref();\n};\n\nutil.inherits(BufferSlicer, EventEmitter);\nfunction BufferSlicer(buffer, options) {\n EventEmitter.call(this);\n\n options = options || {};\n this.refCount = 0;\n this.buffer = buffer;\n this.maxChunkSize = options.maxChunkSize || Number.MAX_SAFE_INTEGER;\n}\n\nBufferSlicer.prototype.read = function(buffer, offset, length, position, callback) {\n var end = position + length;\n var delta = end - this.buffer.length;\n var written = (delta > 0) ? delta : length;\n this.buffer.copy(buffer, offset, position, end);\n setImmediate(function() {\n callback(null, written);\n });\n};\n\nBufferSlicer.prototype.write = function(buffer, offset, length, position, callback) {\n buffer.copy(this.buffer, position, offset, offset + length);\n setImmediate(function() {\n callback(null, length, buffer);\n });\n};\n\nBufferSlicer.prototype.createReadStream = function(options) {\n options = options || {};\n var readStream = new PassThrough(options);\n readStream.destroyed = false;\n readStream.start = options.start || 0;\n readStream.endOffset = options.end;\n // by the time this function returns, we'll be done.\n readStream.pos = readStream.endOffset || this.buffer.length;\n\n // respect the maxChunkSize option to slice up the chunk into smaller pieces.\n var entireSlice = this.buffer.slice(readStream.start, readStream.pos);\n var offset = 0;\n while (true) {\n var nextOffset = offset + this.maxChunkSize;\n if (nextOffset >= entireSlice.length) {\n // last chunk\n if (offset < entireSlice.length) {\n readStream.write(entireSlice.slice(offset, entireSlice.length));\n }\n break;\n }\n readStream.write(entireSlice.slice(offset, nextOffset));\n offset = nextOffset;\n }\n\n readStream.end();\n readStream.destroy = function() {\n readStream.destroyed = true;\n };\n return readStream;\n};\n\nBufferSlicer.prototype.createWriteStream = function(options) {\n var bufferSlicer = this;\n options = options || {};\n var writeStream = new Writable(options);\n writeStream.start = options.start || 0;\n writeStream.endOffset = (options.end == null) ? this.buffer.length : +options.end;\n writeStream.bytesWritten = 0;\n writeStream.pos = writeStream.start;\n writeStream.destroyed = false;\n writeStream._write = function(buffer, encoding, callback) {\n if (writeStream.destroyed) return;\n\n var end = writeStream.pos + buffer.length;\n if (end > writeStream.endOffset) {\n var err = new Error(\"maximum file length exceeded\");\n err.code = 'ETOOBIG';\n writeStream.destroyed = true;\n callback(err);\n return;\n }\n buffer.copy(bufferSlicer.buffer, writeStream.pos, 0, buffer.length);\n\n writeStream.bytesWritten += buffer.length;\n writeStream.pos = end;\n writeStream.emit('progress');\n callback();\n };\n writeStream.destroy = function() {\n writeStream.destroyed = true;\n };\n return writeStream;\n};\n\nBufferSlicer.prototype.ref = function() {\n this.refCount += 1;\n};\n\nBufferSlicer.prototype.unref = function() {\n this.refCount -= 1;\n\n if (this.refCount < 0) {\n throw new Error(\"invalid unref\");\n }\n};\n\nfunction createFromBuffer(buffer, options) {\n return new BufferSlicer(buffer, options);\n}\n\nfunction createFromFd(fd, options) {\n return new FdSlicer(fd, options);\n}\n","var fs = require(\"fs\");\nvar zlib = require(\"zlib\");\nvar fd_slicer = require(\"fd-slicer\");\nvar crc32 = require(\"buffer-crc32\");\nvar util = require(\"util\");\nvar EventEmitter = require(\"events\").EventEmitter;\nvar Transform = require(\"stream\").Transform;\nvar PassThrough = require(\"stream\").PassThrough;\nvar Writable = require(\"stream\").Writable;\n\nexports.open = open;\nexports.fromFd = fromFd;\nexports.fromBuffer = fromBuffer;\nexports.fromRandomAccessReader = fromRandomAccessReader;\nexports.dosDateTimeToDate = dosDateTimeToDate;\nexports.validateFileName = validateFileName;\nexports.ZipFile = ZipFile;\nexports.Entry = Entry;\nexports.RandomAccessReader = RandomAccessReader;\n\nfunction open(path, options, callback) {\n if (typeof options === \"function\") {\n callback = options;\n options = null;\n }\n if (options == null) options = {};\n if (options.autoClose == null) options.autoClose = true;\n if (options.lazyEntries == null) options.lazyEntries = false;\n if (options.decodeStrings == null) options.decodeStrings = true;\n if (options.validateEntrySizes == null) options.validateEntrySizes = true;\n if (options.strictFileNames == null) options.strictFileNames = false;\n if (callback == null) callback = defaultCallback;\n fs.open(path, \"r\", function(err, fd) {\n if (err) return callback(err);\n fromFd(fd, options, function(err, zipfile) {\n if (err) fs.close(fd, defaultCallback);\n callback(err, zipfile);\n });\n });\n}\n\nfunction fromFd(fd, options, callback) {\n if (typeof options === \"function\") {\n callback = options;\n options = null;\n }\n if (options == null) options = {};\n if (options.autoClose == null) options.autoClose = false;\n if (options.lazyEntries == null) options.lazyEntries = false;\n if (options.decodeStrings == null) options.decodeStrings = true;\n if (options.validateEntrySizes == null) options.validateEntrySizes = true;\n if (options.strictFileNames == null) options.strictFileNames = false;\n if (callback == null) callback = defaultCallback;\n fs.fstat(fd, function(err, stats) {\n if (err) return callback(err);\n var reader = fd_slicer.createFromFd(fd, {autoClose: true});\n fromRandomAccessReader(reader, stats.size, options, callback);\n });\n}\n\nfunction fromBuffer(buffer, options, callback) {\n if (typeof options === \"function\") {\n callback = options;\n options = null;\n }\n if (options == null) options = {};\n options.autoClose = false;\n if (options.lazyEntries == null) options.lazyEntries = false;\n if (options.decodeStrings == null) options.decodeStrings = true;\n if (options.validateEntrySizes == null) options.validateEntrySizes = true;\n if (options.strictFileNames == null) options.strictFileNames = false;\n // limit the max chunk size. see https://github.com/thejoshwolfe/yauzl/issues/87\n var reader = fd_slicer.createFromBuffer(buffer, {maxChunkSize: 0x10000});\n fromRandomAccessReader(reader, buffer.length, options, callback);\n}\n\nfunction fromRandomAccessReader(reader, totalSize, options, callback) {\n if (typeof options === \"function\") {\n callback = options;\n options = null;\n }\n if (options == null) options = {};\n if (options.autoClose == null) options.autoClose = true;\n if (options.lazyEntries == null) options.lazyEntries = false;\n if (options.decodeStrings == null) options.decodeStrings = true;\n var decodeStrings = !!options.decodeStrings;\n if (options.validateEntrySizes == null) options.validateEntrySizes = true;\n if (options.strictFileNames == null) options.strictFileNames = false;\n if (callback == null) callback = defaultCallback;\n if (typeof totalSize !== \"number\") throw new Error(\"expected totalSize parameter to be a number\");\n if (totalSize > Number.MAX_SAFE_INTEGER) {\n throw new Error(\"zip file too large. only file sizes up to 2^52 are supported due to JavaScript's Number type being an IEEE 754 double.\");\n }\n\n // the matching unref() call is in zipfile.close()\n reader.ref();\n\n // eocdr means End of Central Directory Record.\n // search backwards for the eocdr signature.\n // the last field of the eocdr is a variable-length comment.\n // the comment size is encoded in a 2-byte field in the eocdr, which we can't find without trudging backwards through the comment to find it.\n // as a consequence of this design decision, it's possible to have ambiguous zip file metadata if a coherent eocdr was in the comment.\n // we search backwards for a eocdr signature, and hope that whoever made the zip file was smart enough to forbid the eocdr signature in the comment.\n var eocdrWithoutCommentSize = 22;\n var maxCommentSize = 0xffff; // 2-byte size\n var bufferSize = Math.min(eocdrWithoutCommentSize + maxCommentSize, totalSize);\n var buffer = newBuffer(bufferSize);\n var bufferReadStart = totalSize - buffer.length;\n readAndAssertNoEof(reader, buffer, 0, bufferSize, bufferReadStart, function(err) {\n if (err) return callback(err);\n for (var i = bufferSize - eocdrWithoutCommentSize; i >= 0; i -= 1) {\n if (buffer.readUInt32LE(i) !== 0x06054b50) continue;\n // found eocdr\n var eocdrBuffer = buffer.slice(i);\n\n // 0 - End of central directory signature = 0x06054b50\n // 4 - Number of this disk\n var diskNumber = eocdrBuffer.readUInt16LE(4);\n if (diskNumber !== 0) {\n return callback(new Error(\"multi-disk zip files are not supported: found disk number: \" + diskNumber));\n }\n // 6 - Disk where central directory starts\n // 8 - Number of central directory records on this disk\n // 10 - Total number of central directory records\n var entryCount = eocdrBuffer.readUInt16LE(10);\n // 12 - Size of central directory (bytes)\n // 16 - Offset of start of central directory, relative to start of archive\n var centralDirectoryOffset = eocdrBuffer.readUInt32LE(16);\n // 20 - Comment length\n var commentLength = eocdrBuffer.readUInt16LE(20);\n var expectedCommentLength = eocdrBuffer.length - eocdrWithoutCommentSize;\n if (commentLength !== expectedCommentLength) {\n return callback(new Error(\"invalid comment length. expected: \" + expectedCommentLength + \". found: \" + commentLength));\n }\n // 22 - Comment\n // the encoding is always cp437.\n var comment = decodeStrings ? decodeBuffer(eocdrBuffer, 22, eocdrBuffer.length, false)\n : eocdrBuffer.slice(22);\n\n if (!(entryCount === 0xffff || centralDirectoryOffset === 0xffffffff)) {\n return callback(null, new ZipFile(reader, centralDirectoryOffset, totalSize, entryCount, comment, options.autoClose, options.lazyEntries, decodeStrings, options.validateEntrySizes, options.strictFileNames));\n }\n\n // ZIP64 format\n\n // ZIP64 Zip64 end of central directory locator\n var zip64EocdlBuffer = newBuffer(20);\n var zip64EocdlOffset = bufferReadStart + i - zip64EocdlBuffer.length;\n readAndAssertNoEof(reader, zip64EocdlBuffer, 0, zip64EocdlBuffer.length, zip64EocdlOffset, function(err) {\n if (err) return callback(err);\n\n // 0 - zip64 end of central dir locator signature = 0x07064b50\n if (zip64EocdlBuffer.readUInt32LE(0) !== 0x07064b50) {\n return callback(new Error(\"invalid zip64 end of central directory locator signature\"));\n }\n // 4 - number of the disk with the start of the zip64 end of central directory\n // 8 - relative offset of the zip64 end of central directory record\n var zip64EocdrOffset = readUInt64LE(zip64EocdlBuffer, 8);\n // 16 - total number of disks\n\n // ZIP64 end of central directory record\n var zip64EocdrBuffer = newBuffer(56);\n readAndAssertNoEof(reader, zip64EocdrBuffer, 0, zip64EocdrBuffer.length, zip64EocdrOffset, function(err) {\n if (err) return callback(err);\n\n // 0 - zip64 end of central dir signature 4 bytes (0x06064b50)\n if (zip64EocdrBuffer.readUInt32LE(0) !== 0x06064b50) {\n return callback(new Error(\"invalid zip64 end of central directory record signature\"));\n }\n // 4 - size of zip64 end of central directory record 8 bytes\n // 12 - version made by 2 bytes\n // 14 - version needed to extract 2 bytes\n // 16 - number of this disk 4 bytes\n // 20 - number of the disk with the start of the central directory 4 bytes\n // 24 - total number of entries in the central directory on this disk 8 bytes\n // 32 - total number of entries in the central directory 8 bytes\n entryCount = readUInt64LE(zip64EocdrBuffer, 32);\n // 40 - size of the central directory 8 bytes\n // 48 - offset of start of central directory with respect to the starting disk number 8 bytes\n centralDirectoryOffset = readUInt64LE(zip64EocdrBuffer, 48);\n // 56 - zip64 extensible data sector (variable size)\n return callback(null, new ZipFile(reader, centralDirectoryOffset, totalSize, entryCount, comment, options.autoClose, options.lazyEntries, decodeStrings, options.validateEntrySizes, options.strictFileNames));\n });\n });\n return;\n }\n callback(new Error(\"end of central directory record signature not found\"));\n });\n}\n\nutil.inherits(ZipFile, EventEmitter);\nfunction ZipFile(reader, centralDirectoryOffset, fileSize, entryCount, comment, autoClose, lazyEntries, decodeStrings, validateEntrySizes, strictFileNames) {\n var self = this;\n EventEmitter.call(self);\n self.reader = reader;\n // forward close events\n self.reader.on(\"error\", function(err) {\n // error closing the fd\n emitError(self, err);\n });\n self.reader.once(\"close\", function() {\n self.emit(\"close\");\n });\n self.readEntryCursor = centralDirectoryOffset;\n self.fileSize = fileSize;\n self.entryCount = entryCount;\n self.comment = comment;\n self.entriesRead = 0;\n self.autoClose = !!autoClose;\n self.lazyEntries = !!lazyEntries;\n self.decodeStrings = !!decodeStrings;\n self.validateEntrySizes = !!validateEntrySizes;\n self.strictFileNames = !!strictFileNames;\n self.isOpen = true;\n self.emittedError = false;\n\n if (!self.lazyEntries) self._readEntry();\n}\nZipFile.prototype.close = function() {\n if (!this.isOpen) return;\n this.isOpen = false;\n this.reader.unref();\n};\n\nfunction emitErrorAndAutoClose(self, err) {\n if (self.autoClose) self.close();\n emitError(self, err);\n}\nfunction emitError(self, err) {\n if (self.emittedError) return;\n self.emittedError = true;\n self.emit(\"error\", err);\n}\n\nZipFile.prototype.readEntry = function() {\n if (!this.lazyEntries) throw new Error(\"readEntry() called without lazyEntries:true\");\n this._readEntry();\n};\nZipFile.prototype._readEntry = function() {\n var self = this;\n if (self.entryCount === self.entriesRead) {\n // done with metadata\n setImmediate(function() {\n if (self.autoClose) self.close();\n if (self.emittedError) return;\n self.emit(\"end\");\n });\n return;\n }\n if (self.emittedError) return;\n var buffer = newBuffer(46);\n readAndAssertNoEof(self.reader, buffer, 0, buffer.length, self.readEntryCursor, function(err) {\n if (err) return emitErrorAndAutoClose(self, err);\n if (self.emittedError) return;\n var entry = new Entry();\n // 0 - Central directory file header signature\n var signature = buffer.readUInt32LE(0);\n if (signature !== 0x02014b50) return emitErrorAndAutoClose(self, new Error(\"invalid central directory file header signature: 0x\" + signature.toString(16)));\n // 4 - Version made by\n entry.versionMadeBy = buffer.readUInt16LE(4);\n // 6 - Version needed to extract (minimum)\n entry.versionNeededToExtract = buffer.readUInt16LE(6);\n // 8 - General purpose bit flag\n entry.generalPurposeBitFlag = buffer.readUInt16LE(8);\n // 10 - Compression method\n entry.compressionMethod = buffer.readUInt16LE(10);\n // 12 - File last modification time\n entry.lastModFileTime = buffer.readUInt16LE(12);\n // 14 - File last modification date\n entry.lastModFileDate = buffer.readUInt16LE(14);\n // 16 - CRC-32\n entry.crc32 = buffer.readUInt32LE(16);\n // 20 - Compressed size\n entry.compressedSize = buffer.readUInt32LE(20);\n // 24 - Uncompressed size\n entry.uncompressedSize = buffer.readUInt32LE(24);\n // 28 - File name length (n)\n entry.fileNameLength = buffer.readUInt16LE(28);\n // 30 - Extra field length (m)\n entry.extraFieldLength = buffer.readUInt16LE(30);\n // 32 - File comment length (k)\n entry.fileCommentLength = buffer.readUInt16LE(32);\n // 34 - Disk number where file starts\n // 36 - Internal file attributes\n entry.internalFileAttributes = buffer.readUInt16LE(36);\n // 38 - External file attributes\n entry.externalFileAttributes = buffer.readUInt32LE(38);\n // 42 - Relative offset of local file header\n entry.relativeOffsetOfLocalHeader = buffer.readUInt32LE(42);\n\n if (entry.generalPurposeBitFlag & 0x40) return emitErrorAndAutoClose(self, new Error(\"strong encryption is not supported\"));\n\n self.readEntryCursor += 46;\n\n buffer = newBuffer(entry.fileNameLength + entry.extraFieldLength + entry.fileCommentLength);\n readAndAssertNoEof(self.reader, buffer, 0, buffer.length, self.readEntryCursor, function(err) {\n if (err) return emitErrorAndAutoClose(self, err);\n if (self.emittedError) return;\n // 46 - File name\n var isUtf8 = (entry.generalPurposeBitFlag & 0x800) !== 0;\n entry.fileName = self.decodeStrings ? decodeBuffer(buffer, 0, entry.fileNameLength, isUtf8)\n : buffer.slice(0, entry.fileNameLength);\n\n // 46+n - Extra field\n var fileCommentStart = entry.fileNameLength + entry.extraFieldLength;\n var extraFieldBuffer = buffer.slice(entry.fileNameLength, fileCommentStart);\n entry.extraFields = [];\n var i = 0;\n while (i < extraFieldBuffer.length - 3) {\n var headerId = extraFieldBuffer.readUInt16LE(i + 0);\n var dataSize = extraFieldBuffer.readUInt16LE(i + 2);\n var dataStart = i + 4;\n var dataEnd = dataStart + dataSize;\n if (dataEnd > extraFieldBuffer.length) return emitErrorAndAutoClose(self, new Error(\"extra field length exceeds extra field buffer size\"));\n var dataBuffer = newBuffer(dataSize);\n extraFieldBuffer.copy(dataBuffer, 0, dataStart, dataEnd);\n entry.extraFields.push({\n id: headerId,\n data: dataBuffer,\n });\n i = dataEnd;\n }\n\n // 46+n+m - File comment\n entry.fileComment = self.decodeStrings ? decodeBuffer(buffer, fileCommentStart, fileCommentStart + entry.fileCommentLength, isUtf8)\n : buffer.slice(fileCommentStart, fileCommentStart + entry.fileCommentLength);\n // compatibility hack for https://github.com/thejoshwolfe/yauzl/issues/47\n entry.comment = entry.fileComment;\n\n self.readEntryCursor += buffer.length;\n self.entriesRead += 1;\n\n if (entry.uncompressedSize === 0xffffffff ||\n entry.compressedSize === 0xffffffff ||\n entry.relativeOffsetOfLocalHeader === 0xffffffff) {\n // ZIP64 format\n // find the Zip64 Extended Information Extra Field\n var zip64EiefBuffer = null;\n for (var i = 0; i < entry.extraFields.length; i++) {\n var extraField = entry.extraFields[i];\n if (extraField.id === 0x0001) {\n zip64EiefBuffer = extraField.data;\n break;\n }\n }\n if (zip64EiefBuffer == null) {\n return emitErrorAndAutoClose(self, new Error(\"expected zip64 extended information extra field\"));\n }\n var index = 0;\n // 0 - Original Size 8 bytes\n if (entry.uncompressedSize === 0xffffffff) {\n if (index + 8 > zip64EiefBuffer.length) {\n return emitErrorAndAutoClose(self, new Error(\"zip64 extended information extra field does not include uncompressed size\"));\n }\n entry.uncompressedSize = readUInt64LE(zip64EiefBuffer, index);\n index += 8;\n }\n // 8 - Compressed Size 8 bytes\n if (entry.compressedSize === 0xffffffff) {\n if (index + 8 > zip64EiefBuffer.length) {\n return emitErrorAndAutoClose(self, new Error(\"zip64 extended information extra field does not include compressed size\"));\n }\n entry.compressedSize = readUInt64LE(zip64EiefBuffer, index);\n index += 8;\n }\n // 16 - Relative Header Offset 8 bytes\n if (entry.relativeOffsetOfLocalHeader === 0xffffffff) {\n if (index + 8 > zip64EiefBuffer.length) {\n return emitErrorAndAutoClose(self, new Error(\"zip64 extended information extra field does not include relative header offset\"));\n }\n entry.relativeOffsetOfLocalHeader = readUInt64LE(zip64EiefBuffer, index);\n index += 8;\n }\n // 24 - Disk Start Number 4 bytes\n }\n\n // check for Info-ZIP Unicode Path Extra Field (0x7075)\n // see https://github.com/thejoshwolfe/yauzl/issues/33\n if (self.decodeStrings) {\n for (var i = 0; i < entry.extraFields.length; i++) {\n var extraField = entry.extraFields[i];\n if (extraField.id === 0x7075) {\n if (extraField.data.length < 6) {\n // too short to be meaningful\n continue;\n }\n // Version 1 byte version of this extra field, currently 1\n if (extraField.data.readUInt8(0) !== 1) {\n // > Changes may not be backward compatible so this extra\n // > field should not be used if the version is not recognized.\n continue;\n }\n // NameCRC32 4 bytes File Name Field CRC32 Checksum\n var oldNameCrc32 = extraField.data.readUInt32LE(1);\n if (crc32.unsigned(buffer.slice(0, entry.fileNameLength)) !== oldNameCrc32) {\n // > If the CRC check fails, this UTF-8 Path Extra Field should be\n // > ignored and the File Name field in the header should be used instead.\n continue;\n }\n // UnicodeName Variable UTF-8 version of the entry File Name\n entry.fileName = decodeBuffer(extraField.data, 5, extraField.data.length, true);\n break;\n }\n }\n }\n\n // validate file size\n if (self.validateEntrySizes && entry.compressionMethod === 0) {\n var expectedCompressedSize = entry.uncompressedSize;\n if (entry.isEncrypted()) {\n // traditional encryption prefixes the file data with a header\n expectedCompressedSize += 12;\n }\n if (entry.compressedSize !== expectedCompressedSize) {\n var msg = \"compressed/uncompressed size mismatch for stored file: \" + entry.compressedSize + \" != \" + entry.uncompressedSize;\n return emitErrorAndAutoClose(self, new Error(msg));\n }\n }\n\n if (self.decodeStrings) {\n if (!self.strictFileNames) {\n // allow backslash\n entry.fileName = entry.fileName.replace(/\\\\/g, \"/\");\n }\n var errorMessage = validateFileName(entry.fileName, self.validateFileNameOptions);\n if (errorMessage != null) return emitErrorAndAutoClose(self, new Error(errorMessage));\n }\n self.emit(\"entry\", entry);\n\n if (!self.lazyEntries) self._readEntry();\n });\n });\n};\n\nZipFile.prototype.openReadStream = function(entry, options, callback) {\n var self = this;\n // parameter validation\n var relativeStart = 0;\n var relativeEnd = entry.compressedSize;\n if (callback == null) {\n callback = options;\n options = {};\n } else {\n // validate options that the caller has no excuse to get wrong\n if (options.decrypt != null) {\n if (!entry.isEncrypted()) {\n throw new Error(\"options.decrypt can only be specified for encrypted entries\");\n }\n if (options.decrypt !== false) throw new Error(\"invalid options.decrypt value: \" + options.decrypt);\n if (entry.isCompressed()) {\n if (options.decompress !== false) throw new Error(\"entry is encrypted and compressed, and options.decompress !== false\");\n }\n }\n if (options.decompress != null) {\n if (!entry.isCompressed()) {\n throw new Error(\"options.decompress can only be specified for compressed entries\");\n }\n if (!(options.decompress === false || options.decompress === true)) {\n throw new Error(\"invalid options.decompress value: \" + options.decompress);\n }\n }\n if (options.start != null || options.end != null) {\n if (entry.isCompressed() && options.decompress !== false) {\n throw new Error(\"start/end range not allowed for compressed entry without options.decompress === false\");\n }\n if (entry.isEncrypted() && options.decrypt !== false) {\n throw new Error(\"start/end range not allowed for encrypted entry without options.decrypt === false\");\n }\n }\n if (options.start != null) {\n relativeStart = options.start;\n if (relativeStart < 0) throw new Error(\"options.start < 0\");\n if (relativeStart > entry.compressedSize) throw new Error(\"options.start > entry.compressedSize\");\n }\n if (options.end != null) {\n relativeEnd = options.end;\n if (relativeEnd < 0) throw new Error(\"options.end < 0\");\n if (relativeEnd > entry.compressedSize) throw new Error(\"options.end > entry.compressedSize\");\n if (relativeEnd < relativeStart) throw new Error(\"options.end < options.start\");\n }\n }\n // any further errors can either be caused by the zipfile,\n // or were introduced in a minor version of yauzl,\n // so should be passed to the client rather than thrown.\n if (!self.isOpen) return callback(new Error(\"closed\"));\n if (entry.isEncrypted()) {\n if (options.decrypt !== false) return callback(new Error(\"entry is encrypted, and options.decrypt !== false\"));\n }\n // make sure we don't lose the fd before we open the actual read stream\n self.reader.ref();\n var buffer = newBuffer(30);\n readAndAssertNoEof(self.reader, buffer, 0, buffer.length, entry.relativeOffsetOfLocalHeader, function(err) {\n try {\n if (err) return callback(err);\n // 0 - Local file header signature = 0x04034b50\n var signature = buffer.readUInt32LE(0);\n if (signature !== 0x04034b50) {\n return callback(new Error(\"invalid local file header signature: 0x\" + signature.toString(16)));\n }\n // all this should be redundant\n // 4 - Version needed to extract (minimum)\n // 6 - General purpose bit flag\n // 8 - Compression method\n // 10 - File last modification time\n // 12 - File last modification date\n // 14 - CRC-32\n // 18 - Compressed size\n // 22 - Uncompressed size\n // 26 - File name length (n)\n var fileNameLength = buffer.readUInt16LE(26);\n // 28 - Extra field length (m)\n var extraFieldLength = buffer.readUInt16LE(28);\n // 30 - File name\n // 30+n - Extra field\n var localFileHeaderEnd = entry.relativeOffsetOfLocalHeader + buffer.length + fileNameLength + extraFieldLength;\n var decompress;\n if (entry.compressionMethod === 0) {\n // 0 - The file is stored (no compression)\n decompress = false;\n } else if (entry.compressionMethod === 8) {\n // 8 - The file is Deflated\n decompress = options.decompress != null ? options.decompress : true;\n } else {\n return callback(new Error(\"unsupported compression method: \" + entry.compressionMethod));\n }\n var fileDataStart = localFileHeaderEnd;\n var fileDataEnd = fileDataStart + entry.compressedSize;\n if (entry.compressedSize !== 0) {\n // bounds check now, because the read streams will probably not complain loud enough.\n // since we're dealing with an unsigned offset plus an unsigned size,\n // we only have 1 thing to check for.\n if (fileDataEnd > self.fileSize) {\n return callback(new Error(\"file data overflows file bounds: \" +\n fileDataStart + \" + \" + entry.compressedSize + \" > \" + self.fileSize));\n }\n }\n var readStream = self.reader.createReadStream({\n start: fileDataStart + relativeStart,\n end: fileDataStart + relativeEnd,\n });\n var endpointStream = readStream;\n if (decompress) {\n var destroyed = false;\n var inflateFilter = zlib.createInflateRaw();\n readStream.on(\"error\", function(err) {\n // setImmediate here because errors can be emitted during the first call to pipe()\n setImmediate(function() {\n if (!destroyed) inflateFilter.emit(\"error\", err);\n });\n });\n readStream.pipe(inflateFilter);\n\n if (self.validateEntrySizes) {\n endpointStream = new AssertByteCountStream(entry.uncompressedSize);\n inflateFilter.on(\"error\", function(err) {\n // forward zlib errors to the client-visible stream\n setImmediate(function() {\n if (!destroyed) endpointStream.emit(\"error\", err);\n });\n });\n inflateFilter.pipe(endpointStream);\n } else {\n // the zlib filter is the client-visible stream\n endpointStream = inflateFilter;\n }\n // this is part of yauzl's API, so implement this function on the client-visible stream\n endpointStream.destroy = function() {\n destroyed = true;\n if (inflateFilter !== endpointStream) inflateFilter.unpipe(endpointStream);\n readStream.unpipe(inflateFilter);\n // TODO: the inflateFilter may cause a memory leak. see Issue #27.\n readStream.destroy();\n };\n }\n callback(null, endpointStream);\n } finally {\n self.reader.unref();\n }\n });\n};\n\nfunction Entry() {\n}\nEntry.prototype.getLastModDate = function() {\n return dosDateTimeToDate(this.lastModFileDate, this.lastModFileTime);\n};\nEntry.prototype.isEncrypted = function() {\n return (this.generalPurposeBitFlag & 0x1) !== 0;\n};\nEntry.prototype.isCompressed = function() {\n return this.compressionMethod === 8;\n};\n\nfunction dosDateTimeToDate(date, time) {\n var day = date & 0x1f; // 1-31\n var month = (date >> 5 & 0xf) - 1; // 1-12, 0-11\n var year = (date >> 9 & 0x7f) + 1980; // 0-128, 1980-2108\n\n var millisecond = 0;\n var second = (time & 0x1f) * 2; // 0-29, 0-58 (even numbers)\n var minute = time >> 5 & 0x3f; // 0-59\n var hour = time >> 11 & 0x1f; // 0-23\n\n return new Date(year, month, day, hour, minute, second, millisecond);\n}\n\nfunction validateFileName(fileName) {\n if (fileName.indexOf(\"\\\\\") !== -1) {\n return \"invalid characters in fileName: \" + fileName;\n }\n if (/^[a-zA-Z]:/.test(fileName) || /^\\//.test(fileName)) {\n return \"absolute path: \" + fileName;\n }\n if (fileName.split(\"/\").indexOf(\"..\") !== -1) {\n return \"invalid relative path: \" + fileName;\n }\n // all good\n return null;\n}\n\nfunction readAndAssertNoEof(reader, buffer, offset, length, position, callback) {\n if (length === 0) {\n // fs.read will throw an out-of-bounds error if you try to read 0 bytes from a 0 byte file\n return setImmediate(function() { callback(null, newBuffer(0)); });\n }\n reader.read(buffer, offset, length, position, function(err, bytesRead) {\n if (err) return callback(err);\n if (bytesRead < length) {\n return callback(new Error(\"unexpected EOF\"));\n }\n callback();\n });\n}\n\nutil.inherits(AssertByteCountStream, Transform);\nfunction AssertByteCountStream(byteCount) {\n Transform.call(this);\n this.actualByteCount = 0;\n this.expectedByteCount = byteCount;\n}\nAssertByteCountStream.prototype._transform = function(chunk, encoding, cb) {\n this.actualByteCount += chunk.length;\n if (this.actualByteCount > this.expectedByteCount) {\n var msg = \"too many bytes in the stream. expected \" + this.expectedByteCount + \". got at least \" + this.actualByteCount;\n return cb(new Error(msg));\n }\n cb(null, chunk);\n};\nAssertByteCountStream.prototype._flush = function(cb) {\n if (this.actualByteCount < this.expectedByteCount) {\n var msg = \"not enough bytes in the stream. expected \" + this.expectedByteCount + \". got only \" + this.actualByteCount;\n return cb(new Error(msg));\n }\n cb();\n};\n\nutil.inherits(RandomAccessReader, EventEmitter);\nfunction RandomAccessReader() {\n EventEmitter.call(this);\n this.refCount = 0;\n}\nRandomAccessReader.prototype.ref = function() {\n this.refCount += 1;\n};\nRandomAccessReader.prototype.unref = function() {\n var self = this;\n self.refCount -= 1;\n\n if (self.refCount > 0) return;\n if (self.refCount < 0) throw new Error(\"invalid unref\");\n\n self.close(onCloseDone);\n\n function onCloseDone(err) {\n if (err) return self.emit('error', err);\n self.emit('close');\n }\n};\nRandomAccessReader.prototype.createReadStream = function(options) {\n var start = options.start;\n var end = options.end;\n if (start === end) {\n var emptyStream = new PassThrough();\n setImmediate(function() {\n emptyStream.end();\n });\n return emptyStream;\n }\n var stream = this._readStreamForRange(start, end);\n\n var destroyed = false;\n var refUnrefFilter = new RefUnrefFilter(this);\n stream.on(\"error\", function(err) {\n setImmediate(function() {\n if (!destroyed) refUnrefFilter.emit(\"error\", err);\n });\n });\n refUnrefFilter.destroy = function() {\n stream.unpipe(refUnrefFilter);\n refUnrefFilter.unref();\n stream.destroy();\n };\n\n var byteCounter = new AssertByteCountStream(end - start);\n refUnrefFilter.on(\"error\", function(err) {\n setImmediate(function() {\n if (!destroyed) byteCounter.emit(\"error\", err);\n });\n });\n byteCounter.destroy = function() {\n destroyed = true;\n refUnrefFilter.unpipe(byteCounter);\n refUnrefFilter.destroy();\n };\n\n return stream.pipe(refUnrefFilter).pipe(byteCounter);\n};\nRandomAccessReader.prototype._readStreamForRange = function(start, end) {\n throw new Error(\"not implemented\");\n};\nRandomAccessReader.prototype.read = function(buffer, offset, length, position, callback) {\n var readStream = this.createReadStream({start: position, end: position + length});\n var writeStream = new Writable();\n var written = 0;\n writeStream._write = function(chunk, encoding, cb) {\n chunk.copy(buffer, offset + written, 0, chunk.length);\n written += chunk.length;\n cb();\n };\n writeStream.on(\"finish\", callback);\n readStream.on(\"error\", function(error) {\n callback(error);\n });\n readStream.pipe(writeStream);\n};\nRandomAccessReader.prototype.close = function(callback) {\n setImmediate(callback);\n};\n\nutil.inherits(RefUnrefFilter, PassThrough);\nfunction RefUnrefFilter(context) {\n PassThrough.call(this);\n this.context = context;\n this.context.ref();\n this.unreffedYet = false;\n}\nRefUnrefFilter.prototype._flush = function(cb) {\n this.unref();\n cb();\n};\nRefUnrefFilter.prototype.unref = function(cb) {\n if (this.unreffedYet) return;\n this.unreffedYet = true;\n this.context.unref();\n};\n\nvar cp437 = '\\u0000☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ';\nfunction decodeBuffer(buffer, start, end, isUtf8) {\n if (isUtf8) {\n return buffer.toString(\"utf8\", start, end);\n } else {\n var result = \"\";\n for (var i = start; i < end; i++) {\n result += cp437[buffer[i]];\n }\n return result;\n }\n}\n\nfunction readUInt64LE(buffer, offset) {\n // there is no native function for this, because we can't actually store 64-bit integers precisely.\n // after 53 bits, JavaScript's Number type (IEEE 754 double) can't store individual integers anymore.\n // but since 53 bits is a whole lot more than 32 bits, we do our best anyway.\n var lower32 = buffer.readUInt32LE(offset);\n var upper32 = buffer.readUInt32LE(offset + 4);\n // we can't use bitshifting here, because JavaScript bitshifting only works on 32-bit integers.\n return upper32 * 0x100000000 + lower32;\n // as long as we're bounds checking the result of this function against the total file size,\n // we'll catch any overflow errors, because we already made sure the total file size was within reason.\n}\n\n// Node 10 deprecated new Buffer().\nvar newBuffer;\nif (typeof Buffer.allocUnsafe === \"function\") {\n newBuffer = function(len) {\n return Buffer.allocUnsafe(len);\n };\n} else {\n newBuffer = function(len) {\n return new Buffer(len);\n };\n}\n\nfunction defaultCallback(err) {\n if (err) throw err;\n}\n","'use strict';\nconst fileType = require('file-type');\nconst getStream = require('get-stream');\nconst pify = require('pify');\nconst yauzl = require('yauzl');\n\nconst getType = (entry, mode) => {\n\tconst IFMT = 61440;\n\tconst IFDIR = 16384;\n\tconst IFLNK = 40960;\n\tconst madeBy = entry.versionMadeBy >> 8;\n\n\tif ((mode & IFMT) === IFLNK) {\n\t\treturn 'symlink';\n\t}\n\n\tif ((mode & IFMT) === IFDIR || (madeBy === 0 && entry.externalFileAttributes === 16)) {\n\t\treturn 'directory';\n\t}\n\n\treturn 'file';\n};\n\nconst extractEntry = (entry, zip) => {\n\tconst file = {\n\t\tmode: (entry.externalFileAttributes >> 16) & 0xFFFF,\n\t\tmtime: entry.getLastModDate(),\n\t\tpath: entry.fileName\n\t};\n\n\tfile.type = getType(entry, file.mode);\n\n\tif (file.mode === 0 && file.type === 'directory') {\n\t\tfile.mode = 493;\n\t}\n\n\tif (file.mode === 0) {\n\t\tfile.mode = 420;\n\t}\n\n\treturn pify(zip.openReadStream.bind(zip))(entry)\n\t\t.then(getStream.buffer)\n\t\t.then(buf => {\n\t\t\tfile.data = buf;\n\n\t\t\tif (file.type === 'symlink') {\n\t\t\t\tfile.linkname = buf.toString();\n\t\t\t}\n\n\t\t\treturn file;\n\t\t})\n\t\t.catch(err => {\n\t\t\tzip.close();\n\t\t\tthrow err;\n\t\t});\n};\n\nconst extractFile = zip => new Promise((resolve, reject) => {\n\tconst files = [];\n\n\tzip.readEntry();\n\n\tzip.on('entry', entry => {\n\t\textractEntry(entry, zip)\n\t\t\t.catch(reject)\n\t\t\t.then(file => {\n\t\t\t\tfiles.push(file);\n\t\t\t\tzip.readEntry();\n\t\t\t});\n\t});\n\n\tzip.on('error', reject);\n\tzip.on('end', () => resolve(files));\n});\n\nmodule.exports = () => buf => {\n\tif (!Buffer.isBuffer(buf)) {\n\t\treturn Promise.reject(new TypeError(`Expected a Buffer, got ${typeof buf}`));\n\t}\n\n\tif (!fileType(buf) || fileType(buf).ext !== 'zip') {\n\t\treturn Promise.resolve([]);\n\t}\n\n\treturn pify(yauzl.fromBuffer)(buf, {lazyEntries: true}).then(extractFile);\n};\n","'use strict';\n\nconst processFn = (fn, opts) => function () {\n\tconst P = opts.promiseModule;\n\tconst args = new Array(arguments.length);\n\n\tfor (let i = 0; i < arguments.length; i++) {\n\t\targs[i] = arguments[i];\n\t}\n\n\treturn new P((resolve, reject) => {\n\t\tif (opts.errorFirst) {\n\t\t\targs.push(function (err, result) {\n\t\t\t\tif (opts.multiArgs) {\n\t\t\t\t\tconst results = new Array(arguments.length - 1);\n\n\t\t\t\t\tfor (let i = 1; i < arguments.length; i++) {\n\t\t\t\t\t\tresults[i - 1] = arguments[i];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tresults.unshift(err);\n\t\t\t\t\t\treject(results);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve(results);\n\t\t\t\t\t}\n\t\t\t\t} else if (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t} else {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\targs.push(function (result) {\n\t\t\t\tif (opts.multiArgs) {\n\t\t\t\t\tconst results = new Array(arguments.length - 1);\n\n\t\t\t\t\tfor (let i = 0; i < arguments.length; i++) {\n\t\t\t\t\t\tresults[i] = arguments[i];\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(results);\n\t\t\t\t} else {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfn.apply(this, args);\n\t});\n};\n\nmodule.exports = (obj, opts) => {\n\topts = Object.assign({\n\t\texclude: [/.+(Sync|Stream)$/],\n\t\terrorFirst: true,\n\t\tpromiseModule: Promise\n\t}, opts);\n\n\tconst filter = key => {\n\t\tconst match = pattern => typeof pattern === 'string' ? key === pattern : pattern.test(key);\n\t\treturn opts.include ? opts.include.some(match) : !opts.exclude.some(match);\n\t};\n\n\tlet ret;\n\tif (typeof obj === 'function') {\n\t\tret = function () {\n\t\t\tif (opts.excludeMain) {\n\t\t\t\treturn obj.apply(this, arguments);\n\t\t\t}\n\n\t\t\treturn processFn(obj, opts).apply(this, arguments);\n\t\t};\n\t} else {\n\t\tret = Object.create(Object.getPrototypeOf(obj));\n\t}\n\n\tfor (const key in obj) { // eslint-disable-line guard-for-in\n\t\tconst x = obj[key];\n\t\tret[key] = typeof x === 'function' && filter(key) ? processFn(x, opts) : x;\n\t}\n\n\treturn ret;\n};\n","'use strict';\nconst fs = require('fs');\nconst path = require('path');\nconst pify = require('pify');\n\nconst defaults = {\n\tmode: 0o777 & (~process.umask()),\n\tfs\n};\n\n// https://github.com/nodejs/node/issues/8987\n// https://github.com/libuv/libuv/pull/1088\nconst checkPath = pth => {\n\tif (process.platform === 'win32') {\n\t\tconst pathHasInvalidWinCharacters = /[<>:\"|?*]/.test(pth.replace(path.parse(pth).root, ''));\n\n\t\tif (pathHasInvalidWinCharacters) {\n\t\t\tconst err = new Error(`Path contains invalid characters: ${pth}`);\n\t\t\terr.code = 'EINVAL';\n\t\t\tthrow err;\n\t\t}\n\t}\n};\n\nmodule.exports = (input, opts) => Promise.resolve().then(() => {\n\tcheckPath(input);\n\topts = Object.assign({}, defaults, opts);\n\n\tconst mkdir = pify(opts.fs.mkdir);\n\tconst stat = pify(opts.fs.stat);\n\n\tconst make = pth => {\n\t\treturn mkdir(pth, opts.mode)\n\t\t\t.then(() => pth)\n\t\t\t.catch(err => {\n\t\t\t\tif (err.code === 'ENOENT') {\n\t\t\t\t\tif (err.message.includes('null bytes') || path.dirname(pth) === pth) {\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn make(path.dirname(pth)).then(() => make(pth));\n\t\t\t\t}\n\n\t\t\t\treturn stat(pth)\n\t\t\t\t\t.then(stats => stats.isDirectory() ? pth : Promise.reject())\n\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t});\n\t\t\t});\n\t};\n\n\treturn make(path.resolve(input));\n});\n\nmodule.exports.sync = (input, opts) => {\n\tcheckPath(input);\n\topts = Object.assign({}, defaults, opts);\n\n\tconst make = pth => {\n\t\ttry {\n\t\t\topts.fs.mkdirSync(pth, opts.mode);\n\t\t} catch (err) {\n\t\t\tif (err.code === 'ENOENT') {\n\t\t\t\tif (err.message.includes('null bytes') || path.dirname(pth) === pth) {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\n\t\t\t\tmake(path.dirname(pth));\n\t\t\t\treturn make(pth);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tif (!opts.fs.statSync(pth).isDirectory()) {\n\t\t\t\t\tthrow new Error('The path is not a directory');\n\t\t\t\t}\n\t\t\t} catch (_) {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\n\t\treturn pth;\n\t};\n\n\treturn make(path.resolve(input));\n};\n","'use strict';\n\nvar processFn = function (fn, P, opts) {\n\treturn function () {\n\t\tvar that = this;\n\t\tvar args = new Array(arguments.length);\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\n\t\treturn new P(function (resolve, reject) {\n\t\t\targs.push(function (err, result) {\n\t\t\t\tif (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t} else if (opts.multiArgs) {\n\t\t\t\t\tvar results = new Array(arguments.length - 1);\n\n\t\t\t\t\tfor (var i = 1; i < arguments.length; i++) {\n\t\t\t\t\t\tresults[i - 1] = arguments[i];\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(results);\n\t\t\t\t} else {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfn.apply(that, args);\n\t\t});\n\t};\n};\n\nvar pify = module.exports = function (obj, P, opts) {\n\tif (typeof P !== 'function') {\n\t\topts = P;\n\t\tP = Promise;\n\t}\n\n\topts = opts || {};\n\topts.exclude = opts.exclude || [/.+Sync$/];\n\n\tvar filter = function (key) {\n\t\tvar match = function (pattern) {\n\t\t\treturn typeof pattern === 'string' ? key === pattern : pattern.test(key);\n\t\t};\n\n\t\treturn opts.include ? opts.include.some(match) : !opts.exclude.some(match);\n\t};\n\n\tvar ret = typeof obj === 'function' ? function () {\n\t\tif (opts.excludeMain) {\n\t\t\treturn obj.apply(this, arguments);\n\t\t}\n\n\t\treturn processFn(obj, P, opts).apply(this, arguments);\n\t} : {};\n\n\treturn Object.keys(obj).reduce(function (ret, key) {\n\t\tvar x = obj[key];\n\n\t\tret[key] = typeof x === 'function' && filter(key) ? processFn(x, P, opts) : x;\n\n\t\treturn ret;\n\t}, ret);\n};\n\npify.all = pify;\n","/*!\n * strip-dirs | MIT (c) Shinnosuke Watanabe\n * https://github.com/shinnn/node-strip-dirs\n*/\n'use strict';\n\nconst path = require('path');\nconst util = require('util');\n\nconst isNaturalNumber = require('is-natural-number');\n\nmodule.exports = function stripDirs(pathStr, count, option) {\n if (typeof pathStr !== 'string') {\n throw new TypeError(\n util.inspect(pathStr) +\n ' is not a string. First argument to strip-dirs must be a path string.'\n );\n }\n\n if (path.posix.isAbsolute(pathStr) || path.win32.isAbsolute(pathStr)) {\n throw new Error(`${pathStr} is an absolute path. strip-dirs requires a relative path.`);\n }\n\n if (!isNaturalNumber(count, {includeZero: true})) {\n throw new Error(\n 'The Second argument of strip-dirs must be a natural number or 0, but received ' +\n util.inspect(count) +\n '.'\n );\n }\n\n if (option) {\n if (typeof option !== 'object') {\n throw new TypeError(\n util.inspect(option) +\n ' is not an object. Expected an object with a boolean `disallowOverflow` property.'\n );\n }\n\n if (Array.isArray(option)) {\n throw new TypeError(\n util.inspect(option) +\n ' is an array. Expected an object with a boolean `disallowOverflow` property.'\n );\n }\n\n if ('disallowOverflow' in option && typeof option.disallowOverflow !== 'boolean') {\n throw new TypeError(\n util.inspect(option.disallowOverflow) +\n ' is neither true nor false. `disallowOverflow` option must be a Boolean value.'\n );\n }\n } else {\n option = {disallowOverflow: false};\n }\n\n const pathComponents = path.normalize(pathStr).split(path.sep);\n\n if (pathComponents.length > 1 && pathComponents[0] === '.') {\n pathComponents.shift();\n }\n\n if (count > pathComponents.length - 1) {\n if (option.disallowOverflow) {\n throw new RangeError('Cannot strip more directories than there are.');\n }\n\n count = pathComponents.length - 1;\n }\n\n return path.join.apply(null, pathComponents.slice(count));\n};\n","/*!\n * is-natural-number.js | MIT (c) Shinnosuke Watanabe\n * https://github.com/shinnn/is-natural-number.js\n*/\n'use strict';\n\nmodule.exports = function isNaturalNumber(val, option) {\n if (option) {\n if (typeof option !== 'object') {\n throw new TypeError(\n String(option) +\n ' is not an object. Expected an object that has boolean `includeZero` property.'\n );\n }\n\n if ('includeZero' in option) {\n if (typeof option.includeZero !== 'boolean') {\n throw new TypeError(\n String(option.includeZero) +\n ' is neither true nor false. `includeZero` option must be a Boolean value.'\n );\n }\n\n if (option.includeZero && val === 0) {\n return true;\n }\n }\n }\n\n return Number.isSafeInteger(val) && val >= 1;\n};\n","'use strict';\nconst path = require('path');\nconst fs = require('graceful-fs');\nconst decompressTar = require('decompress-tar');\nconst decompressTarbz2 = require('decompress-tarbz2');\nconst decompressTargz = require('decompress-targz');\nconst decompressUnzip = require('decompress-unzip');\nconst makeDir = require('make-dir');\nconst pify = require('pify');\nconst stripDirs = require('strip-dirs');\n\nconst fsP = pify(fs);\n\nconst runPlugins = (input, opts) => {\n\tif (opts.plugins.length === 0) {\n\t\treturn Promise.resolve([]);\n\t}\n\n\treturn Promise.all(opts.plugins.map(x => x(input, opts))).then(files => files.reduce((a, b) => a.concat(b)));\n};\n\nconst safeMakeDir = (dir, realOutputPath) => {\n\treturn fsP.realpath(dir)\n\t\t.catch(_ => {\n\t\t\tconst parent = path.dirname(dir);\n\t\t\treturn safeMakeDir(parent, realOutputPath);\n\t\t})\n\t\t.then(realParentPath => {\n\t\t\tif (realParentPath.indexOf(realOutputPath) !== 0) {\n\t\t\t\tthrow (new Error('Refusing to create a directory outside the output path.'));\n\t\t\t}\n\n\t\t\treturn makeDir(dir).then(fsP.realpath);\n\t\t});\n};\n\nconst preventWritingThroughSymlink = (destination, realOutputPath) => {\n\treturn fsP.readlink(destination)\n\t\t.catch(_ => {\n\t\t\t// Either no file exists, or it's not a symlink. In either case, this is\n\t\t\t// not an escape we need to worry about in this phase.\n\t\t\treturn null;\n\t\t})\n\t\t.then(symlinkPointsTo => {\n\t\t\tif (symlinkPointsTo) {\n\t\t\t\tthrow new Error('Refusing to write into a symlink');\n\t\t\t}\n\n\t\t\t// No symlink exists at `destination`, so we can continue\n\t\t\treturn realOutputPath;\n\t\t});\n};\n\nconst extractFile = (input, output, opts) => runPlugins(input, opts).then(files => {\n\tif (opts.strip > 0) {\n\t\tfiles = files\n\t\t\t.map(x => {\n\t\t\t\tx.path = stripDirs(x.path, opts.strip);\n\t\t\t\treturn x;\n\t\t\t})\n\t\t\t.filter(x => x.path !== '.');\n\t}\n\n\tif (typeof opts.filter === 'function') {\n\t\tfiles = files.filter(opts.filter);\n\t}\n\n\tif (typeof opts.map === 'function') {\n\t\tfiles = files.map(opts.map);\n\t}\n\n\tif (!output) {\n\t\treturn files;\n\t}\n\n\treturn Promise.all(files.map(x => {\n\t\tconst dest = path.join(output, x.path);\n\t\tconst mode = x.mode & ~process.umask();\n\t\tconst now = new Date();\n\n\t\tif (x.type === 'directory') {\n\t\t\treturn makeDir(output)\n\t\t\t\t.then(outputPath => fsP.realpath(outputPath))\n\t\t\t\t.then(realOutputPath => safeMakeDir(dest, realOutputPath))\n\t\t\t\t.then(() => fsP.utimes(dest, now, x.mtime))\n\t\t\t\t.then(() => x);\n\t\t}\n\n\t\treturn makeDir(output)\n\t\t\t.then(outputPath => fsP.realpath(outputPath))\n\t\t\t.then(realOutputPath => {\n\t\t\t\t// Attempt to ensure parent directory exists (failing if it's outside the output dir)\n\t\t\t\treturn safeMakeDir(path.dirname(dest), realOutputPath)\n\t\t\t\t\t.then(() => realOutputPath);\n\t\t\t})\n\t\t\t.then(realOutputPath => {\n\t\t\t\tif (x.type === 'file') {\n\t\t\t\t\treturn preventWritingThroughSymlink(dest, realOutputPath);\n\t\t\t\t}\n\n\t\t\t\treturn realOutputPath;\n\t\t\t})\n\t\t\t.then(realOutputPath => {\n\t\t\t\treturn fsP.realpath(path.dirname(dest))\n\t\t\t\t\t.then(realDestinationDir => {\n\t\t\t\t\t\tif (realDestinationDir.indexOf(realOutputPath) !== 0) {\n\t\t\t\t\t\t\tthrow (new Error('Refusing to write outside output directory: ' + realDestinationDir));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\tif (x.type === 'link') {\n\t\t\t\t\treturn fsP.link(x.linkname, dest);\n\t\t\t\t}\n\n\t\t\t\tif (x.type === 'symlink' && process.platform === 'win32') {\n\t\t\t\t\treturn fsP.link(x.linkname, dest);\n\t\t\t\t}\n\n\t\t\t\tif (x.type === 'symlink') {\n\t\t\t\t\treturn fsP.symlink(x.linkname, dest);\n\t\t\t\t}\n\n\t\t\t\treturn fsP.writeFile(dest, x.data, {mode});\n\t\t\t})\n\t\t\t.then(() => x.type === 'file' && fsP.utimes(dest, now, x.mtime))\n\t\t\t.then(() => x);\n\t}));\n});\n\nmodule.exports = (input, output, opts) => {\n\tif (typeof input !== 'string' && !Buffer.isBuffer(input)) {\n\t\treturn Promise.reject(new TypeError('Input file required'));\n\t}\n\n\tif (typeof output === 'object') {\n\t\topts = output;\n\t\toutput = null;\n\t}\n\n\topts = Object.assign({plugins: [\n\t\tdecompressTar(),\n\t\tdecompressTarbz2(),\n\t\tdecompressTargz(),\n\t\tdecompressUnzip()\n\t]}, opts);\n\n\tconst read = typeof input === 'string' ? fsP.readFile(input) : Promise.resolve(input);\n\n\treturn read.then(buf => extractFile(buf, output, opts));\n};\n","'use strict';\nconst zlib = require('zlib');\nconst decompressTar = require('decompress-tar');\nconst fileType = require('file-type');\nconst isStream = require('is-stream');\n\nmodule.exports = () => input => {\n\tif (!Buffer.isBuffer(input) && !isStream(input)) {\n\t\treturn Promise.reject(new TypeError(`Expected a Buffer or Stream, got ${typeof input}`));\n\t}\n\n\tif (Buffer.isBuffer(input) && (!fileType(input) || fileType(input).ext !== 'gz')) {\n\t\treturn Promise.resolve([]);\n\t}\n\n\tconst unzip = zlib.createGunzip();\n\tconst result = decompressTar()(unzip);\n\n\tif (Buffer.isBuffer(input)) {\n\t\tunzip.end(input);\n\t} else {\n\t\tinput.pipe(unzip);\n\t}\n\n\treturn result;\n};\n"],"names":["fileType","input","buf","Uint8Array","length","check","header","opts","Object","assign","offset","i","ext","mime","sliced","subarray","idPos","findIndex","el","arr","docTypePos","findDocType","type","Array","from","every","c","charCodeAt","isStream","module","exports","stream","pipe","writable","_write","_writableState","readable","_read","_readableState","duplex","transform","_transform","_transformState","require$$0","Duplex","Buffer","safeBuffer","BufferList","callback","this","_bufs","_callback","piper","err","bind","on","src","removeListener","append","DuplexStream","call","util","inherits","prototype","_offset","_t","tot","isBuffer","_appendBuffer","isArray","toString","push","encoding","size","Math","min","slice","consume","end","chunk","get","index","start","copy","dst","dstStart","srcStart","srcEnd","alloc","l","off","len","bytes","bufoff","concat","allocUnsafe","shallowSlice","startOffset","endOffset","buffers","pop","trunc","Number","isNaN","shift","duplicate","destroy","methods","readDoubleBE","readDoubleLE","readFloatBE","readFloatLE","readInt32BE","readInt32LE","readUInt32BE","readUInt32LE","readInt16BE","readInt16LE","readUInt16BE","readUInt16LE","readInt8","readUInt8","m","bl","immutable","target","arguments","source","key","hasOwnProperty","toBuffer_1","enc","makeBuffer","Error","hasFullSupport","isEncoding","fill","_","fillWithNumber","buffer","val","RangeError","undefined","bufferFill","TypeError","isSingleByte","pos","fillWithBuffer","bufferAllocUnsafe","bufferAlloc","ZERO_OFFSET","MASK","parseInt","indexOf","block","num","cksum","sum","j","encodeOct","n","decodeOct","positive","tuple","byte","pow","parse256","defaultValue","clamp","decodeStr","addLength","str","byteLength","digits","floor","log","result","name","linkname","pax","toBuffer","b","keyIndex","prefix","typeflag","write","mode","uid","gid","mtime","getTime","flag","toTypeflag","uname","gname","devmajor","devminor","filenameEncoding","toType","Date","Stream","Readable","Writable","Transform","PassThrough","noop","overflow","Source","self","_parent","Extract","_buffer","_missing","_partial","_onparse","_header","_stream","_overflow","_cb","_locked","_destroyed","_pax","_paxGlobal","_gnuLongPath","_gnuLongLinkPath","oncontinue","_continue","onunlock","onstreamend","drain","_parse","ondrain","onheader","onpaxglobalheader","headers","onpaxheader","xtend","ongnulongpath","ongnulonglinkpath","emit","path","linkpath","mixinPax","s","emptyStream","_onheader","onparse","cb","data","missing","_final","extract","StringDecoder","require$$1","DMODE","FMODE","END_OF_TAR","Sink","to","written","_to","_drain","LinkSink","_decoder","Void","Pack","_finalized","_finalizing","entry","constants","S_IFMT","fsConstants","S_IFBLK","S_IFCHR","S_IFDIR","S_IFIFO","S_IFLNK","modeToType","_encode","process","nextTick","linkSink","eos","sink","finalize","_encodePax","paxHeader","newHeader","decompressTar","Promise","reject","resolve","tarStream","files","file","promise","then","catch","toBytes","map","xpiZipFilename","oxmlContentTypes","oxmlRels","mask","nextZipHeaderIndex","header2Pos","header3Pos","BITMASK","BitReader","bitOffset","curByte","hasByte","_ensureByte","readByte","read","bits","remaining","seek","n_bit","n_byte","pi","bitreader","bufOffset","bytesRead","new_pos","writeByte","_byte","flush","crc32Lookup","crc32","Uint32Array","crc","getCRC","updateCRC","value","updateCRCRun","count","mtf","array","Err","OK","LAST_BLOCK","NOT_BZIP_DATA","UNEXPECTED_INPUT_EOF","UNEXPECTED_OUTPUT_EOF","DATA_ERROR","OUT_OF_MEMORY","OBSOLETE_INPUT","END_OF_BLOCK","ErrorMessages","_throw","status","optDetail","msg","e","errorCode","Bunzip","inputStream","outputStream","writePos","writeCurrent","writeCount","_start_bunzip","_init_block","_get_next_block","blockCRC","CRC32","String","fromCharCode","level","reader","dbufSize","nextoutput","streamCRC","k","h","targetBlockCRC","origPointer","t","symToByte","symTotal","o","groupCount","nSelectors","mtfSymbol","selectors","hufGroup","symCount","groups","minLen","maxLen","temp","Uint16Array","MAX_HUFCODE_BITS","permute","limit","base","pp","MAX_VALUE","byteCount","uc","runPos","dbufCount","selector","dbuf","GROUP_SIZE","nextSym","current","run","writeRun","_read_bunzip","outputBuffer","copies","previous","outbyte","outputsize","coerceInputStream","eof","coerceOutputStream","output","resizeOk","newBuffer","getBuffer","_coerced","decode","multistream","bz","targetStreamCRC","decodeBlock","writeCopies","table","delegate","blockSize","position","console","assert","version","pjson","license","lib","through","queue","ended","destroyed","_ended","paused","autoDestroy","pause","resume","Bzip2Error","message","stack","bzip2","crcTable","bit","left","simple","srcbuffer","ret","bufsize","Int32Array","decompress","crcblock","origPtr","bzip2_1","unbzip2Stream_1","bufferQueue","hasBytes","broken","bitReader","decompressAndQueue","bz2","decompressBlock","d","nextBuffer","f","x","asyncTimer","PENDING","SETTLED","FULFILLED","REJECTED","NOOP","isNode","global","commonjsGlobal","asyncSetTimer","setImmediate","setTimeout","asyncQueue","asyncFlush","asyncCall","arg","invokeCallback","subscriber","owner","settled","_state","_data","handleThenable","resolved","fulfill","reason","publishFulfillment","publishRejection","publish","_then","forEach","_handled","notifyRejectionHandled","resolver","rejectPromise","invokeResolver","constructor","onFulfillment","onRejection","fulfilled","rejected","all","promises","results","race","pinkiePromise","getOwnPropertySymbols","propIsEnumerable","propertyIsEnumerable","objectAssign","test1","getOwnPropertyNames","test2","join","test3","split","letter","keys","shouldUseNative","symbols","toObject","getStream","clean","maxBuffer","Infinity","p","error","bufferedData","getBufferedValue","objectMode","setEncoding","getBufferedLength","bufferStream","once","unpipe","getStream_1","processFn","fn","P","that","args","multiArgs","apply","pify","obj","exclude","excludeMain","reduce","match","pattern","test","include","some","filter","pend","Pend","pending","max","listeners","waiting","pendHold","called","pendGo","cbListener","listener","go","wait","hold","EventEmitter","createFromBuffer_1","options","BufferSlicer","createFromFd_1","fd","FdSlicer","BufferSlicer_1","FdSlicer_1","refCount","autoClose","ReadStream","context","ref","WriteStream","bytesWritten","maxChunkSize","MAX_SAFE_INTEGER","fs","createReadStream","createWriteStream","unref","close","toRead","highWaterMark","code","delta","readStream","entireSlice","nextOffset","bufferSlicer","writeStream","open_1","lazyEntries","decodeStrings","validateEntrySizes","strictFileNames","defaultCallback","open","fromFd","zipfile","fromFd_1","fromBuffer_1","fd_slicer","createFromBuffer","fromRandomAccessReader","fromRandomAccessReader_1","dosDateTimeToDate_1","dosDateTimeToDate","validateFileName_1","validateFileName","ZipFile_1","ZipFile","Entry_1","Entry","RandomAccessReader_1","RandomAccessReader","fstat","stats","createFromFd","totalSize","bufferSize","eocdrWithoutCommentSize","bufferReadStart","readAndAssertNoEof","eocdrBuffer","diskNumber","entryCount","centralDirectoryOffset","commentLength","expectedCommentLength","comment","decodeBuffer","zip64EocdlBuffer","zip64EocdlOffset","zip64EocdrOffset","readUInt64LE","zip64EocdrBuffer","fileSize","emitError","readEntryCursor","entriesRead","isOpen","emittedError","_readEntry","emitErrorAndAutoClose","date","time","fileName","AssertByteCountStream","actualByteCount","expectedByteCount","RefUnrefFilter","unreffedYet","readEntry","signature","versionMadeBy","versionNeededToExtract","generalPurposeBitFlag","compressionMethod","lastModFileTime","lastModFileDate","compressedSize","uncompressedSize","fileNameLength","extraFieldLength","fileCommentLength","internalFileAttributes","externalFileAttributes","relativeOffsetOfLocalHeader","isUtf8","fileCommentStart","extraFieldBuffer","extraFields","headerId","dataSize","dataStart","dataEnd","dataBuffer","id","fileComment","zip64EiefBuffer","extraField","oldNameCrc32","bufferCrc32","unsigned","expectedCompressedSize","isEncrypted","replace","errorMessage","validateFileNameOptions","openReadStream","relativeStart","relativeEnd","decrypt","isCompressed","localFileHeaderEnd","fileDataStart","fileDataEnd","endpointStream","inflateFilter","zlib","createInflateRaw","getLastModDate","_flush","_readStreamForRange","refUnrefFilter","byteCounter","cp437","lower32","extractFile","zip","madeBy","getType","extractEntry","promiseModule","errorFirst","unshift","create","getPrototypeOf","defaults","umask","checkPath","pth","platform","parse","root","makeDir","mkdir","stat","make","includes","dirname","isDirectory","mkdirSync","statSync","stripDirs","pathStr","option","inspect","posix","isAbsolute","win32","includeZero","isSafeInteger","isNaturalNumber","disallowOverflow","pathComponents","normalize","sep","fsP","safeMakeDir","dir","realOutputPath","realpath","parent","realParentPath","plugins","a","runPlugins","strip","dest","now","outputPath","utimes","destination","readlink","symlinkPointsTo","preventWritingThroughSymlink","realDestinationDir","link","symlink","writeFile","seekBzip","unbzip2Stream","unzip","createGunzip","yauzl","fromBuffer","readFile"],"mappings":"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"}
|