{"version":3,"file":"slsClient.cjs","sources":["../../../node_modules/.pnpm/fflate@0.8.2/node_modules/fflate/esm/browser.js","../../../node_modules/.pnpm/pbf@4.0.1/node_modules/pbf/index.js","../../sls/sls.js","../../sls/slsClient.js"],"sourcesContent":["// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n    var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n        c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n    ], { type: 'text/javascript' }))));\n    w.onmessage = function (e) {\n        var d = e.data, ed = d.$e$;\n        if (ed) {\n            var err = new Error(ed[0]);\n            err['code'] = ed[1];\n            err.stack = ed[2];\n            cb(err, null);\n        }\n        else\n            cb(null, d);\n    };\n    w.postMessage(msg, transfer);\n    return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n    var b = new u16(31);\n    for (var i = 0; i < 31; ++i) {\n        b[i] = start += 1 << eb[i - 1];\n    }\n    // numbers here are at max 18 bits\n    var r = new i32(b[30]);\n    for (var i = 1; i < 30; ++i) {\n        for (var j = b[i]; j < b[i + 1]; ++j) {\n            r[j] = ((j - b[i]) << 5) | i;\n        }\n    }\n    return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n    // reverse table algorithm from SO\n    var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n    x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n    x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n    rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n    var s = cd.length;\n    // index\n    var i = 0;\n    // u16 \"map\": index -> # of codes with bit length = index\n    var l = new u16(mb);\n    // length of cd must be 288 (total # of codes)\n    for (; i < s; ++i) {\n        if (cd[i])\n            ++l[cd[i] - 1];\n    }\n    // u16 \"map\": index -> minimum code for bit length = index\n    var le = new u16(mb);\n    for (i = 1; i < mb; ++i) {\n        le[i] = (le[i - 1] + l[i - 1]) << 1;\n    }\n    var co;\n    if (r) {\n        // u16 \"map\": index -> number of actual bits, symbol for code\n        co = new u16(1 << mb);\n        // bits to remove for reverser\n        var rvb = 15 - mb;\n        for (i = 0; i < s; ++i) {\n            // ignore 0 lengths\n            if (cd[i]) {\n                // num encoding both symbol and bits read\n                var sv = (i << 4) | cd[i];\n                // free bits\n                var r_1 = mb - cd[i];\n                // start value\n                var v = le[cd[i] - 1]++ << r_1;\n                // m is end value\n                for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n                    // every 16 bit value starting with the code yields the same result\n                    co[rev[v] >> rvb] = sv;\n                }\n            }\n        }\n    }\n    else {\n        co = new u16(s);\n        for (i = 0; i < s; ++i) {\n            if (cd[i]) {\n                co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n            }\n        }\n    }\n    return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n    flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n    flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n    flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n    flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n    fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n    var m = a[0];\n    for (var i = 1; i < a.length; ++i) {\n        if (a[i] > m)\n            m = a[i];\n    }\n    return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n    var o = (p / 8) | 0;\n    return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n    var o = (p / 8) | 0;\n    return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n    if (s == null || s < 0)\n        s = 0;\n    if (e == null || e > v.length)\n        e = v.length;\n    // can't use .constructor in case user-supplied\n    return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nexport var FlateErrorCode = {\n    UnexpectedEOF: 0,\n    InvalidBlockType: 1,\n    InvalidLengthLiteral: 2,\n    InvalidDistance: 3,\n    StreamFinished: 4,\n    NoStreamHandler: 5,\n    InvalidHeader: 6,\n    NoCallback: 7,\n    InvalidUTF8: 8,\n    ExtraFieldTooLong: 9,\n    InvalidDate: 10,\n    FilenameTooLong: 11,\n    StreamFinishing: 12,\n    InvalidZipData: 13,\n    UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n    'unexpected EOF',\n    'invalid block type',\n    'invalid length/literal',\n    'invalid distance',\n    'stream finished',\n    'no stream handler',\n    ,\n    'no callback',\n    'invalid UTF-8 data',\n    'extra field too long',\n    'date not in range 1980-2099',\n    'filename too long',\n    'stream finishing',\n    'invalid zip data'\n    // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n    var e = new Error(msg || ec[ind]);\n    e.code = ind;\n    if (Error.captureStackTrace)\n        Error.captureStackTrace(e, err);\n    if (!nt)\n        throw e;\n    return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n    // source length       dict length\n    var sl = dat.length, dl = dict ? dict.length : 0;\n    if (!sl || st.f && !st.l)\n        return buf || new u8(0);\n    var noBuf = !buf;\n    // have to estimate size\n    var resize = noBuf || st.i != 2;\n    // no state\n    var noSt = st.i;\n    // Assumes roughly 33% compression ratio average\n    if (noBuf)\n        buf = new u8(sl * 3);\n    // ensure buffer can fit at least l elements\n    var cbuf = function (l) {\n        var bl = buf.length;\n        // need to increase size to fit\n        if (l > bl) {\n            // Double or set to necessary, whichever is greater\n            var nbuf = new u8(Math.max(bl * 2, l));\n            nbuf.set(buf);\n            buf = nbuf;\n        }\n    };\n    //  last chunk         bitpos           bytes\n    var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n    // total bits\n    var tbts = sl * 8;\n    do {\n        if (!lm) {\n            // BFINAL - this is only 1 when last chunk is next\n            final = bits(dat, pos, 1);\n            // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n            var type = bits(dat, pos + 1, 3);\n            pos += 3;\n            if (!type) {\n                // go to end of byte boundary\n                var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n                if (t > sl) {\n                    if (noSt)\n                        err(0);\n                    break;\n                }\n                // ensure size\n                if (resize)\n                    cbuf(bt + l);\n                // Copy over uncompressed data\n                buf.set(dat.subarray(s, t), bt);\n                // Get new bitpos, update byte count\n                st.b = bt += l, st.p = pos = t * 8, st.f = final;\n                continue;\n            }\n            else if (type == 1)\n                lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n            else if (type == 2) {\n                //  literal                            lengths\n                var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n                var tl = hLit + bits(dat, pos + 5, 31) + 1;\n                pos += 14;\n                // length+distance tree\n                var ldt = new u8(tl);\n                // code length tree\n                var clt = new u8(19);\n                for (var i = 0; i < hcLen; ++i) {\n                    // use index map to get real code\n                    clt[clim[i]] = bits(dat, pos + i * 3, 7);\n                }\n                pos += hcLen * 3;\n                // code lengths bits\n                var clb = max(clt), clbmsk = (1 << clb) - 1;\n                // code lengths map\n                var clm = hMap(clt, clb, 1);\n                for (var i = 0; i < tl;) {\n                    var r = clm[bits(dat, pos, clbmsk)];\n                    // bits read\n                    pos += r & 15;\n                    // symbol\n                    var s = r >> 4;\n                    // code length to copy\n                    if (s < 16) {\n                        ldt[i++] = s;\n                    }\n                    else {\n                        //  copy   count\n                        var c = 0, n = 0;\n                        if (s == 16)\n                            n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n                        else if (s == 17)\n                            n = 3 + bits(dat, pos, 7), pos += 3;\n                        else if (s == 18)\n                            n = 11 + bits(dat, pos, 127), pos += 7;\n                        while (n--)\n                            ldt[i++] = c;\n                    }\n                }\n                //    length tree                 distance tree\n                var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n                // max length bits\n                lbt = max(lt);\n                // max dist bits\n                dbt = max(dt);\n                lm = hMap(lt, lbt, 1);\n                dm = hMap(dt, dbt, 1);\n            }\n            else\n                err(1);\n            if (pos > tbts) {\n                if (noSt)\n                    err(0);\n                break;\n            }\n        }\n        // Make sure the buffer can hold this + the largest possible addition\n        // Maximum chunk size (practically, theoretically infinite) is 2^17\n        if (resize)\n            cbuf(bt + 131072);\n        var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n        var lpos = pos;\n        for (;; lpos = pos) {\n            // bits read, code\n            var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n            pos += c & 15;\n            if (pos > tbts) {\n                if (noSt)\n                    err(0);\n                break;\n            }\n            if (!c)\n                err(2);\n            if (sym < 256)\n                buf[bt++] = sym;\n            else if (sym == 256) {\n                lpos = pos, lm = null;\n                break;\n            }\n            else {\n                var add = sym - 254;\n                // no extra bits needed if less\n                if (sym > 264) {\n                    // index\n                    var i = sym - 257, b = fleb[i];\n                    add = bits(dat, pos, (1 << b) - 1) + fl[i];\n                    pos += b;\n                }\n                // dist\n                var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n                if (!d)\n                    err(3);\n                pos += d & 15;\n                var dt = fd[dsym];\n                if (dsym > 3) {\n                    var b = fdeb[dsym];\n                    dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n                }\n                if (pos > tbts) {\n                    if (noSt)\n                        err(0);\n                    break;\n                }\n                if (resize)\n                    cbuf(bt + 131072);\n                var end = bt + add;\n                if (bt < dt) {\n                    var shift = dl - dt, dend = Math.min(dt, end);\n                    if (shift + bt < 0)\n                        err(3);\n                    for (; bt < dend; ++bt)\n                        buf[bt] = dict[shift + bt];\n                }\n                for (; bt < end; ++bt)\n                    buf[bt] = buf[bt - dt];\n            }\n        }\n        st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n        if (lm)\n            final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n    } while (!final);\n    // don't reallocate for streams or user buffers\n    return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n    v <<= p & 7;\n    var o = (p / 8) | 0;\n    d[o] |= v;\n    d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n    v <<= p & 7;\n    var o = (p / 8) | 0;\n    d[o] |= v;\n    d[o + 1] |= v >> 8;\n    d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n    // Need extra info to make a tree\n    var t = [];\n    for (var i = 0; i < d.length; ++i) {\n        if (d[i])\n            t.push({ s: i, f: d[i] });\n    }\n    var s = t.length;\n    var t2 = t.slice();\n    if (!s)\n        return { t: et, l: 0 };\n    if (s == 1) {\n        var v = new u8(t[0].s + 1);\n        v[t[0].s] = 1;\n        return { t: v, l: 1 };\n    }\n    t.sort(function (a, b) { return a.f - b.f; });\n    // after i2 reaches last ind, will be stopped\n    // freq must be greater than largest possible number of symbols\n    t.push({ s: -1, f: 25001 });\n    var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n    t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n    // efficient algorithm from UZIP.js\n    // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n    // symbols that combined have high freq, will start processing i2 (high-freq,\n    // non-composite) symbols instead\n    // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n    while (i1 != s - 1) {\n        l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n        r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n        t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n    }\n    var maxSym = t2[0].s;\n    for (var i = 1; i < s; ++i) {\n        if (t2[i].s > maxSym)\n            maxSym = t2[i].s;\n    }\n    // code lengths\n    var tr = new u16(maxSym + 1);\n    // max bits in tree\n    var mbt = ln(t[i1 - 1], tr, 0);\n    if (mbt > mb) {\n        // more algorithms from UZIP.js\n        // TODO: find out how this code works (debt)\n        //  ind    debt\n        var i = 0, dt = 0;\n        //    left            cost\n        var lft = mbt - mb, cst = 1 << lft;\n        t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n        for (; i < s; ++i) {\n            var i2_1 = t2[i].s;\n            if (tr[i2_1] > mb) {\n                dt += cst - (1 << (mbt - tr[i2_1]));\n                tr[i2_1] = mb;\n            }\n            else\n                break;\n        }\n        dt >>= lft;\n        while (dt > 0) {\n            var i2_2 = t2[i].s;\n            if (tr[i2_2] < mb)\n                dt -= 1 << (mb - tr[i2_2]++ - 1);\n            else\n                ++i;\n        }\n        for (; i >= 0 && dt; --i) {\n            var i2_3 = t2[i].s;\n            if (tr[i2_3] == mb) {\n                --tr[i2_3];\n                ++dt;\n            }\n        }\n        mbt = mb;\n    }\n    return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n    return n.s == -1\n        ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n        : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n    var s = c.length;\n    // Note that the semicolon was intentional\n    while (s && !c[--s])\n        ;\n    var cl = new u16(++s);\n    //  ind      num         streak\n    var cli = 0, cln = c[0], cls = 1;\n    var w = function (v) { cl[cli++] = v; };\n    for (var i = 1; i <= s; ++i) {\n        if (c[i] == cln && i != s)\n            ++cls;\n        else {\n            if (!cln && cls > 2) {\n                for (; cls > 138; cls -= 138)\n                    w(32754);\n                if (cls > 2) {\n                    w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n                    cls = 0;\n                }\n            }\n            else if (cls > 3) {\n                w(cln), --cls;\n                for (; cls > 6; cls -= 6)\n                    w(8304);\n                if (cls > 2)\n                    w(((cls - 3) << 5) | 8208), cls = 0;\n            }\n            while (cls--)\n                w(cln);\n            cls = 1;\n            cln = c[i];\n        }\n    }\n    return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n    var l = 0;\n    for (var i = 0; i < cl.length; ++i)\n        l += cf[i] * cl[i];\n    return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n    // no need to write 00 as type: TypedArray defaults to 0\n    var s = dat.length;\n    var o = shft(pos + 2);\n    out[o] = s & 255;\n    out[o + 1] = s >> 8;\n    out[o + 2] = out[o] ^ 255;\n    out[o + 3] = out[o + 1] ^ 255;\n    for (var i = 0; i < s; ++i)\n        out[o + i + 4] = dat[i];\n    return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n    wbits(out, p++, final);\n    ++lf[256];\n    var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n    var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n    var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n    var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n    var lcfreq = new u16(19);\n    for (var i = 0; i < lclt.length; ++i)\n        ++lcfreq[lclt[i] & 31];\n    for (var i = 0; i < lcdt.length; ++i)\n        ++lcfreq[lcdt[i] & 31];\n    var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n    var nlcc = 19;\n    for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n        ;\n    var flen = (bl + 5) << 3;\n    var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n    var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n    if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n        return wfblk(out, p, dat.subarray(bs, bs + bl));\n    var lm, ll, dm, dl;\n    wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n    if (dtlen < ftlen) {\n        lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n        var llm = hMap(lct, mlcb, 0);\n        wbits(out, p, nlc - 257);\n        wbits(out, p + 5, ndc - 1);\n        wbits(out, p + 10, nlcc - 4);\n        p += 14;\n        for (var i = 0; i < nlcc; ++i)\n            wbits(out, p + 3 * i, lct[clim[i]]);\n        p += 3 * nlcc;\n        var lcts = [lclt, lcdt];\n        for (var it = 0; it < 2; ++it) {\n            var clct = lcts[it];\n            for (var i = 0; i < clct.length; ++i) {\n                var len = clct[i] & 31;\n                wbits(out, p, llm[len]), p += lct[len];\n                if (len > 15)\n                    wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n            }\n        }\n    }\n    else {\n        lm = flm, ll = flt, dm = fdm, dl = fdt;\n    }\n    for (var i = 0; i < li; ++i) {\n        var sym = syms[i];\n        if (sym > 255) {\n            var len = (sym >> 18) & 31;\n            wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n            if (len > 7)\n                wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n            var dst = sym & 31;\n            wbits16(out, p, dm[dst]), p += dl[dst];\n            if (dst > 3)\n                wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n        }\n        else {\n            wbits16(out, p, lm[sym]), p += ll[sym];\n        }\n    }\n    wbits16(out, p, lm[256]);\n    return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n    var s = st.z || dat.length;\n    var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n    // writing to this writes to the output buffer\n    var w = o.subarray(pre, o.length - post);\n    var lst = st.l;\n    var pos = (st.r || 0) & 7;\n    if (lvl) {\n        if (pos)\n            w[0] = st.r >> 3;\n        var opt = deo[lvl - 1];\n        var n = opt >> 13, c = opt & 8191;\n        var msk_1 = (1 << plvl) - 1;\n        //    prev 2-byte val map    curr 2-byte val map\n        var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n        var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n        var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n        // 24576 is an arbitrary number of maximum symbols per block\n        // 424 buffer for last block\n        var syms = new i32(25000);\n        // length/literal freq   distance freq\n        var lf = new u16(288), df = new u16(32);\n        //  l/lcnt  exbits  index          l/lind  waitdx          blkpos\n        var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n        for (; i + 2 < s; ++i) {\n            // hash value\n            var hv = hsh(i);\n            // index mod 32768    previous index mod\n            var imod = i & 32767, pimod = head[hv];\n            prev[imod] = pimod;\n            head[hv] = imod;\n            // We always should modify head and prev, but only add symbols if\n            // this data is not yet processed (\"wait\" for wait index)\n            if (wi <= i) {\n                // bytes remaining\n                var rem = s - i;\n                if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n                    pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n                    li = lc_1 = eb = 0, bs = i;\n                    for (var j = 0; j < 286; ++j)\n                        lf[j] = 0;\n                    for (var j = 0; j < 30; ++j)\n                        df[j] = 0;\n                }\n                //  len    dist   chain\n                var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n                if (rem > 2 && hv == hsh(i - dif)) {\n                    var maxn = Math.min(n, rem) - 1;\n                    var maxd = Math.min(32767, i);\n                    // max possible length\n                    // not capped at dif because decompressors implement \"rolling\" index population\n                    var ml = Math.min(258, rem);\n                    while (dif <= maxd && --ch_1 && imod != pimod) {\n                        if (dat[i + l] == dat[i + l - dif]) {\n                            var nl = 0;\n                            for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n                                ;\n                            if (nl > l) {\n                                l = nl, d = dif;\n                                // break out early when we reach \"nice\" (we are satisfied enough)\n                                if (nl > maxn)\n                                    break;\n                                // now, find the rarest 2-byte sequence within this\n                                // length of literals and search for that instead.\n                                // Much faster than just using the start\n                                var mmd = Math.min(dif, nl - 2);\n                                var md = 0;\n                                for (var j = 0; j < mmd; ++j) {\n                                    var ti = i - dif + j & 32767;\n                                    var pti = prev[ti];\n                                    var cd = ti - pti & 32767;\n                                    if (cd > md)\n                                        md = cd, pimod = ti;\n                                }\n                            }\n                        }\n                        // check the previous match\n                        imod = pimod, pimod = prev[imod];\n                        dif += imod - pimod & 32767;\n                    }\n                }\n                // d will be nonzero only when a match was found\n                if (d) {\n                    // store both dist and len data in one int32\n                    // Make sure this is recognized as a len/dist with 28th bit (2^28)\n                    syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n                    var lin = revfl[l] & 31, din = revfd[d] & 31;\n                    eb += fleb[lin] + fdeb[din];\n                    ++lf[257 + lin];\n                    ++df[din];\n                    wi = i + l;\n                    ++lc_1;\n                }\n                else {\n                    syms[li++] = dat[i];\n                    ++lf[dat[i]];\n                }\n            }\n        }\n        for (i = Math.max(i, wi); i < s; ++i) {\n            syms[li++] = dat[i];\n            ++lf[dat[i]];\n        }\n        pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n        if (!lst) {\n            st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n            // shft(pos) now 1 less if pos & 7 != 0\n            pos -= 7;\n            st.h = head, st.p = prev, st.i = i, st.w = wi;\n        }\n    }\n    else {\n        for (var i = st.w || 0; i < s + lst; i += 65535) {\n            // end\n            var e = i + 65535;\n            if (e >= s) {\n                // write final block\n                w[(pos / 8) | 0] = lst;\n                e = s;\n            }\n            pos = wfblk(w, pos + 1, dat.subarray(i, e));\n        }\n        st.i = s;\n    }\n    return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n    var t = new Int32Array(256);\n    for (var i = 0; i < 256; ++i) {\n        var c = i, k = 9;\n        while (--k)\n            c = ((c & 1) && -306674912) ^ (c >>> 1);\n        t[i] = c;\n    }\n    return t;\n})();\n// CRC32\nvar crc = function () {\n    var c = -1;\n    return {\n        p: function (d) {\n            // closures have awful performance\n            var cr = c;\n            for (var i = 0; i < d.length; ++i)\n                cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n            c = cr;\n        },\n        d: function () { return ~c; }\n    };\n};\n// Adler32\nvar adler = function () {\n    var a = 1, b = 0;\n    return {\n        p: function (d) {\n            // closures have awful performance\n            var n = a, m = b;\n            var l = d.length | 0;\n            for (var i = 0; i != l;) {\n                var e = Math.min(i + 2655, l);\n                for (; i < e; ++i)\n                    m += n += d[i];\n                n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n            }\n            a = n, b = m;\n        },\n        d: function () {\n            a %= 65521, b %= 65521;\n            return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n        }\n    };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n    if (!st) {\n        st = { l: 1 };\n        if (opt.dictionary) {\n            var dict = opt.dictionary.subarray(-32768);\n            var newDat = new u8(dict.length + dat.length);\n            newDat.set(dict);\n            newDat.set(dat, dict.length);\n            dat = newDat;\n            st.w = dict.length;\n        }\n    }\n    return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? (st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n    var o = {};\n    for (var k in a)\n        o[k] = a[k];\n    for (var k in b)\n        o[k] = b[k];\n    return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n    var dt = fn();\n    var st = fn.toString();\n    var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n    for (var i = 0; i < dt.length; ++i) {\n        var v = dt[i], k = ks[i];\n        if (typeof v == 'function') {\n            fnStr += ';' + k + '=';\n            var st_1 = v.toString();\n            if (v.prototype) {\n                // for global objects\n                if (st_1.indexOf('[native code]') != -1) {\n                    var spInd = st_1.indexOf(' ', 8) + 1;\n                    fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n                }\n                else {\n                    fnStr += st_1;\n                    for (var t in v.prototype)\n                        fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n                }\n            }\n            else\n                fnStr += st_1;\n        }\n        else\n            td[k] = v;\n    }\n    return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n    var tl = [];\n    for (var k in v) {\n        if (v[k].buffer) {\n            tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n        }\n    }\n    return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n    if (!ch[id]) {\n        var fnStr = '', td_1 = {}, m = fns.length - 1;\n        for (var i = 0; i < m; ++i)\n            fnStr = wcln(fns[i], fnStr, td_1);\n        ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n    }\n    var td = mrg({}, ch[id].e);\n    return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n    out: o.size && new u8(o.size),\n    dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n    var w = wrkr(fns, init, id, function (err, dat) {\n        w.terminate();\n        cb(err, dat);\n    });\n    w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n    return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n    strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n    return function (ev) {\n        if (ev.data.length) {\n            strm.push(ev.data[0], ev.data[1]);\n            postMessage([ev.data[0].length]);\n        }\n        else\n            strm.flush();\n    };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, flush, ext) {\n    var t;\n    var w = wrkr(fns, init, id, function (err, dat) {\n        if (err)\n            w.terminate(), strm.ondata.call(strm, err);\n        else if (!Array.isArray(dat))\n            ext(dat);\n        else if (dat.length == 1) {\n            strm.queuedSize -= dat[0];\n            if (strm.ondrain)\n                strm.ondrain(dat[0]);\n        }\n        else {\n            if (dat[1])\n                w.terminate();\n            strm.ondata.call(strm, err, dat[0], dat[1]);\n        }\n    });\n    w.postMessage(opts);\n    strm.queuedSize = 0;\n    strm.push = function (d, f) {\n        if (!strm.ondata)\n            err(5);\n        if (t)\n            strm.ondata(err(4, 0, 1), null, !!f);\n        strm.queuedSize += d.length;\n        w.postMessage([d, t = f], [d.buffer]);\n    };\n    strm.terminate = function () { w.terminate(); };\n    if (flush) {\n        strm.flush = function () { w.postMessage([]); };\n    }\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n    for (; v; ++b)\n        d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n    var fn = o.filename;\n    c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n    if (o.mtime != 0)\n        wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n    if (fn) {\n        c[3] = 8;\n        for (var i = 0; i <= fn.length; ++i)\n            c[i + 10] = fn.charCodeAt(i);\n    }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n    if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n        err(6, 'invalid gzip data');\n    var flg = d[3];\n    var st = 10;\n    if (flg & 4)\n        st += (d[10] | d[11] << 8) + 2;\n    for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n        ;\n    return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n    var l = d.length;\n    return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n    var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n    c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n    c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n    if (o.dictionary) {\n        var h = adler();\n        h.p(o.dictionary);\n        wbytes(c, 2, h.d());\n    }\n};\n// zlib start\nvar zls = function (d, dict) {\n    if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n        err(6, 'invalid zlib data');\n    if ((d[1] >> 5 & 1) == +!dict)\n        err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n    return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n    if (typeof opts == 'function')\n        cb = opts, opts = {};\n    this.ondata = cb;\n    return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n    function Deflate(opts, cb) {\n        if (typeof opts == 'function')\n            cb = opts, opts = {};\n        this.ondata = cb;\n        this.o = opts || {};\n        this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n        // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n        // 98304 = 32768 (lookback) + 65536 (common chunk size)\n        this.b = new u8(98304);\n        if (this.o.dictionary) {\n            var dict = this.o.dictionary.subarray(-32768);\n            this.b.set(dict, 32768 - dict.length);\n            this.s.i = 32768 - dict.length;\n        }\n    }\n    Deflate.prototype.p = function (c, f) {\n        this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n    };\n    /**\n     * Pushes a chunk to be deflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Deflate.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        if (this.s.l)\n            err(4);\n        var endLen = chunk.length + this.s.z;\n        if (endLen > this.b.length) {\n            if (endLen > 2 * this.b.length - 32768) {\n                var newBuf = new u8(endLen & -32768);\n                newBuf.set(this.b.subarray(0, this.s.z));\n                this.b = newBuf;\n            }\n            var split = this.b.length - this.s.z;\n            this.b.set(chunk.subarray(0, split), this.s.z);\n            this.s.z = this.b.length;\n            this.p(this.b, false);\n            this.b.set(this.b.subarray(-32768));\n            this.b.set(chunk.subarray(split), 32768);\n            this.s.z = chunk.length - split + 32768;\n            this.s.i = 32766, this.s.w = 32768;\n        }\n        else {\n            this.b.set(chunk, this.s.z);\n            this.s.z += chunk.length;\n        }\n        this.s.l = final & 1;\n        if (this.s.z > this.s.w + 8191 || final) {\n            this.p(this.b, final || false);\n            this.s.w = this.s.i, this.s.i -= 2;\n        }\n    };\n    /**\n     * Flushes buffered uncompressed data. Useful to immediately retrieve the\n     * deflated output for small inputs.\n     */\n    Deflate.prototype.flush = function () {\n        if (!this.ondata)\n            err(5);\n        if (this.s.l)\n            err(4);\n        this.p(this.b, false);\n        this.s.w = this.s.i, this.s.i -= 2;\n    };\n    return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n    function AsyncDeflate(opts, cb) {\n        astrmify([\n            bDflt,\n            function () { return [astrm, Deflate]; }\n        ], this, StrmOpt.call(this, opts, cb), function (ev) {\n            var strm = new Deflate(ev.data);\n            onmessage = astrm(strm);\n        }, 6, 1);\n    }\n    return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bDflt,\n    ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n    return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n    function Inflate(opts, cb) {\n        // no StrmOpt here to avoid adding to workerizer\n        if (typeof opts == 'function')\n            cb = opts, opts = {};\n        this.ondata = cb;\n        var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n        this.s = { i: 0, b: dict ? dict.length : 0 };\n        this.o = new u8(32768);\n        this.p = new u8(0);\n        if (dict)\n            this.o.set(dict);\n    }\n    Inflate.prototype.e = function (c) {\n        if (!this.ondata)\n            err(5);\n        if (this.d)\n            err(4);\n        if (!this.p.length)\n            this.p = c;\n        else if (c.length) {\n            var n = new u8(this.p.length + c.length);\n            n.set(this.p), n.set(c, this.p.length), this.p = n;\n        }\n    };\n    Inflate.prototype.c = function (final) {\n        this.s.i = +(this.d = final || false);\n        var bts = this.s.b;\n        var dt = inflt(this.p, this.s, this.o);\n        this.ondata(slc(dt, bts, this.s.b), this.d);\n        this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n        this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n    };\n    /**\n     * Pushes a chunk to be inflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the final chunk\n     */\n    Inflate.prototype.push = function (chunk, final) {\n        this.e(chunk), this.c(final);\n    };\n    return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n    function AsyncInflate(opts, cb) {\n        astrmify([\n            bInflt,\n            function () { return [astrm, Inflate]; }\n        ], this, StrmOpt.call(this, opts, cb), function (ev) {\n            var strm = new Inflate(ev.data);\n            onmessage = astrm(strm);\n        }, 7, 0);\n    }\n    return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bInflt\n    ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, opts) {\n    return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n    function Gzip(opts, cb) {\n        this.c = crc();\n        this.l = 0;\n        this.v = 1;\n        Deflate.call(this, opts, cb);\n    }\n    /**\n     * Pushes a chunk to be GZIPped\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Gzip.prototype.push = function (chunk, final) {\n        this.c.p(chunk);\n        this.l += chunk.length;\n        Deflate.prototype.push.call(this, chunk, final);\n    };\n    Gzip.prototype.p = function (c, f) {\n        var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n        if (this.v)\n            gzh(raw, this.o), this.v = 0;\n        if (f)\n            wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n        this.ondata(raw, f);\n    };\n    /**\n     * Flushes buffered uncompressed data. Useful to immediately retrieve the\n     * GZIPped output for small inputs.\n     */\n    Gzip.prototype.flush = function () {\n        Deflate.prototype.flush.call(this);\n    };\n    return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n    function AsyncGzip(opts, cb) {\n        astrmify([\n            bDflt,\n            gze,\n            function () { return [astrm, Deflate, Gzip]; }\n        ], this, StrmOpt.call(this, opts, cb), function (ev) {\n            var strm = new Gzip(ev.data);\n            onmessage = astrm(strm);\n        }, 8, 1);\n    }\n    return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bDflt,\n        gze,\n        function () { return [gzipSync]; }\n    ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n    if (!opts)\n        opts = {};\n    var c = crc(), l = data.length;\n    c.p(data);\n    var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n    return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n    function Gunzip(opts, cb) {\n        this.v = 1;\n        this.r = 0;\n        Inflate.call(this, opts, cb);\n    }\n    /**\n     * Pushes a chunk to be GUNZIPped\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Gunzip.prototype.push = function (chunk, final) {\n        Inflate.prototype.e.call(this, chunk);\n        this.r += chunk.length;\n        if (this.v) {\n            var p = this.p.subarray(this.v - 1);\n            var s = p.length > 3 ? gzs(p) : 4;\n            if (s > p.length) {\n                if (!final)\n                    return;\n            }\n            else if (this.v > 1 && this.onmember) {\n                this.onmember(this.r - p.length);\n            }\n            this.p = p.subarray(s), this.v = 0;\n        }\n        // necessary to prevent TS from using the closure value\n        // This allows for workerization to function correctly\n        Inflate.prototype.c.call(this, final);\n        // process concatenated GZIP\n        if (this.s.f && !this.s.l && !final) {\n            this.v = shft(this.s.p) + 9;\n            this.s = { i: 0 };\n            this.o = new u8(0);\n            this.push(new u8(0), final);\n        }\n    };\n    return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n    function AsyncGunzip(opts, cb) {\n        var _this = this;\n        astrmify([\n            bInflt,\n            guze,\n            function () { return [astrm, Inflate, Gunzip]; }\n        ], this, StrmOpt.call(this, opts, cb), function (ev) {\n            var strm = new Gunzip(ev.data);\n            strm.onmember = function (offset) { return postMessage(offset); };\n            onmessage = astrm(strm);\n        }, 9, 0, function (offset) { return _this.onmember && _this.onmember(offset); });\n    }\n    return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bInflt,\n        guze,\n        function () { return [gunzipSync]; }\n    ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, opts) {\n    var st = gzs(data);\n    if (st + 8 > data.length)\n        err(6, 'invalid gzip data');\n    return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n    function Zlib(opts, cb) {\n        this.c = adler();\n        this.v = 1;\n        Deflate.call(this, opts, cb);\n    }\n    /**\n     * Pushes a chunk to be zlibbed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Zlib.prototype.push = function (chunk, final) {\n        this.c.p(chunk);\n        Deflate.prototype.push.call(this, chunk, final);\n    };\n    Zlib.prototype.p = function (c, f) {\n        var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n        if (this.v)\n            zlh(raw, this.o), this.v = 0;\n        if (f)\n            wbytes(raw, raw.length - 4, this.c.d());\n        this.ondata(raw, f);\n    };\n    /**\n     * Flushes buffered uncompressed data. Useful to immediately retrieve the\n     * zlibbed output for small inputs.\n     */\n    Zlib.prototype.flush = function () {\n        Deflate.prototype.flush.call(this);\n    };\n    return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n    function AsyncZlib(opts, cb) {\n        astrmify([\n            bDflt,\n            zle,\n            function () { return [astrm, Deflate, Zlib]; }\n        ], this, StrmOpt.call(this, opts, cb), function (ev) {\n            var strm = new Zlib(ev.data);\n            onmessage = astrm(strm);\n        }, 10, 1);\n    }\n    return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bDflt,\n        zle,\n        function () { return [zlibSync]; }\n    ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n    if (!opts)\n        opts = {};\n    var a = adler();\n    a.p(data);\n    var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n    return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n    function Unzlib(opts, cb) {\n        Inflate.call(this, opts, cb);\n        this.v = opts && opts.dictionary ? 2 : 1;\n    }\n    /**\n     * Pushes a chunk to be unzlibbed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Unzlib.prototype.push = function (chunk, final) {\n        Inflate.prototype.e.call(this, chunk);\n        if (this.v) {\n            if (this.p.length < 6 && !final)\n                return;\n            this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n        }\n        if (final) {\n            if (this.p.length < 4)\n                err(6, 'invalid zlib data');\n            this.p = this.p.subarray(0, -4);\n        }\n        // necessary to prevent TS from using the closure value\n        // This allows for workerization to function correctly\n        Inflate.prototype.c.call(this, final);\n    };\n    return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n    function AsyncUnzlib(opts, cb) {\n        astrmify([\n            bInflt,\n            zule,\n            function () { return [astrm, Inflate, Unzlib]; }\n        ], this, StrmOpt.call(this, opts, cb), function (ev) {\n            var strm = new Unzlib(ev.data);\n            onmessage = astrm(strm);\n        }, 11, 0);\n    }\n    return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bInflt,\n        zule,\n        function () { return [unzlibSync]; }\n    ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, opts) {\n    return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n    function Decompress(opts, cb) {\n        this.o = StrmOpt.call(this, opts, cb) || {};\n        this.G = Gunzip;\n        this.I = Inflate;\n        this.Z = Unzlib;\n    }\n    // init substream\n    // overriden by AsyncDecompress\n    Decompress.prototype.i = function () {\n        var _this = this;\n        this.s.ondata = function (dat, final) {\n            _this.ondata(dat, final);\n        };\n    };\n    /**\n     * Pushes a chunk to be decompressed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Decompress.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        if (!this.s) {\n            if (this.p && this.p.length) {\n                var n = new u8(this.p.length + chunk.length);\n                n.set(this.p), n.set(chunk, this.p.length);\n            }\n            else\n                this.p = chunk;\n            if (this.p.length > 2) {\n                this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n                    ? new this.G(this.o)\n                    : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n                        ? new this.I(this.o)\n                        : new this.Z(this.o);\n                this.i();\n                this.s.push(this.p, final);\n                this.p = null;\n            }\n        }\n        else\n            this.s.push(chunk, final);\n    };\n    return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n    function AsyncDecompress(opts, cb) {\n        Decompress.call(this, opts, cb);\n        this.queuedSize = 0;\n        this.G = AsyncGunzip;\n        this.I = AsyncInflate;\n        this.Z = AsyncUnzlib;\n    }\n    AsyncDecompress.prototype.i = function () {\n        var _this = this;\n        this.s.ondata = function (err, dat, final) {\n            _this.ondata(err, dat, final);\n        };\n        this.s.ondrain = function (size) {\n            _this.queuedSize -= size;\n            if (_this.ondrain)\n                _this.ondrain(size);\n        };\n    };\n    /**\n     * Pushes a chunk to be decompressed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    AsyncDecompress.prototype.push = function (chunk, final) {\n        this.queuedSize += chunk.length;\n        Decompress.prototype.push.call(this, chunk, final);\n    };\n    return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n        ? gunzip(data, opts, cb)\n        : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n            ? inflate(data, opts, cb)\n            : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, opts) {\n    return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n        ? gunzipSync(data, opts)\n        : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n            ? inflateSync(data, opts)\n            : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n    for (var k in d) {\n        var val = d[k], n = p + k, op = o;\n        if (Array.isArray(val))\n            op = mrg(o, val[1]), val = val[0];\n        if (val instanceof u8)\n            t[n] = [val, op];\n        else {\n            t[n += '/'] = [new u8(0), op];\n            fltn(val, n, t, o);\n        }\n    }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n    td.decode(et, { stream: true });\n    tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n    for (var r = '', i = 0;;) {\n        var c = d[i++];\n        var eb = (c > 127) + (c > 223) + (c > 239);\n        if (i + eb > d.length)\n            return { s: r, r: slc(d, i - 1) };\n        if (!eb)\n            r += String.fromCharCode(c);\n        else if (eb == 3) {\n            c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n                r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n        }\n        else if (eb & 1)\n            r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n        else\n            r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n    }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n    /**\n     * Creates a UTF-8 decoding stream\n     * @param cb The callback to call whenever data is decoded\n     */\n    function DecodeUTF8(cb) {\n        this.ondata = cb;\n        if (tds)\n            this.t = new TextDecoder();\n        else\n            this.p = et;\n    }\n    /**\n     * Pushes a chunk to be decoded from UTF-8 binary\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    DecodeUTF8.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        final = !!final;\n        if (this.t) {\n            this.ondata(this.t.decode(chunk, { stream: true }), final);\n            if (final) {\n                if (this.t.decode().length)\n                    err(8);\n                this.t = null;\n            }\n            return;\n        }\n        if (!this.p)\n            err(4);\n        var dat = new u8(this.p.length + chunk.length);\n        dat.set(this.p);\n        dat.set(chunk, this.p.length);\n        var _a = dutf8(dat), s = _a.s, r = _a.r;\n        if (final) {\n            if (r.length)\n                err(8);\n            this.p = null;\n        }\n        else\n            this.p = r;\n        this.ondata(s, final);\n    };\n    return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n    /**\n     * Creates a UTF-8 decoding stream\n     * @param cb The callback to call whenever data is encoded\n     */\n    function EncodeUTF8(cb) {\n        this.ondata = cb;\n    }\n    /**\n     * Pushes a chunk to be encoded to UTF-8\n     * @param chunk The string data to push\n     * @param final Whether this is the last chunk\n     */\n    EncodeUTF8.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        if (this.d)\n            err(4);\n        this.ondata(strToU8(chunk), this.d = final || false);\n    };\n    return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n *               not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n    if (latin1) {\n        var ar_1 = new u8(str.length);\n        for (var i = 0; i < str.length; ++i)\n            ar_1[i] = str.charCodeAt(i);\n        return ar_1;\n    }\n    if (te)\n        return te.encode(str);\n    var l = str.length;\n    var ar = new u8(str.length + (str.length >> 1));\n    var ai = 0;\n    var w = function (v) { ar[ai++] = v; };\n    for (var i = 0; i < l; ++i) {\n        if (ai + 5 > ar.length) {\n            var n = new u8(ai + 8 + ((l - i) << 1));\n            n.set(ar);\n            ar = n;\n        }\n        var c = str.charCodeAt(i);\n        if (c < 128 || latin1)\n            w(c);\n        else if (c < 2048)\n            w(192 | (c >> 6)), w(128 | (c & 63));\n        else if (c > 55295 && c < 57344)\n            c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n                w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n        else\n            w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n    }\n    return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n *               not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n    if (latin1) {\n        var r = '';\n        for (var i = 0; i < dat.length; i += 16384)\n            r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n        return r;\n    }\n    else if (td) {\n        return td.decode(dat);\n    }\n    else {\n        var _a = dutf8(dat), s = _a.s, r = _a.r;\n        if (r.length)\n            err(8);\n        return s;\n    }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n    var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n    var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n    return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n    for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n        ;\n    return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n    var le = 0;\n    if (ex) {\n        for (var k in ex) {\n            var l = ex[k].length;\n            if (l > 65535)\n                err(9);\n            le += l + 4;\n        }\n    }\n    return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n    var fl = fn.length, ex = f.extra, col = co && co.length;\n    var exl = exfl(ex);\n    wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n    if (ce != null)\n        d[b++] = 20, d[b++] = f.os;\n    d[b] = 20, b += 2; // spec compliance? what's that?\n    d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n    d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n    var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n    if (y < 0 || y > 119)\n        err(10);\n    wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n    if (c != -1) {\n        wbytes(d, b, f.crc);\n        wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n        wbytes(d, b + 8, f.size);\n    }\n    wbytes(d, b + 12, fl);\n    wbytes(d, b + 14, exl), b += 16;\n    if (ce != null) {\n        wbytes(d, b, col);\n        wbytes(d, b + 6, f.attrs);\n        wbytes(d, b + 10, ce), b += 14;\n    }\n    d.set(fn, b);\n    b += fl;\n    if (exl) {\n        for (var k in ex) {\n            var exf = ex[k], l = exf.length;\n            wbytes(d, b, +k);\n            wbytes(d, b + 2, l);\n            d.set(exf, b + 4), b += 4 + l;\n        }\n    }\n    if (col)\n        d.set(co, b), b += col;\n    return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n    wbytes(o, b, 0x6054B50); // skip disk\n    wbytes(o, b + 8, c);\n    wbytes(o, b + 10, c);\n    wbytes(o, b + 12, d);\n    wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n    /**\n     * Creates a pass-through stream that can be added to ZIP archives\n     * @param filename The filename to associate with this data stream\n     */\n    function ZipPassThrough(filename) {\n        this.filename = filename;\n        this.c = crc();\n        this.size = 0;\n        this.compression = 0;\n    }\n    /**\n     * Processes a chunk and pushes to the output stream. You can override this\n     * method in a subclass for custom behavior, but by default this passes\n     * the data through. You must call this.ondata(err, chunk, final) at some\n     * point in this method.\n     * @param chunk The chunk to process\n     * @param final Whether this is the last chunk\n     */\n    ZipPassThrough.prototype.process = function (chunk, final) {\n        this.ondata(null, chunk, final);\n    };\n    /**\n     * Pushes a chunk to be added. If you are subclassing this with a custom\n     * compression algorithm, note that you must push data from the source\n     * file only, pre-compression.\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    ZipPassThrough.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        this.c.p(chunk);\n        this.size += chunk.length;\n        if (final)\n            this.crc = this.c.d();\n        this.process(chunk, final || false);\n    };\n    return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates a DEFLATE stream that can be added to ZIP archives\n     * @param filename The filename to associate with this data stream\n     * @param opts The compression options\n     */\n    function ZipDeflate(filename, opts) {\n        var _this = this;\n        if (!opts)\n            opts = {};\n        ZipPassThrough.call(this, filename);\n        this.d = new Deflate(opts, function (dat, final) {\n            _this.ondata(null, dat, final);\n        });\n        this.compression = 8;\n        this.flag = dbf(opts.level);\n    }\n    ZipDeflate.prototype.process = function (chunk, final) {\n        try {\n            this.d.push(chunk, final);\n        }\n        catch (e) {\n            this.ondata(e, null, final);\n        }\n    };\n    /**\n     * Pushes a chunk to be deflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    ZipDeflate.prototype.push = function (chunk, final) {\n        ZipPassThrough.prototype.push.call(this, chunk, final);\n    };\n    return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n     * @param filename The filename to associate with this data stream\n     * @param opts The compression options\n     */\n    function AsyncZipDeflate(filename, opts) {\n        var _this = this;\n        if (!opts)\n            opts = {};\n        ZipPassThrough.call(this, filename);\n        this.d = new AsyncDeflate(opts, function (err, dat, final) {\n            _this.ondata(err, dat, final);\n        });\n        this.compression = 8;\n        this.flag = dbf(opts.level);\n        this.terminate = this.d.terminate;\n    }\n    AsyncZipDeflate.prototype.process = function (chunk, final) {\n        this.d.push(chunk, final);\n    };\n    /**\n     * Pushes a chunk to be deflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    AsyncZipDeflate.prototype.push = function (chunk, final) {\n        ZipPassThrough.prototype.push.call(this, chunk, final);\n    };\n    return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n    /**\n     * Creates an empty ZIP archive to which files can be added\n     * @param cb The callback to call whenever data for the generated ZIP archive\n     *           is available\n     */\n    function Zip(cb) {\n        this.ondata = cb;\n        this.u = [];\n        this.d = 1;\n    }\n    /**\n     * Adds a file to the ZIP archive\n     * @param file The file stream to add\n     */\n    Zip.prototype.add = function (file) {\n        var _this = this;\n        if (!this.ondata)\n            err(5);\n        // finishing or finished\n        if (this.d & 2)\n            this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n        else {\n            var f = strToU8(file.filename), fl_1 = f.length;\n            var com = file.comment, o = com && strToU8(com);\n            var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n            var hl_1 = fl_1 + exfl(file.extra) + 30;\n            if (fl_1 > 65535)\n                this.ondata(err(11, 0, 1), null, false);\n            var header = new u8(hl_1);\n            wzh(header, 0, file, f, u, -1);\n            var chks_1 = [header];\n            var pAll_1 = function () {\n                for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n                    var chk = chks_2[_i];\n                    _this.ondata(null, chk, false);\n                }\n                chks_1 = [];\n            };\n            var tr_1 = this.d;\n            this.d = 0;\n            var ind_1 = this.u.length;\n            var uf_1 = mrg(file, {\n                f: f,\n                u: u,\n                o: o,\n                t: function () {\n                    if (file.terminate)\n                        file.terminate();\n                },\n                r: function () {\n                    pAll_1();\n                    if (tr_1) {\n                        var nxt = _this.u[ind_1 + 1];\n                        if (nxt)\n                            nxt.r();\n                        else\n                            _this.d = 1;\n                    }\n                    tr_1 = 1;\n                }\n            });\n            var cl_1 = 0;\n            file.ondata = function (err, dat, final) {\n                if (err) {\n                    _this.ondata(err, dat, final);\n                    _this.terminate();\n                }\n                else {\n                    cl_1 += dat.length;\n                    chks_1.push(dat);\n                    if (final) {\n                        var dd = new u8(16);\n                        wbytes(dd, 0, 0x8074B50);\n                        wbytes(dd, 4, file.crc);\n                        wbytes(dd, 8, cl_1);\n                        wbytes(dd, 12, file.size);\n                        chks_1.push(dd);\n                        uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n                        if (tr_1)\n                            uf_1.r();\n                        tr_1 = 1;\n                    }\n                    else if (tr_1)\n                        pAll_1();\n                }\n            };\n            this.u.push(uf_1);\n        }\n    };\n    /**\n     * Ends the process of adding files and prepares to emit the final chunks.\n     * This *must* be called after adding all desired files for the resulting\n     * ZIP file to work properly.\n     */\n    Zip.prototype.end = function () {\n        var _this = this;\n        if (this.d & 2) {\n            this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n            return;\n        }\n        if (this.d)\n            this.e();\n        else\n            this.u.push({\n                r: function () {\n                    if (!(_this.d & 1))\n                        return;\n                    _this.u.splice(-1, 1);\n                    _this.e();\n                },\n                t: function () { }\n            });\n        this.d = 3;\n    };\n    Zip.prototype.e = function () {\n        var bt = 0, l = 0, tl = 0;\n        for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n            var f = _a[_i];\n            tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n        }\n        var out = new u8(tl + 22);\n        for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n            var f = _c[_b];\n            wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n            bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n        }\n        wzf(out, bt, this.u.length, tl, l);\n        this.ondata(null, out, true);\n        this.d = 2;\n    };\n    /**\n     * A method to terminate any internal workers used by the stream. Subsequent\n     * calls to add() will fail.\n     */\n    Zip.prototype.terminate = function () {\n        for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n            var f = _a[_i];\n            f.t();\n        }\n        this.d = 2;\n    };\n    return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    var r = {};\n    fltn(data, '', r, opts);\n    var k = Object.keys(r);\n    var lft = k.length, o = 0, tot = 0;\n    var slft = lft, files = new Array(lft);\n    var term = [];\n    var tAll = function () {\n        for (var i = 0; i < term.length; ++i)\n            term[i]();\n    };\n    var cbd = function (a, b) {\n        mt(function () { cb(a, b); });\n    };\n    mt(function () { cbd = cb; });\n    var cbf = function () {\n        var out = new u8(tot + 22), oe = o, cdl = tot - o;\n        tot = 0;\n        for (var i = 0; i < slft; ++i) {\n            var f = files[i];\n            try {\n                var l = f.c.length;\n                wzh(out, tot, f, f.f, f.u, l);\n                var badd = 30 + f.f.length + exfl(f.extra);\n                var loc = tot + badd;\n                out.set(f.c, loc);\n                wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n            }\n            catch (e) {\n                return cbd(e, null);\n            }\n        }\n        wzf(out, o, files.length, cdl, oe);\n        cbd(null, out);\n    };\n    if (!lft)\n        cbf();\n    var _loop_1 = function (i) {\n        var fn = k[i];\n        var _a = r[fn], file = _a[0], p = _a[1];\n        var c = crc(), size = file.length;\n        c.p(file);\n        var f = strToU8(fn), s = f.length;\n        var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n        var exl = exfl(p.extra);\n        var compression = p.level == 0 ? 0 : 8;\n        var cbl = function (e, d) {\n            if (e) {\n                tAll();\n                cbd(e, null);\n            }\n            else {\n                var l = d.length;\n                files[i] = mrg(p, {\n                    size: size,\n                    crc: c.d(),\n                    c: d,\n                    f: f,\n                    m: m,\n                    u: s != fn.length || (m && (com.length != ms)),\n                    compression: compression\n                });\n                o += 30 + s + exl + l;\n                tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n                if (!--lft)\n                    cbf();\n            }\n        };\n        if (s > 65535)\n            cbl(err(11, 0, 1), null);\n        if (!compression)\n            cbl(null, file);\n        else if (size < 160000) {\n            try {\n                cbl(null, deflateSync(file, p));\n            }\n            catch (e) {\n                cbl(e, null);\n            }\n        }\n        else\n            term.push(deflate(file, p, cbl));\n    };\n    // Cannot use lft because it can decrease\n    for (var i = 0; i < slft; ++i) {\n        _loop_1(i);\n    }\n    return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n    if (!opts)\n        opts = {};\n    var r = {};\n    var files = [];\n    fltn(data, '', r, opts);\n    var o = 0;\n    var tot = 0;\n    for (var fn in r) {\n        var _a = r[fn], file = _a[0], p = _a[1];\n        var compression = p.level == 0 ? 0 : 8;\n        var f = strToU8(fn), s = f.length;\n        var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n        var exl = exfl(p.extra);\n        if (s > 65535)\n            err(11);\n        var d = compression ? deflateSync(file, p) : file, l = d.length;\n        var c = crc();\n        c.p(file);\n        files.push(mrg(p, {\n            size: file.length,\n            crc: c.d(),\n            c: d,\n            f: f,\n            m: m,\n            u: s != fn.length || (m && (com.length != ms)),\n            o: o,\n            compression: compression\n        }));\n        o += 30 + s + exl + l;\n        tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n    }\n    var out = new u8(tot + 22), oe = o, cdl = tot - o;\n    for (var i = 0; i < files.length; ++i) {\n        var f = files[i];\n        wzh(out, f.o, f, f.f, f.u, f.c.length);\n        var badd = 30 + f.f.length + exfl(f.extra);\n        out.set(f.c, f.o + badd);\n        wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n    }\n    wzf(out, o, files.length, cdl, oe);\n    return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n    function UnzipPassThrough() {\n    }\n    UnzipPassThrough.prototype.push = function (data, final) {\n        this.ondata(null, data, final);\n    };\n    UnzipPassThrough.compression = 0;\n    return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates a DEFLATE decompression that can be used in ZIP archives\n     */\n    function UnzipInflate() {\n        var _this = this;\n        this.i = new Inflate(function (dat, final) {\n            _this.ondata(null, dat, final);\n        });\n    }\n    UnzipInflate.prototype.push = function (data, final) {\n        try {\n            this.i.push(data, final);\n        }\n        catch (e) {\n            this.ondata(e, null, final);\n        }\n    };\n    UnzipInflate.compression = 8;\n    return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates a DEFLATE decompression that can be used in ZIP archives\n     */\n    function AsyncUnzipInflate(_, sz) {\n        var _this = this;\n        if (sz < 320000) {\n            this.i = new Inflate(function (dat, final) {\n                _this.ondata(null, dat, final);\n            });\n        }\n        else {\n            this.i = new AsyncInflate(function (err, dat, final) {\n                _this.ondata(err, dat, final);\n            });\n            this.terminate = this.i.terminate;\n        }\n    }\n    AsyncUnzipInflate.prototype.push = function (data, final) {\n        if (this.i.terminate)\n            data = slc(data, 0);\n        this.i.push(data, final);\n    };\n    AsyncUnzipInflate.compression = 8;\n    return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n    /**\n     * Creates a ZIP decompression stream\n     * @param cb The callback to call whenever a file in the ZIP archive is found\n     */\n    function Unzip(cb) {\n        this.onfile = cb;\n        this.k = [];\n        this.o = {\n            0: UnzipPassThrough\n        };\n        this.p = et;\n    }\n    /**\n     * Pushes a chunk to be unzipped\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Unzip.prototype.push = function (chunk, final) {\n        var _this = this;\n        if (!this.onfile)\n            err(5);\n        if (!this.p)\n            err(4);\n        if (this.c > 0) {\n            var len = Math.min(this.c, chunk.length);\n            var toAdd = chunk.subarray(0, len);\n            this.c -= len;\n            if (this.d)\n                this.d.push(toAdd, !this.c);\n            else\n                this.k[0].push(toAdd);\n            chunk = chunk.subarray(len);\n            if (chunk.length)\n                return this.push(chunk, final);\n        }\n        else {\n            var f = 0, i = 0, is = void 0, buf = void 0;\n            if (!this.p.length)\n                buf = chunk;\n            else if (!chunk.length)\n                buf = this.p;\n            else {\n                buf = new u8(this.p.length + chunk.length);\n                buf.set(this.p), buf.set(chunk, this.p.length);\n            }\n            var l = buf.length, oc = this.c, add = oc && this.d;\n            var _loop_2 = function () {\n                var _a;\n                var sig = b4(buf, i);\n                if (sig == 0x4034B50) {\n                    f = 1, is = i;\n                    this_1.d = null;\n                    this_1.c = 0;\n                    var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n                    if (l > i + 30 + fnl + es) {\n                        var chks_3 = [];\n                        this_1.k.unshift(chks_3);\n                        f = 2;\n                        var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n                        var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n                        if (sc_1 == 4294967295) {\n                            _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n                        }\n                        else if (dd)\n                            sc_1 = -1;\n                        i += es;\n                        this_1.c = sc_1;\n                        var d_1;\n                        var file_1 = {\n                            name: fn_1,\n                            compression: cmp_1,\n                            start: function () {\n                                if (!file_1.ondata)\n                                    err(5);\n                                if (!sc_1)\n                                    file_1.ondata(null, et, true);\n                                else {\n                                    var ctr = _this.o[cmp_1];\n                                    if (!ctr)\n                                        file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n                                    d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n                                    d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n                                    for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n                                        var dat = chks_4[_i];\n                                        d_1.push(dat, false);\n                                    }\n                                    if (_this.k[0] == chks_3 && _this.c)\n                                        _this.d = d_1;\n                                    else\n                                        d_1.push(et, true);\n                                }\n                            },\n                            terminate: function () {\n                                if (d_1 && d_1.terminate)\n                                    d_1.terminate();\n                            }\n                        };\n                        if (sc_1 >= 0)\n                            file_1.size = sc_1, file_1.originalSize = su_1;\n                        this_1.onfile(file_1);\n                    }\n                    return \"break\";\n                }\n                else if (oc) {\n                    if (sig == 0x8074B50) {\n                        is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n                        return \"break\";\n                    }\n                    else if (sig == 0x2014B50) {\n                        is = i -= 4, f = 3, this_1.c = 0;\n                        return \"break\";\n                    }\n                }\n            };\n            var this_1 = this;\n            for (; i < l - 4; ++i) {\n                var state_1 = _loop_2();\n                if (state_1 === \"break\")\n                    break;\n            }\n            this.p = et;\n            if (oc < 0) {\n                var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n                if (add)\n                    add.push(dat, !!f);\n                else\n                    this.k[+(f == 2)].push(dat);\n            }\n            if (f & 2)\n                return this.push(buf.subarray(i), final);\n            this.p = buf.subarray(i);\n        }\n        if (final) {\n            if (this.c)\n                err(13);\n            this.p = null;\n        }\n    };\n    /**\n     * Registers a decoder with the stream, allowing for files compressed with\n     * the compression type provided to be expanded correctly\n     * @param decoder The decoder constructor\n     */\n    Unzip.prototype.register = function (decoder) {\n        this.o[decoder.compression] = decoder;\n    };\n    return Unzip;\n}());\nexport { Unzip };\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nexport function unzip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    var term = [];\n    var tAll = function () {\n        for (var i = 0; i < term.length; ++i)\n            term[i]();\n    };\n    var files = {};\n    var cbd = function (a, b) {\n        mt(function () { cb(a, b); });\n    };\n    mt(function () { cbd = cb; });\n    var e = data.length - 22;\n    for (; b4(data, e) != 0x6054B50; --e) {\n        if (!e || data.length - e > 65558) {\n            cbd(err(13, 0, 1), null);\n            return tAll;\n        }\n    }\n    ;\n    var lft = b2(data, e + 8);\n    if (lft) {\n        var c = lft;\n        var o = b4(data, e + 16);\n        var z = o == 4294967295 || c == 65535;\n        if (z) {\n            var ze = b4(data, e - 12);\n            z = b4(data, ze) == 0x6064B50;\n            if (z) {\n                c = lft = b4(data, ze + 32);\n                o = b4(data, ze + 48);\n            }\n        }\n        var fltr = opts && opts.filter;\n        var _loop_3 = function (i) {\n            var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n            o = no;\n            var cbl = function (e, d) {\n                if (e) {\n                    tAll();\n                    cbd(e, null);\n                }\n                else {\n                    if (d)\n                        files[fn] = d;\n                    if (!--lft)\n                        cbd(null, files);\n                }\n            };\n            if (!fltr || fltr({\n                name: fn,\n                size: sc,\n                originalSize: su,\n                compression: c_1\n            })) {\n                if (!c_1)\n                    cbl(null, slc(data, b, b + sc));\n                else if (c_1 == 8) {\n                    var infl = data.subarray(b, b + sc);\n                    // Synchronously decompress under 512KB, or barely-compressed data\n                    if (su < 524288 || sc > 0.8 * su) {\n                        try {\n                            cbl(null, inflateSync(infl, { out: new u8(su) }));\n                        }\n                        catch (e) {\n                            cbl(e, null);\n                        }\n                    }\n                    else\n                        term.push(inflate(infl, { size: su }, cbl));\n                }\n                else\n                    cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n            }\n            else\n                cbl(null, null);\n        };\n        for (var i = 0; i < c; ++i) {\n            _loop_3(i);\n        }\n    }\n    else\n        cbd(null, {});\n    return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nexport function unzipSync(data, opts) {\n    var files = {};\n    var e = data.length - 22;\n    for (; b4(data, e) != 0x6054B50; --e) {\n        if (!e || data.length - e > 65558)\n            err(13);\n    }\n    ;\n    var c = b2(data, e + 8);\n    if (!c)\n        return {};\n    var o = b4(data, e + 16);\n    var z = o == 4294967295 || c == 65535;\n    if (z) {\n        var ze = b4(data, e - 12);\n        z = b4(data, ze) == 0x6064B50;\n        if (z) {\n            c = b4(data, ze + 32);\n            o = b4(data, ze + 48);\n        }\n    }\n    var fltr = opts && opts.filter;\n    for (var i = 0; i < c; ++i) {\n        var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n        o = no;\n        if (!fltr || fltr({\n            name: fn,\n            size: sc,\n            originalSize: su,\n            compression: c_2\n        })) {\n            if (!c_2)\n                files[fn] = slc(data, b, b + sc);\n            else if (c_2 == 8)\n                files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n            else\n                err(14, 'unknown compression type ' + c_2);\n        }\n    }\n    return files;\n}\n","\nconst SHIFT_LEFT_32 = (1 << 16) * (1 << 16);\nconst SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;\n\n// Threshold chosen based on both benchmarking and knowledge about browser string\n// data structures (which currently switch structure types at 12 bytes or more)\nconst TEXT_DECODER_MIN_LENGTH = 12;\nconst utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8');\n\nconst PBF_VARINT  = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum\nconst PBF_FIXED64 = 1; // 64-bit: double, fixed64, sfixed64\nconst PBF_BYTES   = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields\nconst PBF_FIXED32 = 5; // 32-bit: float, fixed32, sfixed32\n\nexport default class Pbf {\n    /**\n     * @param {Uint8Array | ArrayBuffer} [buf]\n     */\n    constructor(buf = new Uint8Array(16)) {\n        this.buf = ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf);\n        this.dataView = new DataView(this.buf.buffer);\n        this.pos = 0;\n        this.type = 0;\n        this.length = this.buf.length;\n    }\n\n    // === READING =================================================================\n\n    /**\n     * @template T\n     * @param {(tag: number, result: T, pbf: Pbf) => void} readField\n     * @param {T} result\n     * @param {number} [end]\n     */\n    readFields(readField, result, end = this.length) {\n        while (this.pos < end) {\n            const val = this.readVarint(),\n                tag = val >> 3,\n                startPos = this.pos;\n\n            this.type = val & 0x7;\n            readField(tag, result, this);\n\n            if (this.pos === startPos) this.skip(val);\n        }\n        return result;\n    }\n\n    /**\n     * @template T\n     * @param {(tag: number, result: T, pbf: Pbf) => void} readField\n     * @param {T} result\n     */\n    readMessage(readField, result) {\n        return this.readFields(readField, result, this.readVarint() + this.pos);\n    }\n\n    readFixed32() {\n        const val = this.dataView.getUint32(this.pos, true);\n        this.pos += 4;\n        return val;\n    }\n\n    readSFixed32() {\n        const val = this.dataView.getInt32(this.pos, true);\n        this.pos += 4;\n        return val;\n    }\n\n    // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)\n\n    readFixed64() {\n        const val = this.dataView.getUint32(this.pos, true) + this.dataView.getUint32(this.pos + 4, true) * SHIFT_LEFT_32;\n        this.pos += 8;\n        return val;\n    }\n\n    readSFixed64() {\n        const val = this.dataView.getUint32(this.pos, true) + this.dataView.getInt32(this.pos + 4, true) * SHIFT_LEFT_32;\n        this.pos += 8;\n        return val;\n    }\n\n    readFloat() {\n        const val = this.dataView.getFloat32(this.pos, true);\n        this.pos += 4;\n        return val;\n    }\n\n    readDouble() {\n        const val = this.dataView.getFloat64(this.pos, true);\n        this.pos += 8;\n        return val;\n    }\n\n    /**\n     * @param {boolean} [isSigned]\n     */\n    readVarint(isSigned) {\n        const buf = this.buf;\n        let val, b;\n\n        b = buf[this.pos++]; val  =  b & 0x7f;        if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 7;  if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;\n        b = buf[this.pos];   val |= (b & 0x0f) << 28;\n\n        return readVarintRemainder(val, isSigned, this);\n    }\n\n    readVarint64() { // for compatibility with v2.0.1\n        return this.readVarint(true);\n    }\n\n    readSVarint() {\n        const num = this.readVarint();\n        return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding\n    }\n\n    readBoolean() {\n        return Boolean(this.readVarint());\n    }\n\n    readString() {\n        const end = this.readVarint() + this.pos;\n        const pos = this.pos;\n        this.pos = end;\n\n        if (end - pos >= TEXT_DECODER_MIN_LENGTH && utf8TextDecoder) {\n            // longer strings are fast with the built-in browser TextDecoder API\n            return utf8TextDecoder.decode(this.buf.subarray(pos, end));\n        }\n        // short strings are fast with our custom implementation\n        return readUtf8(this.buf, pos, end);\n    }\n\n    readBytes() {\n        const end = this.readVarint() + this.pos,\n            buffer = this.buf.subarray(this.pos, end);\n        this.pos = end;\n        return buffer;\n    }\n\n    // verbose for performance reasons; doesn't affect gzipped size\n\n    /**\n     * @param {number[]} [arr]\n     * @param {boolean} [isSigned]\n     */\n    readPackedVarint(arr = [], isSigned) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readVarint(isSigned));\n        return arr;\n    }\n    /** @param {number[]} [arr] */\n    readPackedSVarint(arr = []) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readSVarint());\n        return arr;\n    }\n    /** @param {boolean[]} [arr] */\n    readPackedBoolean(arr = []) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readBoolean());\n        return arr;\n    }\n    /** @param {number[]} [arr] */\n    readPackedFloat(arr = []) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readFloat());\n        return arr;\n    }\n    /** @param {number[]} [arr] */\n    readPackedDouble(arr = []) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readDouble());\n        return arr;\n    }\n    /** @param {number[]} [arr] */\n    readPackedFixed32(arr = []) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readFixed32());\n        return arr;\n    }\n    /** @param {number[]} [arr] */\n    readPackedSFixed32(arr = []) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readSFixed32());\n        return arr;\n    }\n    /** @param {number[]} [arr] */\n    readPackedFixed64(arr = []) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readFixed64());\n        return arr;\n    }\n    /** @param {number[]} [arr] */\n    readPackedSFixed64(arr = []) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readSFixed64());\n        return arr;\n    }\n    readPackedEnd() {\n        return this.type === PBF_BYTES ? this.readVarint() + this.pos : this.pos + 1;\n    }\n\n    /** @param {number} val */\n    skip(val) {\n        const type = val & 0x7;\n        if (type === PBF_VARINT) while (this.buf[this.pos++] > 0x7f) {}\n        else if (type === PBF_BYTES) this.pos = this.readVarint() + this.pos;\n        else if (type === PBF_FIXED32) this.pos += 4;\n        else if (type === PBF_FIXED64) this.pos += 8;\n        else throw new Error(`Unimplemented type: ${type}`);\n    }\n\n    // === WRITING =================================================================\n\n    /**\n     * @param {number} tag\n     * @param {number} type\n     */\n    writeTag(tag, type) {\n        this.writeVarint((tag << 3) | type);\n    }\n\n    /** @param {number} min */\n    realloc(min) {\n        let length = this.length || 16;\n\n        while (length < this.pos + min) length *= 2;\n\n        if (length !== this.length) {\n            const buf = new Uint8Array(length);\n            buf.set(this.buf);\n            this.buf = buf;\n            this.dataView = new DataView(buf.buffer);\n            this.length = length;\n        }\n    }\n\n    finish() {\n        this.length = this.pos;\n        this.pos = 0;\n        return this.buf.subarray(0, this.length);\n    }\n\n    /** @param {number} val */\n    writeFixed32(val) {\n        this.realloc(4);\n        this.dataView.setInt32(this.pos, val, true);\n        this.pos += 4;\n    }\n\n    /** @param {number} val */\n    writeSFixed32(val) {\n        this.realloc(4);\n        this.dataView.setInt32(this.pos, val, true);\n        this.pos += 4;\n    }\n\n    /** @param {number} val */\n    writeFixed64(val) {\n        this.realloc(8);\n        this.dataView.setInt32(this.pos, val & -1, true);\n        this.dataView.setInt32(this.pos + 4, Math.floor(val * SHIFT_RIGHT_32), true);\n        this.pos += 8;\n    }\n\n    /** @param {number} val */\n    writeSFixed64(val) {\n        this.realloc(8);\n        this.dataView.setInt32(this.pos, val & -1, true);\n        this.dataView.setInt32(this.pos + 4, Math.floor(val * SHIFT_RIGHT_32), true);\n        this.pos += 8;\n    }\n\n    /** @param {number} val */\n    writeVarint(val) {\n        val = +val || 0;\n\n        if (val > 0xfffffff || val < 0) {\n            writeBigVarint(val, this);\n            return;\n        }\n\n        this.realloc(4);\n\n        this.buf[this.pos++] =           val & 0x7f  | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] =   (val >>> 7) & 0x7f;\n    }\n\n    /** @param {number} val */\n    writeSVarint(val) {\n        this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);\n    }\n\n    /** @param {boolean} val */\n    writeBoolean(val) {\n        this.writeVarint(+val);\n    }\n\n    /** @param {string} str */\n    writeString(str) {\n        str = String(str);\n        this.realloc(str.length * 4);\n\n        this.pos++; // reserve 1 byte for short string length\n\n        const startPos = this.pos;\n        // write the string directly to the buffer and see how much was written\n        this.pos = writeUtf8(this.buf, str, this.pos);\n        const len = this.pos - startPos;\n\n        if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n        // finally, write the message length in the reserved place and restore the position\n        this.pos = startPos - 1;\n        this.writeVarint(len);\n        this.pos += len;\n    }\n\n    /** @param {number} val */\n    writeFloat(val) {\n        this.realloc(4);\n        this.dataView.setFloat32(this.pos, val, true);\n        this.pos += 4;\n    }\n\n    /** @param {number} val */\n    writeDouble(val) {\n        this.realloc(8);\n        this.dataView.setFloat64(this.pos, val, true);\n        this.pos += 8;\n    }\n\n    /** @param {Uint8Array} buffer */\n    writeBytes(buffer) {\n        const len = buffer.length;\n        this.writeVarint(len);\n        this.realloc(len);\n        for (let i = 0; i < len; i++) this.buf[this.pos++] = buffer[i];\n    }\n\n    /**\n     * @template T\n     * @param {(obj: T, pbf: Pbf) => void} fn\n     * @param {T} obj\n     */\n    writeRawMessage(fn, obj) {\n        this.pos++; // reserve 1 byte for short message length\n\n        // write the message directly to the buffer and see how much was written\n        const startPos = this.pos;\n        fn(obj, this);\n        const len = this.pos - startPos;\n\n        if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n        // finally, write the message length in the reserved place and restore the position\n        this.pos = startPos - 1;\n        this.writeVarint(len);\n        this.pos += len;\n    }\n\n    /**\n     * @template T\n     * @param {number} tag\n     * @param {(obj: T, pbf: Pbf) => void} fn\n     * @param {T} obj\n     */\n    writeMessage(tag, fn, obj) {\n        this.writeTag(tag, PBF_BYTES);\n        this.writeRawMessage(fn, obj);\n    }\n\n    /**\n     * @param {number} tag\n     * @param {number[]} arr\n     */\n    writePackedVarint(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedVarint, arr);\n    }\n    /**\n     * @param {number} tag\n     * @param {number[]} arr\n     */\n    writePackedSVarint(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedSVarint, arr);\n    }\n    /**\n     * @param {number} tag\n     * @param {boolean[]} arr\n     */\n    writePackedBoolean(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedBoolean, arr);\n    }\n    /**\n     * @param {number} tag\n     * @param {number[]} arr\n     */\n    writePackedFloat(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedFloat, arr);\n    }\n    /**\n     * @param {number} tag\n     * @param {number[]} arr\n     */\n    writePackedDouble(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedDouble, arr);\n    }\n    /**\n     * @param {number} tag\n     * @param {number[]} arr\n     */\n    writePackedFixed32(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedFixed32, arr);\n    }\n    /**\n     * @param {number} tag\n     * @param {number[]} arr\n     */\n    writePackedSFixed32(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedSFixed32, arr);\n    }\n    /**\n     * @param {number} tag\n     * @param {number[]} arr\n     */\n    writePackedFixed64(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedFixed64, arr);\n    }\n    /**\n     * @param {number} tag\n     * @param {number[]} arr\n     */\n    writePackedSFixed64(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedSFixed64, arr);\n    }\n\n    /**\n     * @param {number} tag\n     * @param {Uint8Array} buffer\n     */\n    writeBytesField(tag, buffer) {\n        this.writeTag(tag, PBF_BYTES);\n        this.writeBytes(buffer);\n    }\n    /**\n     * @param {number} tag\n     * @param {number} val\n     */\n    writeFixed32Field(tag, val) {\n        this.writeTag(tag, PBF_FIXED32);\n        this.writeFixed32(val);\n    }\n    /**\n     * @param {number} tag\n     * @param {number} val\n     */\n    writeSFixed32Field(tag, val) {\n        this.writeTag(tag, PBF_FIXED32);\n        this.writeSFixed32(val);\n    }\n    /**\n     * @param {number} tag\n     * @param {number} val\n     */\n    writeFixed64Field(tag, val) {\n        this.writeTag(tag, PBF_FIXED64);\n        this.writeFixed64(val);\n    }\n    /**\n     * @param {number} tag\n     * @param {number} val\n     */\n    writeSFixed64Field(tag, val) {\n        this.writeTag(tag, PBF_FIXED64);\n        this.writeSFixed64(val);\n    }\n    /**\n     * @param {number} tag\n     * @param {number} val\n     */\n    writeVarintField(tag, val) {\n        this.writeTag(tag, PBF_VARINT);\n        this.writeVarint(val);\n    }\n    /**\n     * @param {number} tag\n     * @param {number} val\n     */\n    writeSVarintField(tag, val) {\n        this.writeTag(tag, PBF_VARINT);\n        this.writeSVarint(val);\n    }\n    /**\n     * @param {number} tag\n     * @param {string} str\n     */\n    writeStringField(tag, str) {\n        this.writeTag(tag, PBF_BYTES);\n        this.writeString(str);\n    }\n    /**\n     * @param {number} tag\n     * @param {number} val\n     */\n    writeFloatField(tag, val) {\n        this.writeTag(tag, PBF_FIXED32);\n        this.writeFloat(val);\n    }\n    /**\n     * @param {number} tag\n     * @param {number} val\n     */\n    writeDoubleField(tag, val) {\n        this.writeTag(tag, PBF_FIXED64);\n        this.writeDouble(val);\n    }\n    /**\n     * @param {number} tag\n     * @param {boolean} val\n     */\n    writeBooleanField(tag, val) {\n        this.writeVarintField(tag, +val);\n    }\n};\n\n/**\n * @param {number} l\n * @param {boolean | undefined} s\n * @param {Pbf} p\n */\nfunction readVarintRemainder(l, s, p) {\n    const buf = p.buf;\n    let h, b;\n\n    b = buf[p.pos++]; h  = (b & 0x70) >> 4;  if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 3;  if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);\n\n    throw new Error('Expected varint not more than 10 bytes');\n}\n\n/**\n * @param {number} low\n * @param {number} high\n * @param {boolean} [isSigned]\n */\nfunction toNum(low, high, isSigned) {\n    return isSigned ? high * 0x100000000 + (low >>> 0) : ((high >>> 0) * 0x100000000) + (low >>> 0);\n}\n\n/**\n * @param {number} val\n * @param {Pbf} pbf\n */\nfunction writeBigVarint(val, pbf) {\n    let low, high;\n\n    if (val >= 0) {\n        low  = (val % 0x100000000) | 0;\n        high = (val / 0x100000000) | 0;\n    } else {\n        low  = ~(-val % 0x100000000);\n        high = ~(-val / 0x100000000);\n\n        if (low ^ 0xffffffff) {\n            low = (low + 1) | 0;\n        } else {\n            low = 0;\n            high = (high + 1) | 0;\n        }\n    }\n\n    if (val >= 0x10000000000000000 || val < -0x10000000000000000) {\n        throw new Error('Given varint doesn\\'t fit into 10 bytes');\n    }\n\n    pbf.realloc(10);\n\n    writeBigVarintLow(low, high, pbf);\n    writeBigVarintHigh(high, pbf);\n}\n\n/**\n * @param {number} high\n * @param {number} low\n * @param {Pbf} pbf\n */\nfunction writeBigVarintLow(low, high, pbf) {\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos]   = low & 0x7f;\n}\n\n/**\n * @param {number} high\n * @param {Pbf} pbf\n */\nfunction writeBigVarintHigh(high, pbf) {\n    const lsb = (high & 0x07) << 4;\n\n    pbf.buf[pbf.pos++] |= lsb         | ((high >>>= 3) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f;\n}\n\n/**\n * @param {number} startPos\n * @param {number} len\n * @param {Pbf} pbf\n */\nfunction makeRoomForExtraLength(startPos, len, pbf) {\n    const extraLen =\n        len <= 0x3fff ? 1 :\n        len <= 0x1fffff ? 2 :\n        len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7));\n\n    // if 1 byte isn't enough for encoding message length, shift the data to the right\n    pbf.realloc(extraLen);\n    for (let i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i];\n}\n\n/**\n * @param {number[]} arr\n * @param {Pbf} pbf\n */\nfunction writePackedVarint(arr, pbf) {\n    for (let i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]);\n}\n/**\n * @param {number[]} arr\n * @param {Pbf} pbf\n */\nfunction writePackedSVarint(arr, pbf) {\n    for (let i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]);\n}\n/**\n * @param {number[]} arr\n * @param {Pbf} pbf\n */\nfunction writePackedFloat(arr, pbf) {\n    for (let i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]);\n}\n/**\n * @param {number[]} arr\n * @param {Pbf} pbf\n */\nfunction writePackedDouble(arr, pbf) {\n    for (let i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]);\n}\n/**\n * @param {boolean[]} arr\n * @param {Pbf} pbf\n */\nfunction writePackedBoolean(arr, pbf) {\n    for (let i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]);\n}\n/**\n * @param {number[]} arr\n * @param {Pbf} pbf\n */\nfunction writePackedFixed32(arr, pbf) {\n    for (let i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]);\n}\n/**\n * @param {number[]} arr\n * @param {Pbf} pbf\n */\nfunction writePackedSFixed32(arr, pbf) {\n    for (let i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]);\n}\n/**\n * @param {number[]} arr\n * @param {Pbf} pbf\n */\nfunction writePackedFixed64(arr, pbf) {\n    for (let i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]);\n}\n/**\n * @param {number[]} arr\n * @param {Pbf} pbf\n */\nfunction writePackedSFixed64(arr, pbf) {\n    for (let i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]);\n}\n\n// Buffer code below from https://github.com/feross/buffer, MIT-licensed\n\n/**\n * @param {Uint8Array} buf\n * @param {number} pos\n * @param {number} end\n */\nfunction readUtf8(buf, pos, end) {\n    let str = '';\n    let i = pos;\n\n    while (i < end) {\n        const b0 = buf[i];\n        let c = null; // codepoint\n        let bytesPerSequence =\n            b0 > 0xEF ? 4 :\n            b0 > 0xDF ? 3 :\n            b0 > 0xBF ? 2 : 1;\n\n        if (i + bytesPerSequence > end) break;\n\n        let b1, b2, b3;\n\n        if (bytesPerSequence === 1) {\n            if (b0 < 0x80) {\n                c = b0;\n            }\n        } else if (bytesPerSequence === 2) {\n            b1 = buf[i + 1];\n            if ((b1 & 0xC0) === 0x80) {\n                c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);\n                if (c <= 0x7F) {\n                    c = null;\n                }\n            }\n        } else if (bytesPerSequence === 3) {\n            b1 = buf[i + 1];\n            b2 = buf[i + 2];\n            if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {\n                c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);\n                if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {\n                    c = null;\n                }\n            }\n        } else if (bytesPerSequence === 4) {\n            b1 = buf[i + 1];\n            b2 = buf[i + 2];\n            b3 = buf[i + 3];\n            if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n                c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);\n                if (c <= 0xFFFF || c >= 0x110000) {\n                    c = null;\n                }\n            }\n        }\n\n        if (c === null) {\n            c = 0xFFFD;\n            bytesPerSequence = 1;\n\n        } else if (c > 0xFFFF) {\n            c -= 0x10000;\n            str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);\n            c = 0xDC00 | c & 0x3FF;\n        }\n\n        str += String.fromCharCode(c);\n        i += bytesPerSequence;\n    }\n\n    return str;\n}\n\n/**\n * @param {Uint8Array} buf\n * @param {string} str\n * @param {number} pos\n */\nfunction writeUtf8(buf, str, pos) {\n    for (let i = 0, c, lead; i < str.length; i++) {\n        c = str.charCodeAt(i); // code point\n\n        if (c > 0xD7FF && c < 0xE000) {\n            if (lead) {\n                if (c < 0xDC00) {\n                    buf[pos++] = 0xEF;\n                    buf[pos++] = 0xBF;\n                    buf[pos++] = 0xBD;\n                    lead = c;\n                    continue;\n                } else {\n                    c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;\n                    lead = null;\n                }\n            } else {\n                if (c > 0xDBFF || (i + 1 === str.length)) {\n                    buf[pos++] = 0xEF;\n                    buf[pos++] = 0xBF;\n                    buf[pos++] = 0xBD;\n                } else {\n                    lead = c;\n                }\n                continue;\n            }\n        } else if (lead) {\n            buf[pos++] = 0xEF;\n            buf[pos++] = 0xBF;\n            buf[pos++] = 0xBD;\n            lead = null;\n        }\n\n        if (c < 0x80) {\n            buf[pos++] = c;\n        } else {\n            if (c < 0x800) {\n                buf[pos++] = c >> 0x6 | 0xC0;\n            } else {\n                if (c < 0x10000) {\n                    buf[pos++] = c >> 0xC | 0xE0;\n                } else {\n                    buf[pos++] = c >> 0x12 | 0xF0;\n                    buf[pos++] = c >> 0xC & 0x3F | 0x80;\n                }\n                buf[pos++] = c >> 0x6 & 0x3F | 0x80;\n            }\n            buf[pos++] = c & 0x3F | 0x80;\n        }\n    }\n    return pos;\n}\n","// code generated by pbf v4.0.1\n\nexport function readLog(pbf, end) {\n    return pbf.readFields(readLogField, {Time: 0, Contents: [], TimeNs: 0}, end);\n}\nfunction readLogField(tag, obj, pbf) {\n    if (tag === 1) obj.Time = pbf.readVarint();\n    else if (tag === 2) obj.Contents.push(readLogContent(pbf, pbf.readVarint() + pbf.pos));\n    else if (tag === 4) obj.TimeNs = pbf.readFixed32();\n}\nexport function writeLog(obj, pbf) {\n    if (obj.Time) pbf.writeVarintField(1, obj.Time);\n    if (obj.Contents) for (const item of obj.Contents) pbf.writeMessage(2, writeLogContent, item);\n    if (obj.TimeNs) pbf.writeFixed32Field(4, obj.TimeNs);\n}\n\nexport function readLogContent(pbf, end) {\n    return pbf.readFields(readLogContentField, {Key: \"\", Value: \"\"}, end);\n}\nfunction readLogContentField(tag, obj, pbf) {\n    if (tag === 1) obj.Key = pbf.readString();\n    else if (tag === 2) obj.Value = pbf.readString();\n}\nexport function writeLogContent(obj, pbf) {\n    if (obj.Key) pbf.writeStringField(1, obj.Key);\n    if (obj.Value) pbf.writeStringField(2, obj.Value);\n}\n\nexport function readLogTag(pbf, end) {\n    return pbf.readFields(readLogTagField, {Key: \"\", Value: \"\"}, end);\n}\nfunction readLogTagField(tag, obj, pbf) {\n    if (tag === 1) obj.Key = pbf.readString();\n    else if (tag === 2) obj.Value = pbf.readString();\n}\nexport function writeLogTag(obj, pbf) {\n    if (obj.Key) pbf.writeStringField(1, obj.Key);\n    if (obj.Value) pbf.writeStringField(2, obj.Value);\n}\n\nexport function readLogGroup(pbf, end) {\n    return pbf.readFields(readLogGroupField, {Logs: [], Reserved: \"\", Topic: \"\", Source: \"\", LogTags: []}, end);\n}\nfunction readLogGroupField(tag, obj, pbf) {\n    if (tag === 1) obj.Logs.push(readLog(pbf, pbf.readVarint() + pbf.pos));\n    else if (tag === 2) obj.Reserved = pbf.readString();\n    else if (tag === 3) obj.Topic = pbf.readString();\n    else if (tag === 4) obj.Source = pbf.readString();\n    else if (tag === 6) obj.LogTags.push(readLogTag(pbf, pbf.readVarint() + pbf.pos));\n}\nexport function writeLogGroup(obj, pbf) {\n    if (obj.Logs) for (const item of obj.Logs) pbf.writeMessage(1, writeLog, item);\n    if (obj.Reserved) pbf.writeStringField(2, obj.Reserved);\n    if (obj.Topic) pbf.writeStringField(3, obj.Topic);\n    if (obj.Source) pbf.writeStringField(4, obj.Source);\n    if (obj.LogTags) for (const item of obj.LogTags) pbf.writeMessage(6, writeLogTag, item);\n}\n\nexport function readLogGroupList(pbf, end) {\n    return pbf.readFields(readLogGroupListField, {logGroupList: []}, end);\n}\nfunction readLogGroupListField(tag, obj, pbf) {\n    if (tag === 1) obj.logGroupList.push(readLogGroup(pbf, pbf.readVarint() + pbf.pos));\n}\nexport function writeLogGroupList(obj, pbf) {\n    if (obj.logGroupList) for (const item of obj.logGroupList) pbf.writeMessage(1, writeLogGroup, item);\n}\n","import crypto from 'crypto';\nimport { gunzipSync } from 'fflate'\nimport Pbf from 'pbf';\nimport { readLogGroup } from './sls';\n\n/**\n * 解码日志数据\n * @param {Uint8Array} payload - 已经序列化的日志数据\n * @returns {Object} - 解码后的日志对象\n */\nexport const decodeLogs = (payload) => {\n  const body = gunzipSync(payload);\n  const pbf = new Pbf(body);\n  const logGroup = readLogGroup(pbf);\n  return logGroup;\n};\n\n/**\n * 创建阿里云日志服务客户端\n * @param {string} endpoint - 服务入口，例如 \"ap-southeast-1.log.aliyuncs.com\"\n * @param {string} accessKeyId - 阿里云访问密钥ID\n * @param {string} accessKeySecret - 阿里云访问密钥密码\n * @param {string} projectName - 项目名称\n * @param {string} logstoreName - 日志库名称\n * @returns {Function} - 返回一个用于发送日志的函数\n */\nexport const createLogClient = (endpoint, accessKeyId, accessKeySecret, projectName, logstoreName) => {\n  const credentials = {\n    accessKeyId,\n    accessKeySecret,\n  };\n\n  /**\n   * 获取规范化的头信息\n   * @param {Object} headers - 请求头\n   * @returns {string} - 规范化的头信息字符串\n   */\n  function getCanonicalizedHeaders(headers) {\n    const keys = Object.keys(headers);\n    const prefixKeys = [];\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i];\n      if (key.startsWith('x-log-') || key.startsWith('x-acs-')) {\n        prefixKeys.push(key);\n      }\n    }\n\n    prefixKeys.sort();\n\n    var result = '';\n    for (let i = 0; i < prefixKeys.length; i++) {\n      const key = prefixKeys[i];\n      result += `${key}:${String(headers[key]).trim()}\\n`;\n    }\n\n    return result;\n  }\n\n  /**\n   * 格式化值\n   * @param {*} value - 需要格式化的值\n   * @returns {string} - 格式化后的字符串\n   */\n  function format(value) {\n    if (typeof value === 'undefined') {\n      return '';\n    }\n    return String(value);\n  }\n\n  /**\n   * 获取规范化的资源路径\n   * @param {string} path - 请求路径\n   * @param {Object} queries - 查询参数\n   * @returns {string} - 规范化的资源路径\n   */\n  function getCanonicalizedResource(path, queries) {\n    var resource = `${path}`;\n    const keys = Object.keys(queries);\n    const pairs = new Array(keys.length);\n    for (var i = 0; i < keys.length; i++) {\n      const key = keys[i];\n      pairs[i] = `${key}=${format(queries[key])}`;\n    }\n\n    pairs.sort();\n    const querystring = pairs.join('&');\n    if (querystring) {\n      resource += `?${querystring}`;\n    }\n\n    return resource;\n  }\n\n  /**\n   * 生成签名\n   * @param {string} verb - 请求方法\n   * @param {string} path - 请求路径\n   * @param {Object} queries - 查询参数\n   * @param {Object} headers - 请求头\n   * @param {Object} credentials - 认证信息\n   * @returns {string} - 签名字符串\n   */\n  const sign = (verb, path, queries, headers, credentials) => {\n    const contentMD5 = headers['content-md5'] || '';\n    const contentType = headers['content-type'] || '';\n    const date = headers['date'];\n    const canonicalizedHeaders = getCanonicalizedHeaders(headers);\n    const canonicalizedResource = getCanonicalizedResource(path, queries);\n    const signString = `${verb}\\n${contentMD5}\\n${contentType}\\n` +\n      `${date}\\n${canonicalizedHeaders}${canonicalizedResource}`;\n    const signature = crypto.createHmac('sha1', credentials.accessKeySecret).update(signString).digest('base64');\n\n    return `LOG ${credentials.accessKeyId}:${signature}`;\n  }\n\n  /**\n   * 发送序列化后的日志数据\n   * @param {Uint8Array} payload - 已经序列化的日志数据\n   * @returns {Promise<Object>} - 响应结果\n   */\n  return async function sendLogs(payload) {\n    const body = gunzipSync(payload);\n    // 构建完整的请求头\n    const headers = {\n      'content-type': 'application/x-protobuf',\n      'date': new Date().toUTCString(),\n      'x-log-apiversion': '0.6.0',\n      'x-log-signaturemethod': 'hmac-sha1',\n      'x-log-bodyrawsize': body.length.toString(),\n      'content-length': body.length.toString(),\n      'content-md5': crypto.createHash('md5').update(body).digest('hex').toUpperCase(),\n    };\n    \n    // 构建请求路径\n    const path = `/logstores/${logstoreName}/shards/lb`;\n    \n    // 生成签名并添加到请求头\n    const signature = sign('POST', path, {}, headers, credentials);\n    headers['authorization'] = signature;\n    \n    // 构建完整的请求 URL\n    const url = `http://${projectName}.${endpoint}${path}`;\n    \n    // 发送请求\n    const response = await fetch(url, {\n      method: 'POST',\n      headers,\n      body: body\n    });\n    return response;\n  };\n};\n"],"names":["u8","Uint8Array","u16","Uint16Array","i32","Int32Array","fleb","fdeb","clim","freb","eb","start","b","i","r","j","_a","fl","revfl","fd","rev","x","hMap","cd","mb","s","length","l","co","le","rvb","sv","r_1","v","m","flt","fdt","flrm","fdrm","max","a","bits","d","p","o","bits16","ec","err","ind","msg","nt","e","Error","code","captureStackTrace","inflt","dat","st","buf","dict","sl","dl","f","noBuf","resize","noSt","cbuf","bl","nbuf","Math","set","final","pos","bt","lm","dm","lbt","dbt","n","tbts","type","t","subarray","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","c","lt","dt","lms","dms","lpos","sym","add","dsym","end","shift","dend","min","slc","et","gunzipSync","data","opts","flg","zs","gzs","out","dictionary","td","TextDecoder","decode","stream","utf8TextDecoder","Pbf","constructor","this","ArrayBuffer","isView","dataView","DataView","buffer","readFields","readField","result","val","readVarint","tag","startPos","skip","readMessage","readFixed32","getUint32","readSFixed32","getInt32","readFixed64","readSFixed64","readFloat","getFloat32","readDouble","getFloat64","isSigned","h","toNum","readVarintRemainder","readVarint64","readSVarint","num","readBoolean","Boolean","readString","str","b0","b1","b2","b3","bytesPerSequence","String","fromCharCode","readUtf8","readBytes","readPackedVarint","arr","readPackedEnd","push","readPackedSVarint","readPackedBoolean","readPackedFloat","readPackedDouble","readPackedFixed32","readPackedSFixed32","readPackedFixed64","readPackedSFixed64","writeTag","writeVarint","realloc","finish","writeFixed32","setInt32","writeSFixed32","writeFixed64","floor","writeSFixed64","pbf","low","high","writeBigVarintLow","lsb","writeBigVarintHigh","writeBigVarint","writeSVarint","writeBoolean","writeString","lead","charCodeAt","writeUtf8","len","makeRoomForExtraLength","writeFloat","setFloat32","writeDouble","setFloat64","writeBytes","writeRawMessage","fn","obj","writeMessage","writePackedVarint","writePackedSVarint","writePackedBoolean","writePackedFloat","writePackedDouble","writePackedFixed32","writePackedSFixed32","writePackedFixed64","writePackedSFixed64","writeBytesField","writeFixed32Field","writeSFixed32Field","writeFixed64Field","writeSFixed64Field","writeVarintField","writeSVarintField","writeStringField","writeFloatField","writeDoubleField","writeBooleanField","extraLen","log","LN2","readLogField","Time","Contents","readLogContentField","Key","Value","readLogContent","TimeNs","readLogTagField","readLogGroupField","Logs","readLog","Reserved","Topic","Source","LogTags","readLogTag","endpoint","accessKeyId","accessKeySecret","projectName","logstoreName","credentials","sign","verb","path","queries","headers","contentMD5","contentType","date","canonicalizedHeaders","keys","Object","prefixKeys","key","startsWith","sort","trim","getCanonicalizedHeaders","canonicalizedResource","resource","pairs","Array","value","querystring","join","getCanonicalizedResource","signString","signature","crypto","createHmac","update","digest","async","payload","body","Date","toUTCString","toString","createHash","toUpperCase","url","fetch","method","logGroup","readLogGroup"],"mappings":"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","x_google_ignoreList":[0,1]}