brs-js 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.js +5 -5
- package/dist/dist.js.map +1 -1
- package/dist/dist.mjs +6523 -303
- package/dist/dist.mjs.map +1 -1
- package/dist/dist.node.js +5 -5
- package/dist/dist.node.js.map +1 -1
- package/dist/dist.web.js +5 -5
- package/dist/dist.web.js.map +1 -1
- package/dist/src/brdb/catalog.d.ts +410 -0
- package/dist/src/brdb/catalog.d.ts.map +1 -1
- package/dist/src/brdb/componentDb.d.ts +3036 -0
- package/dist/src/brdb/componentDb.d.ts.map +1 -1
- package/dist/src/brdb/componentTypes.d.ts +1591 -0
- package/dist/src/brdb/componentTypes.d.ts.map +1 -0
- package/dist/src/brdb/index.d.ts +4 -1
- package/dist/src/brdb/index.d.ts.map +1 -1
- package/dist/src/brdb/msgpack.d.ts.map +1 -1
- package/dist/src/brdb/schema.d.ts +4 -2
- package/dist/src/brdb/schema.d.ts.map +1 -1
- package/dist/src/brdb/world.d.ts +19 -6
- package/dist/src/brdb/world.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/dist.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dist.js","names":["err","u8","u8"],"sources":["../src/brs/constants.ts","../node_modules/pako/dist/pako.mjs","../src/uuid.ts","../src/brs/utils.ts","../src/brs/read.v1.ts","../src/brs/read.v10.ts","../src/brs/read.v14.ts","../src/brs/read.v2.ts","../src/brs/read.v3.ts","../src/brs/read.v4.ts","../src/brs/read.v8.ts","../src/brs/read.v9.ts","../src/brs/read.ts","../src/brs/write.ts","../src/brs/types.ts","../src/brdb/bits.ts","../node_modules/@noble/hashes/utils.js","../node_modules/@noble/hashes/_md.js","../node_modules/@noble/hashes/_u64.js","../node_modules/@noble/hashes/_blake.js","../node_modules/@noble/hashes/blake2.js","../node_modules/@noble/hashes/blake3.js","../node_modules/fzstd/esm/index.mjs","../src/brdb/bytes.ts","../src/brdb/brz.ts","../src/brdb/catalog.ts","../src/brdb/componentDb.ts","../src/brdb/guid.ts","../src/brdb/pending.ts","../src/brdb/msgpack.ts","../src/brdb/schemaText.ts","../src/brdb/schemas.ts","../src/brdb/schema.ts","../src/brdb/world.ts","../src/brdb/reader.ts","../src/brdb/brdb.ts","../src/brdb/index.ts","../src/index.ts"],"sourcesContent":["import { Uuid } from './types';\n\nexport const MAGIC = new Uint8Array([66, 82, 83]); // BRS\nexport const LATEST_VERSION = 14;\nexport const MAX_INT = ~(1 << 31);\nexport const DEFAULT_UUID: Uuid = '00000000-0000-0000-0000-000000000000';\n","//#region src/zlib/trees.mjs\nvar Z_FIXED = 4;\nvar Z_BINARY = 0;\nvar Z_TEXT = 1;\nvar Z_UNKNOWN = 2;\nfunction zero$1(buf) {\n\tlet len = buf.length;\n\twhile (--len >= 0) buf[len] = 0;\n}\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\nvar LENGTH_CODES = 29;\nvar LITERALS = 256;\nvar L_CODES = 286;\nvar D_CODES = 30;\nvar BL_CODES = 19;\nvar HEAP_SIZE$1 = 573;\nvar MAX_BITS = 15;\nvar Buf_size = 16;\nvar MAX_BL_BITS = 7;\nvar END_BLOCK = 256;\nvar REP_3_6 = 16;\nvar REPZ_3_10 = 17;\nvar REPZ_11_138 = 18;\nvar extra_lbits = new Uint8Array([\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t1,\n\t1,\n\t1,\n\t1,\n\t2,\n\t2,\n\t2,\n\t2,\n\t3,\n\t3,\n\t3,\n\t3,\n\t4,\n\t4,\n\t4,\n\t4,\n\t5,\n\t5,\n\t5,\n\t5,\n\t0\n]);\nvar extra_dbits = new Uint8Array([\n\t0,\n\t0,\n\t0,\n\t0,\n\t1,\n\t1,\n\t2,\n\t2,\n\t3,\n\t3,\n\t4,\n\t4,\n\t5,\n\t5,\n\t6,\n\t6,\n\t7,\n\t7,\n\t8,\n\t8,\n\t9,\n\t9,\n\t10,\n\t10,\n\t11,\n\t11,\n\t12,\n\t12,\n\t13,\n\t13\n]);\nvar extra_blbits = new Uint8Array([\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t2,\n\t3,\n\t7\n]);\nvar bl_order = new Uint8Array([\n\t16,\n\t17,\n\t18,\n\t0,\n\t8,\n\t7,\n\t9,\n\t6,\n\t10,\n\t5,\n\t11,\n\t4,\n\t12,\n\t3,\n\t13,\n\t2,\n\t14,\n\t1,\n\t15\n]);\nvar DIST_CODE_LEN = 512;\nvar static_ltree = new Array(288 * 2);\nzero$1(static_ltree);\nvar static_dtree = new Array(D_CODES * 2);\nzero$1(static_dtree);\nvar _dist_code = new Array(DIST_CODE_LEN);\nzero$1(_dist_code);\nvar _length_code = new Array(256);\nzero$1(_length_code);\nvar base_length = new Array(LENGTH_CODES);\nzero$1(base_length);\nvar base_dist = new Array(D_CODES);\nzero$1(base_dist);\nvar StaticTreeDesc = class {\n\tconstructor(static_tree, extra_bits, extra_base, elems, max_length) {\n\t\tthis.static_tree = static_tree;\n\t\tthis.extra_bits = extra_bits;\n\t\tthis.extra_base = extra_base;\n\t\tthis.elems = elems;\n\t\tthis.max_length = max_length;\n\t\tthis.has_stree = static_tree && static_tree.length;\n\t}\n};\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\nvar TreeDesc = class {\n\tconstructor(dyn_tree, stat_desc) {\n\t\tthis.dyn_tree = dyn_tree;\n\t\tthis.max_code = 0;\n\t\tthis.stat_desc = stat_desc;\n\t}\n};\nvar d_code = (dist) => {\n\treturn dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n};\nvar put_short = (s, w) => {\n\ts.pending_buf[s.pending++] = w & 255;\n\ts.pending_buf[s.pending++] = w >>> 8 & 255;\n};\nvar send_bits = (s, value, length) => {\n\tif (s.bi_valid > Buf_size - length) {\n\t\ts.bi_buf |= value << s.bi_valid & 65535;\n\t\tput_short(s, s.bi_buf);\n\t\ts.bi_buf = value >> Buf_size - s.bi_valid;\n\t\ts.bi_valid += length - Buf_size;\n\t} else {\n\t\ts.bi_buf |= value << s.bi_valid & 65535;\n\t\ts.bi_valid += length;\n\t}\n};\nvar send_code = (s, c, tree) => {\n\tsend_bits(s, tree[c * 2], tree[c * 2 + 1]);\n};\nvar bi_reverse = (code, len) => {\n\tlet res = 0;\n\tdo {\n\t\tres |= code & 1;\n\t\tcode >>>= 1;\n\t\tres <<= 1;\n\t} while (--len > 0);\n\treturn res >>> 1;\n};\nvar bi_flush = (s) => {\n\tif (s.bi_valid === 16) {\n\t\tput_short(s, s.bi_buf);\n\t\ts.bi_buf = 0;\n\t\ts.bi_valid = 0;\n\t} else if (s.bi_valid >= 8) {\n\t\ts.pending_buf[s.pending++] = s.bi_buf & 255;\n\t\ts.bi_buf >>= 8;\n\t\ts.bi_valid -= 8;\n\t}\n};\nvar gen_bitlen = (s, desc) => {\n\tconst tree = desc.dyn_tree;\n\tconst max_code = desc.max_code;\n\tconst stree = desc.stat_desc.static_tree;\n\tconst has_stree = desc.stat_desc.has_stree;\n\tconst extra = desc.stat_desc.extra_bits;\n\tconst base = desc.stat_desc.extra_base;\n\tconst max_length = desc.stat_desc.max_length;\n\tlet h;\n\tlet n, m;\n\tlet bits;\n\tlet xbits;\n\tlet f;\n\tlet overflow = 0;\n\tfor (bits = 0; bits <= MAX_BITS; bits++) s.bl_count[bits] = 0;\n\ttree[s.heap[s.heap_max] * 2 + 1] = 0;\n\tfor (h = s.heap_max + 1; h < HEAP_SIZE$1; h++) {\n\t\tn = s.heap[h];\n\t\tbits = tree[tree[n * 2 + 1] * 2 + 1] + 1;\n\t\tif (bits > max_length) {\n\t\t\tbits = max_length;\n\t\t\toverflow++;\n\t\t}\n\t\ttree[n * 2 + 1] = bits;\n\t\tif (n > max_code) continue;\n\t\ts.bl_count[bits]++;\n\t\txbits = 0;\n\t\tif (n >= base) xbits = extra[n - base];\n\t\tf = tree[n * 2];\n\t\ts.opt_len += f * (bits + xbits);\n\t\tif (has_stree) s.static_len += f * (stree[n * 2 + 1] + xbits);\n\t}\n\tif (overflow === 0) return;\n\tdo {\n\t\tbits = max_length - 1;\n\t\twhile (s.bl_count[bits] === 0) bits--;\n\t\ts.bl_count[bits]--;\n\t\ts.bl_count[bits + 1] += 2;\n\t\ts.bl_count[max_length]--;\n\t\toverflow -= 2;\n\t} while (overflow > 0);\n\tfor (bits = max_length; bits !== 0; bits--) {\n\t\tn = s.bl_count[bits];\n\t\twhile (n !== 0) {\n\t\t\tm = s.heap[--h];\n\t\t\tif (m > max_code) continue;\n\t\t\tif (tree[m * 2 + 1] !== bits) {\n\t\t\t\ts.opt_len += (bits - tree[m * 2 + 1]) * tree[m * 2];\n\t\t\t\ttree[m * 2 + 1] = bits;\n\t\t\t}\n\t\t\tn--;\n\t\t}\n\t}\n};\nvar gen_codes = (tree, max_code, bl_count) => {\n\tconst next_code = new Array(16);\n\tlet code = 0;\n\tlet bits;\n\tlet n;\n\tfor (bits = 1; bits <= MAX_BITS; bits++) {\n\t\tcode = code + bl_count[bits - 1] << 1;\n\t\tnext_code[bits] = code;\n\t}\n\tfor (n = 0; n <= max_code; n++) {\n\t\tlet len = tree[n * 2 + 1];\n\t\tif (len === 0) continue;\n\t\ttree[n * 2] = bi_reverse(next_code[len]++, len);\n\t}\n};\nvar tr_static_init = () => {\n\tlet n;\n\tlet bits;\n\tlet length;\n\tlet code;\n\tlet dist;\n\tconst bl_count = new Array(16);\n\tlength = 0;\n\tfor (code = 0; code < LENGTH_CODES - 1; code++) {\n\t\tbase_length[code] = length;\n\t\tfor (n = 0; n < 1 << extra_lbits[code]; n++) _length_code[length++] = code;\n\t}\n\t_length_code[length - 1] = code;\n\tdist = 0;\n\tfor (code = 0; code < 16; code++) {\n\t\tbase_dist[code] = dist;\n\t\tfor (n = 0; n < 1 << extra_dbits[code]; n++) _dist_code[dist++] = code;\n\t}\n\tdist >>= 7;\n\tfor (; code < D_CODES; code++) {\n\t\tbase_dist[code] = dist << 7;\n\t\tfor (n = 0; n < 1 << extra_dbits[code] - 7; n++) _dist_code[256 + dist++] = code;\n\t}\n\tfor (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;\n\tn = 0;\n\twhile (n <= 143) {\n\t\tstatic_ltree[n * 2 + 1] = 8;\n\t\tn++;\n\t\tbl_count[8]++;\n\t}\n\twhile (n <= 255) {\n\t\tstatic_ltree[n * 2 + 1] = 9;\n\t\tn++;\n\t\tbl_count[9]++;\n\t}\n\twhile (n <= 279) {\n\t\tstatic_ltree[n * 2 + 1] = 7;\n\t\tn++;\n\t\tbl_count[7]++;\n\t}\n\twhile (n <= 287) {\n\t\tstatic_ltree[n * 2 + 1] = 8;\n\t\tn++;\n\t\tbl_count[8]++;\n\t}\n\tgen_codes(static_ltree, 287, bl_count);\n\tfor (n = 0; n < D_CODES; n++) {\n\t\tstatic_dtree[n * 2 + 1] = 5;\n\t\tstatic_dtree[n * 2] = bi_reverse(n, 5);\n\t}\n\tstatic_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, 257, L_CODES, MAX_BITS);\n\tstatic_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n\tstatic_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n};\nvar init_block = (s) => {\n\tlet n;\n\tfor (n = 0; n < L_CODES; n++) s.dyn_ltree[n * 2] = 0;\n\tfor (n = 0; n < D_CODES; n++) s.dyn_dtree[n * 2] = 0;\n\tfor (n = 0; n < BL_CODES; n++) s.bl_tree[n * 2] = 0;\n\ts.dyn_ltree[END_BLOCK * 2] = 1;\n\ts.opt_len = s.static_len = 0;\n\ts.sym_next = s.matches = 0;\n};\nvar bi_windup = (s) => {\n\tif (s.bi_valid > 8) put_short(s, s.bi_buf);\n\telse if (s.bi_valid > 0) s.pending_buf[s.pending++] = s.bi_buf;\n\ts.bi_buf = 0;\n\ts.bi_valid = 0;\n};\nvar smaller = (tree, n, m, depth) => {\n\tconst _n2 = n * 2;\n\tconst _m2 = m * 2;\n\treturn tree[_n2] < tree[_m2] || tree[_n2] === tree[_m2] && depth[n] <= depth[m];\n};\nvar pqdownheap = (s, tree, k) => {\n\tconst v = s.heap[k];\n\tlet j = k << 1;\n\twhile (j <= s.heap_len) {\n\t\tif (j < s.heap_len && smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) j++;\n\t\tif (smaller(tree, v, s.heap[j], s.depth)) break;\n\t\ts.heap[k] = s.heap[j];\n\t\tk = j;\n\t\tj <<= 1;\n\t}\n\ts.heap[k] = v;\n};\nvar compress_block = (s, ltree, dtree) => {\n\tlet dist;\n\tlet lc;\n\tlet sx = 0;\n\tlet code;\n\tlet extra;\n\tif (s.sym_next !== 0) do {\n\t\tdist = s.pending_buf[s.sym_buf + sx++] & 255;\n\t\tdist += (s.pending_buf[s.sym_buf + sx++] & 255) << 8;\n\t\tlc = s.pending_buf[s.sym_buf + sx++];\n\t\tif (dist === 0) send_code(s, lc, ltree);\n\t\telse {\n\t\t\tcode = _length_code[lc];\n\t\t\tsend_code(s, code + LITERALS + 1, ltree);\n\t\t\textra = extra_lbits[code];\n\t\t\tif (extra !== 0) {\n\t\t\t\tlc -= base_length[code];\n\t\t\t\tsend_bits(s, lc, extra);\n\t\t\t}\n\t\t\tdist--;\n\t\t\tcode = d_code(dist);\n\t\t\tsend_code(s, code, dtree);\n\t\t\textra = extra_dbits[code];\n\t\t\tif (extra !== 0) {\n\t\t\t\tdist -= base_dist[code];\n\t\t\t\tsend_bits(s, dist, extra);\n\t\t\t}\n\t\t}\n\t} while (sx < s.sym_next);\n\tsend_code(s, END_BLOCK, ltree);\n};\nvar build_tree = (s, desc) => {\n\tconst tree = desc.dyn_tree;\n\tconst stree = desc.stat_desc.static_tree;\n\tconst has_stree = desc.stat_desc.has_stree;\n\tconst elems = desc.stat_desc.elems;\n\tlet n, m;\n\tlet max_code = -1;\n\tlet node;\n\ts.heap_len = 0;\n\ts.heap_max = HEAP_SIZE$1;\n\tfor (n = 0; n < elems; n++) if (tree[n * 2] !== 0) {\n\t\ts.heap[++s.heap_len] = max_code = n;\n\t\ts.depth[n] = 0;\n\t} else tree[n * 2 + 1] = 0;\n\twhile (s.heap_len < 2) {\n\t\tnode = s.heap[++s.heap_len] = max_code < 2 ? ++max_code : 0;\n\t\ttree[node * 2] = 1;\n\t\ts.depth[node] = 0;\n\t\ts.opt_len--;\n\t\tif (has_stree) s.static_len -= stree[node * 2 + 1];\n\t}\n\tdesc.max_code = max_code;\n\tfor (n = s.heap_len >> 1; n >= 1; n--) pqdownheap(s, tree, n);\n\tnode = elems;\n\tdo {\n\t\t/*** pqremove ***/\n\t\tn = s.heap[1];\n\t\ts.heap[1] = s.heap[s.heap_len--];\n\t\tpqdownheap(s, tree, 1);\n\t\tm = s.heap[1];\n\t\ts.heap[--s.heap_max] = n;\n\t\ts.heap[--s.heap_max] = m;\n\t\ttree[node * 2] = tree[n * 2] + tree[m * 2];\n\t\ts.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n\t\ttree[n * 2 + 1] = tree[m * 2 + 1] = node;\n\t\ts.heap[1] = node++;\n\t\tpqdownheap(s, tree, 1);\n\t} while (s.heap_len >= 2);\n\ts.heap[--s.heap_max] = s.heap[1];\n\tgen_bitlen(s, desc);\n\tgen_codes(tree, max_code, s.bl_count);\n};\nvar scan_tree = (s, tree, max_code) => {\n\tlet n;\n\tlet prevlen = -1;\n\tlet curlen;\n\tlet nextlen = tree[1];\n\tlet count = 0;\n\tlet max_count = 7;\n\tlet min_count = 4;\n\tif (nextlen === 0) {\n\t\tmax_count = 138;\n\t\tmin_count = 3;\n\t}\n\ttree[(max_code + 1) * 2 + 1] = 65535;\n\tfor (n = 0; n <= max_code; n++) {\n\t\tcurlen = nextlen;\n\t\tnextlen = tree[(n + 1) * 2 + 1];\n\t\tif (++count < max_count && curlen === nextlen) continue;\n\t\telse if (count < min_count) s.bl_tree[curlen * 2] += count;\n\t\telse if (curlen !== 0) {\n\t\t\tif (curlen !== prevlen) s.bl_tree[curlen * 2]++;\n\t\t\ts.bl_tree[REP_3_6 * 2]++;\n\t\t} else if (count <= 10) s.bl_tree[REPZ_3_10 * 2]++;\n\t\telse s.bl_tree[REPZ_11_138 * 2]++;\n\t\tcount = 0;\n\t\tprevlen = curlen;\n\t\tif (nextlen === 0) {\n\t\t\tmax_count = 138;\n\t\t\tmin_count = 3;\n\t\t} else if (curlen === nextlen) {\n\t\t\tmax_count = 6;\n\t\t\tmin_count = 3;\n\t\t} else {\n\t\t\tmax_count = 7;\n\t\t\tmin_count = 4;\n\t\t}\n\t}\n};\nvar send_tree = (s, tree, max_code) => {\n\tlet n;\n\tlet prevlen = -1;\n\tlet curlen;\n\tlet nextlen = tree[1];\n\tlet count = 0;\n\tlet max_count = 7;\n\tlet min_count = 4;\n\tif (nextlen === 0) {\n\t\tmax_count = 138;\n\t\tmin_count = 3;\n\t}\n\tfor (n = 0; n <= max_code; n++) {\n\t\tcurlen = nextlen;\n\t\tnextlen = tree[(n + 1) * 2 + 1];\n\t\tif (++count < max_count && curlen === nextlen) continue;\n\t\telse if (count < min_count) do\n\t\t\tsend_code(s, curlen, s.bl_tree);\n\t\twhile (--count !== 0);\n\t\telse if (curlen !== 0) {\n\t\t\tif (curlen !== prevlen) {\n\t\t\t\tsend_code(s, curlen, s.bl_tree);\n\t\t\t\tcount--;\n\t\t\t}\n\t\t\tsend_code(s, REP_3_6, s.bl_tree);\n\t\t\tsend_bits(s, count - 3, 2);\n\t\t} else if (count <= 10) {\n\t\t\tsend_code(s, REPZ_3_10, s.bl_tree);\n\t\t\tsend_bits(s, count - 3, 3);\n\t\t} else {\n\t\t\tsend_code(s, REPZ_11_138, s.bl_tree);\n\t\t\tsend_bits(s, count - 11, 7);\n\t\t}\n\t\tcount = 0;\n\t\tprevlen = curlen;\n\t\tif (nextlen === 0) {\n\t\t\tmax_count = 138;\n\t\t\tmin_count = 3;\n\t\t} else if (curlen === nextlen) {\n\t\t\tmax_count = 6;\n\t\t\tmin_count = 3;\n\t\t} else {\n\t\t\tmax_count = 7;\n\t\t\tmin_count = 4;\n\t\t}\n\t}\n};\nvar build_bl_tree = (s) => {\n\tlet max_blindex;\n\tscan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n\tscan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\tbuild_tree(s, s.bl_desc);\n\tfor (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) if (s.bl_tree[bl_order[max_blindex] * 2 + 1] !== 0) break;\n\ts.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n\treturn max_blindex;\n};\nvar send_all_trees = (s, lcodes, dcodes, blcodes) => {\n\tlet rank;\n\tsend_bits(s, lcodes - 257, 5);\n\tsend_bits(s, dcodes - 1, 5);\n\tsend_bits(s, blcodes - 4, 4);\n\tfor (rank = 0; rank < blcodes; rank++) send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1], 3);\n\tsend_tree(s, s.dyn_ltree, lcodes - 1);\n\tsend_tree(s, s.dyn_dtree, dcodes - 1);\n};\nvar detect_data_type = (s) => {\n\tlet block_mask = 4093624447;\n\tlet n;\n\tfor (n = 0; n <= 31; n++, block_mask >>>= 1) if (block_mask & 1 && s.dyn_ltree[n * 2] !== 0) return Z_BINARY;\n\tif (s.dyn_ltree[18] !== 0 || s.dyn_ltree[20] !== 0 || s.dyn_ltree[26] !== 0) return Z_TEXT;\n\tfor (n = 32; n < LITERALS; n++) if (s.dyn_ltree[n * 2] !== 0) return Z_TEXT;\n\treturn Z_BINARY;\n};\nvar static_init_done = false;\nvar _tr_init = (s) => {\n\tif (!static_init_done) {\n\t\ttr_static_init();\n\t\tstatic_init_done = true;\n\t}\n\ts.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n\ts.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n\ts.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\ts.bi_buf = 0;\n\ts.bi_valid = 0;\n\tinit_block(s);\n};\nvar _tr_stored_block = (s, buf, stored_len, last) => {\n\tsend_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);\n\tbi_windup(s);\n\tput_short(s, stored_len);\n\tput_short(s, ~stored_len);\n\tif (stored_len) s.pending_buf.set(s.window.subarray(buf, buf + stored_len), s.pending);\n\ts.pending += stored_len;\n};\nvar _tr_align = (s) => {\n\tsend_bits(s, STATIC_TREES << 1, 3);\n\tsend_code(s, END_BLOCK, static_ltree);\n\tbi_flush(s);\n};\nvar _tr_flush_block = (s, buf, stored_len, last) => {\n\tlet opt_lenb, static_lenb;\n\tlet max_blindex = 0;\n\tif (s.level > 0) {\n\t\tif (s.strm.data_type === Z_UNKNOWN) s.strm.data_type = detect_data_type(s);\n\t\tbuild_tree(s, s.l_desc);\n\t\tbuild_tree(s, s.d_desc);\n\t\tmax_blindex = build_bl_tree(s);\n\t\topt_lenb = s.opt_len + 3 + 7 >>> 3;\n\t\tstatic_lenb = s.static_len + 3 + 7 >>> 3;\n\t\tif (static_lenb <= opt_lenb) opt_lenb = static_lenb;\n\t} else opt_lenb = static_lenb = stored_len + 5;\n\tif (stored_len + 4 <= opt_lenb && buf !== -1) _tr_stored_block(s, buf, stored_len, last);\n\telse if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\t\tsend_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n\t\tcompress_block(s, static_ltree, static_dtree);\n\t} else {\n\t\tsend_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n\t\tsend_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n\t\tcompress_block(s, s.dyn_ltree, s.dyn_dtree);\n\t}\n\tinit_block(s);\n\tif (last) bi_windup(s);\n};\nvar _tr_tally = (s, dist, lc) => {\n\ts.pending_buf[s.sym_buf + s.sym_next++] = dist;\n\ts.pending_buf[s.sym_buf + s.sym_next++] = dist >> 8;\n\ts.pending_buf[s.sym_buf + s.sym_next++] = lc;\n\tif (dist === 0) s.dyn_ltree[lc * 2]++;\n\telse {\n\t\ts.matches++;\n\t\tdist--;\n\t\ts.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]++;\n\t\ts.dyn_dtree[d_code(dist) * 2]++;\n\t}\n\treturn s.sym_next === s.sym_end;\n};\n//#endregion\n//#region src/zlib/adler32.mjs\nvar adler32 = (adler, buf, len, pos) => {\n\tlet s1 = adler & 65535 | 0, s2 = adler >>> 16 & 65535 | 0, n = 0;\n\twhile (len !== 0) {\n\t\tn = len > 2e3 ? 2e3 : len;\n\t\tlen -= n;\n\t\tdo {\n\t\t\ts1 = s1 + buf[pos++] | 0;\n\t\t\ts2 = s2 + s1 | 0;\n\t\t} while (--n);\n\t\ts1 %= 65521;\n\t\ts2 %= 65521;\n\t}\n\treturn s1 | s2 << 16 | 0;\n};\n//#endregion\n//#region src/zlib/crc32.mjs\nvar makeTable = () => {\n\tlet c, table = [];\n\tfor (var n = 0; n < 256; n++) {\n\t\tc = n;\n\t\tfor (var k = 0; k < 8; k++) c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1;\n\t\ttable[n] = c;\n\t}\n\treturn table;\n};\nvar crcTable = new Uint32Array(makeTable());\nvar crc32 = (crc, buf, len, pos) => {\n\tconst t = crcTable;\n\tconst end = pos + len;\n\tcrc ^= -1;\n\tfor (let i = pos; i < end; i++) crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 255];\n\treturn crc ^ -1;\n};\n//#endregion\n//#region src/zlib/messages.mjs\nvar messages_default = {\n\t2: \"need dictionary\",\n\t1: \"stream end\",\n\t0: \"\",\n\t\"-1\": \"file error\",\n\t\"-2\": \"stream error\",\n\t\"-3\": \"data error\",\n\t\"-4\": \"insufficient memory\",\n\t\"-5\": \"buffer error\",\n\t\"-6\": \"incompatible version\"\n};\n//#endregion\n//#region src/zlib/constants.mjs\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1;\nvar Z_SYNC_FLUSH = 2;\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\nvar Z_TREES = 6;\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_NEED_DICT = 2;\nvar Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\nvar Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//#endregion\n//#region src/zlib/deflate.mjs\nvar MAX_MEM_LEVEL = 9;\nvar MAX_WBITS = 15;\nvar DEF_MEM_LEVEL = 8;\nvar HEAP_SIZE = 573;\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = 262;\nvar PRESET_DICT = 32;\nvar INIT_STATE = 42;\nvar GZIP_STATE = 57;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\nvar BS_NEED_MORE = 1;\nvar BS_BLOCK_DONE = 2;\nvar BS_FINISH_STARTED = 3;\nvar BS_FINISH_DONE = 4;\nvar OS_CODE = 3;\nvar err = (strm, errorCode) => {\n\tstrm.msg = messages_default[errorCode];\n\treturn errorCode;\n};\nvar rank = (f) => {\n\treturn f * 2 - (f > 4 ? 9 : 0);\n};\nvar zero = (buf) => {\n\tlet len = buf.length;\n\twhile (--len >= 0) buf[len] = 0;\n};\nvar slide_hash = (s) => {\n\tlet n, m;\n\tlet p;\n\tlet wsize = s.w_size;\n\tn = s.hash_size;\n\tp = n;\n\tdo {\n\t\tm = s.head[--p];\n\t\ts.head[p] = m >= wsize ? m - wsize : 0;\n\t} while (--n);\n\tn = wsize;\n\tp = n;\n\tdo {\n\t\tm = s.prev[--p];\n\t\ts.prev[p] = m >= wsize ? m - wsize : 0;\n\t} while (--n);\n};\nvar HASH = (s, prev, data) => (prev << s.hash_shift ^ data) & s.hash_mask;\nvar INSERT_STRING = (s, str) => {\n\tlet h;\n\tif (s.legacy_hash) h = s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\telse {\n\t\tconst w = s.window;\n\t\tconst value = w[str] | w[str + 1] << 8 | w[str + 2] << 16 | w[str + 3] << 24;\n\t\th = s.ins_h = Math.imul(value, 66521) + 66521 >>> 16 & s.hash_mask;\n\t}\n\tconst hash_head = s.prev[str & s.w_mask] = s.head[h];\n\ts.head[h] = str;\n\treturn hash_head;\n};\nvar flush_pending = (strm) => {\n\tconst s = strm.state;\n\tlet len = s.pending;\n\tif (len > strm.avail_out) len = strm.avail_out;\n\tif (len === 0) return;\n\tstrm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);\n\tstrm.next_out += len;\n\ts.pending_out += len;\n\tstrm.total_out += len;\n\tstrm.avail_out -= len;\n\ts.pending -= len;\n\tif (s.pending === 0) s.pending_out = 0;\n};\nvar flush_block_only = (s, last) => {\n\t_tr_flush_block(s, s.block_start >= 0 ? s.block_start : -1, s.strstart - s.block_start, last);\n\ts.block_start = s.strstart;\n\tflush_pending(s.strm);\n};\nvar put_byte = (s, b) => {\n\ts.pending_buf[s.pending++] = b;\n};\nvar putShortMSB = (s, b) => {\n\ts.pending_buf[s.pending++] = b >>> 8 & 255;\n\ts.pending_buf[s.pending++] = b & 255;\n};\nvar read_buf = (strm, buf, start, size) => {\n\tlet len = strm.avail_in;\n\tif (len > size) len = size;\n\tif (len === 0) return 0;\n\tstrm.avail_in -= len;\n\tbuf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);\n\tif (strm.state.wrap === 1) strm.adler = adler32(strm.adler, buf, len, start);\n\telse if (strm.state.wrap === 2) strm.adler = crc32(strm.adler, buf, len, start);\n\tstrm.next_in += len;\n\tstrm.total_in += len;\n\treturn len;\n};\nvar longest_match = (s, cur_match) => {\n\tlet chain_length = s.max_chain_length;\n\tlet scan = s.strstart;\n\tlet match;\n\tlet len;\n\tlet best_len = s.prev_length;\n\tlet nice_match = s.nice_match;\n\tconst limit = s.strstart > s.w_size - MIN_LOOKAHEAD ? s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0;\n\tconst _win = s.window;\n\tconst wmask = s.w_mask;\n\tconst prev = s.prev;\n\tconst strend = s.strstart + MAX_MATCH;\n\tlet scan_end1 = _win[scan + best_len - 1];\n\tlet scan_end = _win[scan + best_len];\n\tif (s.prev_length >= s.good_match) chain_length >>= 2;\n\tif (nice_match > s.lookahead) nice_match = s.lookahead;\n\tdo {\n\t\tmatch = cur_match;\n\t\tif (_win[match + best_len] !== scan_end || _win[match + best_len - 1] !== scan_end1 || _win[match] !== _win[scan] || _win[++match] !== _win[scan + 1]) continue;\n\t\tscan += 2;\n\t\tmatch++;\n\t\tdo\t\t;\nwhile (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && scan < strend);\n\t\tlen = MAX_MATCH - (strend - scan);\n\t\tscan = strend - MAX_MATCH;\n\t\tif (len > best_len) {\n\t\t\ts.match_start = cur_match;\n\t\t\tbest_len = len;\n\t\t\tif (len >= nice_match) break;\n\t\t\tscan_end1 = _win[scan + best_len - 1];\n\t\t\tscan_end = _win[scan + best_len];\n\t\t}\n\t} while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\tif (best_len <= s.lookahead) return best_len;\n\treturn s.lookahead;\n};\nvar fill_window = (s) => {\n\tconst _w_size = s.w_size;\n\tlet n, more, str;\n\tdo {\n\t\tmore = s.window_size - s.lookahead - s.strstart;\n\t\tif (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\t\t\ts.window.set(s.window.subarray(_w_size, _w_size + _w_size - more), 0);\n\t\t\ts.match_start -= _w_size;\n\t\t\ts.strstart -= _w_size;\n\t\t\ts.block_start -= _w_size;\n\t\t\tif (s.insert > s.strstart) s.insert = s.strstart;\n\t\t\tslide_hash(s);\n\t\t\tmore += _w_size;\n\t\t}\n\t\tif (s.strm.avail_in === 0) break;\n\t\tn = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n\t\ts.lookahead += n;\n\t\tif (!s.legacy_hash) {\n\t\t\tif (s.lookahead + s.insert > MIN_MATCH) {\n\t\t\t\tstr = s.strstart - s.insert;\n\t\t\t\twhile (s.insert) {\n\t\t\t\t\tINSERT_STRING(s, str);\n\t\t\t\t\tstr++;\n\t\t\t\t\ts.insert--;\n\t\t\t\t\tif (s.lookahead + s.insert <= MIN_MATCH) break;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (s.lookahead + s.insert >= MIN_MATCH) {\n\t\t\tstr = s.strstart - s.insert;\n\t\t\ts.ins_h = s.window[str];\n\t\t\ts.ins_h = HASH(s, s.ins_h, s.window[str + 1]);\n\t\t\twhile (s.insert) {\n\t\t\t\tINSERT_STRING(s, str);\n\t\t\t\tstr++;\n\t\t\t\ts.insert--;\n\t\t\t\tif (s.lookahead + s.insert < MIN_MATCH) break;\n\t\t\t}\n\t\t}\n\t} while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n};\nvar deflate_stored = (s, flush) => {\n\tlet min_block = s.pending_buf_size - 5 > s.w_size ? s.w_size : s.pending_buf_size - 5;\n\tlet len, left, have, last = 0;\n\tlet used = s.strm.avail_in;\n\tdo {\n\t\tlen = 65535;\n\t\thave = s.bi_valid + 42 >> 3;\n\t\tif (s.strm.avail_out < have) break;\n\t\thave = s.strm.avail_out - have;\n\t\tleft = s.strstart - s.block_start;\n\t\tif (len > left + s.strm.avail_in) len = left + s.strm.avail_in;\n\t\tif (len > have) len = have;\n\t\tif (len < min_block && (len === 0 && flush !== 4 || flush === 0 || len !== left + s.strm.avail_in)) break;\n\t\tlast = flush === 4 && len === left + s.strm.avail_in ? 1 : 0;\n\t\t_tr_stored_block(s, 0, 0, last);\n\t\ts.pending_buf[s.pending - 4] = len;\n\t\ts.pending_buf[s.pending - 3] = len >> 8;\n\t\ts.pending_buf[s.pending - 2] = ~len;\n\t\ts.pending_buf[s.pending - 1] = ~len >> 8;\n\t\tflush_pending(s.strm);\n\t\tif (left) {\n\t\t\tif (left > len) left = len;\n\t\t\ts.strm.output.set(s.window.subarray(s.block_start, s.block_start + left), s.strm.next_out);\n\t\t\ts.strm.next_out += left;\n\t\t\ts.strm.avail_out -= left;\n\t\t\ts.strm.total_out += left;\n\t\t\ts.block_start += left;\n\t\t\tlen -= left;\n\t\t}\n\t\tif (len) {\n\t\t\tread_buf(s.strm, s.strm.output, s.strm.next_out, len);\n\t\t\ts.strm.next_out += len;\n\t\t\ts.strm.avail_out -= len;\n\t\t\ts.strm.total_out += len;\n\t\t}\n\t} while (last === 0);\n\tused -= s.strm.avail_in;\n\tif (used) {\n\t\tif (used >= s.w_size) {\n\t\t\ts.matches = 2;\n\t\t\ts.window.set(s.strm.input.subarray(s.strm.next_in - s.w_size, s.strm.next_in), 0);\n\t\t\ts.strstart = s.w_size;\n\t\t\ts.insert = s.strstart;\n\t\t} else {\n\t\t\tif (s.window_size - s.strstart <= used) {\n\t\t\t\ts.strstart -= s.w_size;\n\t\t\t\ts.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n\t\t\t\tif (s.matches < 2) s.matches++;\n\t\t\t\tif (s.insert > s.strstart) s.insert = s.strstart;\n\t\t\t}\n\t\t\ts.window.set(s.strm.input.subarray(s.strm.next_in - used, s.strm.next_in), s.strstart);\n\t\t\ts.strstart += used;\n\t\t\ts.insert += used > s.w_size - s.insert ? s.w_size - s.insert : used;\n\t\t}\n\t\ts.block_start = s.strstart;\n\t}\n\tif (s.high_water < s.strstart) s.high_water = s.strstart;\n\tif (last) return BS_FINISH_DONE;\n\tif (flush !== 0 && flush !== 4 && s.strm.avail_in === 0 && s.strstart === s.block_start) return BS_BLOCK_DONE;\n\thave = s.window_size - s.strstart;\n\tif (s.strm.avail_in > have && s.block_start >= s.w_size) {\n\t\ts.block_start -= s.w_size;\n\t\ts.strstart -= s.w_size;\n\t\ts.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n\t\tif (s.matches < 2) s.matches++;\n\t\thave += s.w_size;\n\t\tif (s.insert > s.strstart) s.insert = s.strstart;\n\t}\n\tif (have > s.strm.avail_in) have = s.strm.avail_in;\n\tif (have) {\n\t\tread_buf(s.strm, s.window, s.strstart, have);\n\t\ts.strstart += have;\n\t\ts.insert += have > s.w_size - s.insert ? s.w_size - s.insert : have;\n\t}\n\tif (s.high_water < s.strstart) s.high_water = s.strstart;\n\thave = s.bi_valid + 42 >> 3;\n\thave = s.pending_buf_size - have > 65535 ? 65535 : s.pending_buf_size - have;\n\tmin_block = have > s.w_size ? s.w_size : have;\n\tleft = s.strstart - s.block_start;\n\tif (left >= min_block || (left || flush === 4) && flush !== 0 && s.strm.avail_in === 0 && left <= have) {\n\t\tlen = left > have ? have : left;\n\t\tlast = flush === 4 && s.strm.avail_in === 0 && len === left ? 1 : 0;\n\t\t_tr_stored_block(s, s.block_start, len, last);\n\t\ts.block_start += len;\n\t\tflush_pending(s.strm);\n\t}\n\treturn last ? BS_FINISH_STARTED : BS_NEED_MORE;\n};\nvar deflate_fast = (s, flush) => {\n\tlet hash_head;\n\tlet bflush;\n\tfor (;;) {\n\t\tif (s.lookahead < MIN_LOOKAHEAD) {\n\t\t\tfill_window(s);\n\t\t\tif (s.lookahead < MIN_LOOKAHEAD && flush === 0) return BS_NEED_MORE;\n\t\t\tif (s.lookahead === 0) break;\n\t\t}\n\t\thash_head = 0;\n\t\tif (s.lookahead >= MIN_MATCH) hash_head = INSERT_STRING(s, s.strstart);\n\t\tif (hash_head !== 0 && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) s.match_length = longest_match(s, hash_head);\n\t\tif (s.match_length >= MIN_MATCH) {\n\t\t\t/*** _tr_tally_dist(s, s.strstart - s.match_start,\n\t\t\ts.match_length - MIN_MATCH, bflush); ***/\n\t\t\tbflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\t\t\ts.lookahead -= s.match_length;\n\t\t\tif (s.match_length <= s.max_lazy_match && s.lookahead >= MIN_MATCH) {\n\t\t\t\ts.match_length--;\n\t\t\t\tdo {\n\t\t\t\t\ts.strstart++;\n\t\t\t\t\thash_head = INSERT_STRING(s, s.strstart);\n\t\t\t\t} while (--s.match_length !== 0);\n\t\t\t\ts.strstart++;\n\t\t\t} else {\n\t\t\t\ts.strstart += s.match_length;\n\t\t\t\ts.match_length = 0;\n\t\t\t\tif (s.legacy_hash) {\n\t\t\t\t\ts.ins_h = s.window[s.strstart];\n\t\t\t\t\ts.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t/*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n\t\t\tbflush = _tr_tally(s, 0, s.window[s.strstart]);\n\t\t\ts.lookahead--;\n\t\t\ts.strstart++;\n\t\t}\n\t\tif (bflush) {\n\t\t\t/*** FLUSH_BLOCK(s, 0); ***/\n\t\t\tflush_block_only(s, false);\n\t\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t\t}\n\t}\n\ts.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n\tif (flush === 4) {\n\t\t/*** FLUSH_BLOCK(s, 1); ***/\n\t\tflush_block_only(s, true);\n\t\tif (s.strm.avail_out === 0) return BS_FINISH_STARTED;\n\t\treturn BS_FINISH_DONE;\n\t}\n\tif (s.sym_next) {\n\t\t/*** FLUSH_BLOCK(s, 0); ***/\n\t\tflush_block_only(s, false);\n\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t}\n\treturn BS_BLOCK_DONE;\n};\nvar deflate_slow = (s, flush) => {\n\tlet hash_head;\n\tlet bflush;\n\tlet max_insert;\n\tfor (;;) {\n\t\tif (s.lookahead < MIN_LOOKAHEAD) {\n\t\t\tfill_window(s);\n\t\t\tif (s.lookahead < MIN_LOOKAHEAD && flush === 0) return BS_NEED_MORE;\n\t\t\tif (s.lookahead === 0) break;\n\t\t}\n\t\thash_head = 0;\n\t\tif (s.lookahead >= MIN_MATCH) hash_head = INSERT_STRING(s, s.strstart);\n\t\ts.prev_length = s.match_length;\n\t\ts.prev_match = s.match_start;\n\t\ts.match_length = MIN_MATCH - 1;\n\t\tif (hash_head !== 0 && s.prev_length < s.max_lazy_match && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) {\n\t\t\ts.match_length = longest_match(s, hash_head);\n\t\t\tif (s.match_length <= 5 && (s.strategy === 1 || s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096)) s.match_length = MIN_MATCH - 1;\n\t\t}\n\t\tif (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n\t\t\tmax_insert = s.strstart + s.lookahead - MIN_MATCH;\n\t\t\t/***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n\t\t\ts.prev_length - MIN_MATCH, bflush);***/\n\t\t\tbflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n\t\t\ts.lookahead -= s.prev_length - 1;\n\t\t\ts.prev_length -= 2;\n\t\t\tdo\n\t\t\t\tif (++s.strstart <= max_insert) hash_head = INSERT_STRING(s, s.strstart);\n\t\t\twhile (--s.prev_length !== 0);\n\t\t\ts.match_available = 0;\n\t\t\ts.match_length = MIN_MATCH - 1;\n\t\t\ts.strstart++;\n\t\t\tif (bflush) {\n\t\t\t\t/*** FLUSH_BLOCK(s, 0); ***/\n\t\t\t\tflush_block_only(s, false);\n\t\t\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t\t\t}\n\t\t} else if (s.match_available) {\n\t\t\t/*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n\t\t\tbflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\t\t\tif (bflush)\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n\t\t\tflush_block_only(s, false);\n\t\t\ts.strstart++;\n\t\t\ts.lookahead--;\n\t\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t\t} else {\n\t\t\ts.match_available = 1;\n\t\t\ts.strstart++;\n\t\t\ts.lookahead--;\n\t\t}\n\t}\n\tif (s.match_available) {\n\t\t/*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n\t\tbflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\t\ts.match_available = 0;\n\t}\n\ts.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n\tif (flush === 4) {\n\t\t/*** FLUSH_BLOCK(s, 1); ***/\n\t\tflush_block_only(s, true);\n\t\tif (s.strm.avail_out === 0) return BS_FINISH_STARTED;\n\t\treturn BS_FINISH_DONE;\n\t}\n\tif (s.sym_next) {\n\t\t/*** FLUSH_BLOCK(s, 0); ***/\n\t\tflush_block_only(s, false);\n\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t}\n\treturn BS_BLOCK_DONE;\n};\nvar deflate_rle = (s, flush) => {\n\tlet bflush;\n\tlet prev;\n\tlet scan, strend;\n\tconst _win = s.window;\n\tfor (;;) {\n\t\tif (s.lookahead <= MAX_MATCH) {\n\t\t\tfill_window(s);\n\t\t\tif (s.lookahead <= MAX_MATCH && flush === 0) return BS_NEED_MORE;\n\t\t\tif (s.lookahead === 0) break;\n\t\t}\n\t\ts.match_length = 0;\n\t\tif (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n\t\t\tscan = s.strstart - 1;\n\t\t\tprev = _win[scan];\n\t\t\tif (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n\t\t\t\tstrend = s.strstart + MAX_MATCH;\n\t\t\t\tdo\t\t\t\t;\nwhile (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && scan < strend);\n\t\t\t\ts.match_length = MAX_MATCH - (strend - scan);\n\t\t\t\tif (s.match_length > s.lookahead) s.match_length = s.lookahead;\n\t\t\t}\n\t\t}\n\t\tif (s.match_length >= MIN_MATCH) {\n\t\t\t/*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n\t\t\tbflush = _tr_tally(s, 1, s.match_length - MIN_MATCH);\n\t\t\ts.lookahead -= s.match_length;\n\t\t\ts.strstart += s.match_length;\n\t\t\ts.match_length = 0;\n\t\t} else {\n\t\t\t/*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n\t\t\tbflush = _tr_tally(s, 0, s.window[s.strstart]);\n\t\t\ts.lookahead--;\n\t\t\ts.strstart++;\n\t\t}\n\t\tif (bflush) {\n\t\t\t/*** FLUSH_BLOCK(s, 0); ***/\n\t\t\tflush_block_only(s, false);\n\t\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t\t}\n\t}\n\ts.insert = 0;\n\tif (flush === 4) {\n\t\t/*** FLUSH_BLOCK(s, 1); ***/\n\t\tflush_block_only(s, true);\n\t\tif (s.strm.avail_out === 0) return BS_FINISH_STARTED;\n\t\treturn BS_FINISH_DONE;\n\t}\n\tif (s.sym_next) {\n\t\t/*** FLUSH_BLOCK(s, 0); ***/\n\t\tflush_block_only(s, false);\n\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t}\n\treturn BS_BLOCK_DONE;\n};\nvar deflate_huff = (s, flush) => {\n\tlet bflush;\n\tfor (;;) {\n\t\tif (s.lookahead === 0) {\n\t\t\tfill_window(s);\n\t\t\tif (s.lookahead === 0) {\n\t\t\t\tif (flush === 0) return BS_NEED_MORE;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\ts.match_length = 0;\n\t\t/*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n\t\tbflush = _tr_tally(s, 0, s.window[s.strstart]);\n\t\ts.lookahead--;\n\t\ts.strstart++;\n\t\tif (bflush) {\n\t\t\t/*** FLUSH_BLOCK(s, 0); ***/\n\t\t\tflush_block_only(s, false);\n\t\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t\t}\n\t}\n\ts.insert = 0;\n\tif (flush === 4) {\n\t\t/*** FLUSH_BLOCK(s, 1); ***/\n\t\tflush_block_only(s, true);\n\t\tif (s.strm.avail_out === 0) return BS_FINISH_STARTED;\n\t\treturn BS_FINISH_DONE;\n\t}\n\tif (s.sym_next) {\n\t\t/*** FLUSH_BLOCK(s, 0); ***/\n\t\tflush_block_only(s, false);\n\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t}\n\treturn BS_BLOCK_DONE;\n};\nvar Config = class {\n\tconstructor(good_length, max_lazy, nice_length, max_chain, func) {\n\t\tthis.good_length = good_length;\n\t\tthis.max_lazy = max_lazy;\n\t\tthis.nice_length = nice_length;\n\t\tthis.max_chain = max_chain;\n\t\tthis.func = func;\n\t}\n};\nvar configuration_table = [\n\tnew Config(0, 0, 0, 0, deflate_stored),\n\tnew Config(4, 4, 8, 4, deflate_fast),\n\tnew Config(4, 5, 16, 8, deflate_fast),\n\tnew Config(4, 6, 32, 32, deflate_fast),\n\tnew Config(4, 4, 16, 16, deflate_slow),\n\tnew Config(8, 16, 32, 32, deflate_slow),\n\tnew Config(8, 16, 128, 128, deflate_slow),\n\tnew Config(8, 32, 128, 256, deflate_slow),\n\tnew Config(32, 128, 258, 1024, deflate_slow),\n\tnew Config(32, 258, 258, 4096, deflate_slow)\n];\nvar lm_init = (s) => {\n\ts.window_size = 2 * s.w_size;\n\t/*** CLEAR_HASH(s); ***/\n\tzero(s.head);\n\ts.max_lazy_match = configuration_table[s.level].max_lazy;\n\ts.good_match = configuration_table[s.level].good_length;\n\ts.nice_match = configuration_table[s.level].nice_length;\n\ts.max_chain_length = configuration_table[s.level].max_chain;\n\ts.strstart = 0;\n\ts.block_start = 0;\n\ts.lookahead = 0;\n\ts.insert = 0;\n\ts.match_length = s.prev_length = MIN_MATCH - 1;\n\ts.match_available = 0;\n\ts.ins_h = 0;\n};\nvar DeflateState = class {\n\tconstructor() {\n\t\tthis.strm = null;\n\t\tthis.status = 0;\n\t\tthis.pending_buf = null;\n\t\tthis.pending_buf_size = 0;\n\t\tthis.pending_out = 0;\n\t\tthis.pending = 0;\n\t\tthis.wrap = 0;\n\t\tthis.gzhead = null;\n\t\tthis.gzindex = 0;\n\t\tthis.method = 8;\n\t\tthis.last_flush = -1;\n\t\tthis.w_size = 0;\n\t\tthis.w_bits = 0;\n\t\tthis.w_mask = 0;\n\t\tthis.window = null;\n\t\tthis.window_size = 0;\n\t\tthis.prev = null;\n\t\tthis.head = null;\n\t\tthis.ins_h = 0;\n\t\tthis.legacy_hash = 0;\n\t\tthis.hash_size = 0;\n\t\tthis.hash_bits = 0;\n\t\tthis.hash_mask = 0;\n\t\tthis.hash_shift = 0;\n\t\tthis.block_start = 0;\n\t\tthis.match_length = 0;\n\t\tthis.prev_match = 0;\n\t\tthis.match_available = 0;\n\t\tthis.strstart = 0;\n\t\tthis.match_start = 0;\n\t\tthis.lookahead = 0;\n\t\tthis.prev_length = 0;\n\t\tthis.max_chain_length = 0;\n\t\tthis.max_lazy_match = 0;\n\t\tthis.level = 0;\n\t\tthis.strategy = 0;\n\t\tthis.good_match = 0;\n\t\tthis.nice_match = 0;\n\t\tthis.dyn_ltree = new Uint16Array(HEAP_SIZE * 2);\n\t\tthis.dyn_dtree = /* @__PURE__ */ new Uint16Array(122);\n\t\tthis.bl_tree = /* @__PURE__ */ new Uint16Array(78);\n\t\tzero(this.dyn_ltree);\n\t\tzero(this.dyn_dtree);\n\t\tzero(this.bl_tree);\n\t\tthis.l_desc = null;\n\t\tthis.d_desc = null;\n\t\tthis.bl_desc = null;\n\t\tthis.bl_count = /* @__PURE__ */ new Uint16Array(16);\n\t\tthis.heap = /* @__PURE__ */ new Uint16Array(573);\n\t\tzero(this.heap);\n\t\tthis.heap_len = 0;\n\t\tthis.heap_max = 0;\n\t\tthis.depth = /* @__PURE__ */ new Uint16Array(573);\n\t\tzero(this.depth);\n\t\tthis.sym_buf = 0;\n\t\tthis.lit_bufsize = 0;\n\t\tthis.sym_next = 0;\n\t\tthis.sym_end = 0;\n\t\tthis.opt_len = 0;\n\t\tthis.static_len = 0;\n\t\tthis.matches = 0;\n\t\tthis.insert = 0;\n\t\tthis.bi_buf = 0;\n\t\tthis.bi_valid = 0;\n\t}\n};\nvar deflateStateCheck = (strm) => {\n\tif (!strm) return 1;\n\tconst s = strm.state;\n\tif (!s || s.strm !== strm || s.status !== INIT_STATE && s.status !== GZIP_STATE && s.status !== EXTRA_STATE && s.status !== NAME_STATE && s.status !== COMMENT_STATE && s.status !== HCRC_STATE && s.status !== BUSY_STATE && s.status !== FINISH_STATE) return 1;\n\treturn 0;\n};\nvar deflateResetKeep = (strm) => {\n\tif (deflateStateCheck(strm)) return err(strm, -2);\n\tstrm.total_in = strm.total_out = 0;\n\tstrm.data_type = 2;\n\tconst s = strm.state;\n\ts.pending = 0;\n\ts.pending_out = 0;\n\tif (s.wrap < 0) s.wrap = -s.wrap;\n\ts.status = s.wrap === 2 ? GZIP_STATE : s.wrap ? INIT_STATE : BUSY_STATE;\n\tstrm.adler = s.wrap === 2 ? 0 : 1;\n\ts.last_flush = -2;\n\t_tr_init(s);\n\treturn 0;\n};\nvar deflateReset = (strm) => {\n\tconst ret = deflateResetKeep(strm);\n\tif (ret === 0) lm_init(strm.state);\n\treturn ret;\n};\nvar deflateSetHeader = (strm, head) => {\n\tif (deflateStateCheck(strm) || strm.state.wrap !== 2) return -2;\n\tstrm.state.gzhead = head;\n\treturn 0;\n};\nvar deflateInit2 = (strm, level, method, windowBits, memLevel, strategy, legacyHash) => {\n\tif (!strm) return -2;\n\tlet wrap = 1;\n\tif (level === -1) level = 6;\n\tif (windowBits < 0) {\n\t\twrap = 0;\n\t\twindowBits = -windowBits;\n\t} else if (windowBits > 15) {\n\t\twrap = 2;\n\t\twindowBits -= 16;\n\t}\n\tif (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== 8 || windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > 4 || windowBits === 8 && wrap !== 1) return err(strm, -2);\n\tif (windowBits === 8) windowBits = 9;\n\tconst s = new DeflateState();\n\tstrm.state = s;\n\ts.strm = strm;\n\ts.status = INIT_STATE;\n\ts.wrap = wrap;\n\ts.gzhead = null;\n\ts.w_bits = windowBits;\n\ts.w_size = 1 << s.w_bits;\n\ts.w_mask = s.w_size - 1;\n\ts.legacy_hash = legacyHash ? 1 : 0;\n\ts.hash_bits = memLevel + 7;\n\tif (!s.legacy_hash && s.hash_bits < 15) s.hash_bits = 15;\n\ts.hash_size = 1 << s.hash_bits;\n\ts.hash_mask = s.hash_size - 1;\n\ts.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\ts.window = new Uint8Array(s.w_size * 2);\n\ts.head = new Uint16Array(s.hash_size);\n\ts.prev = new Uint16Array(s.w_size);\n\ts.lit_bufsize = 1 << memLevel + 6;\n\ts.pending_buf_size = s.lit_bufsize * 4;\n\ts.pending_buf = new Uint8Array(s.pending_buf_size);\n\ts.sym_buf = s.lit_bufsize;\n\ts.sym_end = (s.lit_bufsize - 1) * 3;\n\ts.level = level;\n\ts.strategy = strategy;\n\ts.method = method;\n\treturn deflateReset(strm);\n};\nvar deflateInit = (strm, level) => {\n\treturn deflateInit2(strm, level, 8, MAX_WBITS, DEF_MEM_LEVEL, 0);\n};\nvar deflate$1 = (strm, flush) => {\n\tif (deflateStateCheck(strm) || flush > 5 || flush < 0) return strm ? err(strm, -2) : -2;\n\tconst s = strm.state;\n\tif (!strm.output || strm.avail_in !== 0 && !strm.input || s.status === FINISH_STATE && flush !== 4) return err(strm, strm.avail_out === 0 ? -5 : -2);\n\tconst old_flush = s.last_flush;\n\ts.last_flush = flush;\n\tif (s.pending !== 0) {\n\t\tflush_pending(strm);\n\t\tif (strm.avail_out === 0) {\n\t\t\ts.last_flush = -1;\n\t\t\treturn 0;\n\t\t}\n\t} else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && flush !== 4) return err(strm, -5);\n\tif (s.status === FINISH_STATE && strm.avail_in !== 0) return err(strm, -5);\n\tif (s.status === INIT_STATE && s.wrap === 0) s.status = BUSY_STATE;\n\tif (s.status === INIT_STATE) {\n\t\tlet header = 8 + (s.w_bits - 8 << 4) << 8;\n\t\tlet level_flags = -1;\n\t\tif (s.strategy >= 2 || s.level < 2) level_flags = 0;\n\t\telse if (s.level < 6) level_flags = 1;\n\t\telse if (s.level === 6) level_flags = 2;\n\t\telse level_flags = 3;\n\t\theader |= level_flags << 6;\n\t\tif (s.strstart !== 0) header |= PRESET_DICT;\n\t\theader += 31 - header % 31;\n\t\tputShortMSB(s, header);\n\t\tif (s.strstart !== 0) {\n\t\t\tputShortMSB(s, strm.adler >>> 16);\n\t\t\tputShortMSB(s, strm.adler & 65535);\n\t\t}\n\t\tstrm.adler = 1;\n\t\ts.status = BUSY_STATE;\n\t\tflush_pending(strm);\n\t\tif (s.pending !== 0) {\n\t\t\ts.last_flush = -1;\n\t\t\treturn 0;\n\t\t}\n\t}\n\tif (s.status === GZIP_STATE) {\n\t\tstrm.adler = 0;\n\t\tput_byte(s, 31);\n\t\tput_byte(s, 139);\n\t\tput_byte(s, 8);\n\t\tif (!s.gzhead) {\n\t\t\tput_byte(s, 0);\n\t\t\tput_byte(s, 0);\n\t\t\tput_byte(s, 0);\n\t\t\tput_byte(s, 0);\n\t\t\tput_byte(s, 0);\n\t\t\tput_byte(s, s.level === 9 ? 2 : s.strategy >= 2 || s.level < 2 ? 4 : 0);\n\t\t\tput_byte(s, OS_CODE);\n\t\t\ts.status = BUSY_STATE;\n\t\t\tflush_pending(strm);\n\t\t\tif (s.pending !== 0) {\n\t\t\t\ts.last_flush = -1;\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t} else {\n\t\t\tput_byte(s, (s.gzhead.text ? 1 : 0) + (s.gzhead.hcrc ? 2 : 0) + (!s.gzhead.extra ? 0 : 4) + (!s.gzhead.name ? 0 : 8) + (!s.gzhead.comment ? 0 : 16));\n\t\t\tput_byte(s, s.gzhead.time & 255);\n\t\t\tput_byte(s, s.gzhead.time >> 8 & 255);\n\t\t\tput_byte(s, s.gzhead.time >> 16 & 255);\n\t\t\tput_byte(s, s.gzhead.time >> 24 & 255);\n\t\t\tput_byte(s, s.level === 9 ? 2 : s.strategy >= 2 || s.level < 2 ? 4 : 0);\n\t\t\tput_byte(s, s.gzhead.os & 255);\n\t\t\tif (s.gzhead.extra && s.gzhead.extra.length) {\n\t\t\t\tput_byte(s, s.gzhead.extra.length & 255);\n\t\t\t\tput_byte(s, s.gzhead.extra.length >> 8 & 255);\n\t\t\t}\n\t\t\tif (s.gzhead.hcrc) strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n\t\t\ts.gzindex = 0;\n\t\t\ts.status = EXTRA_STATE;\n\t\t}\n\t}\n\tif (s.status === EXTRA_STATE) {\n\t\tif (s.gzhead.extra) {\n\t\t\tlet beg = s.pending;\n\t\t\tlet left = (s.gzhead.extra.length & 65535) - s.gzindex;\n\t\t\twhile (s.pending + left > s.pending_buf_size) {\n\t\t\t\tlet copy = s.pending_buf_size - s.pending;\n\t\t\t\ts.pending_buf.set(s.gzhead.extra.subarray(s.gzindex, s.gzindex + copy), s.pending);\n\t\t\t\ts.pending = s.pending_buf_size;\n\t\t\t\tif (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n\t\t\t\ts.gzindex += copy;\n\t\t\t\tflush_pending(strm);\n\t\t\t\tif (s.pending !== 0) {\n\t\t\t\t\ts.last_flush = -1;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tbeg = 0;\n\t\t\t\tleft -= copy;\n\t\t\t}\n\t\t\tlet gzhead_extra = new Uint8Array(s.gzhead.extra);\n\t\t\ts.pending_buf.set(gzhead_extra.subarray(s.gzindex, s.gzindex + left), s.pending);\n\t\t\ts.pending += left;\n\t\t\tif (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n\t\t\ts.gzindex = 0;\n\t\t}\n\t\ts.status = NAME_STATE;\n\t}\n\tif (s.status === NAME_STATE) {\n\t\tif (s.gzhead.name) {\n\t\t\tlet beg = s.pending;\n\t\t\tlet val;\n\t\t\tdo {\n\t\t\t\tif (s.pending === s.pending_buf_size) {\n\t\t\t\t\tif (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n\t\t\t\t\tflush_pending(strm);\n\t\t\t\t\tif (s.pending !== 0) {\n\t\t\t\t\t\ts.last_flush = -1;\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tbeg = 0;\n\t\t\t\t}\n\t\t\t\tif (s.gzindex < s.gzhead.name.length) val = s.gzhead.name.charCodeAt(s.gzindex++) & 255;\n\t\t\t\telse val = 0;\n\t\t\t\tput_byte(s, val);\n\t\t\t} while (val !== 0);\n\t\t\tif (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n\t\t\ts.gzindex = 0;\n\t\t}\n\t\ts.status = COMMENT_STATE;\n\t}\n\tif (s.status === COMMENT_STATE) {\n\t\tif (s.gzhead.comment) {\n\t\t\tlet beg = s.pending;\n\t\t\tlet val;\n\t\t\tdo {\n\t\t\t\tif (s.pending === s.pending_buf_size) {\n\t\t\t\t\tif (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n\t\t\t\t\tflush_pending(strm);\n\t\t\t\t\tif (s.pending !== 0) {\n\t\t\t\t\t\ts.last_flush = -1;\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tbeg = 0;\n\t\t\t\t}\n\t\t\t\tif (s.gzindex < s.gzhead.comment.length) val = s.gzhead.comment.charCodeAt(s.gzindex++) & 255;\n\t\t\t\telse val = 0;\n\t\t\t\tput_byte(s, val);\n\t\t\t} while (val !== 0);\n\t\t\tif (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n\t\t}\n\t\ts.status = HCRC_STATE;\n\t}\n\tif (s.status === HCRC_STATE) {\n\t\tif (s.gzhead.hcrc) {\n\t\t\tif (s.pending + 2 > s.pending_buf_size) {\n\t\t\t\tflush_pending(strm);\n\t\t\t\tif (s.pending !== 0) {\n\t\t\t\t\ts.last_flush = -1;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tput_byte(s, strm.adler & 255);\n\t\t\tput_byte(s, strm.adler >> 8 & 255);\n\t\t\tstrm.adler = 0;\n\t\t}\n\t\ts.status = BUSY_STATE;\n\t\tflush_pending(strm);\n\t\tif (s.pending !== 0) {\n\t\t\ts.last_flush = -1;\n\t\t\treturn 0;\n\t\t}\n\t}\n\tif (strm.avail_in !== 0 || s.lookahead !== 0 || flush !== 0 && s.status !== FINISH_STATE) {\n\t\tlet bstate = s.level === 0 ? deflate_stored(s, flush) : s.strategy === 2 ? deflate_huff(s, flush) : s.strategy === 3 ? deflate_rle(s, flush) : configuration_table[s.level].func(s, flush);\n\t\tif (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) s.status = FINISH_STATE;\n\t\tif (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n\t\t\tif (strm.avail_out === 0) s.last_flush = -1;\n\t\t\treturn 0;\n\t\t}\n\t\tif (bstate === BS_BLOCK_DONE) {\n\t\t\tif (flush === 1) _tr_align(s);\n\t\t\telse if (flush !== 5) {\n\t\t\t\t_tr_stored_block(s, 0, 0, false);\n\t\t\t\tif (flush === 3) {\n\t\t\t\t\t/*** CLEAR_HASH(s); ***/ zero(s.head);\n\t\t\t\t\tif (s.lookahead === 0) {\n\t\t\t\t\t\ts.strstart = 0;\n\t\t\t\t\t\ts.block_start = 0;\n\t\t\t\t\t\ts.insert = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tflush_pending(strm);\n\t\t\tif (strm.avail_out === 0) {\n\t\t\t\ts.last_flush = -1;\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t}\n\tif (flush !== 4) return 0;\n\tif (s.wrap <= 0) return 1;\n\tif (s.wrap === 2) {\n\t\tput_byte(s, strm.adler & 255);\n\t\tput_byte(s, strm.adler >> 8 & 255);\n\t\tput_byte(s, strm.adler >> 16 & 255);\n\t\tput_byte(s, strm.adler >> 24 & 255);\n\t\tput_byte(s, strm.total_in & 255);\n\t\tput_byte(s, strm.total_in >> 8 & 255);\n\t\tput_byte(s, strm.total_in >> 16 & 255);\n\t\tput_byte(s, strm.total_in >> 24 & 255);\n\t} else {\n\t\tputShortMSB(s, strm.adler >>> 16);\n\t\tputShortMSB(s, strm.adler & 65535);\n\t}\n\tflush_pending(strm);\n\tif (s.wrap > 0) s.wrap = -s.wrap;\n\treturn s.pending !== 0 ? 0 : 1;\n};\nvar deflateEnd = (strm) => {\n\tif (deflateStateCheck(strm)) return -2;\n\tconst status = strm.state.status;\n\tstrm.state = null;\n\treturn status === BUSY_STATE ? err(strm, -3) : 0;\n};\nvar deflateSetDictionary = (strm, dictionary) => {\n\tlet dictLength = dictionary.length;\n\tif (deflateStateCheck(strm)) return -2;\n\tconst s = strm.state;\n\tconst wrap = s.wrap;\n\tif (wrap === 2 || wrap === 1 && s.status !== INIT_STATE || s.lookahead) return -2;\n\tif (wrap === 1) strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n\ts.wrap = 0;\n\tif (dictLength >= s.w_size) {\n\t\tif (wrap === 0) {\n\t\t\t/*** CLEAR_HASH(s); ***/\n\t\t\tzero(s.head);\n\t\t\ts.strstart = 0;\n\t\t\ts.block_start = 0;\n\t\t\ts.insert = 0;\n\t\t}\n\t\tlet tmpDict = new Uint8Array(s.w_size);\n\t\ttmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);\n\t\tdictionary = tmpDict;\n\t\tdictLength = s.w_size;\n\t}\n\tconst avail = strm.avail_in;\n\tconst next = strm.next_in;\n\tconst input = strm.input;\n\tstrm.avail_in = dictLength;\n\tstrm.next_in = 0;\n\tstrm.input = dictionary;\n\tfill_window(s);\n\twhile (s.lookahead >= MIN_MATCH) {\n\t\tlet str = s.strstart;\n\t\tlet n = s.lookahead - (MIN_MATCH - 1);\n\t\tdo {\n\t\t\tINSERT_STRING(s, str);\n\t\t\tstr++;\n\t\t} while (--n);\n\t\ts.strstart = str;\n\t\ts.lookahead = MIN_MATCH - 1;\n\t\tfill_window(s);\n\t}\n\ts.strstart += s.lookahead;\n\ts.block_start = s.strstart;\n\ts.insert = s.lookahead;\n\ts.lookahead = 0;\n\ts.match_length = s.prev_length = MIN_MATCH - 1;\n\ts.match_available = 0;\n\tstrm.next_in = next;\n\tstrm.input = input;\n\tstrm.avail_in = avail;\n\ts.wrap = wrap;\n\treturn 0;\n};\n//#endregion\n//#region src/zlib/inffast.mjs\nvar BAD$1 = 16209;\nvar TYPE$1 = 16191;\nfunction inflate_fast(strm, start) {\n\tlet _in;\n\tlet last;\n\tlet _out;\n\tlet beg;\n\tlet end;\n\tlet dmax;\n\tlet wsize;\n\tlet whave;\n\tlet wnext;\n\tlet s_window;\n\tlet hold;\n\tlet bits;\n\tlet lcode;\n\tlet dcode;\n\tlet lmask;\n\tlet dmask;\n\tlet here;\n\tlet op;\n\tlet len;\n\tlet dist;\n\tlet from;\n\tlet from_source;\n\tlet input, output;\n\tconst state = strm.state;\n\t_in = strm.next_in;\n\tinput = strm.input;\n\tlast = _in + (strm.avail_in - 5);\n\t_out = strm.next_out;\n\toutput = strm.output;\n\tbeg = _out - (start - strm.avail_out);\n\tend = _out + (strm.avail_out - 257);\n\tdmax = state.dmax;\n\twsize = state.wsize;\n\twhave = state.whave;\n\twnext = state.wnext;\n\ts_window = state.window;\n\thold = state.hold;\n\tbits = state.bits;\n\tlcode = state.lencode;\n\tdcode = state.distcode;\n\tlmask = (1 << state.lenbits) - 1;\n\tdmask = (1 << state.distbits) - 1;\n\ttop: do {\n\t\tif (bits < 15) {\n\t\t\thold += input[_in++] << bits;\n\t\t\tbits += 8;\n\t\t\thold += input[_in++] << bits;\n\t\t\tbits += 8;\n\t\t}\n\t\there = lcode[hold & lmask];\n\t\tdolen: for (;;) {\n\t\t\top = here >>> 24;\n\t\t\thold >>>= op;\n\t\t\tbits -= op;\n\t\t\top = here >>> 16 & 255;\n\t\t\tif (op === 0) output[_out++] = here & 65535;\n\t\t\telse if (op & 16) {\n\t\t\t\tlen = here & 65535;\n\t\t\t\top &= 15;\n\t\t\t\tif (op) {\n\t\t\t\t\tif (bits < op) {\n\t\t\t\t\t\thold += input[_in++] << bits;\n\t\t\t\t\t\tbits += 8;\n\t\t\t\t\t}\n\t\t\t\t\tlen += hold & (1 << op) - 1;\n\t\t\t\t\thold >>>= op;\n\t\t\t\t\tbits -= op;\n\t\t\t\t}\n\t\t\t\tif (bits < 15) {\n\t\t\t\t\thold += input[_in++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t\thold += input[_in++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\there = dcode[hold & dmask];\n\t\t\t\tdodist: for (;;) {\n\t\t\t\t\top = here >>> 24;\n\t\t\t\t\thold >>>= op;\n\t\t\t\t\tbits -= op;\n\t\t\t\t\top = here >>> 16 & 255;\n\t\t\t\t\tif (op & 16) {\n\t\t\t\t\t\tdist = here & 65535;\n\t\t\t\t\t\top &= 15;\n\t\t\t\t\t\tif (bits < op) {\n\t\t\t\t\t\t\thold += input[_in++] << bits;\n\t\t\t\t\t\t\tbits += 8;\n\t\t\t\t\t\t\tif (bits < op) {\n\t\t\t\t\t\t\t\thold += input[_in++] << bits;\n\t\t\t\t\t\t\t\tbits += 8;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdist += hold & (1 << op) - 1;\n\t\t\t\t\t\tif (dist > dmax) {\n\t\t\t\t\t\t\tstrm.msg = \"invalid distance too far back\";\n\t\t\t\t\t\t\tstate.mode = BAD$1;\n\t\t\t\t\t\t\tbreak top;\n\t\t\t\t\t\t}\n\t\t\t\t\t\thold >>>= op;\n\t\t\t\t\t\tbits -= op;\n\t\t\t\t\t\top = _out - beg;\n\t\t\t\t\t\tif (dist > op) {\n\t\t\t\t\t\t\top = dist - op;\n\t\t\t\t\t\t\tif (op > whave) {\n\t\t\t\t\t\t\t\tif (state.sane) {\n\t\t\t\t\t\t\t\t\tstrm.msg = \"invalid distance too far back\";\n\t\t\t\t\t\t\t\t\tstate.mode = BAD$1;\n\t\t\t\t\t\t\t\t\tbreak top;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfrom = 0;\n\t\t\t\t\t\t\tfrom_source = s_window;\n\t\t\t\t\t\t\tif (wnext === 0) {\n\t\t\t\t\t\t\t\tfrom += wsize - op;\n\t\t\t\t\t\t\t\tif (op < len) {\n\t\t\t\t\t\t\t\t\tlen -= op;\n\t\t\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t\t\t\toutput[_out++] = s_window[from++];\n\t\t\t\t\t\t\t\t\twhile (--op);\n\t\t\t\t\t\t\t\t\tfrom = _out - dist;\n\t\t\t\t\t\t\t\t\tfrom_source = output;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (wnext < op) {\n\t\t\t\t\t\t\t\tfrom += wsize + wnext - op;\n\t\t\t\t\t\t\t\top -= wnext;\n\t\t\t\t\t\t\t\tif (op < len) {\n\t\t\t\t\t\t\t\t\tlen -= op;\n\t\t\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t\t\t\toutput[_out++] = s_window[from++];\n\t\t\t\t\t\t\t\t\twhile (--op);\n\t\t\t\t\t\t\t\t\tfrom = 0;\n\t\t\t\t\t\t\t\t\tif (wnext < len) {\n\t\t\t\t\t\t\t\t\t\top = wnext;\n\t\t\t\t\t\t\t\t\t\tlen -= op;\n\t\t\t\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t\t\t\t\toutput[_out++] = s_window[from++];\n\t\t\t\t\t\t\t\t\t\twhile (--op);\n\t\t\t\t\t\t\t\t\t\tfrom = _out - dist;\n\t\t\t\t\t\t\t\t\t\tfrom_source = output;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfrom += wnext - op;\n\t\t\t\t\t\t\t\tif (op < len) {\n\t\t\t\t\t\t\t\t\tlen -= op;\n\t\t\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t\t\t\toutput[_out++] = s_window[from++];\n\t\t\t\t\t\t\t\t\twhile (--op);\n\t\t\t\t\t\t\t\t\tfrom = _out - dist;\n\t\t\t\t\t\t\t\t\tfrom_source = output;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile (len > 2) {\n\t\t\t\t\t\t\t\toutput[_out++] = from_source[from++];\n\t\t\t\t\t\t\t\toutput[_out++] = from_source[from++];\n\t\t\t\t\t\t\t\toutput[_out++] = from_source[from++];\n\t\t\t\t\t\t\t\tlen -= 3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\t\toutput[_out++] = from_source[from++];\n\t\t\t\t\t\t\t\tif (len > 1) output[_out++] = from_source[from++];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfrom = _out - dist;\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\toutput[_out++] = output[from++];\n\t\t\t\t\t\t\t\toutput[_out++] = output[from++];\n\t\t\t\t\t\t\t\toutput[_out++] = output[from++];\n\t\t\t\t\t\t\t\tlen -= 3;\n\t\t\t\t\t\t\t} while (len > 2);\n\t\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\t\toutput[_out++] = output[from++];\n\t\t\t\t\t\t\t\tif (len > 1) output[_out++] = output[from++];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ((op & 64) === 0) {\n\t\t\t\t\t\there = dcode[(here & 65535) + (hold & (1 << op) - 1)];\n\t\t\t\t\t\tcontinue dodist;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstrm.msg = \"invalid distance code\";\n\t\t\t\t\t\tstate.mode = BAD$1;\n\t\t\t\t\t\tbreak top;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if ((op & 64) === 0) {\n\t\t\t\there = lcode[(here & 65535) + (hold & (1 << op) - 1)];\n\t\t\t\tcontinue dolen;\n\t\t\t} else if (op & 32) {\n\t\t\t\tstate.mode = TYPE$1;\n\t\t\t\tbreak top;\n\t\t\t} else {\n\t\t\t\tstrm.msg = \"invalid literal/length code\";\n\t\t\t\tstate.mode = BAD$1;\n\t\t\t\tbreak top;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t} while (_in < last && _out < end);\n\tlen = bits >> 3;\n\t_in -= len;\n\tbits -= len << 3;\n\thold &= (1 << bits) - 1;\n\tstrm.next_in = _in;\n\tstrm.next_out = _out;\n\tstrm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last);\n\tstrm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end);\n\tstate.hold = hold;\n\tstate.bits = bits;\n}\n//#endregion\n//#region src/zlib/inftrees.mjs\nvar MAXBITS = 15;\nvar ENOUGH_LENS$1 = 852;\nvar ENOUGH_DISTS$1 = 592;\nvar CODES$1 = 0;\nvar LENS$1 = 1;\nvar DISTS$1 = 2;\nvar lbase = new Uint16Array([\n\t3,\n\t4,\n\t5,\n\t6,\n\t7,\n\t8,\n\t9,\n\t10,\n\t11,\n\t13,\n\t15,\n\t17,\n\t19,\n\t23,\n\t27,\n\t31,\n\t35,\n\t43,\n\t51,\n\t59,\n\t67,\n\t83,\n\t99,\n\t115,\n\t131,\n\t163,\n\t195,\n\t227,\n\t258,\n\t0,\n\t0\n]);\nvar lext = new Uint8Array([\n\t16,\n\t16,\n\t16,\n\t16,\n\t16,\n\t16,\n\t16,\n\t16,\n\t17,\n\t17,\n\t17,\n\t17,\n\t18,\n\t18,\n\t18,\n\t18,\n\t19,\n\t19,\n\t19,\n\t19,\n\t20,\n\t20,\n\t20,\n\t20,\n\t21,\n\t21,\n\t21,\n\t21,\n\t16,\n\t199,\n\t75\n]);\nvar dbase = new Uint16Array([\n\t1,\n\t2,\n\t3,\n\t4,\n\t5,\n\t7,\n\t9,\n\t13,\n\t17,\n\t25,\n\t33,\n\t49,\n\t65,\n\t97,\n\t129,\n\t193,\n\t257,\n\t385,\n\t513,\n\t769,\n\t1025,\n\t1537,\n\t2049,\n\t3073,\n\t4097,\n\t6145,\n\t8193,\n\t12289,\n\t16385,\n\t24577,\n\t0,\n\t0\n]);\nvar dext = new Uint8Array([\n\t16,\n\t16,\n\t16,\n\t16,\n\t17,\n\t17,\n\t18,\n\t18,\n\t19,\n\t19,\n\t20,\n\t20,\n\t21,\n\t21,\n\t22,\n\t22,\n\t23,\n\t23,\n\t24,\n\t24,\n\t25,\n\t25,\n\t26,\n\t26,\n\t27,\n\t27,\n\t28,\n\t28,\n\t29,\n\t29,\n\t64,\n\t64\n]);\nvar inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) => {\n\tconst bits = opts.bits;\n\tlet len = 0;\n\tlet sym = 0;\n\tlet min = 0, max = 0;\n\tlet root = 0;\n\tlet curr = 0;\n\tlet drop = 0;\n\tlet left = 0;\n\tlet used = 0;\n\tlet huff = 0;\n\tlet incr;\n\tlet fill;\n\tlet low;\n\tlet mask;\n\tlet next;\n\tlet base = null;\n\tlet match;\n\tconst count = /* @__PURE__ */ new Uint16Array(16);\n\tconst offs = /* @__PURE__ */ new Uint16Array(16);\n\tlet extra = null;\n\tlet here_bits, here_op, here_val;\n\tfor (len = 0; len <= MAXBITS; len++) count[len] = 0;\n\tfor (sym = 0; sym < codes; sym++) count[lens[lens_index + sym]]++;\n\troot = bits;\n\tfor (max = MAXBITS; max >= 1; max--) if (count[max] !== 0) break;\n\tif (root > max) root = max;\n\tif (max === 0) {\n\t\ttable[table_index++] = 20971520;\n\t\ttable[table_index++] = 20971520;\n\t\topts.bits = 1;\n\t\treturn 0;\n\t}\n\tfor (min = 1; min < max; min++) if (count[min] !== 0) break;\n\tif (root < min) root = min;\n\tleft = 1;\n\tfor (len = 1; len <= MAXBITS; len++) {\n\t\tleft <<= 1;\n\t\tleft -= count[len];\n\t\tif (left < 0) return -1;\n\t}\n\tif (left > 0 && (type === CODES$1 || max !== 1)) return -1;\n\toffs[1] = 0;\n\tfor (len = 1; len < MAXBITS; len++) offs[len + 1] = offs[len] + count[len];\n\tfor (sym = 0; sym < codes; sym++) if (lens[lens_index + sym] !== 0) work[offs[lens[lens_index + sym]]++] = sym;\n\tif (type === CODES$1) {\n\t\tbase = extra = work;\n\t\tmatch = 20;\n\t} else if (type === LENS$1) {\n\t\tbase = lbase;\n\t\textra = lext;\n\t\tmatch = 257;\n\t} else {\n\t\tbase = dbase;\n\t\textra = dext;\n\t\tmatch = 0;\n\t}\n\thuff = 0;\n\tsym = 0;\n\tlen = min;\n\tnext = table_index;\n\tcurr = root;\n\tdrop = 0;\n\tlow = -1;\n\tused = 1 << root;\n\tmask = used - 1;\n\tif (type === LENS$1 && used > ENOUGH_LENS$1 || type === DISTS$1 && used > ENOUGH_DISTS$1) return 1;\n\tfor (;;) {\n\t\there_bits = len - drop;\n\t\tif (work[sym] + 1 < match) {\n\t\t\there_op = 0;\n\t\t\there_val = work[sym];\n\t\t} else if (work[sym] >= match) {\n\t\t\there_op = extra[work[sym] - match];\n\t\t\there_val = base[work[sym] - match];\n\t\t} else {\n\t\t\there_op = 96;\n\t\t\there_val = 0;\n\t\t}\n\t\tincr = 1 << len - drop;\n\t\tfill = 1 << curr;\n\t\tmin = fill;\n\t\tdo {\n\t\t\tfill -= incr;\n\t\t\ttable[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val | 0;\n\t\t} while (fill !== 0);\n\t\tincr = 1 << len - 1;\n\t\twhile (huff & incr) incr >>= 1;\n\t\tif (incr !== 0) {\n\t\t\thuff &= incr - 1;\n\t\t\thuff += incr;\n\t\t} else huff = 0;\n\t\tsym++;\n\t\tif (--count[len] === 0) {\n\t\t\tif (len === max) break;\n\t\t\tlen = lens[lens_index + work[sym]];\n\t\t}\n\t\tif (len > root && (huff & mask) !== low) {\n\t\t\tif (drop === 0) drop = root;\n\t\t\tnext += min;\n\t\t\tcurr = len - drop;\n\t\t\tleft = 1 << curr;\n\t\t\twhile (curr + drop < max) {\n\t\t\t\tleft -= count[curr + drop];\n\t\t\t\tif (left <= 0) break;\n\t\t\t\tcurr++;\n\t\t\t\tleft <<= 1;\n\t\t\t}\n\t\t\tused += 1 << curr;\n\t\t\tif (type === LENS$1 && used > ENOUGH_LENS$1 || type === DISTS$1 && used > ENOUGH_DISTS$1) return 1;\n\t\t\tlow = huff & mask;\n\t\t\ttable[low] = root << 24 | curr << 16 | next - table_index | 0;\n\t\t}\n\t}\n\tif (huff !== 0) table[next + huff] = len - drop << 24 | 4194304;\n\topts.bits = root;\n\treturn 0;\n};\n//#endregion\n//#region src/zlib/inflate.mjs\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\nvar HEAD = 16180;\nvar FLAGS = 16181;\nvar TIME = 16182;\nvar OS = 16183;\nvar EXLEN = 16184;\nvar EXTRA = 16185;\nvar NAME = 16186;\nvar COMMENT = 16187;\nvar HCRC = 16188;\nvar DICTID = 16189;\nvar DICT = 16190;\nvar TYPE = 16191;\nvar TYPEDO = 16192;\nvar STORED = 16193;\nvar COPY_ = 16194;\nvar COPY = 16195;\nvar TABLE = 16196;\nvar LENLENS = 16197;\nvar CODELENS = 16198;\nvar LEN_ = 16199;\nvar LEN = 16200;\nvar LENEXT = 16201;\nvar DIST = 16202;\nvar DISTEXT = 16203;\nvar MATCH = 16204;\nvar LIT = 16205;\nvar CHECK = 16206;\nvar LENGTH = 16207;\nvar DONE = 16208;\nvar BAD = 16209;\nvar MEM = 16210;\nvar SYNC = 16211;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\nvar DEF_WBITS = 15;\nvar zswap32 = (q) => {\n\treturn (q >>> 24 & 255) + (q >>> 8 & 65280) + ((q & 65280) << 8) + ((q & 255) << 24);\n};\nvar InflateState = class {\n\tconstructor() {\n\t\tthis.strm = null;\n\t\tthis.mode = 0;\n\t\tthis.last = false;\n\t\tthis.wrap = 0;\n\t\tthis.havedict = false;\n\t\tthis.flags = 0;\n\t\tthis.dmax = 0;\n\t\tthis.check = 0;\n\t\tthis.total = 0;\n\t\tthis.head = null;\n\t\tthis.wbits = 0;\n\t\tthis.wsize = 0;\n\t\tthis.whave = 0;\n\t\tthis.wnext = 0;\n\t\tthis.window = null;\n\t\tthis.hold = 0;\n\t\tthis.bits = 0;\n\t\tthis.length = 0;\n\t\tthis.offset = 0;\n\t\tthis.extra = 0;\n\t\tthis.lencode = null;\n\t\tthis.distcode = null;\n\t\tthis.lenbits = 0;\n\t\tthis.distbits = 0;\n\t\tthis.ncode = 0;\n\t\tthis.nlen = 0;\n\t\tthis.ndist = 0;\n\t\tthis.have = 0;\n\t\tthis.next = null;\n\t\tthis.lens = /* @__PURE__ */ new Uint16Array(320);\n\t\tthis.work = /* @__PURE__ */ new Uint16Array(288);\n\t\tthis.lendyn = null;\n\t\tthis.distdyn = null;\n\t\tthis.sane = 0;\n\t\tthis.back = 0;\n\t\tthis.was = 0;\n\t}\n};\nvar inflateStateCheck = (strm) => {\n\tif (!strm) return 1;\n\tconst state = strm.state;\n\tif (!state || state.strm !== strm || state.mode < HEAD || state.mode > SYNC) return 1;\n\treturn 0;\n};\nvar inflateResetKeep = (strm) => {\n\tif (inflateStateCheck(strm)) return -2;\n\tconst state = strm.state;\n\tstrm.total_in = strm.total_out = state.total = 0;\n\tstrm.msg = \"\";\n\tif (state.wrap) strm.adler = state.wrap & 1;\n\tstate.mode = HEAD;\n\tstate.last = 0;\n\tstate.havedict = 0;\n\tstate.flags = -1;\n\tstate.dmax = 32768;\n\tstate.head = null;\n\tstate.hold = 0;\n\tstate.bits = 0;\n\tstate.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);\n\tstate.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);\n\tstate.sane = 1;\n\tstate.back = -1;\n\treturn 0;\n};\nvar inflateReset = (strm) => {\n\tif (inflateStateCheck(strm)) return -2;\n\tconst state = strm.state;\n\tstate.wsize = 0;\n\tstate.whave = 0;\n\tstate.wnext = 0;\n\treturn inflateResetKeep(strm);\n};\nvar inflateReset2 = (strm, windowBits) => {\n\tlet wrap;\n\tif (inflateStateCheck(strm)) return -2;\n\tconst state = strm.state;\n\tif (windowBits < 0) {\n\t\twrap = 0;\n\t\twindowBits = -windowBits;\n\t} else {\n\t\twrap = (windowBits >> 4) + 5;\n\t\tif (windowBits < 48) windowBits &= 15;\n\t}\n\tif (windowBits && (windowBits < 8 || windowBits > 15)) return -2;\n\tif (state.window !== null && state.wbits !== windowBits) state.window = null;\n\tstate.wrap = wrap;\n\tstate.wbits = windowBits;\n\treturn inflateReset(strm);\n};\nvar inflateInit2 = (strm, windowBits) => {\n\tif (!strm) return -2;\n\tconst state = new InflateState();\n\tstrm.state = state;\n\tstate.strm = strm;\n\tstate.window = null;\n\tstate.mode = HEAD;\n\tconst ret = inflateReset2(strm, windowBits);\n\tif (ret !== 0) strm.state = null;\n\treturn ret;\n};\nvar inflateInit = (strm) => {\n\treturn inflateInit2(strm, DEF_WBITS);\n};\nvar virgin = true;\nvar lenfix, distfix;\nvar fixedtables = (state) => {\n\tif (virgin) {\n\t\tlenfix = /* @__PURE__ */ new Int32Array(512);\n\t\tdistfix = /* @__PURE__ */ new Int32Array(32);\n\t\tlet sym = 0;\n\t\twhile (sym < 144) state.lens[sym++] = 8;\n\t\twhile (sym < 256) state.lens[sym++] = 9;\n\t\twhile (sym < 280) state.lens[sym++] = 7;\n\t\twhile (sym < 288) state.lens[sym++] = 8;\n\t\tinflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\t\tsym = 0;\n\t\twhile (sym < 32) state.lens[sym++] = 5;\n\t\tinflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\t\tvirgin = false;\n\t}\n\tstate.lencode = lenfix;\n\tstate.lenbits = 9;\n\tstate.distcode = distfix;\n\tstate.distbits = 5;\n};\nvar updatewindow = (strm, src, end, copy) => {\n\tlet dist;\n\tconst state = strm.state;\n\tif (state.window === null) state.window = new Uint8Array(1 << state.wbits);\n\tif (state.wsize === 0) {\n\t\tstate.wsize = 1 << state.wbits;\n\t\tstate.wnext = 0;\n\t\tstate.whave = 0;\n\t}\n\tif (copy >= state.wsize) {\n\t\tstate.window.set(src.subarray(end - state.wsize, end), 0);\n\t\tstate.wnext = 0;\n\t\tstate.whave = state.wsize;\n\t} else {\n\t\tdist = state.wsize - state.wnext;\n\t\tif (dist > copy) dist = copy;\n\t\tstate.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);\n\t\tcopy -= dist;\n\t\tif (copy) {\n\t\t\tstate.window.set(src.subarray(end - copy, end), 0);\n\t\t\tstate.wnext = copy;\n\t\t\tstate.whave = state.wsize;\n\t\t} else {\n\t\t\tstate.wnext += dist;\n\t\t\tif (state.wnext === state.wsize) state.wnext = 0;\n\t\t\tif (state.whave < state.wsize) state.whave += dist;\n\t\t}\n\t}\n\treturn 0;\n};\nvar inflate$1 = (strm, flush) => {\n\tlet state;\n\tlet input, output;\n\tlet next;\n\tlet put;\n\tlet have, left;\n\tlet hold;\n\tlet bits;\n\tlet _in, _out;\n\tlet copy;\n\tlet from;\n\tlet from_source;\n\tlet here = 0;\n\tlet here_bits, here_op, here_val;\n\tlet last_bits, last_op, last_val;\n\tlet len;\n\tlet ret;\n\tconst hbuf = /* @__PURE__ */ new Uint8Array(4);\n\tlet opts;\n\tlet n;\n\tconst order = new Uint8Array([\n\t\t16,\n\t\t17,\n\t\t18,\n\t\t0,\n\t\t8,\n\t\t7,\n\t\t9,\n\t\t6,\n\t\t10,\n\t\t5,\n\t\t11,\n\t\t4,\n\t\t12,\n\t\t3,\n\t\t13,\n\t\t2,\n\t\t14,\n\t\t1,\n\t\t15\n\t]);\n\tif (inflateStateCheck(strm) || !strm.output || !strm.input && strm.avail_in !== 0) return -2;\n\tstate = strm.state;\n\tif (state.mode === TYPE) state.mode = TYPEDO;\n\tput = strm.next_out;\n\toutput = strm.output;\n\tleft = strm.avail_out;\n\tnext = strm.next_in;\n\tinput = strm.input;\n\thave = strm.avail_in;\n\thold = state.hold;\n\tbits = state.bits;\n\t_in = have;\n\t_out = left;\n\tret = 0;\n\tinf_leave: for (;;) switch (state.mode) {\n\t\tcase HEAD:\n\t\t\tif (state.wrap === 0) {\n\t\t\t\tstate.mode = TYPEDO;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\twhile (bits < 16) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tif (state.wrap & 2 && hold === 35615) {\n\t\t\t\tif (state.wbits === 0) state.wbits = 15;\n\t\t\t\tstate.check = 0;\n\t\t\t\thbuf[0] = hold & 255;\n\t\t\t\thbuf[1] = hold >>> 8 & 255;\n\t\t\t\tstate.check = crc32(state.check, hbuf, 2, 0);\n\t\t\t\thold = 0;\n\t\t\t\tbits = 0;\n\t\t\t\tstate.mode = FLAGS;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (state.head) state.head.done = false;\n\t\t\tif (!(state.wrap & 1) || (((hold & 255) << 8) + (hold >> 8)) % 31) {\n\t\t\t\tstrm.msg = \"incorrect header check\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ((hold & 15) !== 8) {\n\t\t\t\tstrm.msg = \"unknown compression method\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\thold >>>= 4;\n\t\t\tbits -= 4;\n\t\t\tlen = (hold & 15) + 8;\n\t\t\tif (state.wbits === 0) state.wbits = len;\n\t\t\tif (len > 15 || len > state.wbits) {\n\t\t\t\tstrm.msg = \"invalid window size\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.dmax = 1 << state.wbits;\n\t\t\tstate.flags = 0;\n\t\t\tstrm.adler = state.check = 1;\n\t\t\tstate.mode = hold & 512 ? DICTID : TYPE;\n\t\t\thold = 0;\n\t\t\tbits = 0;\n\t\t\tbreak;\n\t\tcase FLAGS:\n\t\t\twhile (bits < 16) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tstate.flags = hold;\n\t\t\tif ((state.flags & 255) !== 8) {\n\t\t\t\tstrm.msg = \"unknown compression method\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (state.flags & 57344) {\n\t\t\t\tstrm.msg = \"unknown header flags set\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (state.head) state.head.text = hold >> 8 & 1;\n\t\t\tif (state.flags & 512 && state.wrap & 4) {\n\t\t\t\thbuf[0] = hold & 255;\n\t\t\t\thbuf[1] = hold >>> 8 & 255;\n\t\t\t\tstate.check = crc32(state.check, hbuf, 2, 0);\n\t\t\t}\n\t\t\thold = 0;\n\t\t\tbits = 0;\n\t\t\tstate.mode = TIME;\n\t\tcase TIME:\n\t\t\twhile (bits < 32) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tif (state.head) state.head.time = hold;\n\t\t\tif (state.flags & 512 && state.wrap & 4) {\n\t\t\t\thbuf[0] = hold & 255;\n\t\t\t\thbuf[1] = hold >>> 8 & 255;\n\t\t\t\thbuf[2] = hold >>> 16 & 255;\n\t\t\t\thbuf[3] = hold >>> 24 & 255;\n\t\t\t\tstate.check = crc32(state.check, hbuf, 4, 0);\n\t\t\t}\n\t\t\thold = 0;\n\t\t\tbits = 0;\n\t\t\tstate.mode = OS;\n\t\tcase OS:\n\t\t\twhile (bits < 16) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tif (state.head) {\n\t\t\t\tstate.head.xflags = hold & 255;\n\t\t\t\tstate.head.os = hold >> 8;\n\t\t\t}\n\t\t\tif (state.flags & 512 && state.wrap & 4) {\n\t\t\t\thbuf[0] = hold & 255;\n\t\t\t\thbuf[1] = hold >>> 8 & 255;\n\t\t\t\tstate.check = crc32(state.check, hbuf, 2, 0);\n\t\t\t}\n\t\t\thold = 0;\n\t\t\tbits = 0;\n\t\t\tstate.mode = EXLEN;\n\t\tcase EXLEN:\n\t\t\tif (state.flags & 1024) {\n\t\t\t\twhile (bits < 16) {\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\tstate.length = hold;\n\t\t\t\tif (state.head) state.head.extra_len = hold;\n\t\t\t\tif (state.flags & 512 && state.wrap & 4) {\n\t\t\t\t\thbuf[0] = hold & 255;\n\t\t\t\t\thbuf[1] = hold >>> 8 & 255;\n\t\t\t\t\tstate.check = crc32(state.check, hbuf, 2, 0);\n\t\t\t\t}\n\t\t\t\thold = 0;\n\t\t\t\tbits = 0;\n\t\t\t} else if (state.head) state.head.extra = null;\n\t\t\tstate.mode = EXTRA;\n\t\tcase EXTRA:\n\t\t\tif (state.flags & 1024) {\n\t\t\t\tcopy = state.length;\n\t\t\t\tif (copy > have) copy = have;\n\t\t\t\tif (copy) {\n\t\t\t\t\tif (state.head) {\n\t\t\t\t\t\tlen = state.head.extra_len - state.length;\n\t\t\t\t\t\tif (!state.head.extra) state.head.extra = new Uint8Array(state.head.extra_len);\n\t\t\t\t\t\tstate.head.extra.set(input.subarray(next, next + copy), len);\n\t\t\t\t\t}\n\t\t\t\t\tif (state.flags & 512 && state.wrap & 4) state.check = crc32(state.check, input, copy, next);\n\t\t\t\t\thave -= copy;\n\t\t\t\t\tnext += copy;\n\t\t\t\t\tstate.length -= copy;\n\t\t\t\t}\n\t\t\t\tif (state.length) break inf_leave;\n\t\t\t}\n\t\t\tstate.length = 0;\n\t\t\tstate.mode = NAME;\n\t\tcase NAME:\n\t\t\tif (state.flags & 2048) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\tcopy = 0;\n\t\t\t\tdo {\n\t\t\t\t\tlen = input[next + copy++];\n\t\t\t\t\tif (state.head && len && state.length < 65536) state.head.name += String.fromCharCode(len);\n\t\t\t\t} while (len && copy < have);\n\t\t\t\tif (state.flags & 512 && state.wrap & 4) state.check = crc32(state.check, input, copy, next);\n\t\t\t\thave -= copy;\n\t\t\t\tnext += copy;\n\t\t\t\tif (len) break inf_leave;\n\t\t\t} else if (state.head) state.head.name = null;\n\t\t\tstate.length = 0;\n\t\t\tstate.mode = COMMENT;\n\t\tcase COMMENT:\n\t\t\tif (state.flags & 4096) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\tcopy = 0;\n\t\t\t\tdo {\n\t\t\t\t\tlen = input[next + copy++];\n\t\t\t\t\tif (state.head && len && state.length < 65536) state.head.comment += String.fromCharCode(len);\n\t\t\t\t} while (len && copy < have);\n\t\t\t\tif (state.flags & 512 && state.wrap & 4) state.check = crc32(state.check, input, copy, next);\n\t\t\t\thave -= copy;\n\t\t\t\tnext += copy;\n\t\t\t\tif (len) break inf_leave;\n\t\t\t} else if (state.head) state.head.comment = null;\n\t\t\tstate.mode = HCRC;\n\t\tcase HCRC:\n\t\t\tif (state.flags & 512) {\n\t\t\t\twhile (bits < 16) {\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\tif (state.wrap & 4 && hold !== (state.check & 65535)) {\n\t\t\t\t\tstrm.msg = \"header crc mismatch\";\n\t\t\t\t\tstate.mode = BAD;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\thold = 0;\n\t\t\t\tbits = 0;\n\t\t\t}\n\t\t\tif (state.head) {\n\t\t\t\tstate.head.hcrc = state.flags >> 9 & 1;\n\t\t\t\tstate.head.done = true;\n\t\t\t}\n\t\t\tstrm.adler = state.check = 0;\n\t\t\tstate.mode = TYPE;\n\t\t\tbreak;\n\t\tcase DICTID:\n\t\t\twhile (bits < 32) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tstrm.adler = state.check = zswap32(hold);\n\t\t\thold = 0;\n\t\t\tbits = 0;\n\t\t\tstate.mode = DICT;\n\t\tcase DICT:\n\t\t\tif (state.havedict === 0) {\n\t\t\t\tstrm.next_out = put;\n\t\t\t\tstrm.avail_out = left;\n\t\t\t\tstrm.next_in = next;\n\t\t\t\tstrm.avail_in = have;\n\t\t\t\tstate.hold = hold;\n\t\t\t\tstate.bits = bits;\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\tstrm.adler = state.check = 1;\n\t\t\tstate.mode = TYPE;\n\t\tcase TYPE: if (flush === 5 || flush === 6) break inf_leave;\n\t\tcase TYPEDO:\n\t\t\tif (state.last) {\n\t\t\t\thold >>>= bits & 7;\n\t\t\t\tbits -= bits & 7;\n\t\t\t\tstate.mode = CHECK;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\twhile (bits < 3) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tstate.last = hold & 1;\n\t\t\thold >>>= 1;\n\t\t\tbits -= 1;\n\t\t\tswitch (hold & 3) {\n\t\t\t\tcase 0:\n\t\t\t\t\tstate.mode = STORED;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 1:\n\t\t\t\t\tfixedtables(state);\n\t\t\t\t\tstate.mode = LEN_;\n\t\t\t\t\tif (flush === 6) {\n\t\t\t\t\t\thold >>>= 2;\n\t\t\t\t\t\tbits -= 2;\n\t\t\t\t\t\tbreak inf_leave;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tstate.mode = TABLE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tstrm.msg = \"invalid block type\";\n\t\t\t\t\tstate.mode = BAD;\n\t\t\t}\n\t\t\thold >>>= 2;\n\t\t\tbits -= 2;\n\t\t\tbreak;\n\t\tcase STORED:\n\t\t\thold >>>= bits & 7;\n\t\t\tbits -= bits & 7;\n\t\t\twhile (bits < 32) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tif ((hold & 65535) !== (hold >>> 16 ^ 65535)) {\n\t\t\t\tstrm.msg = \"invalid stored block lengths\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.length = hold & 65535;\n\t\t\thold = 0;\n\t\t\tbits = 0;\n\t\t\tstate.mode = COPY_;\n\t\t\tif (flush === 6) break inf_leave;\n\t\tcase COPY_: state.mode = COPY;\n\t\tcase COPY:\n\t\t\tcopy = state.length;\n\t\t\tif (copy) {\n\t\t\t\tif (copy > have) copy = have;\n\t\t\t\tif (copy > left) copy = left;\n\t\t\t\tif (copy === 0) break inf_leave;\n\t\t\t\toutput.set(input.subarray(next, next + copy), put);\n\t\t\t\thave -= copy;\n\t\t\t\tnext += copy;\n\t\t\t\tleft -= copy;\n\t\t\t\tput += copy;\n\t\t\t\tstate.length -= copy;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.mode = TYPE;\n\t\t\tbreak;\n\t\tcase TABLE:\n\t\t\twhile (bits < 14) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tstate.nlen = (hold & 31) + 257;\n\t\t\thold >>>= 5;\n\t\t\tbits -= 5;\n\t\t\tstate.ndist = (hold & 31) + 1;\n\t\t\thold >>>= 5;\n\t\t\tbits -= 5;\n\t\t\tstate.ncode = (hold & 15) + 4;\n\t\t\thold >>>= 4;\n\t\t\tbits -= 4;\n\t\t\tif (state.nlen > 286 || state.ndist > 30) {\n\t\t\t\tstrm.msg = \"too many length or distance symbols\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.have = 0;\n\t\t\tstate.mode = LENLENS;\n\t\tcase LENLENS:\n\t\t\twhile (state.have < state.ncode) {\n\t\t\t\twhile (bits < 3) {\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\tstate.lens[order[state.have++]] = hold & 7;\n\t\t\t\thold >>>= 3;\n\t\t\t\tbits -= 3;\n\t\t\t}\n\t\t\twhile (state.have < 19) state.lens[order[state.have++]] = 0;\n\t\t\tstate.lencode = state.lendyn;\n\t\t\tstate.lenbits = 7;\n\t\t\topts = { bits: state.lenbits };\n\t\t\tret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n\t\t\tstate.lenbits = opts.bits;\n\t\t\tif (ret) {\n\t\t\t\tstrm.msg = \"invalid code lengths set\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.have = 0;\n\t\t\tstate.mode = CODELENS;\n\t\tcase CODELENS:\n\t\t\twhile (state.have < state.nlen + state.ndist) {\n\t\t\t\tfor (;;) {\n\t\t\t\t\there = state.lencode[hold & (1 << state.lenbits) - 1];\n\t\t\t\t\there_bits = here >>> 24;\n\t\t\t\t\there_op = here >>> 16 & 255;\n\t\t\t\t\there_val = here & 65535;\n\t\t\t\t\tif (here_bits <= bits) break;\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\tif (here_val < 16) {\n\t\t\t\t\thold >>>= here_bits;\n\t\t\t\t\tbits -= here_bits;\n\t\t\t\t\tstate.lens[state.have++] = here_val;\n\t\t\t\t} else {\n\t\t\t\t\tif (here_val === 16) {\n\t\t\t\t\t\tn = here_bits + 2;\n\t\t\t\t\t\twhile (bits < n) {\n\t\t\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\t\t\thave--;\n\t\t\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\t\t\tbits += 8;\n\t\t\t\t\t\t}\n\t\t\t\t\t\thold >>>= here_bits;\n\t\t\t\t\t\tbits -= here_bits;\n\t\t\t\t\t\tif (state.have === 0) {\n\t\t\t\t\t\t\tstrm.msg = \"invalid bit length repeat\";\n\t\t\t\t\t\t\tstate.mode = BAD;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlen = state.lens[state.have - 1];\n\t\t\t\t\t\tcopy = 3 + (hold & 3);\n\t\t\t\t\t\thold >>>= 2;\n\t\t\t\t\t\tbits -= 2;\n\t\t\t\t\t} else if (here_val === 17) {\n\t\t\t\t\t\tn = here_bits + 3;\n\t\t\t\t\t\twhile (bits < n) {\n\t\t\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\t\t\thave--;\n\t\t\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\t\t\tbits += 8;\n\t\t\t\t\t\t}\n\t\t\t\t\t\thold >>>= here_bits;\n\t\t\t\t\t\tbits -= here_bits;\n\t\t\t\t\t\tlen = 0;\n\t\t\t\t\t\tcopy = 3 + (hold & 7);\n\t\t\t\t\t\thold >>>= 3;\n\t\t\t\t\t\tbits -= 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tn = here_bits + 7;\n\t\t\t\t\t\twhile (bits < n) {\n\t\t\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\t\t\thave--;\n\t\t\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\t\t\tbits += 8;\n\t\t\t\t\t\t}\n\t\t\t\t\t\thold >>>= here_bits;\n\t\t\t\t\t\tbits -= here_bits;\n\t\t\t\t\t\tlen = 0;\n\t\t\t\t\t\tcopy = 11 + (hold & 127);\n\t\t\t\t\t\thold >>>= 7;\n\t\t\t\t\t\tbits -= 7;\n\t\t\t\t\t}\n\t\t\t\t\tif (state.have + copy > state.nlen + state.ndist) {\n\t\t\t\t\t\tstrm.msg = \"invalid bit length repeat\";\n\t\t\t\t\t\tstate.mode = BAD;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\twhile (copy--) state.lens[state.have++] = len;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (state.mode === BAD) break;\n\t\t\tif (state.lens[256] === 0) {\n\t\t\t\tstrm.msg = \"invalid code -- missing end-of-block\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.lenbits = 9;\n\t\t\topts = { bits: state.lenbits };\n\t\t\tret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n\t\t\tstate.lenbits = opts.bits;\n\t\t\tif (ret) {\n\t\t\t\tstrm.msg = \"invalid literal/lengths set\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.distbits = 6;\n\t\t\tstate.distcode = state.distdyn;\n\t\t\topts = { bits: state.distbits };\n\t\t\tret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n\t\t\tstate.distbits = opts.bits;\n\t\t\tif (ret) {\n\t\t\t\tstrm.msg = \"invalid distances set\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.mode = LEN_;\n\t\t\tif (flush === 6) break inf_leave;\n\t\tcase LEN_: state.mode = LEN;\n\t\tcase LEN:\n\t\t\tif (have >= 6 && left >= 258) {\n\t\t\t\tstrm.next_out = put;\n\t\t\t\tstrm.avail_out = left;\n\t\t\t\tstrm.next_in = next;\n\t\t\t\tstrm.avail_in = have;\n\t\t\t\tstate.hold = hold;\n\t\t\t\tstate.bits = bits;\n\t\t\t\tinflate_fast(strm, _out);\n\t\t\t\tput = strm.next_out;\n\t\t\t\toutput = strm.output;\n\t\t\t\tleft = strm.avail_out;\n\t\t\t\tnext = strm.next_in;\n\t\t\t\tinput = strm.input;\n\t\t\t\thave = strm.avail_in;\n\t\t\t\thold = state.hold;\n\t\t\t\tbits = state.bits;\n\t\t\t\tif (state.mode === TYPE) state.back = -1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.back = 0;\n\t\t\tfor (;;) {\n\t\t\t\there = state.lencode[hold & (1 << state.lenbits) - 1];\n\t\t\t\there_bits = here >>> 24;\n\t\t\t\there_op = here >>> 16 & 255;\n\t\t\t\there_val = here & 65535;\n\t\t\t\tif (here_bits <= bits) break;\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tif (here_op && (here_op & 240) === 0) {\n\t\t\t\tlast_bits = here_bits;\n\t\t\t\tlast_op = here_op;\n\t\t\t\tlast_val = here_val;\n\t\t\t\tfor (;;) {\n\t\t\t\t\there = state.lencode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)];\n\t\t\t\t\there_bits = here >>> 24;\n\t\t\t\t\there_op = here >>> 16 & 255;\n\t\t\t\t\there_val = here & 65535;\n\t\t\t\t\tif (last_bits + here_bits <= bits) break;\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\thold >>>= last_bits;\n\t\t\t\tbits -= last_bits;\n\t\t\t\tstate.back += last_bits;\n\t\t\t}\n\t\t\thold >>>= here_bits;\n\t\t\tbits -= here_bits;\n\t\t\tstate.back += here_bits;\n\t\t\tstate.length = here_val;\n\t\t\tif (here_op === 0) {\n\t\t\t\tstate.mode = LIT;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (here_op & 32) {\n\t\t\t\tstate.back = -1;\n\t\t\t\tstate.mode = TYPE;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (here_op & 64) {\n\t\t\t\tstrm.msg = \"invalid literal/length code\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.extra = here_op & 15;\n\t\t\tstate.mode = LENEXT;\n\t\tcase LENEXT:\n\t\t\tif (state.extra) {\n\t\t\t\tn = state.extra;\n\t\t\t\twhile (bits < n) {\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\tstate.length += hold & (1 << state.extra) - 1;\n\t\t\t\thold >>>= state.extra;\n\t\t\t\tbits -= state.extra;\n\t\t\t\tstate.back += state.extra;\n\t\t\t}\n\t\t\tstate.was = state.length;\n\t\t\tstate.mode = DIST;\n\t\tcase DIST:\n\t\t\tfor (;;) {\n\t\t\t\there = state.distcode[hold & (1 << state.distbits) - 1];\n\t\t\t\there_bits = here >>> 24;\n\t\t\t\there_op = here >>> 16 & 255;\n\t\t\t\there_val = here & 65535;\n\t\t\t\tif (here_bits <= bits) break;\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tif ((here_op & 240) === 0) {\n\t\t\t\tlast_bits = here_bits;\n\t\t\t\tlast_op = here_op;\n\t\t\t\tlast_val = here_val;\n\t\t\t\tfor (;;) {\n\t\t\t\t\there = state.distcode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)];\n\t\t\t\t\there_bits = here >>> 24;\n\t\t\t\t\there_op = here >>> 16 & 255;\n\t\t\t\t\there_val = here & 65535;\n\t\t\t\t\tif (last_bits + here_bits <= bits) break;\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\thold >>>= last_bits;\n\t\t\t\tbits -= last_bits;\n\t\t\t\tstate.back += last_bits;\n\t\t\t}\n\t\t\thold >>>= here_bits;\n\t\t\tbits -= here_bits;\n\t\t\tstate.back += here_bits;\n\t\t\tif (here_op & 64) {\n\t\t\t\tstrm.msg = \"invalid distance code\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.offset = here_val;\n\t\t\tstate.extra = here_op & 15;\n\t\t\tstate.mode = DISTEXT;\n\t\tcase DISTEXT:\n\t\t\tif (state.extra) {\n\t\t\t\tn = state.extra;\n\t\t\t\twhile (bits < n) {\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\tstate.offset += hold & (1 << state.extra) - 1;\n\t\t\t\thold >>>= state.extra;\n\t\t\t\tbits -= state.extra;\n\t\t\t\tstate.back += state.extra;\n\t\t\t}\n\t\t\tif (state.offset > state.dmax) {\n\t\t\t\tstrm.msg = \"invalid distance too far back\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.mode = MATCH;\n\t\tcase MATCH:\n\t\t\tif (left === 0) break inf_leave;\n\t\t\tcopy = _out - left;\n\t\t\tif (state.offset > copy) {\n\t\t\t\tcopy = state.offset - copy;\n\t\t\t\tif (copy > state.whave) {\n\t\t\t\t\tif (state.sane) {\n\t\t\t\t\t\tstrm.msg = \"invalid distance too far back\";\n\t\t\t\t\t\tstate.mode = BAD;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (copy > state.wnext) {\n\t\t\t\t\tcopy -= state.wnext;\n\t\t\t\t\tfrom = state.wsize - copy;\n\t\t\t\t} else from = state.wnext - copy;\n\t\t\t\tif (copy > state.length) copy = state.length;\n\t\t\t\tfrom_source = state.window;\n\t\t\t} else {\n\t\t\t\tfrom_source = output;\n\t\t\t\tfrom = put - state.offset;\n\t\t\t\tcopy = state.length;\n\t\t\t}\n\t\t\tif (copy > left) copy = left;\n\t\t\tleft -= copy;\n\t\t\tstate.length -= copy;\n\t\t\tdo\n\t\t\t\toutput[put++] = from_source[from++];\n\t\t\twhile (--copy);\n\t\t\tif (state.length === 0) state.mode = LEN;\n\t\t\tbreak;\n\t\tcase LIT:\n\t\t\tif (left === 0) break inf_leave;\n\t\t\toutput[put++] = state.length;\n\t\t\tleft--;\n\t\t\tstate.mode = LEN;\n\t\t\tbreak;\n\t\tcase CHECK:\n\t\t\tif (state.wrap) {\n\t\t\t\twhile (bits < 32) {\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold |= input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\t_out -= left;\n\t\t\t\tstrm.total_out += _out;\n\t\t\t\tstate.total += _out;\n\t\t\t\tif (state.wrap & 4 && _out) strm.adler = state.check = state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out);\n\t\t\t\t_out = left;\n\t\t\t\tif (state.wrap & 4 && (state.flags ? hold : zswap32(hold)) !== state.check) {\n\t\t\t\t\tstrm.msg = \"incorrect data check\";\n\t\t\t\t\tstate.mode = BAD;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\thold = 0;\n\t\t\t\tbits = 0;\n\t\t\t}\n\t\t\tstate.mode = LENGTH;\n\t\tcase LENGTH:\n\t\t\tif (state.wrap && state.flags) {\n\t\t\t\twhile (bits < 32) {\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\tif (state.wrap & 4 && hold !== (state.total & 4294967295)) {\n\t\t\t\t\tstrm.msg = \"incorrect length check\";\n\t\t\t\t\tstate.mode = BAD;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\thold = 0;\n\t\t\t\tbits = 0;\n\t\t\t}\n\t\t\tstate.mode = DONE;\n\t\tcase DONE:\n\t\t\tret = 1;\n\t\t\tbreak inf_leave;\n\t\tcase BAD:\n\t\t\tret = -3;\n\t\t\tbreak inf_leave;\n\t\tcase MEM: return -4;\n\t\tcase SYNC:\n\t\tdefault: return -2;\n\t}\n\tstrm.next_out = put;\n\tstrm.avail_out = left;\n\tstrm.next_in = next;\n\tstrm.avail_in = have;\n\tstate.hold = hold;\n\tstate.bits = bits;\n\tif (state.wsize || _out !== strm.avail_out && state.mode < BAD && (state.mode < CHECK || flush !== 4)) {\n\t\tif (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n\t\t\tstate.mode = MEM;\n\t\t\treturn -4;\n\t\t}\n\t}\n\t_in -= strm.avail_in;\n\t_out -= strm.avail_out;\n\tstrm.total_in += _in;\n\tstrm.total_out += _out;\n\tstate.total += _out;\n\tif (state.wrap & 4 && _out) strm.adler = state.check = state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out);\n\tstrm.data_type = state.bits + (state.last ? 64 : 0) + (state.mode === TYPE ? 128 : 0) + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n\tif ((_in === 0 && _out === 0 || flush === 4) && ret === 0) ret = -5;\n\treturn ret;\n};\nvar inflateEnd = (strm) => {\n\tif (inflateStateCheck(strm)) return -2;\n\tlet state = strm.state;\n\tif (state.window) state.window = null;\n\tstrm.state = null;\n\treturn 0;\n};\nvar inflateGetHeader = (strm, head) => {\n\tif (inflateStateCheck(strm)) return -2;\n\tconst state = strm.state;\n\tif ((state.wrap & 2) === 0) return -2;\n\tstate.head = head;\n\thead.done = false;\n\treturn 0;\n};\nvar inflateSetDictionary = (strm, dictionary) => {\n\tconst dictLength = dictionary.length;\n\tlet state;\n\tlet dictid;\n\tlet ret;\n\tif (inflateStateCheck(strm)) return -2;\n\tstate = strm.state;\n\tif (state.wrap !== 0 && state.mode !== DICT) return -2;\n\tif (state.mode === DICT) {\n\t\tdictid = 1;\n\t\tdictid = adler32(dictid, dictionary, dictLength, 0);\n\t\tif (dictid !== state.check) return -3;\n\t}\n\tret = updatewindow(strm, dictionary, dictLength, dictLength);\n\tif (ret) {\n\t\tstate.mode = MEM;\n\t\treturn -4;\n\t}\n\tstate.havedict = 1;\n\treturn 0;\n};\n//#endregion\n//#region src/zlib/zstream.mjs\nvar ZStream = class {\n\tconstructor() {\n\t\tthis.input = null;\n\t\tthis.next_in = 0;\n\t\tthis.avail_in = 0;\n\t\tthis.total_in = 0;\n\t\tthis.output = null;\n\t\tthis.next_out = 0;\n\t\tthis.avail_out = 0;\n\t\tthis.total_out = 0;\n\t\tthis.msg = \"\";\n\t\tthis.state = null;\n\t\tthis.data_type = 2;\n\t\tthis.adler = 0;\n\t}\n};\n//#endregion\n//#region src/zlib/gzheader.mjs\nvar GZheader = class {\n\tconstructor() {\n\t\tthis.text = 0;\n\t\tthis.time = 0;\n\t\tthis.xflags = 0;\n\t\tthis.os = 0;\n\t\tthis.extra = null;\n\t\tthis.extra_len = 0;\n\t\tthis.name = \"\";\n\t\tthis.comment = \"\";\n\t\tthis.hcrc = 0;\n\t\tthis.done = false;\n\t}\n};\n//#endregion\n//#region src/utils.ts\nvar flattenChunks = (chunks) => {\n\tconst result = new Uint8Array(chunks.reduce((len, chunk) => len + chunk.length, 0));\n\tlet pos = 0;\n\tfor (const chunk of chunks) {\n\t\tresult.set(chunk, pos);\n\t\tpos += chunk.length;\n\t}\n\treturn result;\n};\n//#endregion\n//#region src/deflate.ts\nvar toString$1 = Object.prototype.toString;\nvar defaultOptions$1 = {\n\tlevel: -1,\n\tchunkSize: 16384,\n\twindowBits: 15,\n\tmemLevel: 8,\n\tstrategy: 0,\n\traw: false,\n\tgzip: false,\n\tlegacyHash: false,\n\tdictionary: /* @__PURE__ */ new Uint8Array(0)\n};\n/**\n* Generic JS-style wrapper for zlib calls. If you don't need\n* streaming behaviour, use the simpler functions {@link deflate},\n* {@link deflateRaw} and {@link gzip}.\n*/\nvar Deflate = class {\n\toptions;\n\t/**\n\t* Error code after deflate finishes. {@link Z_OK} on success.\n\t* You will not need it in real life, because deflate errors\n\t* are possible only on wrong options or bad custom `onData` / `onEnd`\n\t* handlers.\n\t*/\n\terr;\n\t/** Error message, if {@link Deflate.err} is not {@link Z_OK}. */\n\tmsg;\n\tended;\n\tstarted;\n\t/**\n\t* Chunks of output data, if {@link Deflate.onData} not overridden.\n\t* @internal\n\t*/\n\tchunks;\n\tstrm;\n\t/**\n\t* Compressed result, generated by default {@link Deflate.onData}\n\t* and {@link Deflate.onEnd} handlers. Filled after you push last chunk\n\t* (call {@link Deflate.push} with {@link Z_FINISH} / `true` param).\n\t*/\n\tresult;\n\t/**\n\t* Creates a new deflator instance with the specified params. Throws an\n\t* exception on bad params. See {@link DeflateOptions} for the list of\n\t* supported options.\n\t*\n\t* @example\n\t* ```javascript\n\t* import { Deflate } from 'pako'\n\t*\n\t* const chunk1 = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9])\n\t* const chunk2 = new Uint8Array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])\n\t*\n\t* const deflate = new Deflate({ level: 3 })\n\t*\n\t* deflate.push(chunk1, false)\n\t* deflate.push(chunk2, true) // true -> last chunk\n\t*\n\t* if (deflate.err) throw new Error(deflate.err)\n\t*\n\t* console.log(deflate.result)\n\t* ```\n\t*/\n\tconstructor(options = {}) {\n\t\tthis.options = Object.assign({}, defaultOptions$1, options);\n\t\tconst opt = this.options;\n\t\tif (opt.raw && opt.windowBits > 0) opt.windowBits = -opt.windowBits;\n\t\telse if (opt.gzip && opt.windowBits > 0 && opt.windowBits < 16) opt.windowBits += 16;\n\t\tthis.err = 0;\n\t\tthis.msg = \"\";\n\t\tthis.ended = false;\n\t\tthis.started = false;\n\t\tthis.chunks = [];\n\t\tthis.result = /* @__PURE__ */ new Uint8Array(0);\n\t\tthis.strm = new ZStream();\n\t\tthis.strm.avail_out = 0;\n\t\tlet status = deflateInit2(this.strm, opt.level, 8, opt.windowBits, opt.memLevel, opt.strategy, opt.legacyHash);\n\t\tif (status !== 0) throw new Error(messages_default[status]);\n\t\tif (toString$1.call(opt.dictionary) === \"[object ArrayBuffer]\") opt.dictionary = new Uint8Array(opt.dictionary);\n\t\tconst dictionary = opt.dictionary;\n\t\tif (dictionary.length) {\n\t\t\tif (opt.gzip) throw new Error(\"dictionary is not supported with gzip\");\n\t\t\tstatus = deflateSetDictionary(this.strm, dictionary);\n\t\t\tif (status !== 0) throw new Error(messages_default[status]);\n\t\t}\n\t}\n\t/**\n\t* Sends input data to the deflate pipe, generating {@link Deflate.onData} calls\n\t* with new compressed chunks. Returns `true` on success. The last data block must\n\t* have `flush_mode` {@link Z_FINISH} (or `true`). That will flush the internal\n\t* pending buffers and call {@link Deflate.onEnd}.\n\t*\n\t* On failure, calls {@link Deflate.onEnd} with the error code and returns false.\n\t*\n\t* @param data input data. Strings will be converted to utf8 byte sequence.\n\t* @param flush_mode 0..6 for corresponding {@link Z_NO_FLUSH}..{@link Z_TREES} modes.\n\t* See constants. Skipped or `false` means {@link Z_NO_FLUSH}, `true` means {@link Z_FINISH}.\n\t*\n\t* @example\n\t* ```javascript\n\t* push(chunk, false) // push one of data chunks\n\t* ...\n\t* push(chunk, true) // push last chunk\n\t* ```\n\t*/\n\tpush(data, flush_mode = false) {\n\t\tconst strm = this.strm;\n\t\tconst chunkSize = this.options.chunkSize;\n\t\tlet status;\n\t\tlet _flush_mode;\n\t\tif (this.ended) return false;\n\t\tif (typeof flush_mode === \"number\") _flush_mode = flush_mode;\n\t\telse _flush_mode = flush_mode === true ? 4 : 0;\n\t\tif (typeof data === \"string\") strm.input = new TextEncoder().encode(data);\n\t\telse if (toString$1.call(data) === \"[object ArrayBuffer]\") strm.input = new Uint8Array(data);\n\t\telse strm.input = data;\n\t\tstrm.next_in = 0;\n\t\tstrm.avail_in = strm.input.length;\n\t\tif (!this.started) {\n\t\t\tthis.started = true;\n\t\t\tthis.onStart(strm);\n\t\t}\n\t\tfor (;;) {\n\t\t\tif (strm.avail_out === 0) {\n\t\t\t\tstrm.output = new Uint8Array(chunkSize);\n\t\t\t\tstrm.next_out = 0;\n\t\t\t\tstrm.avail_out = chunkSize;\n\t\t\t}\n\t\t\tif ((_flush_mode === 2 || _flush_mode === 3) && strm.avail_out <= 6) {\n\t\t\t\tthis.onData(strm.output.subarray(0, strm.next_out));\n\t\t\t\tstrm.avail_out = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstatus = deflate$1(strm, _flush_mode);\n\t\t\tif (status === 1) {\n\t\t\t\tif (strm.next_out > 0) this.onData(strm.output.subarray(0, strm.next_out));\n\t\t\t\tstatus = deflateEnd(this.strm);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (strm.avail_out === 0) {\n\t\t\t\tthis.onData(strm.output);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (_flush_mode > 0 && strm.next_out > 0) {\n\t\t\t\tthis.onData(strm.output.subarray(0, strm.next_out));\n\t\t\t\tstrm.avail_out = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (strm.avail_in === 0) return true;\n\t\t}\n\t\tthis.err = status;\n\t\tthis.msg = strm.msg || messages_default[status];\n\t\tthis.ended = true;\n\t\tthis.onEnd(status);\n\t\treturn status === 0;\n\t}\n\t/**\n\t* Called once before the first low-level deflate call.\n\t*/\n\tonStart(strm) {}\n\t/**\n\t* By default, stores data blocks in the {@link Deflate.chunks} property and glues\n\t* them in {@link Deflate.onEnd}. Override this handler if you need another behaviour.\n\t*/\n\tonData(chunk) {\n\t\tthis.chunks.push(chunk);\n\t}\n\t/**\n\t* Called once after you tell deflate that the input stream is\n\t* complete ({@link Z_FINISH}). By default, joins the collected {@link Deflate.chunks}\n\t* into the {@link Deflate.result} property.\n\t*\n\t* @param status deflate status. {@link Z_OK} on success, other if not.\n\t*/\n\tonEnd(status) {\n\t\tif (status === 0) this.result = flattenChunks(this.chunks);\n\t\tthis.chunks = [];\n\t}\n};\n/**\n* Compress `data` with deflate algorithm and `options`.\n* See {@link DeflateOptions} for the list of supported options.\n*\n* @example\n* ```javascript\n* import { deflate } from 'pako'\n*\n* const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9])\n*\n* console.log(deflate(data))\n* ```\n*/\nfunction deflate(input, options = {}) {\n\tconst deflator = new Deflate(options);\n\tdeflator.push(input, true);\n\tif (deflator.err) throw new Error(deflator.msg);\n\treturn deflator.result;\n}\n/**\n* The same as {@link deflate}, but creates raw data without a wrapper\n* (header and adler32 crc).\n*/\nfunction deflateRaw(input, options = {}) {\n\treturn deflate(input, Object.assign({}, options, { raw: true }));\n}\n/**\n* The same as {@link deflate}, but creates a gzip wrapper instead of\n* a deflate one.\n*/\nfunction gzip(input, options = {}) {\n\treturn deflate(input, Object.assign({}, options, { gzip: true }));\n}\n//#endregion\n//#region src/inflate.ts\nvar toString = Object.prototype.toString;\nvar defaultOptions = {\n\tchunkSize: 1024 * 64,\n\twindowBits: 15,\n\traw: false,\n\tdictionary: /* @__PURE__ */ new Uint8Array(0)\n};\n/**\n* Generic JS-style wrapper for zlib calls. If you don't need\n* streaming behaviour, use the simpler functions {@link inflate}\n* and {@link inflateRaw}.\n*/\nvar Inflate = class {\n\toptions;\n\t/**\n\t* Error code after inflate finishes. {@link Z_OK} on success.\n\t* Should be checked when broken data is possible.\n\t*/\n\terr;\n\t/** Error message, if {@link Inflate.err} is not {@link Z_OK}. */\n\tmsg;\n\t/**\n\t* `true` once the compressed stream has ended. A stream may end before the\n\t* caller's data does (trailing bytes), so check this to know when to stop\n\t* pushing - further {@link Inflate.push} calls are no-ops.\n\t*/\n\tended;\n\tstarted;\n\t/**\n\t* Chunks of output data, if {@link Inflate.onData} not overridden.\n\t* @internal\n\t*/\n\tchunks;\n\tstrm;\n\t/**\n\t* Uncompressed result, generated by default {@link Inflate.onData}\n\t* and {@link Inflate.onEnd} handlers. Filled after you push last chunk\n\t* (call {@link Inflate.push} with {@link Z_FINISH} / `true` param).\n\t*/\n\tresult;\n\t/**\n\t* Creates a new inflator instance with the specified params. Throws an\n\t* exception on bad params. See {@link InflateOptions} for the list of\n\t* supported options.\n\t*\n\t* By default, when no options are set, the deflate/gzip data format is\n\t* autodetected via the wrapper header.\n\t*\n\t* @example\n\t* ```javascript\n\t* import { Inflate } from 'pako'\n\t*\n\t* const chunk1 = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9])\n\t* const chunk2 = new Uint8Array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])\n\t*\n\t* const inflate = new Inflate({ level: 3 })\n\t*\n\t* inflate.push(chunk1, false)\n\t* inflate.push(chunk2, true) // true -> last chunk\n\t*\n\t* if (inflate.err) throw new Error(inflate.err)\n\t*\n\t* console.log(inflate.result)\n\t* ```\n\t*/\n\tconstructor(options = {}) {\n\t\tthis.options = Object.assign({}, defaultOptions, options);\n\t\tconst opt = this.options;\n\t\tif (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) {\n\t\t\topt.windowBits = -opt.windowBits;\n\t\t\tif (opt.windowBits === 0) opt.windowBits = -15;\n\t\t}\n\t\tif (opt.windowBits >= 0 && opt.windowBits < 16 && !options.windowBits) opt.windowBits += 32;\n\t\tif (opt.windowBits > 15 && opt.windowBits < 48) {\n\t\t\tif ((opt.windowBits & 15) === 0) opt.windowBits |= 15;\n\t\t}\n\t\tthis.err = 0;\n\t\tthis.msg = \"\";\n\t\tthis.ended = false;\n\t\tthis.started = false;\n\t\tthis.chunks = [];\n\t\tthis.result = /* @__PURE__ */ new Uint8Array(0);\n\t\tthis.strm = new ZStream();\n\t\tthis.strm.avail_out = 0;\n\t\tlet status = inflateInit2(this.strm, opt.windowBits);\n\t\tif (status !== 0) throw new Error(messages_default[status]);\n\t\tif (toString.call(opt.dictionary) === \"[object ArrayBuffer]\") opt.dictionary = new Uint8Array(opt.dictionary);\n\t\tconst dictionary = opt.dictionary;\n\t\tif (opt.raw && dictionary.length) {\n\t\t\tstatus = inflateSetDictionary(this.strm, dictionary);\n\t\t\tif (status !== 0) throw new Error(messages_default[status]);\n\t\t}\n\t}\n\t/**\n\t* Sends input data to the inflate pipe, generating {@link Inflate.onData} calls\n\t* with new output chunks. Returns `true` on success. If end of stream is\n\t* detected, {@link Inflate.onEnd} will be called.\n\t*\n\t* `flush_mode` is not needed for normal operation, because end of stream\n\t* is detected automatically. Pass {@link Z_SYNC_FLUSH} to force the decoder\n\t* to emit all currently available output — handy when you need to decode\n\t* data frame-by-frame from a long-running stream.\n\t*\n\t* On failure, calls {@link Inflate.onEnd} with the error code and returns false.\n\t*\n\t* Once the stream has ended (a compressed stream may end before your data\n\t* does), further `push` calls are no-ops and return whether the decode\n\t* finished successfully. The final outcome is in {@link Inflate.result},\n\t* {@link Inflate.err} and {@link Inflate.msg}.\n\t*\n\t* @param flush_mode 0..6 for corresponding {@link Z_NO_FLUSH}..{@link Z_TREES}\n\t* flush modes. See constants. Skipped or `false` means {@link Z_NO_FLUSH},\n\t* `true` means {@link Z_FINISH}.\n\t*\n\t* @example\n\t* ```javascript\n\t* push(chunk, false) // push one of data chunks\n\t* ...\n\t* push(chunk, true) // push last chunk\n\t* ```\n\t*/\n\tpush(data, flush_mode = false) {\n\t\tconst strm = this.strm;\n\t\tconst chunkSize = this.options.chunkSize;\n\t\tlet status;\n\t\tlet _flush_mode;\n\t\tlet last_avail_out;\n\t\tif (this.ended) return this.err === 0;\n\t\tif (typeof flush_mode === \"number\") _flush_mode = flush_mode;\n\t\telse _flush_mode = flush_mode === true ? 4 : 0;\n\t\tif (toString.call(data) === \"[object ArrayBuffer]\") strm.input = new Uint8Array(data);\n\t\telse strm.input = data;\n\t\tstrm.next_in = 0;\n\t\tstrm.avail_in = strm.input.length;\n\t\tif (!this.started) {\n\t\t\tthis.started = true;\n\t\t\tthis.onStart(strm);\n\t\t}\n\t\tfor (;;) {\n\t\t\tif (strm.avail_out === 0) {\n\t\t\t\tstrm.output = new Uint8Array(chunkSize);\n\t\t\t\tstrm.next_out = 0;\n\t\t\t\tstrm.avail_out = chunkSize;\n\t\t\t}\n\t\t\tstatus = inflate$1(strm, _flush_mode);\n\t\t\tif (status === 2) {\n\t\t\t\tconst dictionary = this.options.dictionary;\n\t\t\t\tif (dictionary.length) {\n\t\t\t\t\tstatus = inflateSetDictionary(strm, dictionary);\n\t\t\t\t\tif (status === 0) status = inflate$1(strm, _flush_mode);\n\t\t\t\t\telse if (status === -3) status = 2;\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (strm.avail_in > 0 && status === 1 && strm.state.wrap & 2 && strm.state.flags !== 0 && strm.input[strm.next_in] !== 0) {\n\t\t\t\tinflateReset(strm);\n\t\t\t\tstatus = inflate$1(strm, _flush_mode);\n\t\t\t}\n\t\t\tif (status === -2 || status === -3 || status === 2 || status === -4) break;\n\t\t\tlast_avail_out = strm.avail_out;\n\t\t\tif (strm.next_out) {\n\t\t\t\tif (strm.avail_out === 0 || status === 1 || _flush_mode > 0) {\n\t\t\t\t\tthis.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));\n\t\t\t\t\tstrm.avail_out = 0;\n\t\t\t\t\tstrm.next_out = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ((status === 0 || status === -5) && last_avail_out === 0) continue;\n\t\t\tif (status === 1) {\n\t\t\t\tstatus = inflateEnd(this.strm);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (strm.avail_in === 0) {\n\t\t\t\tif (_flush_mode === 4) {\n\t\t\t\t\tstatus = inflateEnd(this.strm);\n\t\t\t\t\tif (status === 0) status = -5;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tthis.err = status;\n\t\tthis.msg = strm.msg || messages_default[status];\n\t\tthis.ended = true;\n\t\tthis.onEnd(status);\n\t\treturn status === 0;\n\t}\n\t/**\n\t* Called once before the first low-level inflate call.\n\t*\n\t* Override this handler to attach low-level inflate state, for example to read\n\t* gzip header metadata:\n\t*\n\t* ```javascript\n\t* import { Inflate, GZheader, zlibInflateGetHeader } from 'pako'\n\t*\n\t* const inflator = new Inflate()\n\t*\n\t* inflator.onStart = function (strm) {\n\t* this.header = new GZheader()\n\t* zlibInflateGetHeader(strm, this.header)\n\t* }\n\t*\n\t* inflator.push(data, true)\n\t* console.log(inflator.header.name)\n\t* ```\n\t*/\n\tonStart(strm) {}\n\t/**\n\t* By default, stores data blocks in the {@link Inflate.chunks} property and glues\n\t* them in {@link Inflate.onEnd}. Override this handler if you need another behaviour.\n\t*\n\t* @param chunk output data.\n\t*/\n\tonData(chunk) {\n\t\tthis.chunks.push(chunk);\n\t}\n\t/**\n\t* Called after you tell inflate that the input stream is\n\t* complete ({@link Z_FINISH}). By default, joins the collected {@link Inflate.chunks},\n\t* frees memory and fills the {@link Inflate.result} property.\n\t*\n\t* @param status inflate status. {@link Z_OK} on success, other if not.\n\t*/\n\tonEnd(status) {\n\t\tif (status === 0) this.result = flattenChunks(this.chunks);\n\t\tthis.chunks = [];\n\t}\n};\n/**\n* One-shot inflate decompress. Autodetects `gzip`/`zlib`\n* format via the wrapper header — so {@link ungzip} is just a convenience alias of\n* this function. See {@link InflateOptions} for zlib options. Set\n* `toText: true` to decode the result as UTF-8 text.\n*\n* @example\n* ```javascript\n* import { deflate, inflate } from 'pako'\n*\n* const input = deflate(new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9]))\n* let output\n*\n* try {\n* output = inflate(input)\n* } catch (err) {\n* console.log(err)\n* }\n* ```\n*/\nfunction inflate(input, options = {}) {\n\tconst inflator = new Inflate(options);\n\tinflator.push(input, true);\n\tif (inflator.err) throw new Error(inflator.msg);\n\tconst result = inflator.result;\n\treturn options.toText ? new TextDecoder().decode(result) : result;\n}\n/**\n* The same as {@link inflate}, but consumes raw data without a wrapper\n* (header and adler32 crc).\n*/\nfunction inflateRaw(input, options = {}) {\n\treturn inflate(input, {\n\t\t...options,\n\t\traw: true\n\t});\n}\n//#endregion\nexport { Deflate, GZheader, Inflate, ZStream, Z_BLOCK, Z_BUF_ERROR, Z_DATA_ERROR, Z_ERRNO, Z_FINISH, Z_FULL_FLUSH, Z_MEM_ERROR, Z_NEED_DICT, Z_NO_FLUSH, Z_OK, Z_PARTIAL_FLUSH, Z_STREAM_END, Z_STREAM_ERROR, Z_SYNC_FLUSH, Z_TREES, deflate, deflateRaw, gzip, inflate, inflate as ungzip, inflateRaw, deflate$1 as zlibDeflate, deflateEnd as zlibDeflateEnd, deflateInit as zlibDeflateInit, deflateInit2 as zlibDeflateInit2, deflateReset as zlibDeflateReset, deflateResetKeep as zlibDeflateResetKeep, deflateSetDictionary as zlibDeflateSetDictionary, deflateSetHeader as zlibDeflateSetHeader, inflate$1 as zlibInflate, inflateEnd as zlibInflateEnd, inflateGetHeader as zlibInflateGetHeader, inflateInit as zlibInflateInit, inflateInit2 as zlibInflateInit2, inflateReset as zlibInflateReset, inflateReset2 as zlibInflateReset2, inflateResetKeep as zlibInflateResetKeep, inflateSetDictionary as zlibInflateSetDictionary };\n\n//# sourceMappingURL=pako.mjs.map","// this code is modified from https://github.com/uuidjs/uuid\n\nimport { Uuid } from './brs/types';\n\n/*\nThe MIT License (MIT)\n\nCopyright (c) 2010-2020 Robert Kieffer and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\nconst hexTable: string[] = Array.from({ length: 256 }).map((_, i) =>\n (i + 0x100).toString(16).substr(1),\n);\n\n// stringify uuid\nexport function uuidStringify(arr: number[]): Uuid {\n return (\n hexTable[arr[0]] +\n hexTable[arr[1]] +\n hexTable[arr[2]] +\n hexTable[arr[3]] +\n '-' +\n hexTable[arr[4]] +\n hexTable[arr[5]] +\n '-' +\n hexTable[arr[6]] +\n hexTable[arr[7]] +\n '-' +\n hexTable[arr[8]] +\n hexTable[arr[9]] +\n '-' +\n hexTable[arr[10]] +\n hexTable[arr[11]] +\n hexTable[arr[12]] +\n hexTable[arr[13]] +\n hexTable[arr[14]] +\n hexTable[arr[15]]\n ).toLowerCase();\n}\n\nexport function uuidParse(uuid: Uuid): Uint8Array {\n let v;\n const arr = new Uint8Array(16);\n\n // Parse ########-....-....-....-............\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = (v >>> 16) & 0xff;\n arr[2] = (v >>> 8) & 0xff;\n arr[3] = v & 0xff;\n\n // Parse ........-####-....-....-............\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff;\n\n // Parse ........-....-####-....-............\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff;\n\n // Parse ........-....-....-####-............\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff;\n\n // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n arr[10] = ((v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000) & 0xff;\n arr[11] = (v / 0x100000000) & 0xff;\n arr[12] = (v >>> 24) & 0xff;\n arr[13] = (v >>> 16) & 0xff;\n arr[14] = (v >>> 8) & 0xff;\n arr[15] = v & 0xff;\n\n return arr;\n}\n","import { deflate, inflate } from 'pako';\nimport { MAX_INT } from './constants';\nimport {\n BRInventoryEntryPlan,\n BRSBytes,\n Bytes,\n IntVector,\n UnrealColor,\n UnrealFloat,\n UnrealType,\n Uuid,\n Vector3d,\n WireGraphVariant,\n} from './types';\nimport { uuidParse, uuidStringify } from '../uuid';\n\n/*\n Notes:\n - Everything is Little Endian by default because\n UE4 uses it.\n - I'd use Buffer.readUInt16LE if I was making this\n nodejs only. I don't want to require('Buffer/')\n\n */\n\n// Determine if a string is ascii-only\nfunction isASCII(text: string): boolean {\n return /^[\\x00-\\x7F]*$/.test(text);\n}\n\n// convert BGRA color to RGBA color\nexport const bgra = ([b, g, r, a]: number[]): [\n number,\n number,\n number,\n number,\n] => [r, g, b, a];\n\n// Compare equality of byte arrays\nexport function isEqual<T>(arrA: Array<T>, arrB: Array<T>): boolean {\n return arrA.length === arrB.length && arrA.every((a: T, i) => arrB[i] === a);\n}\n\nfunction isBRSBytes(data: Bytes): data is BRSBytes {\n return (data as BRSBytes).brsOffset !== undefined;\n}\n\n// read `len` bytes and return slice while updating offset\nexport function subarray(data: Bytes, len: number, isCopy = false): Uint8Array {\n if (!(data instanceof Uint8Array)) {\n throw new Error(`Invalid data type in bytes reader (${typeof data})`);\n }\n\n let bytes: BRSBytes;\n if (!isBRSBytes(data)) {\n bytes = data as BRSBytes;\n bytes.brsOffset = 0;\n } else {\n bytes = data;\n }\n\n const chunk = bytes[isCopy ? 'slice' : 'subarray'](\n bytes.brsOffset,\n bytes.brsOffset + len,\n );\n bytes.brsOffset += len;\n return chunk;\n}\n\n// break a byte array into chunks of a specified size\nexport function chunk(arr: Bytes, size: number): BRSBytes[] {\n // relative length based on the offset of the array's data view\n const length = arr.length - (isBRSBytes(arr) ? arr.brsOffset : 0);\n\n // out array of chunks pre-allocated\n const out = Array(Math.floor(length / size));\n\n for (let i = 0; i < length / size; i++) {\n out[i] = subarray(arr, size, true);\n }\n\n return out;\n}\n\n// Read a u16 from a byte array\nfunction read_u16(data: Bytes, littleEndian = true): number {\n const [a, b] = subarray(data, 2);\n\n return littleEndian ? (b << 8) | a : (a << 8) | b;\n}\n\n// Write a u16 into byte array\nfunction write_u16(num: number, littleEndian = true): Uint8Array {\n const data = [num & 255, (num >> 8) & 255];\n return new Uint8Array(!littleEndian ? data.reverse() : data);\n}\n\n// Read an i32 from a byte array\nfunction read_i32(data: Bytes, littleEndian = true): number {\n const [a, b, c, d] = subarray(data, 4);\n return littleEndian\n ? (d << 24) | (c << 16) | (b << 8) | a\n : (a << 24) | (b << 16) | (c << 8) | d;\n}\n\n// Write an i32 from a byte array\nfunction write_i32(num: number, littleEndian = true): Uint8Array {\n const data = new Uint8Array([\n num & 255,\n (num >> 8) & 255,\n (num >> 16) & 255,\n (num >> 24) & 255,\n ]);\n\n return !littleEndian ? data.reverse() : data;\n}\n\n// Decompress a byte array of compressed data\nfunction read_compressed(data: Bytes): Bytes {\n const uncompressedSize = read_i32(data);\n const compressedSize = read_i32(data);\n\n // Throw error for weird compression/uncompression sizes\n if (\n compressedSize < 0 ||\n uncompressedSize < 0 ||\n compressedSize >= uncompressedSize\n ) {\n throw new Error(\n `Invalid compressed section size (comp: ${compressedSize}, uncomp: ${uncompressedSize})`,\n );\n }\n\n // No compressed data? Return those bytes\n if (compressedSize === 0) {\n return subarray(data, uncompressedSize);\n } else {\n // Decompress the data otherwise\n const compressed = subarray(data, compressedSize);\n return inflate(compressed);\n }\n}\n\n// Compress a byte array into fewer bytes\nfunction write_uncompressed(...args: Uint8Array[]): Uint8Array {\n // Concat the args to one massive array\n const data = concat(...args);\n\n // Build the output\n return concat(write_i32(data.length), write_i32(0), data);\n}\n\n// Compress a byte array into fewer bytes\nfunction write_compressed(...args: Uint8Array[]): Uint8Array {\n // Concat the args to one massive array\n const data = concat(...args);\n\n // Do the compression\n const compressed = deflate(data);\n const uncompressedSize = data.length;\n const compressedSize = compressed.length;\n\n if (uncompressedSize > MAX_INT) {\n throw new Error(`uncompressedSize (${uncompressedSize}) out of range`);\n }\n\n if (compressedSize > MAX_INT) {\n throw new Error(`compressedSize (${compressedSize}) out of range`);\n }\n\n // Determine if compression increases size\n const badCompress = compressedSize >= uncompressedSize;\n\n // Build the output\n return concat(\n write_i32(uncompressedSize),\n write_i32(badCompress ? 0 : compressedSize),\n badCompress ? data : compressed,\n );\n}\n\n// Read a string from a byte array\nfunction read_string(data: Bytes): string {\n const raw_size = read_i32(data);\n const is_ucs2 = raw_size < 0;\n const size = is_ucs2 ? -raw_size * 2 : raw_size;\n\n // Determine if we are using UCS-2\n if (is_ucs2) {\n if (size % 2 !== 0) {\n throw new Error('Invalid UCS-2 data size');\n }\n\n // Create ucs2 encoded string\n return String.fromCodePoint(\n // Read the data in 2 byte windows\n ...chunk(subarray(data, size), 2).map(arr => read_u16(arr)), // Convert the two bytes into u16\n );\n } else {\n // Read the data, remove the \\u0000 at the end :)\n const strData = subarray(data, size).subarray(0, -1);\n\n // Convert into ascii\n // console.debug('[debug] strdata', strData);\n return String.fromCharCode.apply(null, strData);\n }\n}\n\n// Write a string to bytes\nfunction write_string(str: string): Uint8Array {\n if (isASCII(str)) {\n return concat(\n write_i32(str.length + 1), // Write string length (+ null term)\n new Uint8Array(str.split('').map(s => s.charCodeAt(0))), // Write string as bytes\n new Uint8Array([0]), // Null terminator\n );\n } else {\n // ucs2 strings denoted by negative length\n const len = -str.length;\n return concat(\n write_i32(len), // write length\n // convert string to little endian ucs2\n new Uint8Array(\n str\n .split('')\n .flatMap(s => [s.charCodeAt(0) & 0xff, s.charCodeAt(0) >> 8]),\n ),\n // new Uint8Array([0]) // Null terminator\n );\n }\n}\n\n// Read uuid from 4 LE ints\nfunction read_uuid(data: Bytes): string {\n return uuidStringify(\n // each chunk is LE\n chunk(subarray(data, 16), 4).flatMap(([a, b, c, d]) => [d, c, b, a]),\n );\n}\n\n// parse a uuid into 4 LE ints\nfunction write_uuid(uuid: Uuid) {\n return concat(\n ...chunk(uuidParse(uuid), 4).map(\n ([a, b, c, d]) => new Uint8Array([d, c, b, a]),\n ),\n );\n}\n\n// Read an array of things given a fn\nfunction read_array<T>(data: Bytes, fn: (_: Bytes) => T): T[] {\n const length = read_i32(data);\n const arr = Array(length);\n for (let i = 0; i < length; i++) {\n arr[i] = fn(data);\n }\n return arr;\n}\n\n// iterate an array of things given a fn\nfunction read_each(data: Bytes, fn: (_: Bytes) => void) {\n const length = read_i32(data);\n for (let i = 0; i < length; i++) {\n fn(data);\n }\n}\n\n// Write an array of things to bytes\nfunction write_array<T>(arr: T[], fn: (_: T) => Uint8Array) {\n return concat(write_i32(arr.length), ...arr.map(o => fn(o)));\n}\n\n// Tool for reading byte arrays 1 bit at a time\nexport class BitReader {\n buffer: Uint8Array;\n pos: number = 0;\n\n constructor(data: Uint8Array) {\n this.buffer = data;\n }\n\n empty(): boolean {\n return this.pos >= this.buffer.length * 8;\n }\n\n // Read one bit as a boolean\n bit(): boolean {\n const bit = (this.buffer[this.pos >> 3] & (1 << (this.pos & 0b111))) !== 0;\n this.pos++;\n return bit;\n }\n\n // Align the pos to the nearest byte\n align() {\n this.pos = (this.pos + 7) & ~7;\n }\n\n // read an int up to max\n int(max: number): number {\n let value = 0;\n let mask = 1;\n\n while (value + mask < max && mask !== 0) {\n if (this.bit()) {\n value |= mask;\n }\n mask <<= 1;\n }\n\n return value;\n }\n\n // read a packet in from bits\n uint_packed(): number {\n let value = 0;\n for (let i = 0; i < 5; i++) {\n const next = this.bit();\n\n let part = 0;\n for (let shift = 0; shift < 7; shift++) {\n part |= (this.bit() ? 1 : 0) << shift;\n }\n value |= part << (7 * i);\n if (!next) {\n break;\n }\n }\n\n return value;\n }\n\n // an item in a read_positive_int_vector array\n int_packed(): number {\n const value = this.uint_packed();\n return (value >> 1) * ((value & 1) !== 0 ? 1 : -1);\n }\n\n // read some bits\n bits(num: number): number[] {\n const arr: number[] = [];\n for (let bit = 0; bit < num; bit++) {\n const shift = bit & 7;\n arr[bit >> 3] =\n (arr[bit >> 3] & ~(1 << shift)) | ((this.bit() ? 1 : 0) << shift);\n }\n return arr;\n }\n\n // Read some bytes\n bytes(num: number): Uint8Array {\n return new Uint8Array(this.bytesArr(num));\n }\n\n // read some bytes but not as a Uint8Array\n bytesArr(num: number): number[] {\n return this.bits(num * 8);\n }\n\n // read an array\n array<T>(fn: (_: BitReader) => T): T[] {\n const length = read_i32(this.bytes(4));\n const arr = Array(length);\n for (let i = 0; i < length; i++) {\n arr[i] = fn(this);\n }\n return arr;\n }\n\n // for each\n each(fn: (data: BitReader) => void) {\n const length = read_i32(this.bytes(4));\n for (let i = 0; i < length; i++) {\n fn(this);\n }\n }\n\n // read a string\n string(): string {\n const lenBytes = this.bytesArr(4);\n let len = read_i32(new Uint8Array(lenBytes));\n if (len < 0) len = -len * 2;\n return read_string(new Uint8Array(lenBytes.concat(this.bytesArr(len))));\n }\n\n // read a 32-bit float\n float(): number {\n const view = new DataView(new ArrayBuffer(4));\n\n // Write the ints to it\n view.setUint16(2, read_u16(this.bytes(2)));\n view.setUint16(0, read_u16(this.bytes(2)));\n\n // Read the bits as a float; note that by doing this, we're implicitly\n // converting it from a 32-bit float into JavaScript's native 64-bit double\n return view.getFloat32(0);\n }\n\n integer(): number {\n const view = new DataView(new ArrayBuffer(4));\n view.setUint16(2, read_u16(this.bytes(2)));\n view.setUint16(0, read_u16(this.bytes(2)));\n\n // Read the bits as a signed 32-bit integer\n return view.getInt32(0);\n }\n\n int64(): number {\n const view = new DataView(new ArrayBuffer(8));\n\n // Read it 2 bytes at a time\n view.setUint16(6, read_u16(this.bytes(2)));\n view.setUint16(4, read_u16(this.bytes(2)));\n view.setUint16(2, read_u16(this.bytes(2)));\n view.setUint16(0, read_u16(this.bytes(2)));\n\n // Read the bits as a signed 64-bit integer\n const num = view.getBigInt64(0);\n if (num <= 1n << 64n) {\n return Number(num);\n }\n throw new Error(\n `Cannot read 64-bit integer ${num} as a JavaScript number...`,\n );\n }\n\n // read a 64-bit double\n double(): number {\n const view = new DataView(new ArrayBuffer(8));\n\n // Read it 2 bytes at a time\n view.setUint16(6, read_u16(this.bytes(2)));\n view.setUint16(4, read_u16(this.bytes(2)));\n view.setUint16(2, read_u16(this.bytes(2)));\n view.setUint16(0, read_u16(this.bytes(2)));\n\n // Read the bits as a double\n return view.getFloat64(0);\n }\n\n wireGraphVariant(): WireGraphVariant {\n const type = this.bytes(1)[0];\n switch (type) {\n case 0: // number\n return { number: this.double() };\n case 1: // integer\n return { integer: this.int64() };\n case 2: // bool\n return { bool: this.bytes(1)[0] !== 0 };\n case 3: // exec\n return { exec: true };\n case 4: // object\n return { object: true };\n default:\n throw new Error(`Unknown wire graph variant type ${type}`);\n }\n }\n\n // read unreal types\n unreal(type: string): UnrealType {\n switch (type) {\n case 'String':\n case 'Class':\n case 'Object':\n return this.string();\n case 'Boolean':\n return !!read_i32(this.bytes(4));\n case 'Integer':\n return this.integer();\n case 'Integer64':\n return this.int64();\n case 'Float':\n return this.float();\n case 'Double':\n return this.double();\n case 'Color':\n return bgra(this.bytesArr(4)) as UnrealColor;\n case 'Byte':\n return this.bytes(1)[0];\n case 'Rotator':\n case 'Rotator3d':\n return [this.float(), this.float(), this.float()];\n case 'Vector3d':\n return [this.float(), this.float(), this.float()] as Vector3d;\n case 'IntVector':\n return [this.integer(), this.integer(), this.integer()] as IntVector;\n case 'BRInventoryEntryPlan':\n return this.string() as BRInventoryEntryPlan;\n case 'WireGraphVariant':\n return this.wireGraphVariant();\n case 'WireGraphPrimMathVariant':\n return this.wireGraphVariant();\n }\n throw new Error('Unknown unreal type ' + type);\n }\n}\n\nexport class BitWriter {\n buffer: number[] = [];\n cur: number = 0;\n bitNum: number = 0;\n\n // Write a boolean as a bit\n bit(val: boolean) {\n this.cur |= (val ? 1 : 0) << this.bitNum;\n this.bitNum++;\n if (this.bitNum >= 8) {\n this.align();\n }\n }\n\n // Write `len` bits from `src` bytes\n bits(src: number[] | Uint8Array, len: number) {\n for (let bit = 0; bit < len; bit++) {\n this.bit((src[bit >> 3] & (1 << (bit & 7))) !== 0);\n }\n }\n\n // Write multiple bytes\n bytes(src: number[] | Uint8Array) {\n this.bits(src, 8 * src.length);\n }\n\n // Push the current bit into the buffer\n align() {\n if (this.bitNum > 0) {\n this.buffer.push(this.cur);\n this.cur = 0;\n this.bitNum = 0;\n }\n }\n\n // Write an int up to the potential max size\n int(value: number, max: number) {\n if (max < 2) {\n throw new Error(\n `Invalid input (BitWriter) -- max (${max}) must be at least 2`,\n );\n }\n\n if (value >= max) {\n throw new Error(\n `Invalid input (BitWriter) -- value (${value}) is larger than max (${max})`,\n );\n }\n\n let new_val = 0;\n let mask = 1;\n\n while (new_val + mask < max && mask !== 0) {\n this.bit((value & mask) !== 0);\n if ((value & mask) !== 0) {\n new_val |= mask;\n }\n\n mask <<= 1;\n }\n }\n\n // Write a packed unsigned int\n uint_packed(value: number) {\n do {\n const src = value & 0b1111111;\n value >>= 7;\n this.bit(value !== 0);\n this.bits([src], 7);\n } while (value !== 0);\n }\n\n // Write a packed integer\n int_packed(value: number) {\n this.uint_packed((Math.abs(value) << 1) | (value >= 0 ? 1 : 0));\n }\n\n // Return built buffer\n finish(): Uint8Array {\n this.align();\n return new Uint8Array(this.buffer);\n }\n\n // Return built buffer (and include length)\n finishSection() {\n this.align();\n return concat(write_i32(this.buffer.length), new Uint8Array(this.buffer));\n }\n\n // write a string\n string(str: string) {\n this.bytes(write_string(str));\n }\n\n float(num: UnrealFloat) {\n // create a float array\n const floatArr = new Float32Array(1);\n // assign the number\n floatArr[0] = num;\n // convert it into a byte array\n const bytes = new Int8Array(floatArr.buffer);\n this.bytes([bytes[0], bytes[1], bytes[2], bytes[3]]);\n }\n\n integer(num: number) {\n // create an int array\n const intArr = new Int32Array(1);\n // assign the number\n intArr[0] = num;\n // convert it into a byte array\n const bytes = new Int8Array(intArr.buffer);\n this.bytes([bytes[0], bytes[1], bytes[2], bytes[3]]);\n }\n\n int64(num: number | bigint | string) {\n // write this as a 64-bit integer using a dataview\n const view = new DataView(new ArrayBuffer(8));\n view.setBigInt64(0, typeof num === 'bigint' ? num : BigInt(num), true);\n this.bytes(new Uint8Array(view.buffer));\n }\n\n double(num: number) {\n // create a double array\n const doubleArr = new Float64Array(1);\n // assign the number\n doubleArr[0] = num;\n // convert it into a byte array\n const bytes = new Int8Array(doubleArr.buffer);\n this.bytes([\n bytes[0],\n bytes[1],\n bytes[2],\n bytes[3],\n bytes[4],\n bytes[5],\n bytes[6],\n bytes[7],\n ]);\n }\n\n wireGraphVariant(variant: WireGraphVariant) {\n if ('number' in variant) {\n this.bytes([0]); // type 0\n this.double(variant.number);\n } else if ('integer' in variant) {\n this.bytes([1]); // type 1\n this.int64(variant.integer);\n } else if ('bool' in variant) {\n this.bytes([2, variant.bool ? 1 : 0]); // type 2\n } else if ('exec' in variant) {\n this.bytes([3]); // type 3\n // no data for exec\n } else if ('object' in variant) {\n this.bytes([4]); // type 4\n // no data for object\n } else {\n throw new Error(\n `Unknown wire graph variant type ${JSON.stringify(variant)}`,\n );\n }\n }\n\n // run a function with `this` as a BitReader\n self(fn: (this: BitWriter) => void) {\n fn.bind(this)();\n return this;\n }\n\n // write an array\n array<T>(arr: T[], fn: (this: BitWriter, item: T, index: number) => void) {\n this.bytes(write_i32(arr.length));\n arr.forEach(fn.bind(this));\n return this;\n }\n\n // write things from an array\n each<T>(arr: T[], fn: (this: BitWriter, item: T, index: number) => void) {\n arr.forEach(fn.bind(this));\n return this;\n }\n\n // write unreal types\n unreal(type: string, value: UnrealType) {\n switch (type) {\n case 'Class':\n if (typeof value !== 'string') {\n throw new Error(\n `writing unreal type Class, did not receive string (${value})`,\n );\n }\n this.string(value);\n return;\n case 'String':\n if (typeof value !== 'string') {\n throw new Error(\n `writing unreal type String, did not receive string (${value})`,\n );\n }\n this.string(value);\n return;\n case 'Object':\n if (typeof value !== 'string') {\n throw new Error(\n `writing unreal type Object, did not receive string (${value})`,\n );\n }\n this.string(value);\n return;\n case 'Boolean':\n if (typeof value !== 'boolean') {\n throw new Error(\n `writing unreal type Boolean, did not receive boolean (${value})`,\n );\n }\n this.bytes(write_i32(value ? 1 : 0));\n return;\n case 'Float':\n if (typeof value !== 'number') {\n throw new Error(\n `writing unreal type Float, did not receive float (${value})`,\n );\n }\n this.float(value);\n return;\n case 'Byte':\n if (typeof value !== 'number') {\n throw new Error(\n `writing unreal type Byte, did not receive Byte (${value})`,\n );\n }\n this.bytes([value & 255]);\n return;\n case 'Color':\n if (!Array.isArray(value) || value.length !== 4) {\n throw new Error(\n `writing unreal type Color, did not receive Array (${value})`,\n );\n }\n this.bytes(bgra(value));\n return;\n case 'Rotator':\n case 'Rotator3d':\n if (!Array.isArray(value) || value.length !== 3) {\n throw new Error(\n `writing unreal type Rotator, did not receive Array (${value})`,\n );\n }\n\n this.float(value[0]);\n this.float(value[1]);\n this.float(value[2]);\n return;\n case 'Vector3d':\n if (!Array.isArray(value) || value.length !== 3) {\n throw new Error(\n `writing unreal type Vector3d, did not receive Array (${value})`,\n );\n }\n\n this.float(value[0]);\n this.float(value[1]);\n this.float(value[2]);\n return;\n case 'IntVector':\n if (!Array.isArray(value) || value.length !== 3) {\n throw new Error(\n `writing unreal type IntVector, did not receive Array (${value})`,\n );\n }\n this.integer(value[0]);\n this.integer(value[1]);\n this.integer(value[2]);\n return;\n case 'Integer':\n if (typeof value !== 'number') {\n throw new Error(\n `writing unreal type Integer, did not receive integer (${value})`,\n );\n }\n this.integer(value);\n return;\n case 'Integer64':\n if (typeof value !== 'number') {\n throw new Error(\n `writing unreal type Integer64, did not receive integer (${value})`,\n );\n }\n this.int64(value);\n return;\n case 'Double':\n if (typeof value !== 'number') {\n throw new Error(\n `writing unreal type Double, did not receive double (${value})`,\n );\n }\n this.double(value);\n return;\n case 'WireGraphVariant':\n if (typeof value !== 'object') {\n throw new Error(\n `writing unreal type WireGraphVariant, did not receive object (${value})`,\n );\n }\n this.wireGraphVariant(value as WireGraphVariant);\n return;\n case 'WireGraphPrimMathVariant':\n if (typeof value !== 'object') {\n throw new Error(\n `writing unreal type WireGraphPrimMathVariant, did not receive object (${value})`,\n );\n }\n this.wireGraphVariant(value as WireGraphVariant);\n return;\n case 'BRInventoryEntryPlan':\n if (typeof value !== 'string') {\n throw new Error(\n `writing unreal type BRInventoryEntryPlan, did not receive string (${value})`,\n );\n }\n this.string(value);\n return;\n }\n throw new Error('Unknown unreal type ' + type);\n }\n}\n\n// concat uint8arrays together\nexport function concat(...arrays: Uint8Array[]): Uint8Array {\n const buffLen = arrays.reduce((sum, value) => sum + value.length, 0);\n const buff = new Uint8Array(buffLen);\n\n // for each array - copy it over buff\n // next array is copied right after the previous one\n let length = 0;\n for (const array of arrays) {\n buff.set(array, length);\n length += array.length;\n }\n\n return buff;\n}\n\nexport const read = {\n bytes: subarray,\n u16: read_u16,\n i32: read_i32,\n compressed: read_compressed,\n string: read_string,\n uuid: read_uuid,\n array: read_array,\n each: read_each,\n bits: (data: Bytes) => new BitReader(data),\n};\n\nexport const write = {\n u16: write_u16,\n i32: write_i32,\n compressed: write_compressed,\n uncompressed: write_uncompressed,\n string: write_string,\n uuid: write_uuid,\n array: write_array,\n bits: () => new BitWriter(),\n};\n","import {\n BrickV1,\n BRSBytes,\n BrsV1,\n ReadOptions,\n UnrealColor,\n Vector,\n} from './types';\nimport { bgra, read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrsV1(\n brsData: BRSBytes,\n options: ReadOptions = {}\n): BrsV1 {\n // Read in Headers\n const header1Data = read.compressed(brsData);\n const header2Data = read.compressed(brsData);\n\n const map = read.string(header1Data);\n const author_name = read.string(header1Data);\n const description = read.string(header1Data);\n\n const author_id = read.uuid(header1Data);\n\n const brick_count = read.i32(header1Data);\n\n const mods = read.array(header2Data, read.string);\n const brick_assets = read.array(header2Data, read.string);\n const colors = read.array(\n header2Data,\n data => bgra(Array.from(read.bytes(data, 4))) as UnrealColor\n );\n\n // Read in bricks\n let bricks: BrickV1[] = [];\n\n const numAssets = Math.max(brick_assets.length, 2);\n\n if (options.bricks) {\n bricks = Array(brick_count);\n const brickData = read.compressed(brsData);\n const brickBits = read.bits(brickData);\n\n // Brick reader\n for (let i = 0; !brickBits.empty() && i < brick_count; i++) {\n brickBits.align();\n const asset_name_index = brickBits.int(numAssets);\n const size: Vector = brickBits.bit()\n ? [\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n ]\n : [0, 0, 0];\n const position: Vector = [\n brickBits.int_packed(),\n brickBits.int_packed(),\n brickBits.int_packed(),\n ];\n\n const orientation = brickBits.int(24);\n const direction = (orientation >> 2) % 6;\n const rotation = orientation & 3;\n const collision = brickBits.bit();\n const visibility = brickBits.bit();\n\n const color = brickBits.bit()\n ? bgra(brickBits.bytesArr(4) as [number, number, number, number])\n : brickBits.int(colors.length);\n\n bricks[i] = {\n asset_name_index,\n size,\n collision,\n position,\n direction,\n rotation,\n visibility,\n color,\n };\n }\n }\n\n return {\n version: 1,\n map,\n description,\n author: {\n id: author_id,\n name: author_name,\n },\n mods,\n brick_assets,\n colors,\n bricks,\n brick_count,\n };\n}\n","import {\n AppliedComponent,\n BrickV10,\n BRSBytes,\n BrsV10,\n Collision,\n ReadOptions,\n UnrealColor,\n User,\n Vector,\n} from './types';\nimport { bgra, read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrsV10(\n brsData: BRSBytes,\n options: ReadOptions = {}\n): BrsV10 {\n // game version is included in saves >= v8\n const game_version = read.i32(brsData);\n\n // Read in Headers\n const header1Data = read.compressed(brsData);\n const header2Data = read.compressed(brsData);\n\n const map = read.string(header1Data);\n const author_name = read.string(header1Data);\n const description = read.string(header1Data);\n const author_id = read.uuid(header1Data);\n const host: User = {\n name: read.string(header1Data),\n id: read.uuid(header1Data),\n };\n const save_time = read.bytes(header1Data, 8);\n\n const brick_count = read.i32(header1Data);\n\n const mods = read.array(header2Data, read.string);\n const brick_assets = read.array(header2Data, read.string);\n const colors = read.array(\n header2Data,\n data => bgra(Array.from(read.bytes(data, 4))) as UnrealColor\n );\n const materials = read.array(header2Data, read.string);\n\n const brick_owners = read.array(header2Data, data => ({\n id: read.uuid(data),\n name: read.string(data),\n bricks: read.i32(data),\n }));\n\n const physical_materials = read.array(header2Data, read.string);\n\n // check for preview byte\n let preview = null;\n if (read.bytes(brsData, 1)[0]) {\n const len = read.i32(brsData);\n if (options.preview) {\n preview = read.bytes(brsData, len);\n } else {\n brsData.brsOffset += len;\n }\n }\n\n // Read in bricks\n let bricks: BrickV10[] = [];\n const components: BrsV10['components'] = {};\n\n const numPhysMats = Math.max(physical_materials.length, 2);\n const numMats = Math.max(materials.length, 2);\n const numAssets = Math.max(brick_assets.length, 2);\n\n if (options.bricks) {\n bricks = Array(brick_count);\n const brickData = read.compressed(brsData);\n const brickBits = read.bits(brickData);\n\n // Brick reader\n for (let i = 0; !brickBits.empty() && i < brick_count; i++) {\n brickBits.align();\n const asset_name_index = brickBits.int(numAssets);\n const size: Vector = brickBits.bit()\n ? [\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n ]\n : [0, 0, 0];\n const position: Vector = [\n brickBits.int_packed(),\n brickBits.int_packed(),\n brickBits.int_packed(),\n ];\n\n const orientation = brickBits.int(24);\n const direction = (orientation >> 2) % 6;\n const rotation = orientation & 3;\n const collision: Collision = {\n player: brickBits.bit(),\n weapon: brickBits.bit(),\n interaction: brickBits.bit(),\n tool: brickBits.bit(),\n physics: false, // v10 does not have physics collision\n };\n const visibility = brickBits.bit();\n const material_index = brickBits.int(numMats);\n const physical_index = brickBits.int(numPhysMats);\n const material_intensity = brickBits.int(11);\n const color = brickBits.bit()\n ? (brickBits.bytesArr(3) as [number, number, number])\n : brickBits.int(colors.length);\n\n const owner_index = brickBits.uint_packed();\n\n bricks[i] = {\n asset_name_index,\n size,\n position,\n direction,\n rotation,\n collision: collision as Collision,\n visibility,\n material_index,\n physical_index,\n material_intensity,\n color,\n owner_index,\n components: {},\n };\n }\n\n const componentData = read.compressed(brsData);\n const numBricks = Math.max(bricks.length, 2);\n\n read.each(componentData, data => {\n // read component name\n const name = read.string(data);\n\n // read component body\n const bits = read.bits(read.bytes(data, read.i32(data)));\n\n const version = read.i32(bits.bytes(4));\n // list of bricks\n const brick_indices = bits.array(() => bits.int(numBricks));\n\n // list of name, type properties\n const properties = bits.array(() => [bits.string(), bits.string()]);\n\n // read components for each brick\n for (const i of brick_indices) {\n const props: AppliedComponent = {};\n for (const [name, type] of properties) props[name] = bits.unreal(type);\n bricks[i].components[name] = props;\n }\n\n components[name] = {\n version,\n brick_indices,\n properties: Object.fromEntries(properties),\n };\n });\n }\n\n return {\n version: 10,\n game_version,\n map,\n description,\n author: {\n id: author_id,\n name: author_name,\n },\n host,\n mods,\n brick_assets,\n colors,\n materials,\n brick_owners,\n physical_materials,\n preview,\n bricks,\n brick_count,\n save_time,\n components,\n };\n}\n","import {\n AppliedComponent,\n BrickV10,\n BRSBytes,\n BrsV14,\n Collision,\n ReadOptions,\n UnrealColor,\n User,\n Vector,\n Wire,\n} from './types';\nimport { bgra, read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrsV14(\n brsData: BRSBytes,\n options: ReadOptions = {}\n): BrsV14 {\n // game version is included in saves >= v8\n const game_version = read.i32(brsData);\n\n // Read in Headers\n const header1Data = read.compressed(brsData);\n const header2Data = read.compressed(brsData);\n\n const map = read.string(header1Data);\n const author_name = read.string(header1Data);\n const description = read.string(header1Data);\n const author_id = read.uuid(header1Data);\n const host: User = {\n name: read.string(header1Data),\n id: read.uuid(header1Data),\n };\n const save_time = read.bytes(header1Data, 8);\n\n const brick_count = read.i32(header1Data);\n\n const mods = read.array(header2Data, read.string);\n const brick_assets = read.array(header2Data, read.string);\n const colors = read.array(\n header2Data,\n data => bgra(Array.from(read.bytes(data, 4))) as UnrealColor\n );\n const materials = read.array(header2Data, read.string);\n\n const brick_owners = read.array(header2Data, data => ({\n id: read.uuid(data),\n name: read.string(data),\n display_name: read.string(data),\n bricks: read.i32(data),\n }));\n\n const physical_materials = read.array(header2Data, read.string);\n\n // check for preview byte\n let preview = null;\n if (read.bytes(brsData, 1)[0]) {\n const len = read.i32(brsData);\n if (options.preview) {\n preview = read.bytes(brsData, len);\n } else {\n brsData.brsOffset += len;\n }\n }\n\n // Read in bricks\n let bricks: BrickV10[] = [];\n const components: BrsV14['components'] = {};\n const wires: Wire[] = [];\n\n const numPhysMats = Math.max(physical_materials.length, 2);\n const numMats = Math.max(materials.length, 2);\n const numAssets = Math.max(brick_assets.length, 2);\n\n if (options.bricks) {\n bricks = Array(brick_count);\n const brickData = read.compressed(brsData);\n const brickBits = read.bits(brickData);\n\n // Brick reader\n for (let i = 0; !brickBits.empty() && i < brick_count; i++) {\n brickBits.align();\n const asset_name_index = brickBits.int(numAssets);\n const size: Vector = brickBits.bit()\n ? [\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n ]\n : [0, 0, 0];\n const position: Vector = [\n brickBits.int_packed(),\n brickBits.int_packed(),\n brickBits.int_packed(),\n ];\n\n const orientation = brickBits.int(24);\n const direction = (orientation >> 2) % 6;\n const rotation = orientation & 3;\n const collision: Collision = {\n player: brickBits.bit(),\n weapon: brickBits.bit(),\n interaction: brickBits.bit(),\n tool: brickBits.bit(),\n physics: brickBits.bit(),\n };\n const visibility = brickBits.bit();\n const material_index = brickBits.int(numMats);\n const physical_index = brickBits.int(numPhysMats);\n const material_intensity = brickBits.int(11);\n const color = brickBits.bit()\n ? (brickBits.bytesArr(3) as [number, number, number])\n : brickBits.int(colors.length);\n\n const owner_index = brickBits.uint_packed();\n\n bricks[i] = {\n asset_name_index,\n size,\n position,\n direction,\n rotation,\n collision: collision as Collision,\n visibility,\n material_index,\n physical_index,\n material_intensity,\n color,\n owner_index,\n components: {},\n };\n }\n\n const componentData = read.compressed(brsData);\n const wiresData = read.compressed(brsData);\n const numBricks = Math.max(bricks.length, 2);\n const componentIndex: string[] = [];\n\n read.each(componentData, data => {\n // read component name\n const name = read.string(data);\n\n // read component body\n const bits = read.bits(read.bytes(data, read.i32(data)));\n\n const version = read.i32(bits.bytes(4));\n\n // list of bricks\n const brick_indices = bits.array(() => bits.int(numBricks));\n\n // list of name, type properties\n const properties = bits.array(() => [bits.string(), bits.string()]);\n\n // read components for each brick\n for (const i of brick_indices) {\n const props: AppliedComponent = {};\n for (const [name, type] of properties) props[name] = bits.unreal(type);\n bricks[i].components[name] = props;\n }\n\n if (!(name in components)) {\n componentIndex.push(name);\n }\n components[name] = {\n version,\n brick_indices,\n properties: Object.fromEntries(properties),\n };\n });\n\n const numComponents = Math.max(componentIndex.length, 2);\n\n {\n const bits = read.bits(wiresData);\n\n const numWires = bits.int(4294967295); // u32 max\n for (let i = 0; i < numWires; i++) {\n const srcBrick = bits.int(numBricks);\n const srcComponentIndex = bits.int(numComponents);\n const srcPort = bits.string();\n\n const dstBrick = bits.int(numBricks);\n const dstComponentIndex = bits.int(numComponents);\n const dstPort = bits.string();\n\n bits.bit(); // \"skip prev bit that was in use lmao\"\n bits.align();\n\n wires.push({\n source: {\n brick_index: srcBrick,\n component: componentIndex[srcComponentIndex],\n port: srcPort,\n },\n target: {\n brick_index: dstBrick,\n component: componentIndex[dstComponentIndex],\n port: dstPort,\n },\n });\n }\n }\n }\n\n return {\n version: 14,\n game_version,\n map,\n description,\n author: {\n id: author_id,\n name: author_name,\n },\n host,\n mods,\n brick_assets,\n colors,\n materials,\n brick_owners,\n physical_materials,\n preview,\n bricks,\n brick_count,\n save_time,\n components,\n wires,\n };\n}\n","import {\n BrickV2,\n BRSBytes,\n BrsV2,\n ReadOptions,\n UnrealColor,\n Vector,\n} from './types';\nimport { bgra, read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrsV2(\n brsData: BRSBytes,\n options: ReadOptions = {}\n): BrsV2 {\n // Read in Headers\n const header1Data = read.compressed(brsData);\n const header2Data = read.compressed(brsData);\n\n const map = read.string(header1Data);\n const author_name = read.string(header1Data);\n const description = read.string(header1Data);\n const author_id = read.uuid(header1Data);\n\n const brick_count = read.i32(header1Data);\n\n const mods = read.array(header2Data, read.string);\n const brick_assets = read.array(header2Data, read.string);\n const colors = read.array(\n header2Data,\n data => bgra(Array.from(read.bytes(data, 4))) as UnrealColor\n );\n const materials = read.array(header2Data, read.string);\n\n // Read in bricks\n let bricks: BrickV2[] = [];\n\n const numAssets = Math.max(brick_assets.length, 2);\n\n if (options.bricks) {\n bricks = Array(brick_count);\n const brickData = read.compressed(brsData);\n const brickBits = read.bits(brickData);\n\n // Brick reader\n for (let i = 0; !brickBits.empty() && i < brick_count; i++) {\n brickBits.align();\n const asset_name_index = brickBits.int(numAssets);\n const size: Vector = brickBits.bit()\n ? [\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n ]\n : [0, 0, 0];\n const position: Vector = [\n brickBits.int_packed(),\n brickBits.int_packed(),\n brickBits.int_packed(),\n ];\n\n const orientation = brickBits.int(24);\n const direction = (orientation >> 2) % 6;\n const rotation = orientation & 3;\n const collision = brickBits.bit();\n const visibility = brickBits.bit();\n const material_index = brickBits.bit() ? brickBits.uint_packed() : 1;\n\n const color = brickBits.bit()\n ? bgra(brickBits.bytesArr(4) as [number, number, number, number])\n : brickBits.int(colors.length);\n\n bricks[i] = {\n asset_name_index,\n size,\n position,\n direction,\n rotation,\n collision,\n visibility,\n material_index,\n color,\n };\n }\n }\n\n return {\n version: 2,\n map,\n description,\n author: {\n id: author_id,\n name: author_name,\n },\n mods,\n brick_assets,\n colors,\n materials,\n bricks,\n brick_count,\n };\n}\n","import {\n BrickV3,\n BRSBytes,\n BrsV3,\n ReadOptions,\n UnrealColor,\n User,\n Vector,\n} from './types';\nimport { bgra, read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrsV3(\n brsData: BRSBytes,\n options: ReadOptions = {}\n): BrsV3 {\n // Read in Headers\n const header1Data = read.compressed(brsData);\n const header2Data = read.compressed(brsData);\n\n const map = read.string(header1Data);\n const author_name = read.string(header1Data);\n const description = read.string(header1Data);\n const author_id = read.uuid(header1Data);\n\n const brick_count = read.i32(header1Data);\n\n const mods = read.array(header2Data, read.string);\n const brick_assets = read.array(header2Data, read.string);\n const colors = read.array(\n header2Data,\n data => bgra(Array.from(read.bytes(data, 4))) as UnrealColor\n );\n const materials = read.array(header2Data, read.string);\n const brick_owners: User[] = read.array(header2Data, data => ({\n id: read.uuid(data),\n name: read.string(data),\n }));\n\n // Read in bricks\n let bricks: BrickV3[] = [];\n\n const numAssets = Math.max(brick_assets.length, 2);\n\n if (options.bricks) {\n bricks = Array(brick_count);\n const brickData = read.compressed(brsData);\n const brickBits = read.bits(brickData);\n\n // Brick reader\n for (let i = 0; !brickBits.empty() && i < brick_count; i++) {\n brickBits.align();\n const asset_name_index = brickBits.int(numAssets);\n const size: Vector = brickBits.bit()\n ? [\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n ]\n : [0, 0, 0];\n const position: Vector = [\n brickBits.int_packed(),\n brickBits.int_packed(),\n brickBits.int_packed(),\n ];\n\n const orientation = brickBits.int(24);\n const direction = (orientation >> 2) % 6;\n const rotation = orientation & 3;\n const collision = brickBits.bit();\n const visibility = brickBits.bit();\n const material_index = brickBits.bit() ? brickBits.uint_packed() : 1;\n\n const color = brickBits.bit()\n ? bgra(brickBits.bytesArr(4) as [number, number, number, number])\n : brickBits.int(colors.length);\n\n const owner_index = brickBits.uint_packed();\n\n bricks[i] = {\n asset_name_index,\n size,\n position,\n direction,\n rotation,\n collision,\n visibility,\n material_index,\n color,\n owner_index,\n };\n }\n }\n\n return {\n version: 3,\n map,\n description,\n author: {\n id: author_id,\n name: author_name,\n },\n mods,\n brick_assets,\n colors,\n materials,\n brick_owners,\n bricks,\n brick_count,\n };\n}\n","import {\n BrickV3,\n BRSBytes,\n BrsV4,\n ReadOptions,\n UnrealColor,\n Vector,\n} from './types';\nimport { bgra, read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrsV4(\n brsData: BRSBytes,\n options: ReadOptions = {}\n): BrsV4 {\n // Read in Headers\n const header1Data = read.compressed(brsData);\n const header2Data = read.compressed(brsData);\n\n const map = read.string(header1Data);\n const author_name = read.string(header1Data);\n const description = read.string(header1Data);\n const author_id = read.uuid(header1Data);\n const save_time = read.bytes(header1Data, 8);\n\n const brick_count = read.i32(header1Data);\n\n const mods = read.array(header2Data, read.string);\n const brick_assets = read.array(header2Data, read.string);\n const colors = read.array(\n header2Data,\n data => bgra(Array.from(read.bytes(data, 4))) as UnrealColor\n );\n const materials = read.array(header2Data, read.string);\n const brick_owners = read.array(header2Data, data => ({\n id: read.uuid(data),\n name: read.string(data),\n }));\n\n // Read in bricks\n let bricks: BrickV3[] = [];\n\n const numAssets = Math.max(brick_assets.length, 2);\n\n if (options.bricks) {\n bricks = Array(brick_count);\n const brickData = read.compressed(brsData);\n const brickBits = read.bits(brickData);\n\n // Brick reader\n for (let i = 0; !brickBits.empty() && i < brick_count; i++) {\n brickBits.align();\n const asset_name_index = brickBits.int(numAssets);\n const size: Vector = brickBits.bit()\n ? [\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n ]\n : [0, 0, 0];\n const position: Vector = [\n brickBits.int_packed(),\n brickBits.int_packed(),\n brickBits.int_packed(),\n ];\n\n const orientation = brickBits.int(24);\n const direction = (orientation >> 2) % 6;\n const rotation = orientation & 3;\n const collision = brickBits.bit();\n const visibility = brickBits.bit();\n const material_index = brickBits.bit() ? brickBits.uint_packed() : 1;\n\n const color = brickBits.bit()\n ? bgra(brickBits.bytesArr(4) as [number, number, number, number])\n : brickBits.int(colors.length);\n\n const owner_index = brickBits.uint_packed();\n\n bricks[i] = {\n asset_name_index,\n size,\n position,\n direction,\n rotation,\n collision,\n visibility,\n material_index,\n color,\n owner_index,\n };\n }\n }\n\n return {\n version: 4,\n map,\n description,\n author: {\n id: author_id,\n name: author_name,\n },\n mods,\n brick_assets,\n colors,\n materials,\n brick_owners,\n bricks,\n brick_count,\n save_time,\n };\n}\n","import {\n AppliedComponent,\n BrickV8,\n BRSBytes,\n BrsV8,\n ReadOptions,\n UnrealColor,\n User,\n Vector,\n} from './types';\nimport { bgra, read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrsV8(\n brsData: BRSBytes,\n options: ReadOptions = {}\n): BrsV8 {\n // game version is included in saves >= v8\n const game_version = read.i32(brsData);\n\n // Read in Headers\n const header1Data = read.compressed(brsData);\n const header2Data = read.compressed(brsData);\n\n const map = read.string(header1Data);\n const author_name = read.string(header1Data);\n const description = read.string(header1Data);\n const author_id = read.uuid(header1Data);\n\n const host: User = {\n name: read.string(header1Data),\n id: read.uuid(header1Data),\n };\n const save_time = read.bytes(header1Data, 8);\n\n const brick_count = read.i32(header1Data);\n\n const mods = read.array(header2Data, read.string);\n const brick_assets = read.array(header2Data, read.string);\n const colors = read.array(\n header2Data,\n data => bgra(Array.from(read.bytes(data, 4))) as UnrealColor\n );\n const materials = read.array(header2Data, read.string);\n const brick_owners = read.array(header2Data, data => ({\n id: read.uuid(data),\n name: read.string(data),\n bricks: read.i32(data),\n }));\n\n // check for preview byte\n let preview = null;\n if (read.bytes(brsData, 1)[0]) {\n const len = read.i32(brsData);\n if (options.preview) {\n preview = read.bytes(brsData, len);\n } else {\n brsData.brsOffset += len;\n }\n }\n\n // Read in bricks\n let bricks: BrickV8[] = [];\n const components: BrsV8['components'] = {};\n\n const numMats = Math.max(materials.length, 2);\n const numAssets = Math.max(brick_assets.length, 2);\n\n if (options.bricks) {\n bricks = Array(brick_count);\n const brickData = read.compressed(brsData);\n const brickBits = read.bits(brickData);\n\n // Brick reader\n for (let i = 0; !brickBits.empty() && i < brick_count; i++) {\n brickBits.align();\n const asset_name_index = brickBits.int(numAssets);\n const size: Vector = brickBits.bit()\n ? [\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n ]\n : [0, 0, 0];\n const position: Vector = [\n brickBits.int_packed(),\n brickBits.int_packed(),\n brickBits.int_packed(),\n ];\n\n const orientation = brickBits.int(24);\n const direction = (orientation >> 2) % 6;\n const rotation = orientation & 3;\n const collision = brickBits.bit();\n const visibility = brickBits.bit();\n const material_index = brickBits.int(numMats);\n\n const color = brickBits.bit()\n ? bgra(brickBits.bytesArr(4) as [number, number, number, number])\n : brickBits.int(colors.length);\n\n const owner_index = brickBits.uint_packed();\n\n bricks[i] = {\n asset_name_index,\n size,\n position,\n direction,\n rotation,\n collision,\n visibility,\n material_index,\n color,\n owner_index,\n components: {},\n };\n }\n\n const componentData = read.compressed(brsData);\n const numBricks = Math.max(bricks.length, 2);\n\n read.each(componentData, data => {\n // read component name\n const name = read.string(data);\n\n // read component body\n const bits = read.bits(read.bytes(data, read.i32(data)));\n\n const version = read.i32(bits.bytes(4));\n // list of bricks\n const brick_indices = bits.array(() => bits.int(numBricks));\n\n // list of name, type properties\n const properties = bits.array(() => [bits.string(), bits.string()]);\n\n // read components for each brick\n for (const i of brick_indices) {\n const props: AppliedComponent = {};\n for (const [name, type] of properties) props[name] = bits.unreal(type);\n bricks[i].components[name] = props;\n }\n\n components[name] = {\n version,\n brick_indices,\n properties: Object.fromEntries(properties),\n };\n });\n }\n\n return {\n version: 8,\n game_version,\n map,\n description,\n author: {\n id: author_id,\n name: author_name,\n },\n host,\n mods,\n brick_assets,\n colors,\n materials,\n brick_owners,\n preview,\n bricks,\n brick_count,\n save_time,\n components,\n };\n}\n","import {\n AppliedComponent,\n BrickV9,\n BRSBytes,\n BrsV9,\n ColorRgb,\n ReadOptions,\n UnrealColor,\n User,\n Vector,\n} from './types';\nimport { bgra, read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrsV9(\n brsData: BRSBytes,\n options: ReadOptions = {}\n): BrsV9 {\n // game version is included in saves >= v8\n const game_version = read.i32(brsData);\n\n // Read in Headers\n const header1Data = read.compressed(brsData);\n const header2Data = read.compressed(brsData);\n\n const map = read.string(header1Data);\n const author_name = read.string(header1Data);\n const description = read.string(header1Data);\n const author_id = read.uuid(header1Data);\n\n const host: User = {\n name: read.string(header1Data),\n id: read.uuid(header1Data),\n };\n const save_time = read.bytes(header1Data, 8);\n\n const brick_count = read.i32(header1Data);\n\n const mods = read.array(header2Data, read.string);\n const brick_assets = read.array(header2Data, read.string);\n const colors = read.array(\n header2Data,\n data => bgra(Array.from(read.bytes(data, 4))) as UnrealColor\n );\n const materials = read.array(header2Data, read.string);\n const brick_owners = read.array(header2Data, data => ({\n id: read.uuid(data),\n name: read.string(data),\n bricks: read.i32(data),\n }));\n\n const physical_materials = read.array(header2Data, read.string);\n\n // check for preview byte\n let preview = null;\n if (read.bytes(brsData, 1)[0]) {\n const len = read.i32(brsData);\n if (options.preview) {\n preview = read.bytes(brsData, len);\n } else {\n brsData.brsOffset += len;\n }\n }\n\n // Read in bricks\n let bricks: BrickV9[] = [];\n const components: BrsV9['components'] = {};\n\n const numPhysMats = Math.max(physical_materials.length, 2);\n const numMats = Math.max(materials.length, 2);\n const numAssets = Math.max(brick_assets.length, 2);\n\n if (options.bricks) {\n bricks = Array(brick_count);\n const brickData = read.compressed(brsData);\n const brickBits = read.bits(brickData);\n\n // Brick reader\n for (let i = 0; !brickBits.empty() && i < brick_count; i++) {\n brickBits.align();\n const asset_name_index = brickBits.int(numAssets);\n const size: Vector = brickBits.bit()\n ? [\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n ]\n : [0, 0, 0];\n const position: Vector = [\n brickBits.int_packed(),\n brickBits.int_packed(),\n brickBits.int_packed(),\n ];\n\n const orientation = brickBits.int(24);\n const direction = (orientation >> 2) % 6;\n const rotation = orientation & 3;\n const collision = brickBits.bit();\n const visibility = brickBits.bit();\n const material_index = brickBits.int(numMats);\n const physical_index = brickBits.int(numPhysMats);\n const material_intensity = brickBits.int(11);\n\n const color = brickBits.bit()\n ? (brickBits.bytesArr(3) as [number, number, number])\n : brickBits.int(colors.length);\n\n const owner_index = brickBits.uint_packed();\n\n bricks[i] = {\n asset_name_index,\n size,\n position,\n direction,\n rotation,\n collision,\n visibility,\n material_index,\n physical_index,\n material_intensity,\n color: color as ColorRgb | number,\n owner_index,\n components: {},\n };\n }\n\n const componentData = read.compressed(brsData);\n const numBricks = Math.max(bricks.length, 2);\n\n read.each(componentData, data => {\n // read component name\n const name = read.string(data);\n\n // read component body\n const bits = read.bits(read.bytes(data, read.i32(data)));\n\n const version = read.i32(bits.bytes(4));\n // list of bricks\n const brick_indices = bits.array(() => bits.int(numBricks));\n\n // list of name, type properties\n const properties = bits.array(() => [bits.string(), bits.string()]);\n\n // read components for each brick\n for (const i of brick_indices) {\n const props: AppliedComponent = {};\n for (const [name, type] of properties) props[name] = bits.unreal(type);\n bricks[i].components[name] = props;\n }\n\n components[name] = {\n version,\n brick_indices,\n properties: Object.fromEntries(properties),\n };\n });\n }\n\n return {\n version: 9,\n game_version,\n map,\n description,\n author: {\n id: author_id,\n name: author_name,\n },\n host,\n mods,\n brick_assets,\n colors,\n materials,\n brick_owners,\n physical_materials,\n preview,\n bricks,\n brick_count,\n save_time,\n components,\n };\n}\n","import { MAGIC } from './constants';\nimport readBrsV1 from './read.v1';\nimport readBrsV10 from './read.v10';\nimport readBrsV14 from './read.v14';\nimport readBrsV2 from './read.v2';\nimport readBrsV3 from './read.v3';\nimport readBrsV4 from './read.v4';\nimport readBrsV8 from './read.v8';\nimport readBrsV9 from './read.v9';\nimport { BRSBytes, ReadOptions, ReadSaveObject } from './types';\nimport { read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrs(\n rawBytes: Uint8Array,\n options: ReadOptions = {}\n): ReadSaveObject {\n if (typeof options !== 'object') throw new Error('Invalid options');\n\n // default enable brick reading\n if (typeof options.bricks !== 'boolean') options.bricks = true;\n\n // default disable preview (a5 only)\n if (typeof options.preview !== 'boolean') options.preview = false;\n\n // Determine if the first 3 bytes are equal to the Brickadia save magic bytes\n if (\n rawBytes[0] !== MAGIC[0] ||\n rawBytes[1] !== MAGIC[1] ||\n rawBytes[2] !== MAGIC[2]\n ) {\n throw new Error('Invalid starting bytes');\n }\n\n const brsData = rawBytes as BRSBytes;\n brsData.brsOffset = 3;\n\n // Determine if the file version supported\n const version = read.u16(brsData);\n switch (version) {\n case 1:\n return readBrsV1(brsData, options);\n case 2:\n return readBrsV2(brsData, options);\n case 3:\n return readBrsV3(brsData, options);\n case 4:\n return readBrsV4(brsData, options);\n case 8:\n return readBrsV8(brsData, options);\n case 9:\n return readBrsV9(brsData, options);\n case 10:\n return readBrsV10(brsData, options);\n case 14:\n return readBrsV14(brsData, options);\n default:\n throw new Error('Unsupported version ' + version);\n }\n}\n","import { DEFAULT_UUID, LATEST_VERSION, MAGIC, MAX_INT } from './constants';\nimport {\n Brick,\n DefinedComponents,\n Owner,\n WriteOptions,\n WriteSaveObject,\n} from './types';\nimport { concat, isEqual, write } from './utils';\n\nconst EMPTY_ARR = new Uint8Array([]);\n\nexport const DEFAULT_COMPONENTS: DefinedComponents = {\n BCD_SpotLight: {\n version: 1,\n properties: {\n Rotation: 'Rotator',\n InnerConeAngle: 'Float',\n OuterConeAngle: 'Float',\n Brightness: 'Float',\n Radius: 'Float',\n Color: 'Color',\n bUseBrickColor: 'Boolean',\n bCastShadows: 'Boolean',\n },\n },\n BCD_PointLight: {\n version: 1,\n properties: {\n bMatchBrickShape: 'Boolean',\n Brightness: 'Float',\n Radius: 'Float',\n Color: 'Color',\n bUseBrickColor: 'Boolean',\n bCastShadows: 'Boolean',\n },\n },\n BCD_ItemSpawn: {\n version: 1,\n properties: {\n PickupClass: 'Class',\n bPickupEnabled: 'Boolean',\n bPickupRespawnOnMinigameReset: 'Boolean',\n PickupMinigameResetRespawnDelay: 'Float',\n bPickupAutoDisableOnPickup: 'Boolean',\n PickupRespawnTime: 'Float',\n PickupOffsetDirection: 'Byte',\n PickupOffsetDistance: 'Float',\n PickupRotation: 'Rotator',\n PickupScale: 'Float',\n bPickupAnimationEnabled: 'Boolean',\n PickupAnimationAxis: 'Byte',\n bPickupAnimationAxisLocal: 'Boolean',\n PickupSpinSpeed: 'Float',\n PickupBobSpeed: 'Float',\n PickupBobHeight: 'Float',\n PickupAnimationPhase: 'Float',\n },\n },\n BCD_Interact: {\n version: 1,\n properties: {\n bPlayInteractSound: 'Boolean',\n Message: 'String',\n ConsoleTag: 'String',\n },\n },\n BCD_AudioEmitter: {\n version: 1,\n properties: {\n AudioDescriptor: 'Object',\n VolumeMultiplier: 'Float',\n PitchMultiplier: 'Float',\n InnerRadius: 'Float',\n MaxDistance: 'Float',\n bSpatialization: 'Boolean',\n },\n },\n Component_Internal_Rerouter: {\n version: 1,\n properties: {},\n },\n BrickComponentType_Internal_ReadBrickGrid: {\n version: 1,\n properties: {},\n },\n BrickComponentType_WireGraphPseudo_BufferSeconds: {\n version: 1,\n properties: {\n SecondsToWait: 'Float',\n ZeroSecondsToWait: 'Float',\n CurrentTime: 'Float',\n Input: 'WireGraphVariant',\n Output: 'WireGraphVariant',\n Buffered: 'WireGraphVariant',\n Queued: 'WireGraphVariant',\n bHasQueued: 'Boolean',\n },\n },\n BrickComponentType_WireGraphPseudo_BufferTicks: {\n version: 1,\n properties: {\n TicksToWait: 'Integer',\n ZeroTicksToWait: 'Integer',\n CurrentTicks: 'Integer',\n Input: 'WireGraphVariant',\n Output: 'WireGraphVariant',\n Buffered: 'WireGraphVariant',\n Queued: 'WireGraphVariant',\n bHasQueued: 'Boolean',\n },\n },\n BrickComponentType_WireGraphPseudo_Const: {\n version: 1,\n properties: {\n Value: 'WireGraphVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_BitwiseAND: {\n version: 1,\n properties: {\n InputA: 'Integer64',\n InputB: 'Integer64',\n },\n },\n BrickComponentType_WireGraph_Expr_BitwiseNAND: {\n version: 1,\n properties: {\n InputA: 'Integer64',\n InputB: 'Integer64',\n },\n },\n BrickComponentType_WireGraph_Expr_BitwiseNOR: {\n version: 1,\n properties: {\n InputA: 'Integer64',\n InputB: 'Integer64',\n },\n },\n BrickComponentType_WireGraph_Expr_BitwiseNOT: {\n version: 1,\n properties: {\n Input: 'Integer64',\n },\n },\n BrickComponentType_WireGraph_Expr_BitwiseOR: {\n version: 1,\n properties: {\n InputA: 'Integer64',\n InputB: 'Integer64',\n },\n },\n BrickComponentType_WireGraph_Expr_BitwiseShiftLeft: {\n version: 1,\n properties: {\n InputA: 'Integer64',\n InputB: 'Integer64',\n },\n },\n BrickComponentType_WireGraph_Expr_BitwiseShiftRight: {\n version: 1,\n properties: {\n InputA: 'Integer64',\n InputB: 'Integer64',\n },\n },\n BrickComponentType_WireGraph_Expr_BitwiseXOR: {\n version: 1,\n properties: {\n InputA: 'Integer64',\n InputB: 'Integer64',\n },\n },\n BrickComponentType_WireGraph_Expr_Ceil: {\n version: 1,\n properties: {\n Input: 'Double',\n },\n },\n BrickComponentType_WireGraph_Expr_CompareEqual: {\n version: 1,\n properties: {\n InputA: 'WireGraphVariant',\n InputB: 'WireGraphVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_CompareGreater: {\n version: 1,\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_CompareGreaterOrEqual: {\n version: 1,\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_CompareLess: {\n version: 1,\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_CompareLessOrEqual: {\n version: 1,\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_CompareNotEqual: {\n version: 1,\n properties: {\n InputA: 'WireGraphVariant',\n InputB: 'WireGraphVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_Floor: {\n version: 1,\n properties: {\n Input: 'Double',\n },\n },\n BrickComponentType_WireGraph_Expr_LogicalAND: {\n version: 1,\n properties: {\n bInputA: 'Boolean',\n bInputB: 'Boolean',\n },\n },\n BrickComponentType_WireGraph_Expr_LogicalNAND: {\n version: 1,\n properties: {\n bInputA: 'Boolean',\n bInputB: 'Boolean',\n },\n },\n BrickComponentType_WireGraph_Expr_LogicalNOR: {\n version: 1,\n properties: {\n bInputA: 'Boolean',\n bInputB: 'Boolean',\n },\n },\n BrickComponentType_WireGraph_Expr_LogicalNOT: {\n version: 1,\n properties: {\n bInput: 'Boolean',\n },\n },\n BrickComponentType_WireGraph_Expr_LogicalOR: {\n version: 1,\n properties: {\n bInputA: 'Boolean',\n bInputB: 'Boolean',\n },\n },\n BrickComponentType_WireGraph_Expr_LogicalXOR: {\n version: 1,\n properties: {\n bInputA: 'Boolean',\n bInputB: 'Boolean',\n },\n },\n BrickComponentType_WireGraph_Expr_MathAdd: {\n version: 1,\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_MathBlend: {\n version: 1,\n\n properties: {\n Blend: 'Double',\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_MathDivide: {\n version: 1,\n\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_MathModulo: {\n version: 1,\n\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_MathModuloFloored: {\n version: 1,\n\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_MathMultiply: {\n version: 1,\n\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_MathSubtract: {\n version: 1,\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponent_WireGraph_Expr_EdgeDetector: {\n version: 1,\n properties: {\n Input: 'Double',\n bPulseOnRisingEdge: 'Boolean',\n bPulseOnFallingEdge: 'Boolean',\n },\n },\n};\n\nexport default function writeBrs(\n save: WriteSaveObject,\n options: WriteOptions = {}\n) {\n if (typeof save !== 'object') {\n throw new Error('Expected save to be an object');\n }\n\n if (!Array.isArray(save.bricks) || save.bricks.length === 0) {\n throw new Error('Expected save to have bricks field');\n }\n\n if (save.bricks.length > MAX_INT) {\n throw new Error('Brick count out of range');\n }\n\n // compression is disabled by default\n const compress = options.compress ? write.compressed : write.uncompressed;\n\n // Convert from BGRA to RGBA\n const rgba = ([r, g, b, a]: number[]) => new Uint8Array([b, g, r, a]);\n\n // stored brick indices from components on the bricks\n const componentBrickOwnership: { [component_name: string]: number[] } = {};\n\n const numColors = Math.max(save.colors?.length ?? 0, 2);\n const numAssets = Math.max(save.brick_assets?.length ?? 0, 2);\n const numMats = Math.max(save.materials?.length ?? 0, 2);\n const numPhysMats = Math.max(save.physical_materials?.length ?? 0, 2);\n\n if (save.preview && !Array.isArray(save.preview))\n throw new Error('Expected preview to be an array');\n\n let componentMap: Record<string, number> = {};\n let componentCount = 0;\n\n const buff = concat(\n // Write magic bytes\n MAGIC,\n write.u16(LATEST_VERSION),\n write.i32(save.game_version ?? 0),\n\n // Header 1\n compress(\n write.string(save.map ?? 'Unknown'),\n write.string(save.author?.name ?? 'Unknown'),\n write.string(save.description ?? ''),\n write.uuid(save.author?.id ?? DEFAULT_UUID),\n concat(\n write.string(save.host?.name ?? 'Unknown'),\n write.uuid(save.host?.id ?? DEFAULT_UUID)\n ),\n new Uint8Array(\n save.save_time &&\n (Array.isArray(save.save_time) ||\n save.save_time instanceof Uint8Array) &&\n save.save_time.length === 8\n ? save.save_time\n : [0, 0, 0, 0, 0, 0, 0, 0]\n ),\n write.i32(save.bricks.length)\n ),\n\n // Header 2\n compress(\n write.array(save.mods ?? [], write.string),\n write.array(save.brick_assets ?? ['PB_DefaultBrick'], write.string),\n write.array(save.colors ?? [], rgba),\n write.array(save.materials ?? ['BMC_Plastic'], write.string),\n write.array(\n save.brick_owners ?? [],\n ({\n id = DEFAULT_UUID,\n name = 'Unknown',\n display_name = 'Unknown',\n bricks = 0,\n }: Partial<Owner>) =>\n concat(\n write.uuid(id),\n write.string(name),\n write.string(display_name),\n write.i32(bricks)\n )\n ),\n write.array(save.physical_materials ?? ['BPMC_Default'], write.string)\n ),\n\n // write the save preview if it exists\n concat(\n new Uint8Array([save.preview ? 1 : 0]),\n save.preview ? write.i32(save.preview.length) : EMPTY_ARR, // <- Sorry @Uxie https://i.imgur.com/hSRxdbf.png\n save.preview ?? EMPTY_ARR\n ),\n\n // Bricks\n compress(\n write\n .bits()\n .each(save.bricks, function (brick: Brick, i) {\n if (typeof brick !== 'object')\n throw new Error(`Expected save.bricks[${i}] to be an object`);\n\n if (!Array.isArray(brick.size) || brick.size.length !== 3)\n throw new Error(\n `Expected save.bricks[${i}].size to be an array of length 3`\n );\n\n if (!Array.isArray(brick.position) || brick.position.length !== 3)\n throw new Error(\n `Expected save.bricks[${i}].position to be an array of length 3`\n );\n\n this.align();\n this.int(brick.asset_name_index ?? 0, numAssets);\n\n const isNonProcedural =\n brick.size === null || isEqual(brick.size, [0, 0, 0]);\n this.bit(!isNonProcedural);\n if (!isNonProcedural) {\n brick.size.map(s => this.uint_packed(s >= 0 ? s : 1));\n }\n brick.position.map(s => this.int_packed(s));\n this.int(((brick.direction ?? 4) << 2) | (brick.rotation ?? 0), 24);\n\n if (typeof brick.collision === 'boolean') {\n this.bit(brick.collision);\n this.bit(brick.collision);\n this.bit(brick.collision);\n this.bit(true);\n this.bit(brick.collision);\n } else {\n this.bit(brick.collision?.player ?? true);\n this.bit(brick.collision?.weapon ?? true);\n this.bit(brick.collision?.interaction ?? true);\n this.bit(brick.collision?.tool ?? true);\n this.bit(brick.collision?.physics ?? true);\n }\n\n this.bit(brick.visibility ?? true);\n this.int(brick.material_index ?? 0, numMats);\n this.int(brick.physical_index ?? 0, numPhysMats);\n this.int(brick.material_intensity ?? 5, 11);\n\n if (typeof brick.color === 'number') {\n this.bit(false);\n this.int(brick.color, numColors);\n } else {\n this.bit(true);\n if (\n brick.color &&\n (!Array.isArray(brick.color) || brick.color.length < 3)\n )\n throw new Error(\n `Expected save.bricks[${i}].color to be an array of at least length 3`\n );\n this.bytes(\n new Uint8Array(brick.color?.slice(0, 3) ?? [255, 255, 255])\n );\n }\n\n this.uint_packed(brick.owner_index >= 0 ? brick.owner_index : 0);\n\n // add all the brick indices to the components list\n for (const key in brick.components ?? {}) {\n componentBrickOwnership[key] ??= [];\n componentBrickOwnership[key].push(i);\n }\n })\n .finish()\n ),\n\n // write components section\n compress(\n write.array(\n Object.keys(save.components ?? DEFAULT_COMPONENTS).filter(\n name => componentBrickOwnership[name]\n ),\n name =>\n concat(\n write.string(name),\n write\n .bits()\n .self(function () {\n const component =\n save.components?.[name] ?? DEFAULT_COMPONENTS[name];\n const brick_indices = componentBrickOwnership[name];\n const properties = Object.entries(component.properties);\n\n if (!(name in componentMap)) {\n componentMap[name] = componentCount;\n componentCount++;\n }\n\n // write version\n this.bytes(write.i32(component.version));\n\n // write bricks;\n this.array(brick_indices, i => {\n this.int(i, Math.max(save.bricks.length, 2));\n });\n\n // write properties\n this.array(properties, ([name, type]) => {\n this.string(name);\n this.string(type);\n });\n\n // read brick indices\n for (const i of brick_indices) {\n for (const [prop, type] of properties) {\n if (!(prop in (save.bricks[i].components?.[name] ?? {}))) {\n throw new Error(\n `Expected save.bricks[${i}].components[${name}] to have property '${prop}' of type '${type}'`\n );\n }\n this.unreal(type, save.bricks[i].components[name][prop]);\n }\n }\n this.align();\n })\n .finishSection()\n )\n )\n ),\n\n compress(\n write\n .bits()\n .self(function () {\n const intMax = 4294967295;\n if (\n !save.wires ||\n !Array.isArray(save.wires) ||\n save.wires.length === 0\n ) {\n // if no wires, write\n this.int(0, intMax); // u32 max\n return;\n }\n\n this.int(save.wires.length, intMax);\n for (const wire of save.wires) {\n if (typeof wire !== 'object')\n throw new Error('Expected save.wires to be an array of objects');\n\n if (\n !(\n wire.source &&\n typeof wire.source === 'object' &&\n typeof wire.source.brick_index === 'number' &&\n typeof wire.source.component === 'string' &&\n typeof wire.source.port === 'string'\n )\n ) {\n throw new Error(\n 'Expected save.wires[i].source to be an object with brick_index, component, and port properties'\n );\n }\n\n if (\n !(\n wire.target &&\n typeof wire.target === 'object' &&\n typeof wire.target.brick_index === 'number' &&\n typeof wire.target.component === 'string' &&\n typeof wire.target.port === 'string'\n )\n ) {\n throw new Error(\n 'Expected save.wires[i].target to be an object with brick_index, component, and port properties'\n );\n }\n\n if (!(wire.source.component in componentMap))\n throw new Error(\n `Unknown component '${wire.source.component}' in wire source`\n );\n if (!(wire.target.component in componentMap))\n throw new Error(\n `Unknown component '${wire.target.component}' in wire target`\n );\n\n this.int(wire.source.brick_index, save.bricks.length);\n this.int(componentMap[wire.source.component], componentCount);\n this.string(wire.source.port);\n\n this.int(wire.target.brick_index, save.bricks.length);\n this.int(componentMap[wire.target.component], componentCount);\n this.string(wire.target.port);\n\n this.bit(false); // \"skip prev bit that was in use lmao\"\n this.align();\n }\n })\n .finish()\n )\n );\n return buff;\n}\n","export interface BRSBytes extends Uint8Array {\n brsOffset: number;\n}\n\ntype Modify<T, R> = Omit<T, keyof R> & R;\n\nexport type Bytes = Uint8Array | BRSBytes;\nexport type Uuid = string;\n\nexport type UnrealClass = string;\nexport type UnrealObject = string;\nexport type UnrealBoolean = boolean;\nexport type UnrealFloat = number;\nexport type UnrealInteger = number;\nexport type UnrealInteger64 = number;\nexport type UnrealColor = [number, number, number, number];\nexport type UnrealByte = number;\nexport type UnrealRotator = [number, number, number];\nexport type Vector3d = Vector;\nexport type IntVector = Vector;\nexport type UnrealString = string;\nexport type WireGraphVariant =\n | { number: number }\n | { integer: number }\n | { bool: boolean }\n | { exec: true }\n | { object: true };\nexport type BRInventoryEntryPlan = string;\nexport type UnrealType =\n | UnrealClass\n | UnrealObject\n | UnrealBoolean\n | UnrealFloat\n | UnrealColor\n | UnrealByte\n | UnrealRotator\n | UnrealString\n | WireGraphVariant\n | UnrealInteger64\n | Vector3d\n | IntVector\n | BRInventoryEntryPlan;\n\ntype UnrealTypeFromString<T> = T extends 'Class'\n ? UnrealClass\n : T extends 'Object'\n ? UnrealObject\n : T extends 'Boolean'\n ? UnrealBoolean\n : T extends 'Float'\n ? UnrealFloat\n : T extends 'Color'\n ? UnrealColor\n : T extends 'Byte'\n ? UnrealByte\n : T extends 'Rotator'\n ? UnrealRotator\n : T extends 'Rotator3d'\n ? UnrealRotator\n : T extends 'Vector3d'\n ? Vector3d\n : T extends 'IntVector'\n ? IntVector\n : T extends 'String'\n ? UnrealString\n : T extends 'BRInventoryEntryPlan'\n ? BRInventoryEntryPlan\n : T extends 'WireGraphVariant'\n ? WireGraphVariant\n : T extends 'WireGraphPrimMathVariant'\n ? WireGraphVariant\n : T extends 'Integer'\n ? UnrealInteger\n : T extends 'Integer64'\n ? UnrealInteger64\n : UnrealType;\n\nexport interface User {\n id: Uuid;\n name: string;\n}\n\nexport interface LegacyOwner extends User {\n bricks: number;\n}\n\nexport interface Owner extends LegacyOwner {\n display_name: string;\n}\n\nexport enum Direction {\n XPositive,\n XNegative,\n YPositive,\n YNegative,\n ZPositive,\n ZNegative,\n}\n\nexport enum Rotation {\n Deg0,\n Deg90,\n Deg180,\n Deg270,\n}\n\nexport type ColorRgb = [number, number, number];\n\nexport interface Collision {\n player: boolean;\n weapon: boolean;\n interaction: boolean;\n tool: boolean;\n physics: boolean;\n}\n\nexport interface AppliedComponent {\n [property: string]: UnrealType;\n}\n\nexport interface UnknownComponents {\n [component_name: string]: {\n version: number;\n brick_indices?: number[];\n properties: { [property: string]: string };\n };\n}\n\nexport type KnownComponents = {\n BCD_SpotLight: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Rotation: 'Rotator';\n InnerConeAngle: 'Float';\n OuterConeAngle: 'Float';\n Brightness: 'Float';\n Radius: 'Float';\n Color: 'Color';\n bUseBrickColor: 'Boolean';\n bCastShadows: 'Boolean';\n };\n };\n BCD_PointLight: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bMatchBrickShape: 'Boolean';\n Brightness: 'Float';\n Radius: 'Float';\n Color: 'Color';\n bUseBrickColor: 'Boolean';\n bCastShadows: 'Boolean';\n };\n };\n BCD_ItemSpawn: {\n version: 1;\n brick_indices?: number[];\n properties: {\n PickupClass: 'Class';\n bPickupEnabled: 'Boolean';\n bPickupRespawnOnMinigameReset: 'Boolean';\n PickupMinigameResetRespawnDelay: 'Float';\n bPickupAutoDisableOnPickup: 'Boolean';\n PickupRespawnTime: 'Float';\n PickupOffsetDirection: 'Byte';\n PickupOffsetDistance: 'Float';\n PickupRotation: 'Rotator';\n PickupScale: 'Float';\n bPickupAnimationEnabled: 'Boolean';\n PickupAnimationAxis: 'Byte';\n bPickupAnimationAxisLocal: 'Boolean';\n PickupSpinSpeed: 'Float';\n PickupBobSpeed: 'Float';\n PickupBobHeight: 'Float';\n PickupAnimationPhase: 'Float';\n };\n };\n BCD_Interact: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bPlayInteractSound: 'Boolean';\n Message: 'String';\n ConsoleTag: 'String';\n };\n };\n BCD_AudioEmitter: {\n version: 1;\n brick_indices?: number[];\n properties: {\n AudioDescriptor: 'Object';\n VolumeMultiplier: 'Float';\n PitchMultiplier: 'Float';\n InnerRadius: 'Float';\n MaxDistance: 'Float';\n bSpatialization: 'Boolean';\n };\n };\n Component_AudioEmitter: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bEnabled: 'Boolean';\n AudioDescriptor: 'Object';\n VolumeMultiplier: 'Float';\n PitchMultiplier: 'Float';\n InnerRadius: 'Float';\n MaxDistance: 'Float';\n bSpatialization: 'Boolean';\n FocusAzimuth: 'Float';\n NonFocusAzimuth: 'Float';\n NonFocusVolumeAttenuation: 'Float';\n };\n };\n Component_BotSpawn: {\n version: 1;\n brick_indices?: number[];\n properties: {\n RespawnTime: 'Float';\n CorpseTimeout: 'Float';\n GunSkill: 'Float';\n Agression: 'Float';\n ReactionTime: 'Float';\n MovementRandomness: 'Float';\n Jumpyness: 'Float';\n MovementAmount: 'Float';\n AttackMovementAmount: 'Float';\n AggroRange: 'Float';\n bCanJump: 'Boolean';\n bBackVision: 'Boolean';\n bVisionRaycasting: 'Boolean';\n bCanTargetPlayers: 'Boolean';\n bCanTargetBots: 'Boolean';\n MoveTarget: 'Vector3d';\n BotWeapon: 'Class';\n };\n };\n Component_CheckPoint: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bRotatePlayerGravityOnSpawn: 'Boolean';\n };\n };\n Component_Damage: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Message: 'String';\n ConsoleTag: 'String';\n };\n };\n Component_GoalPoint: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n Component_InputSplitter: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n Component_OneShotAudioEmitter: {\n version: 1;\n brick_indices?: number[];\n properties: {\n AudioDescriptor: 'Object';\n VolumeMultiplier: 'Float';\n PitchMultiplier: 'Float';\n InnerRadius: 'Float';\n MaxDistance: 'Float';\n bSpatialization: 'Boolean';\n bEnableRepeat: 'Boolean';\n RepeatTime: 'Float';\n RepeatVariance: 'Float';\n };\n };\n Component_SpawnPoint: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bRotatePlayerGravityOnSpawn: 'Boolean';\n bEnable: 'Boolean';\n };\n };\n Component_Target: {\n version: 1;\n brick_indices?: number[];\n properties: {\n OnTime: 'Float';\n };\n };\n Component_Internal_AnimatedButton: {\n version: 1;\n brick_indices?: number[];\n properties: {\n PressSound: 'Object';\n ReleaseSound: 'Object';\n bAllowNearbyInteraction: 'Boolean';\n bHiddenInteraction: 'Boolean';\n PromptCustomLabel: 'String';\n };\n };\n Component_Internal_AnimatedSwitch: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bEnabled: 'Boolean';\n InteractSound: 'Object';\n bAllowNearbyInteraction: 'Boolean';\n bHiddenInteraction: 'Boolean';\n PromptCustomLabel: 'String';\n };\n };\n Component_Internal_AttachedZone: {\n version: 1;\n brick_indices?: number[];\n properties: {\n ZoneStartDistance: 'Integer';\n ZoneEndDistance: 'Integer';\n bIsBuildingZone: 'Boolean';\n bIsLooseZone: 'Boolean';\n bIsShareZone: 'Boolean';\n };\n };\n Component_Internal_Bearing: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bLimitAngle: 'Boolean';\n LimitAngle: 'Float';\n Damping: 'Float';\n };\n };\n Component_Internal_Joint_Wheel: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bEnabled: 'Boolean';\n DriveSpeed: 'Float';\n DrivePower: 'Float';\n bSteerEnabled: 'Boolean';\n Steer: 'Float';\n SteerLimitDegree: 'Float';\n SteerPower: 'Float';\n bSuspensionEnabled: 'Boolean';\n SuspensionStiffness: 'Float';\n SuspensionDamping: 'Float';\n JointDistance: 'Integer';\n bDriveWhenNotAttachedToEngine: 'Boolean';\n bCanBrake: 'Boolean';\n bAllowEngineSteerCorrect: 'Boolean';\n Damping: 'Float';\n };\n };\n Component_Internal_Motor: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bEnabled: 'Boolean';\n Speed: 'Float';\n Power: 'Float';\n bLimitAngle: 'Boolean';\n LimitAngle: 'Float';\n Damping: 'Float';\n };\n };\n Component_Internal_MotorSlider: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bEnabled: 'Boolean';\n Speed: 'Float';\n Power: 'Float';\n bPositionsArePercentages: 'Boolean';\n Damping: 'Float';\n };\n };\n Component_Internal_Rerouter: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n Component_Internal_Seat: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bIsOccupied: 'Boolean';\n ExitOffset: 'IntVector';\n bAllowNearbyInteraction: 'Boolean';\n bHiddenInteraction: 'Boolean';\n PromptCustomLabel: 'String';\n };\n };\n Component_Internal_Servo: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bEnabled: 'Boolean';\n TargetAngle: 'Float';\n Power: 'Float';\n ActiveDamping: 'Float';\n ForceLimit: 'Float';\n bLimitAngle: 'Boolean';\n LimitAngle: 'Float';\n Damping: 'Float';\n };\n };\n Component_Internal_ServoSlider: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bEnabled: 'Boolean';\n TargetPosition: 'Float';\n Power: 'Float';\n TopSpeed: 'Float';\n Exponent: 'Float';\n bPositionsArePercentages: 'Boolean';\n Damping: 'Float';\n };\n };\n Component_Internal_Slider: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bPositionsArePercentages: 'Boolean';\n Damping: 'Float';\n };\n };\n Component_Internal_Socket: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n Component_Internal_WeightBrick: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Mass: 'Float';\n MassSize: 'IntVector';\n MassOffset: 'IntVector';\n };\n };\n Component_Internal_WheelEngine: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bEnabled: 'Boolean';\n bEnableManualControl: 'Boolean';\n ManualInput_Drive: 'Float';\n ManualInput_Steer: 'Float';\n bManualInput_Brake: 'Boolean';\n CustomMass: 'Float';\n CustomMassVerticalOffset: 'Float';\n DriveInterpSpeed: 'Float';\n DriveSpeed: 'Float';\n DriveAcceleratingPowerMultiplier: 'Float';\n DriveBrakingPowerMultiplier: 'Float';\n DriveDampingMultiplier: 'Float';\n SteerPowerMultiplier: 'Float';\n SteerInterpSpeed: 'Float';\n SteerLimitDegree: 'Float';\n CenterOfSteering: 'Float';\n bTankSteering: 'Boolean';\n TankSteerSpeedMultiplier: 'Float';\n WaterDriveForce: 'Float';\n WaterSteeringForce: 'Float';\n AudioDescriptor: 'Object';\n };\n };\n Component_WireGraph_PlayAudioAt: {\n version: 1;\n brick_indices?: number[];\n properties: {\n AudioDescriptor: 'Object';\n VolumeMultiplier: 'Float';\n PitchMultiplier: 'Float';\n InnerRadius: 'Float';\n MaxDistance: 'Float';\n bSpatialization: 'Boolean';\n };\n };\n Component_WireGraph_SetInventoryEntry: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Slot: 'Integer';\n EntryPlan: 'BRInventoryEntryPlan';\n };\n };\n BrickComponentType_Internal_CharacterZoneEvent_Entered: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_Internal_CharacterZoneEvent_Left: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_Internal_ReadBrickGrid: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_Internal_TeleportDestination: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_Internal_ZoneEvent_BrickChanged: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_Internal_ZoneEvent_BrickRemoved: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_WireGraphPseudo_BufferSeconds: {\n version: 1;\n brick_indices?: number[];\n properties: {\n SecondsToWait: 'Float';\n ZeroSecondsToWait: 'Float';\n CurrentTime: 'Float';\n Input: 'WireGraphVariant';\n Output: 'WireGraphVariant';\n Buffered: 'WireGraphVariant';\n Queued: 'WireGraphVariant';\n bHasQueued: 'Boolean';\n };\n };\n BrickComponentType_WireGraphPseudo_BufferTicks: {\n version: 1;\n brick_indices?: number[];\n properties: {\n TicksToWait: 'Integer';\n ZeroTicksToWait: 'Integer';\n CurrentTicks: 'Integer';\n Input: 'WireGraphVariant';\n Output: 'WireGraphVariant';\n Buffered: 'WireGraphVariant';\n Queued: 'WireGraphVariant';\n bHasQueued: 'Boolean';\n };\n };\n BrickComponentType_WireGraphPseudo_Var: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Value: 'WireGraphVariant';\n };\n };\n BrickComponentType_WireGraph_Exec_Branch: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_WireGraph_Exec_Character_SetTempPermission: {\n version: 1;\n brick_indices?: number[];\n properties: {\n PermissionTagStr: 'String';\n bPermissionEnable: 'Boolean';\n };\n };\n BrickComponentType_WireGraph_Exec_Character_ShowHint: {\n version: 1;\n brick_indices?: number[];\n properties: {\n HintTitle: 'String';\n HintText: 'String';\n };\n };\n BrickComponentType_WireGraph_Exec_Entity_AddLocationRotation: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Vector: 'Vector3d';\n Rotation: 'Rotator3d';\n };\n };\n BrickComponentType_WireGraph_Exec_Entity_AddVelocity: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Vector: 'Vector3d';\n Rotation: 'Vector3d';\n };\n };\n BrickComponentType_WireGraph_Exec_Entity_RelativeTeleport: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_WireGraph_Exec_Entity_SetGravityDirection: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Rotation: 'Rotator3d';\n };\n };\n BrickComponentType_WireGraph_Exec_Entity_SetLocation: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Vector: 'Vector3d';\n };\n };\n BrickComponentType_WireGraph_Exec_Entity_SetLocationRotation: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Vector: 'Vector3d';\n Rotation: 'Rotator3d';\n };\n };\n BrickComponentType_WireGraph_Exec_Entity_SetRotation: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Rotation: 'Rotator3d';\n };\n };\n BrickComponentType_WireGraph_Exec_Entity_SetVelocity: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Vector: 'Vector3d';\n Rotation: 'Vector3d';\n };\n };\n BrickComponentType_WireGraph_Exec_Entity_Teleport: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_WireGraph_Exec_Union: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_WireGraph_Exec_Var_Get: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Value: 'WireGraphVariant';\n };\n };\n BrickComponentType_WireGraph_Exec_Var_Increment: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Value: 'WireGraphVariant';\n };\n };\n BrickComponentType_WireGraph_Exec_Var_Set: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Value: 'WireGraphVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_BitwiseAND: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'Integer64';\n InputB: 'Integer64';\n };\n };\n BrickComponentType_WireGraph_Expr_BitwiseNAND: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'Integer64';\n InputB: 'Integer64';\n };\n };\n BrickComponentType_WireGraph_Expr_BitwiseNOR: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'Integer64';\n InputB: 'Integer64';\n };\n };\n BrickComponentType_WireGraph_Expr_BitwiseNOT: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Input: 'Integer64';\n };\n };\n BrickComponentType_WireGraph_Expr_BitwiseOR: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'Integer64';\n InputB: 'Integer64';\n };\n };\n BrickComponentType_WireGraph_Expr_BitwiseShiftLeft: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'Integer64';\n InputB: 'Integer64';\n };\n };\n BrickComponentType_WireGraph_Expr_BitwiseShiftRight: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'Integer64';\n InputB: 'Integer64';\n };\n };\n BrickComponentType_WireGraph_Expr_BitwiseXOR: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'Integer64';\n InputB: 'Integer64';\n };\n };\n BrickComponentType_WireGraph_Expr_Ceil: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Input: 'Double';\n };\n };\n BrickComponentType_WireGraph_Expr_CompareEqual: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphVariant';\n InputB: 'WireGraphVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_CompareGreater: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_CompareGreaterOrEqual: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_CompareLess: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_CompareLessOrEqual: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_CompareNotEqual: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphVariant';\n InputB: 'WireGraphVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_Floor: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Input: 'Double';\n };\n };\n BrickComponentType_WireGraph_Expr_LogicalAND: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bInputA: 'Boolean';\n bInputB: 'Boolean';\n };\n };\n BrickComponentType_WireGraph_Expr_LogicalNAND: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bInputA: 'Boolean';\n bInputB: 'Boolean';\n };\n };\n BrickComponentType_WireGraph_Expr_LogicalNOR: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bInputA: 'Boolean';\n bInputB: 'Boolean';\n };\n };\n BrickComponentType_WireGraph_Expr_LogicalNOT: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bInput: 'Boolean';\n };\n };\n BrickComponentType_WireGraph_Expr_LogicalOR: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bInputA: 'Boolean';\n bInputB: 'Boolean';\n };\n };\n BrickComponentType_WireGraph_Expr_LogicalXOR: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bInputA: 'Boolean';\n bInputB: 'Boolean';\n };\n };\n BrickComponentType_WireGraph_Expr_MathAdd: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_MathBlend: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Blend: 'Double';\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_MathDivide: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_MathModulo: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_MathModuloFloored: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_MathMultiply: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_MathSubtract: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Fake_Gamemode_RoundEndEvent: {\n version: 1;\n brick_indices?: number[];\n properties: {\n RoundNumber: 'Integer';\n };\n };\n BrickComponentType_WireGraph_Fake_Gamemode_RoundStartEvent: {\n version: 1;\n brick_indices?: number[];\n properties: {\n RoundNumber: 'Integer';\n };\n };\n BrickComponent_WireGraph_Expr_EdgeDetector: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Input: 'Double';\n bPulseOnRisingEdge: 'Boolean';\n bPulseOnFallingEdge: 'Boolean';\n };\n };\n};\n\nexport interface DefinedComponents\n extends UnknownComponents,\n Partial<KnownComponents> {}\n\nexport type Components<C extends DefinedComponents> = {\n [T in keyof C]: {\n [V in keyof C[T]['properties']]: UnrealTypeFromString<\n C[T]['properties'][V]\n >;\n };\n} & { [component_name: string]: AppliedComponent };\n\nexport type Vector = [number, number, number];\n\nexport type WirePort = {\n brick_index: number;\n component: string;\n port: string;\n};\n\nexport type Wire = {\n source: WirePort;\n target: WirePort;\n};\n\nexport interface BrickV1 {\n asset_name_index: number;\n size: Vector;\n position: Vector;\n direction: Direction;\n rotation: Rotation;\n collision: boolean;\n visibility: boolean;\n color: UnrealColor | number;\n}\n\nexport interface BrickV2 extends BrickV1 {\n material_index: number;\n}\n\nexport interface BrickV3 extends BrickV2 {\n owner_index: number;\n}\n\nexport interface BrickV8 extends BrickV3 {\n components: Components<DefinedComponents>;\n}\n\nexport type BrickV9 = Modify<\n BrickV8,\n {\n physical_index: number;\n material_intensity: number;\n color: ColorRgb | number;\n }\n>;\n\nexport type BrickV10 = Modify<\n BrickV9,\n {\n collision: Collision;\n }\n>;\n\nexport interface BrsV1 {\n version: 1;\n map: string;\n author: User;\n description: string;\n brick_count: number;\n mods: string[];\n brick_assets: string[];\n colors: UnrealColor[];\n bricks: BrickV1[];\n}\n\nexport type BrsV2 = Modify<\n BrsV1,\n {\n version: 2;\n materials: string[];\n bricks: BrickV2[];\n }\n>;\n\nexport type BrsV3 = Modify<\n BrsV2,\n {\n version: 3;\n brick_owners: User[];\n bricks: BrickV3[];\n }\n>;\n\nexport type BrsV4 = Modify<\n BrsV3,\n {\n version: 4;\n save_time: Uint8Array;\n }\n>;\n\n// not sure what part of 8 makes up 5-7 but nobody should have any saves in those versions\n\nexport type BrsV8 = Modify<\n BrsV4,\n {\n version: 8;\n host: User;\n brick_owners: LegacyOwner[];\n preview?: Bytes;\n game_version: number;\n bricks: BrickV8[];\n components: DefinedComponents;\n }\n>;\n\nexport type BrsV9 = Modify<\n BrsV8,\n {\n version: 9;\n physical_materials: string[];\n bricks: BrickV9[];\n }\n>;\n\nexport type BrsV10 = Modify<\n BrsV9,\n {\n version: 10;\n bricks: BrickV10[];\n }\n>;\n\nexport type BrsV14 = Modify<\n BrsV10,\n {\n version: 14;\n wires: Wire[];\n }\n>;\n\n// a save read from a file\nexport type ReadSaveObject =\n | BrsV1\n | BrsV2\n | BrsV3\n | BrsV4\n | BrsV8\n | BrsV9\n | BrsV10\n | BrsV14;\n\n// a brick a user provides\nexport interface Brick {\n asset_name_index?: number;\n size: Vector;\n position: Vector;\n direction?: Direction;\n rotation?: Rotation;\n collision?: boolean | Partial<Collision>;\n visibility?: boolean;\n material_index?: number;\n physical_index?: number;\n material_intensity?: number;\n color?: ColorRgb | number | UnrealColor | number[];\n owner_index?: number;\n components?: Components<DefinedComponents>;\n}\n\n// save a user can write\nexport interface WriteSaveObject {\n game_version?: number;\n map?: string;\n description?: string;\n author?: Partial<User>;\n host?: Partial<User>;\n mods?: string[];\n brick_assets?: string[];\n colors?: UnrealColor[];\n materials?: string[];\n brick_owners?: Partial<Owner>[];\n physical_materials?: string[];\n preview?: Bytes;\n bricks: Brick[];\n save_time?: ArrayLike<number>;\n components?: DefinedComponents;\n wires?: Wire[];\n}\n\nexport interface ReadOptions {\n bricks?: boolean;\n preview?: boolean;\n}\n\nexport interface WriteOptions {\n compress?: boolean;\n}\n","// SoA bit-flag helpers. Boolean columns in chunk SoAs are packed as\n// { Flags: byte[] } with bit i stored at byte i >> 3, bit position i & 7.\n// Exposed so consumers can build their own SoA readers and writers.\nimport type { BrdbValue } from './schema';\n\n/** Read bit i of a packed { Flags } column. Bytes past the end read as 0. */\nexport const bit = (flags: { Flags: number[] }, i: number): boolean =>\n (((flags.Flags[i >> 3] ?? 0) >> (i & 7)) & 1) === 1;\n\n/** Accumulate booleans into a packed { Flags } column. */\nexport class BitFlags {\n bytes: number[] = [];\n private bits = 0;\n push(v: boolean) {\n if (this.bits >= this.bytes.length * 8) this.bytes.push(0);\n if (v) this.bytes[this.bits >> 3] |= 1 << (this.bits & 7);\n this.bits += 1;\n }\n toValue(): BrdbValue {\n return { Flags: this.bytes };\n }\n}\n","/**\n * Checks if something is Uint8Array. Be careful: nodejs Buffer will return true.\n * @param a - value to test\n * @returns `true` when the value is a Uint8Array-compatible view.\n * @example\n * Check whether a value is a Uint8Array-compatible view.\n * ```ts\n * isBytes(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function isBytes(a) {\n // Plain `instanceof Uint8Array` is too strict for some Buffer / proxy / cross-realm cases.\n // The fallback still requires a real ArrayBuffer view, so plain\n // JSON-deserialized `{ constructor: ... }` spoofing is rejected, and\n // `BYTES_PER_ELEMENT === 1` keeps the fallback on byte-oriented views.\n return (a instanceof Uint8Array ||\n (ArrayBuffer.isView(a) &&\n a.constructor.name === 'Uint8Array' &&\n 'BYTES_PER_ELEMENT' in a &&\n a.BYTES_PER_ELEMENT === 1));\n}\n/**\n * Asserts something is a non-negative integer.\n * @param n - number to validate\n * @param title - label included in thrown errors\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validate a non-negative integer option.\n * ```ts\n * anumber(32, 'length');\n * ```\n */\nexport function anumber(n, title = '') {\n if (typeof n !== 'number') {\n const prefix = title && `\"${title}\" `;\n throw new TypeError(`${prefix}expected number, got ${typeof n}`);\n }\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix = title && `\"${title}\" `;\n throw new RangeError(`${prefix}expected integer >= 0, got ${n}`);\n }\n}\n/**\n * Asserts something is Uint8Array.\n * @param value - value to validate\n * @param length - optional exact length constraint\n * @param title - label included in thrown errors\n * @returns The validated byte array.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validate that a value is a byte array.\n * ```ts\n * abytes(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function abytes(value, length, title = '') {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n const message = prefix + 'expected Uint8Array' + ofLen + ', got ' + got;\n if (!bytes)\n throw new TypeError(message);\n throw new RangeError(message);\n }\n return value;\n}\n/**\n * Copies bytes into a fresh Uint8Array.\n * Buffer-style slices can alias the same backing store, so callers that need ownership should copy.\n * @param bytes - source bytes to clone\n * @returns Freshly allocated copy of `bytes`.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Clone a byte array before mutating it.\n * ```ts\n * const copy = copyBytes(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function copyBytes(bytes) {\n // `Uint8Array.from(...)` would also accept arrays / other typed arrays. Keep this helper strict\n // because callers use it at byte-validation boundaries before mutating the detached copy.\n return Uint8Array.from(abytes(bytes));\n}\n/**\n * Asserts something is a wrapped hash constructor.\n * @param h - hash constructor to validate\n * @throws On wrong argument types or invalid hash wrapper shape. {@link TypeError}\n * @throws On invalid hash metadata ranges or values. {@link RangeError}\n * @throws If the hash metadata allows empty outputs or block sizes. {@link Error}\n * @example\n * Validate a callable hash wrapper.\n * ```ts\n * import { ahash } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * ahash(sha256);\n * ```\n */\nexport function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new TypeError('Hash must wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n // HMAC and KDF callers treat these as real byte lengths; allowing zero lets fake wrappers pass\n // validation and can produce empty outputs instead of failing fast.\n if (h.outputLen < 1)\n throw new Error('\"outputLen\" must be >= 1');\n if (h.blockLen < 1)\n throw new Error('\"blockLen\" must be >= 1');\n}\n/**\n * Asserts a hash instance has not been destroyed or finished.\n * @param instance - hash instance to validate\n * @param checkFinished - whether to reject finalized instances\n * @throws If the hash instance has already been destroyed or finalized. {@link Error}\n * @example\n * Validate that a hash instance is still usable.\n * ```ts\n * import { aexists } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const hash = sha256.create();\n * aexists(hash);\n * ```\n */\nexport function aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/**\n * Asserts output is a sufficiently-sized byte array.\n * @param out - destination buffer\n * @param instance - hash instance providing output length\n * Oversized buffers are allowed; downstream code only promises to fill the first `outputLen` bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validate a caller-provided digest buffer.\n * ```ts\n * import { aoutput } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const hash = sha256.create();\n * aoutput(new Uint8Array(hash.outputLen), hash);\n * ```\n */\nexport function aoutput(out, instance) {\n abytes(out, undefined, 'digestInto() output');\n const min = instance.outputLen;\n if (out.length < min) {\n throw new RangeError('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\n/**\n * Casts a typed array view to Uint8Array.\n * @param arr - source typed array\n * @returns Uint8Array view over the same buffer.\n * @example\n * Reinterpret a typed array as bytes.\n * ```ts\n * u8(new Uint32Array([1, 2]));\n * ```\n */\nexport function u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/**\n * Casts a typed array view to Uint32Array.\n * `arr.byteOffset` must already be 4-byte aligned or the platform\n * Uint32Array constructor will throw.\n * @param arr - source typed array\n * @returns Uint32Array view over the same buffer.\n * @example\n * Reinterpret a byte array as 32-bit words.\n * ```ts\n * u32(new Uint8Array(8));\n * ```\n */\nexport function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/**\n * Zeroizes typed arrays in place. Warning: JS provides no guarantees.\n * @param arrays - arrays to overwrite with zeros\n * @example\n * Zeroize sensitive buffers in place.\n * ```ts\n * clean(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/**\n * Creates a DataView for byte-level manipulation.\n * @param arr - source typed array\n * @returns DataView over the same buffer region.\n * @example\n * Create a DataView over an existing buffer.\n * ```ts\n * createView(new Uint8Array(4));\n * ```\n */\nexport function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/**\n * Rotate-right operation for uint32 values.\n * @param word - source word\n * @param shift - shift amount in bits\n * @returns Rotated word.\n * @example\n * Rotate a 32-bit word to the right.\n * ```ts\n * rotr(0x12345678, 8);\n * ```\n */\nexport function rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/**\n * Rotate-left operation for uint32 values.\n * @param word - source word\n * @param shift - shift amount in bits\n * @returns Rotated word.\n * @example\n * Rotate a 32-bit word to the left.\n * ```ts\n * rotl(0x12345678, 8);\n * ```\n */\nexport function rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Whether the current platform is little-endian. */\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/**\n * Byte-swap operation for uint32 values.\n * @param word - source word\n * @returns Word with reversed byte order.\n * @example\n * Reverse the byte order of a 32-bit word.\n * ```ts\n * byteSwap(0x11223344);\n * ```\n */\nexport function byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/**\n * Conditionally byte-swaps one 32-bit word on big-endian platforms.\n * @param n - source word\n * @returns Original or byte-swapped word depending on platform endianness.\n * @example\n * Normalize a 32-bit word for host endianness.\n * ```ts\n * swap8IfBE(0x11223344);\n * ```\n */\nexport const swap8IfBE = isLE\n ? (n) => n\n : (n) => byteSwap(n) >>> 0;\n/**\n * Byte-swaps every word of a Uint32Array in place.\n * @param arr - array to mutate\n * @returns The same array after mutation; callers pass live state arrays here.\n * @example\n * Reverse the byte order of every word in place.\n * ```ts\n * byteSwap32(new Uint32Array([0x11223344]));\n * ```\n */\nexport function byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n/**\n * Conditionally byte-swaps a Uint32Array on big-endian platforms.\n * @param u - array to normalize for host endianness\n * @returns Original or byte-swapped array depending on platform endianness.\n * On big-endian runtimes this mutates `u` in place via `byteSwap32(...)`.\n * @example\n * Normalize a word array for host endianness.\n * ```ts\n * swap32IfBE(new Uint32Array([0x11223344]));\n * ```\n */\nexport const swap32IfBE = isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string.\n * Uses the built-in function when available and assumes it matches the tested\n * fallback semantics.\n * @param bytes - bytes to encode\n * @returns Lowercase hexadecimal string.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Convert bytes to lowercase hexadecimal.\n * ```ts\n * bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])); // 'cafe0123'\n * ```\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @param hex - hexadecimal string to decode\n * @returns Decoded bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Decode lowercase hexadecimal into bytes.\n * ```ts\n * hexToBytes('cafe0123'); // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n * ```\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new TypeError('hex string expected, got ' + typeof hex);\n if (hasHexBuiltin) {\n try {\n return Uint8Array.fromHex(hex);\n }\n catch (error) {\n if (error instanceof SyntaxError)\n throw new RangeError(error.message);\n throw error;\n }\n }\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new RangeError('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new RangeError('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * This yields to the Promise/microtask scheduler queue, not to timers or the\n * full macrotask event loop.\n * @example\n * Yield to the next scheduler tick.\n * ```ts\n * await nextTick();\n * ```\n */\nexport const nextTick = async () => { };\n/**\n * Returns control to the Promise/microtask scheduler every `tick`\n * milliseconds to avoid blocking long loops.\n * @param iters - number of loop iterations to run\n * @param tick - maximum time slice in milliseconds\n * @param cb - callback executed on each iteration\n * @example\n * Run a loop that periodically yields back to the event loop.\n * ```ts\n * await asyncLoop(2, 0, () => {});\n * ```\n */\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * Non-ASCII details are delegated to the platform `TextEncoder`.\n * @param str - string to encode\n * @returns UTF-8 encoded bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Encode a string as UTF-8 bytes.\n * ```ts\n * utf8ToBytes('abc'); // Uint8Array.from([97, 98, 99])\n * ```\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new TypeError('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Helper for KDFs: consumes Uint8Array or string.\n * String inputs are UTF-8 encoded; byte-array inputs stay aliased to the caller buffer.\n * @param data - user-provided KDF input\n * @param errorTitle - label included in thrown errors\n * @returns Byte representation of the input.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Normalize KDF input to bytes.\n * ```ts\n * kdfInputToBytes('password');\n * ```\n */\nexport function kdfInputToBytes(data, errorTitle = '') {\n if (typeof data === 'string')\n return utf8ToBytes(data);\n return abytes(data, undefined, errorTitle);\n}\n/**\n * Copies several Uint8Arrays into one.\n * @param arrays - arrays to concatenate\n * @returns Concatenated byte array.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Concatenate multiple byte arrays.\n * ```ts\n * concatBytes(new Uint8Array([1]), new Uint8Array([2]));\n * ```\n */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n/**\n * Merges default options and passed options.\n * @param defaults - base option object\n * @param opts - user overrides\n * @returns Merged option object. The merge mutates `defaults` in place.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Merge user overrides onto default options.\n * ```ts\n * checkOpts({ dkLen: 32 }, { asyncTick: 10 });\n * ```\n */\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new TypeError('options must be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/**\n * Creates a callable hash function from a stateful class constructor.\n * @param hashCons - hash constructor or factory\n * @param info - optional metadata such as DER OID\n * @returns Frozen callable hash wrapper with `.create()`.\n * Wrapper construction eagerly calls `hashCons(undefined)` once to read\n * `outputLen` / `blockLen`, so constructor side effects happen at module\n * init time.\n * @example\n * Wrap a stateful hash constructor into a callable helper.\n * ```ts\n * import { createHasher } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const wrapped = createHasher(sha256.create, { oid: sha256.oid });\n * wrapped(new Uint8Array([1]));\n * ```\n */\nexport function createHasher(hashCons, info = {}) {\n const hashC = (msg, opts) => hashCons(opts)\n .update(msg)\n .digest();\n const tmp = hashCons(undefined);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.canXOF = tmp.canXOF;\n hashC.create = (opts) => hashCons(opts);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\n/**\n * Cryptographically secure PRNG backed by `crypto.getRandomValues`.\n * @param bytesLength - number of random bytes to generate\n * @returns Random bytes.\n * The platform `getRandomValues()` implementation still defines any\n * single-call length cap, and this helper rejects oversize requests\n * with a stable library `RangeError` instead of host-specific errors.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @throws If the current runtime does not provide `crypto.getRandomValues`. {@link Error}\n * @example\n * Generate a fresh random key or nonce.\n * ```ts\n * const key = randomBytes(16);\n * ```\n */\nexport function randomBytes(bytesLength = 32) {\n // Match the repo's other length-taking helpers instead of relying on Uint8Array coercion.\n anumber(bytesLength, 'bytesLength');\n const cr = typeof globalThis === 'object' ? globalThis.crypto : null;\n if (typeof cr?.getRandomValues !== 'function')\n throw new Error('crypto.getRandomValues must be defined');\n // Web Cryptography API Level 2 §10.1.1:\n // if `byteLength > 65536`, throw `QuotaExceededError`.\n // Keep the guard explicit so callers can see the quota in code\n // instead of discovering it by reading the spec or host errors.\n // This wrapper surfaces the same quota as a stable library RangeError.\n if (bytesLength > 65536)\n throw new RangeError(`\"bytesLength\" expected <= 65536, got ${bytesLength}`);\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n/**\n * Creates OID metadata for NIST hashes with prefix `06 09 60 86 48 01 65 03 04 02`.\n * @param suffix - final OID byte for the selected hash.\n * The helper accepts any byte even though only the documented NIST hash\n * suffixes are meaningful downstream.\n * @returns Object containing the DER-encoded OID.\n * @example\n * Build OID metadata for a NIST hash.\n * ```ts\n * oidNist(0x01);\n * ```\n */\nexport const oidNist = (suffix) => ({\n // Current NIST hashAlgs suffixes used here fit in one DER subidentifier octet.\n // Larger suffix values would need base-128 OID encoding and a different length byte.\n oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n//# sourceMappingURL=utils.js.map","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { abytes, aexists, aoutput, clean, createView, } from \"./utils.js\";\n/**\n * Shared 32-bit conditional boolean primitive reused by SHA-256, SHA-1, and MD5 `F`.\n * Returns bits from `b` when `a` is set, otherwise from `c`.\n * The XOR form is equivalent to MD5's `F(X,Y,Z) = XY v not(X)Z` because the masked terms never\n * set the same bit.\n * @param a - selector word\n * @param b - word chosen when selector bit is set\n * @param c - word chosen when selector bit is clear\n * @returns Mixed 32-bit word.\n * @example\n * Combine three words with the shared 32-bit choice primitive.\n * ```ts\n * Chi(0xffffffff, 0x12345678, 0x87654321);\n * ```\n */\nexport function Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/**\n * Shared 32-bit majority primitive reused by SHA-256 and SHA-1.\n * Returns bits shared by at least two inputs.\n * @param a - first input word\n * @param b - second input word\n * @param c - third input word\n * @returns Mixed 32-bit word.\n * @example\n * Combine three words with the shared 32-bit majority primitive.\n * ```ts\n * Maj(0xffffffff, 0x12345678, 0x87654321);\n * ```\n */\nexport function Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n * Accepts only byte-aligned `Uint8Array` input, even when the underlying spec describes bit\n * strings with partial-byte tails.\n * @param blockLen - internal block size in bytes\n * @param outputLen - digest size in bytes\n * @param padOffset - trailing length field size in bytes\n * @param isLE - whether length and state words are encoded in little-endian\n * @example\n * Use a concrete subclass to get the shared Merkle-Damgard update/digest flow.\n * ```ts\n * import { _SHA1 } from '@noble/hashes/legacy.js';\n * const hash = new _SHA1();\n * hash.update(new Uint8Array([97, 98, 99]));\n * hash.digest();\n * ```\n */\nexport class HashMD {\n blockLen;\n outputLen;\n canXOF = false;\n padOffset;\n isLE;\n // For partial updates less than block size\n buffer;\n view;\n finished = false;\n length = 0;\n pos = 0;\n destroyed = false;\n constructor(blockLen, outputLen, padOffset, isLE) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n aexists(this);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path only when there is no buffered partial block: `take === blockLen` implies\n // `this.pos === 0`, so we can process full blocks directly from the input view.\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // `padOffset` reserves the whole length field. For SHA-384/512 the high 64 bits stay zero from\n // the padding fill above, and JS will overflow before user input can make that half non-zero.\n // So we only need to write the low 64 bits here.\n view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which must be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen must be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n // Copy before destroy(): subclasses wipe `buffer` during cleanup, but `digest()` must return\n // fresh bytes to the caller.\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to ||= new this.constructor();\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n // Only partial-block bytes need copying: when `length % blockLen === 0`, `pos === 0` and\n // later `update()` / `digestInto()` overwrite `to.buffer` from the start before reading it.\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state from RFC 6234 §6.1: the first 32 bits of the fractional parts of the\n * square roots of the first eight prime numbers. Exported as a shared table; callers must treat\n * it as read-only because constructors copy words from it by index. */\nexport const SHA256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state `H(0)` from RFC 6234 §6.1. Exported as a shared table; callers must\n * treat it as read-only because constructors copy words from it by index. */\nexport const SHA224_IV = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state from RFC 6234 §6.3: eight RFC 64-bit `H(0)` words stored as sixteen\n * big-endian 32-bit halves. Derived from the fractional parts of the square roots of the ninth\n * through sixteenth prime numbers. Exported as a shared table; callers must treat it as read-only\n * because constructors copy halves from it by index. */\nexport const SHA384_IV = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state from RFC 6234 §6.3: eight RFC 64-bit `H(0)` words stored as sixteen\n * big-endian 32-bit halves. Derived from the fractional parts of the square roots of the first\n * eight prime numbers. Exported as a shared table; callers must treat it as read-only because\n * constructors copy halves from it by index. */\nexport const SHA512_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n//# sourceMappingURL=_md.js.map","const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n// Split bigint into two 32-bit halves. With `le=true`, returned fields become `{ h: low, l: high\n// }` to match little-endian word order rather than the property names.\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n// Split bigint list into `[highWords, lowWords]` when `le=false`; with `le=true`, the first array\n// holds the low halves because `fromBig(...)` swaps the semantic meaning of `h` and `l`.\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\n// Combine explicit `(high, low)` 32-bit halves into a bigint; `>>> 0` normalizes signed JS\n// bitwise results back to uint32 first, and little-endian callers must swap.\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// High 32-bit half of a 64-bit logical right shift for `s` in `0..31`.\nconst shrSH = (h, _l, s) => h >>> s;\n// Low 32-bit half of a 64-bit logical right shift, valid for `s` in `1..31`.\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// High 32-bit half of a 64-bit right rotate, valid for `s` in `1..31`.\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\n// Low 32-bit half of a 64-bit right rotate, valid for `s` in `1..31`.\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// High 32-bit half of a 64-bit right rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\n// Low 32-bit half of a 64-bit right rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// High 32-bit half of a 64-bit right rotate for `s === 32`; this is just the swapped low half.\nconst rotr32H = (_h, l) => l;\n// Low 32-bit half of a 64-bit right rotate for `s === 32`; this is just the swapped high half.\nconst rotr32L = (h, _l) => h;\n// High 32-bit half of a 64-bit left rotate, valid for `s` in `1..31`.\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\n// Low 32-bit half of a 64-bit left rotate, valid for `s` in `1..31`.\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// High 32-bit half of a 64-bit left rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\n// Low 32-bit half of a 64-bit left rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// Add two split 64-bit words and return the split `{ h, l }` sum.\n// JS uses 32-bit signed integers for bitwise operations, so we cannot simply shift the carry out\n// of the low sum and instead use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\n// Unmasked low-word accumulator for 3-way addition; pass the raw result into `add3H(...)`.\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\n// High-word finalize step for 3-way addition; `low` must be the untruncated output of `add3L(...)`.\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\n// Unmasked low-word accumulator for 4-way addition; pass the raw result into `add4H(...)`.\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\n// High-word finalize step for 4-way addition; `low` must be the untruncated output of `add4L(...)`.\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\n// Unmasked low-word accumulator for 5-way addition; pass the raw result into `add5H(...)`.\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\n// High-word finalize step for 5-way addition; `low` must be the untruncated output of `add5L(...)`.\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig };\n// Canonical grouped namespace for callers that prefer one object.\n// Named exports stay for direct imports.\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\n// Default export mirrors named `u64` for compatibility with object-style imports.\nexport default u64;\n//# sourceMappingURL=_u64.js.map","/**\n * Internal helpers for blake hash.\n * @module\n */\nimport { rotr } from \"./utils.js\";\n/**\n * Internal blake permutation table.\n * Rows `0..9` serve BLAKE2s, rows `0..11` serve BLAKE2b with `10..11 = 0..1`, and Blake1 also\n * reuses the later rows shown below. Blake1 expands rounds `10..15` as `SIGMA[i % 10]`, so rows\n * `10..15` intentionally repeat rows `0..5` for the 14-round (256) and 16-round (512) variants.\n */\n// prettier-ignore\nexport const BSIGMA = /* @__PURE__ */ Uint8Array.from([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\n 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,\n 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,\n 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,\n 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n // Blake1, unused in others\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\n]);\n// 32-bit / BLAKE2s first half of G, with the fixed `(16, 12)` rotation pair.\n// Parameter `x` is the RFC 7693 first-half message word, or Blake1's pre-mixed\n// `m[sigma[r][2i]] ^ u[sigma[r][2i+1]]` addend in the 32-bit path.\nexport function G1s(a, b, c, d, x) {\n a = (a + b + x) | 0;\n d = rotr(d ^ a, 16);\n c = (c + d) | 0;\n b = rotr(b ^ c, 12);\n return { a, b, c, d };\n}\n// 32-bit / BLAKE2s second half of G.\n// Parameter `x` is the RFC 7693 second-half (`y`) message word, or Blake1's pre-mixed\n// `m[sigma[r][2i + 1]] ^ u[sigma[r][2i]]` addend in the 32-bit path.\nexport function G2s(a, b, c, d, x) {\n a = (a + b + x) | 0;\n d = rotr(d ^ a, 8);\n c = (c + d) | 0;\n b = rotr(b ^ c, 7);\n return { a, b, c, d };\n}\n//# sourceMappingURL=_blake.js.map","/**\n * blake2b (64-bit) & blake2s (8 to 32-bit) hash functions.\n * b could have been faster, but there is no fast u64 in js, so s is 1.5x faster.\n * @module\n */\nimport { BSIGMA, G1s, G2s } from \"./_blake.js\";\nimport { SHA256_IV } from \"./_md.js\";\nimport * as u64 from \"./_u64.js\";\n// prettier-ignore\nimport { abytes, aexists, anumber, aoutput, clean, createHasher, swap32IfBE, swap8IfBE, u32 } from \"./utils.js\";\n// Same IV words as `SHA512_IV`, but endian-swapped into LE u32 low/high halves\n// for the BLAKE2b u64 helpers below.\nconst B2B_IV = /* @__PURE__ */ Uint32Array.from([\n 0xf3bcc908, 0x6a09e667, 0x84caa73b, 0xbb67ae85, 0xfe94f82b, 0x3c6ef372, 0x5f1d36f1, 0xa54ff53a,\n 0xade682d1, 0x510e527f, 0x2b3e6c1f, 0x9b05688c, 0xfb41bd6b, 0x1f83d9ab, 0x137e2179, 0x5be0cd19,\n]);\n// Shared synchronous BLAKE2b work vector as LE u32 low/high halves.\nconst BBUF = /* @__PURE__ */ new Uint32Array(32);\n// BLAKE2b G mix split into two half-rounds over LE u32 low/high limbs.\nfunction G1b(a, b, c, d, msg, x) {\n // NOTE: V is LE here\n const Xl = msg[x], Xh = msg[x + 1]; // prettier-ignore\n let Al = BBUF[2 * a], Ah = BBUF[2 * a + 1]; // prettier-ignore\n let Bl = BBUF[2 * b], Bh = BBUF[2 * b + 1]; // prettier-ignore\n let Cl = BBUF[2 * c], Ch = BBUF[2 * c + 1]; // prettier-ignore\n let Dl = BBUF[2 * d], Dh = BBUF[2 * d + 1]; // prettier-ignore\n // v[a] = (v[a] + v[b] + x) | 0;\n let ll = u64.add3L(Al, Bl, Xl);\n Ah = u64.add3H(ll, Ah, Bh, Xh);\n Al = ll | 0;\n // v[d] = rotr(v[d] ^ v[a], 32)\n ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });\n ({ Dh, Dl } = { Dh: u64.rotr32H(Dh, Dl), Dl: u64.rotr32L(Dh, Dl) });\n // v[c] = (v[c] + v[d]) | 0;\n ({ h: Ch, l: Cl } = u64.add(Ch, Cl, Dh, Dl));\n // v[b] = rotr(v[b] ^ v[c], 24)\n ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });\n ({ Bh, Bl } = { Bh: u64.rotrSH(Bh, Bl, 24), Bl: u64.rotrSL(Bh, Bl, 24) });\n ((BBUF[2 * a] = Al), (BBUF[2 * a + 1] = Ah));\n ((BBUF[2 * b] = Bl), (BBUF[2 * b + 1] = Bh));\n ((BBUF[2 * c] = Cl), (BBUF[2 * c + 1] = Ch));\n ((BBUF[2 * d] = Dl), (BBUF[2 * d + 1] = Dh));\n}\n// Second half-round of the same LE-limb BLAKE2b G mix; `x` is the message word offset.\nfunction G2b(a, b, c, d, msg, x) {\n // NOTE: V is LE here\n const Xl = msg[x], Xh = msg[x + 1]; // prettier-ignore\n let Al = BBUF[2 * a], Ah = BBUF[2 * a + 1]; // prettier-ignore\n let Bl = BBUF[2 * b], Bh = BBUF[2 * b + 1]; // prettier-ignore\n let Cl = BBUF[2 * c], Ch = BBUF[2 * c + 1]; // prettier-ignore\n let Dl = BBUF[2 * d], Dh = BBUF[2 * d + 1]; // prettier-ignore\n // v[a] = (v[a] + v[b] + x) | 0;\n let ll = u64.add3L(Al, Bl, Xl);\n Ah = u64.add3H(ll, Ah, Bh, Xh);\n Al = ll | 0;\n // v[d] = rotr(v[d] ^ v[a], 16)\n ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });\n ({ Dh, Dl } = { Dh: u64.rotrSH(Dh, Dl, 16), Dl: u64.rotrSL(Dh, Dl, 16) });\n // v[c] = (v[c] + v[d]) | 0;\n ({ h: Ch, l: Cl } = u64.add(Ch, Cl, Dh, Dl));\n // v[b] = rotr(v[b] ^ v[c], 63)\n ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });\n ({ Bh, Bl } = { Bh: u64.rotrBH(Bh, Bl, 63), Bl: u64.rotrBL(Bh, Bl, 63) });\n ((BBUF[2 * a] = Al), (BBUF[2 * a + 1] = Ah));\n ((BBUF[2 * b] = Bl), (BBUF[2 * b + 1] = Bh));\n ((BBUF[2 * c] = Cl), (BBUF[2 * c + 1] = Ch));\n ((BBUF[2 * d] = Dl), (BBUF[2 * d + 1] = Dh));\n}\nfunction checkBlake2Opts(outputLen, opts = {}, keyLen, saltLen, persLen) {\n anumber(keyLen);\n // RFC 7693 §2.1 requires digest length nn in 1..keyLen.\n if (outputLen <= 0 || outputLen > keyLen)\n throw new Error('outputLen bigger than keyLen');\n const { key, salt, personalization } = opts;\n // This API uses `undefined` for the RFC 7693 `kk = 0` case, so a provided key must be non-empty.\n if (key !== undefined && (key.length < 1 || key.length > keyLen))\n throw new Error('\"key\" expected to be undefined or of length=1..' + keyLen);\n if (salt !== undefined)\n abytes(salt, saltLen, 'salt');\n if (personalization !== undefined)\n abytes(personalization, persLen, 'personalization');\n}\n/** Internal base class for BLAKE2. */\nexport class _BLAKE2 {\n buffer;\n buffer32;\n finished = false;\n destroyed = false;\n length = 0;\n pos = 0;\n blockLen;\n outputLen;\n canXOF = false;\n constructor(blockLen, outputLen) {\n anumber(blockLen);\n anumber(outputLen);\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.buffer = new Uint8Array(blockLen);\n this.buffer32 = u32(this.buffer);\n }\n update(data) {\n aexists(this);\n abytes(data);\n // Main difference with other hashes: there is flag for last block,\n // so we cannot process current block before we know that there\n // is the next one. This significantly complicates logic and reduces ability\n // to do zero-copy processing\n const { blockLen, buffer, buffer32 } = this;\n const len = data.length;\n const offset = data.byteOffset;\n const buf = data.buffer;\n for (let pos = 0; pos < len;) {\n // If buffer is full and we still have input (don't process last block, same as blake2s)\n if (this.pos === blockLen) {\n swap32IfBE(buffer32);\n this.compress(buffer32, 0, false);\n swap32IfBE(buffer32);\n this.pos = 0;\n }\n const take = Math.min(blockLen - this.pos, len - pos);\n const dataOffset = offset + pos;\n // Zero-copy only for full, 4-byte-aligned, non-final blocks.\n if (take === blockLen && !(dataOffset % 4) && pos + take < len) {\n const data32 = new Uint32Array(buf, dataOffset, Math.floor((len - pos) / 4));\n swap32IfBE(data32);\n for (let pos32 = 0; pos + blockLen < len; pos32 += buffer32.length, pos += blockLen) {\n this.length += blockLen;\n this.compress(data32, pos32, false);\n }\n swap32IfBE(data32);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n this.length += take;\n pos += take;\n }\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n const { pos, buffer32 } = this;\n this.finished = true;\n // Padding\n clean(this.buffer.subarray(pos));\n swap32IfBE(buffer32);\n this.compress(buffer32, 0, true);\n swap32IfBE(buffer32);\n // Reject unaligned views explicitly instead of hiding them behind a full scratch copy.\n if (out.byteOffset & 3)\n throw new RangeError('\"digestInto() output\" expected 4-byte aligned byteOffset, got ' + out.byteOffset);\n const state = this.get();\n const out32 = u32(out);\n const full = Math.floor(this.outputLen / 4);\n for (let i = 0; i < full; i++)\n out32[i] = swap8IfBE(state[i]);\n const tail = this.outputLen % 4;\n if (!tail)\n return;\n const off = full * 4;\n const word = state[full];\n for (let i = 0; i < tail; i++)\n out[off + i] = word >>> (8 * i);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n // Return a copy so callers do not alias the instance scratch buffer used during finalization.\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n const { buffer, length, finished, destroyed, outputLen, pos } = this;\n // Recreate only `dkLen`; key/salt/personalization are already absorbed into the copied state.\n to ||= new this.constructor({ dkLen: outputLen });\n to.set(...this.get());\n to.buffer.set(buffer);\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n // @ts-ignore\n to.outputLen = outputLen;\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\n/** Internal blake2b hash class with state stored as LE u32 low/high halves. */\nexport class _BLAKE2b extends _BLAKE2 {\n // Same IV words as SHA-512 / BLAKE2b, encoded as LE u32 low/high halves.\n v0l = B2B_IV[0] | 0;\n v0h = B2B_IV[1] | 0;\n v1l = B2B_IV[2] | 0;\n v1h = B2B_IV[3] | 0;\n v2l = B2B_IV[4] | 0;\n v2h = B2B_IV[5] | 0;\n v3l = B2B_IV[6] | 0;\n v3h = B2B_IV[7] | 0;\n v4l = B2B_IV[8] | 0;\n v4h = B2B_IV[9] | 0;\n v5l = B2B_IV[10] | 0;\n v5h = B2B_IV[11] | 0;\n v6l = B2B_IV[12] | 0;\n v6h = B2B_IV[13] | 0;\n v7l = B2B_IV[14] | 0;\n v7h = B2B_IV[15] | 0;\n constructor(opts = {}) {\n const olen = opts.dkLen === undefined ? 64 : opts.dkLen;\n super(128, olen);\n checkBlake2Opts(olen, opts, 64, 16, 16);\n let { key, personalization, salt } = opts;\n let keyLength = 0;\n if (key !== undefined) {\n abytes(key, undefined, 'key');\n keyLength = key.length;\n }\n // RFC 7693 §2.5: xor `p[0] = 0x0101kknn` into the low 32 bits of `h[0]`;\n // the high 32 bits stay at `IV[0]`.\n this.v0l ^= this.outputLen | (keyLength << 8) | (0x01 << 16) | (0x01 << 24);\n if (salt !== undefined) {\n abytes(salt, undefined, 'salt');\n const slt = u32(salt);\n this.v4l ^= swap8IfBE(slt[0]);\n this.v4h ^= swap8IfBE(slt[1]);\n this.v5l ^= swap8IfBE(slt[2]);\n this.v5h ^= swap8IfBE(slt[3]);\n }\n if (personalization !== undefined) {\n abytes(personalization, undefined, 'personalization');\n const pers = u32(personalization);\n this.v6l ^= swap8IfBE(pers[0]);\n this.v6h ^= swap8IfBE(pers[1]);\n this.v7l ^= swap8IfBE(pers[2]);\n this.v7h ^= swap8IfBE(pers[3]);\n }\n if (key !== undefined) {\n // Pad to blockLen and update\n const tmp = new Uint8Array(this.blockLen);\n tmp.set(key);\n this.update(tmp);\n }\n }\n // prettier-ignore\n get() {\n let { v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h } = this;\n return [v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h];\n }\n // prettier-ignore\n set(v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h) {\n this.v0l = v0l | 0;\n this.v0h = v0h | 0;\n this.v1l = v1l | 0;\n this.v1h = v1h | 0;\n this.v2l = v2l | 0;\n this.v2h = v2h | 0;\n this.v3l = v3l | 0;\n this.v3h = v3h | 0;\n this.v4l = v4l | 0;\n this.v4h = v4h | 0;\n this.v5l = v5l | 0;\n this.v5h = v5h | 0;\n this.v6l = v6l | 0;\n this.v6h = v6h | 0;\n this.v7l = v7l | 0;\n this.v7h = v7h | 0;\n }\n compress(msg, offset, isLast) {\n this.get().forEach((v, i) => (BBUF[i] = v)); // First half from state.\n BBUF.set(B2B_IV, 16); // Second half from IV.\n let { h, l } = u64.fromBig(BigInt(this.length));\n BBUF[24] = B2B_IV[8] ^ l; // Low word of the offset.\n BBUF[25] = B2B_IV[9] ^ h; // High word.\n // Invert all bits for last block\n if (isLast) {\n BBUF[28] = ~BBUF[28];\n BBUF[29] = ~BBUF[29];\n }\n let j = 0;\n const s = BSIGMA;\n // SIGMA selects 64-bit message words; multiply by 2 because `msg` stores\n // each word as [low32, high32].\n for (let i = 0; i < 12; i++) {\n G1b(0, 4, 8, 12, msg, offset + 2 * s[j++]);\n G2b(0, 4, 8, 12, msg, offset + 2 * s[j++]);\n G1b(1, 5, 9, 13, msg, offset + 2 * s[j++]);\n G2b(1, 5, 9, 13, msg, offset + 2 * s[j++]);\n G1b(2, 6, 10, 14, msg, offset + 2 * s[j++]);\n G2b(2, 6, 10, 14, msg, offset + 2 * s[j++]);\n G1b(3, 7, 11, 15, msg, offset + 2 * s[j++]);\n G2b(3, 7, 11, 15, msg, offset + 2 * s[j++]);\n G1b(0, 5, 10, 15, msg, offset + 2 * s[j++]);\n G2b(0, 5, 10, 15, msg, offset + 2 * s[j++]);\n G1b(1, 6, 11, 12, msg, offset + 2 * s[j++]);\n G2b(1, 6, 11, 12, msg, offset + 2 * s[j++]);\n G1b(2, 7, 8, 13, msg, offset + 2 * s[j++]);\n G2b(2, 7, 8, 13, msg, offset + 2 * s[j++]);\n G1b(3, 4, 9, 14, msg, offset + 2 * s[j++]);\n G2b(3, 4, 9, 14, msg, offset + 2 * s[j++]);\n }\n this.v0l ^= BBUF[0] ^ BBUF[16];\n this.v0h ^= BBUF[1] ^ BBUF[17];\n this.v1l ^= BBUF[2] ^ BBUF[18];\n this.v1h ^= BBUF[3] ^ BBUF[19];\n this.v2l ^= BBUF[4] ^ BBUF[20];\n this.v2h ^= BBUF[5] ^ BBUF[21];\n this.v3l ^= BBUF[6] ^ BBUF[22];\n this.v3h ^= BBUF[7] ^ BBUF[23];\n this.v4l ^= BBUF[8] ^ BBUF[24];\n this.v4h ^= BBUF[9] ^ BBUF[25];\n this.v5l ^= BBUF[10] ^ BBUF[26];\n this.v5h ^= BBUF[11] ^ BBUF[27];\n this.v6l ^= BBUF[12] ^ BBUF[28];\n this.v6h ^= BBUF[13] ^ BBUF[29];\n this.v7l ^= BBUF[14] ^ BBUF[30];\n this.v7h ^= BBUF[15] ^ BBUF[31];\n clean(BBUF);\n }\n destroy() {\n this.destroyed = true;\n clean(this.buffer32);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n/**\n * Blake2b hash function. 64-bit. 1.5x slower than blake2s in JS.\n * @param msg - message that would be hashed\n * @param opts - Optional output, MAC, salt, and personalization settings.\n * `dkLen` must be 1..64 bytes; `salt` and `personalization`, if present,\n * must be 16 bytes each. See {@link Blake2Opts}.\n * @returns Digest bytes.\n * @example\n * Hash a message with Blake2b.\n * ```ts\n * blake2b(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const blake2b = /* @__PURE__ */ createHasher((opts) => new _BLAKE2b(opts));\n/**\n * BLAKE2-compress core method.\n * Runs only the round function over a caller-supplied local vector; callers initialize `v0..v15`\n * and apply the final `h[i] ^= v[i] ^ v[i + 8]` fold themselves.\n * @param s - flattened sigma schedule bytes\n * @param offset - starting word offset inside `msg`, not a byte offset\n * @param msg - message words\n * @param rounds - round count to execute\n * @param v0 - state word 0\n * @param v1 - state word 1\n * @param v2 - state word 2\n * @param v3 - state word 3\n * @param v4 - state word 4\n * @param v5 - state word 5\n * @param v6 - state word 6\n * @param v7 - state word 7\n * @param v8 - state word 8\n * @param v9 - state word 9\n * @param v10 - state word 10\n * @param v11 - state word 11\n * @param v12 - state word 12\n * @param v13 - state word 13\n * @param v14 - state word 14\n * @param v15 - state word 15\n * @returns Updated compression state words.\n * @example\n * Run the BLAKE2 compression core on zeroed state and message words.\n * ```ts\n * import { compress } from '@noble/hashes/blake2.js';\n * const state = compress(\n * new Uint8Array(16),\n * 0,\n * new Uint32Array(16),\n * 1,\n * 0, 0, 0, 0, 0, 0, 0, 0,\n * 0, 0, 0, 0, 0, 0, 0, 0\n * );\n * state.v0;\n * ```\n */\n// prettier-ignore\nexport function compress(s, offset, msg, rounds, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) {\n let j = 0;\n for (let i = 0; i < rounds; i++) {\n ({ a: v0, b: v4, c: v8, d: v12 } = G1s(v0, v4, v8, v12, msg[offset + s[j++]]));\n ({ a: v0, b: v4, c: v8, d: v12 } = G2s(v0, v4, v8, v12, msg[offset + s[j++]]));\n ({ a: v1, b: v5, c: v9, d: v13 } = G1s(v1, v5, v9, v13, msg[offset + s[j++]]));\n ({ a: v1, b: v5, c: v9, d: v13 } = G2s(v1, v5, v9, v13, msg[offset + s[j++]]));\n ({ a: v2, b: v6, c: v10, d: v14 } = G1s(v2, v6, v10, v14, msg[offset + s[j++]]));\n ({ a: v2, b: v6, c: v10, d: v14 } = G2s(v2, v6, v10, v14, msg[offset + s[j++]]));\n ({ a: v3, b: v7, c: v11, d: v15 } = G1s(v3, v7, v11, v15, msg[offset + s[j++]]));\n ({ a: v3, b: v7, c: v11, d: v15 } = G2s(v3, v7, v11, v15, msg[offset + s[j++]]));\n ({ a: v0, b: v5, c: v10, d: v15 } = G1s(v0, v5, v10, v15, msg[offset + s[j++]]));\n ({ a: v0, b: v5, c: v10, d: v15 } = G2s(v0, v5, v10, v15, msg[offset + s[j++]]));\n ({ a: v1, b: v6, c: v11, d: v12 } = G1s(v1, v6, v11, v12, msg[offset + s[j++]]));\n ({ a: v1, b: v6, c: v11, d: v12 } = G2s(v1, v6, v11, v12, msg[offset + s[j++]]));\n ({ a: v2, b: v7, c: v8, d: v13 } = G1s(v2, v7, v8, v13, msg[offset + s[j++]]));\n ({ a: v2, b: v7, c: v8, d: v13 } = G2s(v2, v7, v8, v13, msg[offset + s[j++]]));\n ({ a: v3, b: v4, c: v9, d: v14 } = G1s(v3, v4, v9, v14, msg[offset + s[j++]]));\n ({ a: v3, b: v4, c: v9, d: v14 } = G2s(v3, v4, v9, v14, msg[offset + s[j++]]));\n }\n return { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 };\n}\n// Blake2s reuses the SHA-256 IV words as-is.\nconst B2S_IV = /* @__PURE__ */ SHA256_IV.slice();\n/** Internal blake2s hash class. */\nexport class _BLAKE2s extends _BLAKE2 {\n // Internal state, same as SHA-256\n v0 = B2S_IV[0] | 0;\n v1 = B2S_IV[1] | 0;\n v2 = B2S_IV[2] | 0;\n v3 = B2S_IV[3] | 0;\n v4 = B2S_IV[4] | 0;\n v5 = B2S_IV[5] | 0;\n v6 = B2S_IV[6] | 0;\n v7 = B2S_IV[7] | 0;\n constructor(opts = {}) {\n const olen = opts.dkLen === undefined ? 32 : opts.dkLen;\n super(64, olen);\n checkBlake2Opts(olen, opts, 32, 8, 8);\n let { key, personalization, salt } = opts;\n let keyLength = 0;\n if (key !== undefined) {\n abytes(key, undefined, 'key');\n keyLength = key.length;\n }\n // RFC 7693 §2.5: xor `p[0] = 0x0101kknn` directly into `h[0]`, since\n // BLAKE2s stores each state word as one `u32`.\n this.v0 ^= this.outputLen | (keyLength << 8) | (0x01 << 16) | (0x01 << 24);\n if (salt !== undefined) {\n abytes(salt, undefined, 'salt');\n const slt = u32(salt);\n this.v4 ^= swap8IfBE(slt[0]);\n this.v5 ^= swap8IfBE(slt[1]);\n }\n if (personalization !== undefined) {\n abytes(personalization, undefined, 'personalization');\n const pers = u32(personalization);\n this.v6 ^= swap8IfBE(pers[0]);\n this.v7 ^= swap8IfBE(pers[1]);\n }\n if (key !== undefined) {\n // Pad to blockLen and update\n const tmp = new Uint8Array(this.blockLen);\n tmp.set(key);\n this.update(tmp);\n }\n }\n get() {\n const { v0, v1, v2, v3, v4, v5, v6, v7 } = this;\n return [v0, v1, v2, v3, v4, v5, v6, v7];\n }\n // prettier-ignore\n set(v0, v1, v2, v3, v4, v5, v6, v7) {\n this.v0 = v0 | 0;\n this.v1 = v1 | 0;\n this.v2 = v2 | 0;\n this.v3 = v3 | 0;\n this.v4 = v4 | 0;\n this.v5 = v5 | 0;\n this.v6 = v6 | 0;\n this.v7 = v7 | 0;\n }\n compress(msg, offset, isLast) {\n const { h, l } = u64.fromBig(BigInt(this.length));\n // Seed v8..v15 from the IV, xor the low/high 32-bit byte counter into\n // v12/v13, and invert v14 on the final block.\n // prettier-ignore\n const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } = compress(BSIGMA, offset, msg, 10, this.v0, this.v1, this.v2, this.v3, this.v4, this.v5, this.v6, this.v7, B2S_IV[0], B2S_IV[1], B2S_IV[2], B2S_IV[3], l ^ B2S_IV[4], h ^ B2S_IV[5], isLast ? ~B2S_IV[6] : B2S_IV[6], B2S_IV[7]);\n this.v0 ^= v0 ^ v8;\n this.v1 ^= v1 ^ v9;\n this.v2 ^= v2 ^ v10;\n this.v3 ^= v3 ^ v11;\n this.v4 ^= v4 ^ v12;\n this.v5 ^= v5 ^ v13;\n this.v6 ^= v6 ^ v14;\n this.v7 ^= v7 ^ v15;\n }\n destroy() {\n this.destroyed = true;\n clean(this.buffer32);\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n/**\n * Blake2s hash function. Focuses on 8-bit to 32-bit platforms. 1.5x faster than blake2b in JS.\n * @param msg - message that would be hashed\n * @param opts - Optional output, MAC, salt, and personalization settings.\n * `dkLen` must be 1..32 bytes; `salt` and `personalization`, if present,\n * must be 8 bytes each. See {@link Blake2Opts}.\n * @returns Digest bytes.\n * @example\n * Hash a message with Blake2s.\n * ```ts\n * blake2s(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const blake2s = /* @__PURE__ */ createHasher((opts) => new _BLAKE2s(opts));\n//# sourceMappingURL=blake2.js.map","/**\n * Blake3 fast hash is Blake2 with reduced security (round count). Can also be used as MAC & KDF.\n *\n * It is advertised as \"the fastest cryptographic hash\". However, it isn't true in JS.\n * Why is this so slow? While it must be 6x faster than blake2b, perf diff is only 20%:\n *\n * * There is only 30% reduction in number of rounds from blake2s\n * * Speed-up comes from tree structure, which is parallelized using SIMD & threading.\n * These features are not present in JS, so we only get overhead from trees.\n * * Parallelization only happens on 1024-byte chunks: there is no benefit for small inputs.\n * * It is still possible to make it faster using: a) loop unrolling b) web workers c) wasm\n * @module\n */\nimport { SHA256_IV } from \"./_md.js\";\nimport { fromBig } from \"./_u64.js\";\nimport { _BLAKE2, compress } from \"./blake2.js\";\n// prettier-ignore\nimport { abytes, aexists, anumber, aoutput, clean, copyBytes, createHasher, swap32IfBE, u32, u8 } from \"./utils.js\";\n// Constructor-time mode flags (`KEYED_HASH`, `DERIVE_*`) plus per-node tree\n// flags (`CHUNK_*`, `PARENT`, `ROOT`).\nconst B3_Flags = {\n CHUNK_START: 0b1,\n CHUNK_END: 0b10,\n PARENT: 0b100,\n ROOT: 0b1000,\n KEYED_HASH: 0b10000,\n DERIVE_KEY_CONTEXT: 0b100000,\n DERIVE_KEY_MATERIAL: 0b1000000,\n};\n// Default BLAKE3 IV, cloned from the shared BLAKE2s / SHA-256 IV basis.\nconst B3_IV = /* @__PURE__ */ SHA256_IV.slice();\n// Seven 16-word rounds of BLAKE3 message schedule, generated by repeatedly\n// permuting the identity row.\nconst B3_SIGMA = /* @__PURE__ */ (() => {\n const Id = Array.from({ length: 16 }, (_, i) => i);\n const permute = (arr) => [2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8].map((i) => arr[i]);\n const res = [];\n for (let i = 0, v = Id; i < 7; i++, v = permute(v))\n res.push(...v);\n return Uint8Array.from(res);\n})();\n/** Blake3 hash. Can be used as MAC and KDF with caller-encoded context bytes. */\nexport class _BLAKE3 extends _BLAKE2 {\n canXOF = true;\n chunkPos = 0; // Position of current block in chunk\n // How many chunks we already have; exact while this stays within\n // JS's safe-integer range.\n chunksDone = 0;\n flags = 0 | 0;\n IV;\n state;\n stack = [];\n // Output\n posOut = 0;\n bufferOut32 = new Uint32Array(16);\n bufferOut;\n // Index of output chunk; exact while this stays within JS's\n // safe-integer range.\n chunkOut = 0;\n enableXOF = true;\n constructor(opts = {}, flags = 0) {\n super(64, opts.dkLen === undefined ? 32 : opts.dkLen);\n const { key, context } = opts;\n const hasContext = context !== undefined;\n if (key !== undefined) {\n if (hasContext)\n throw new Error('Only \"key\" or \"context\" can be specified at same time');\n abytes(key, 32, 'key');\n const k = copyBytes(key);\n this.IV = u32(k);\n swap32IfBE(this.IV);\n this.flags = flags | B3_Flags.KEYED_HASH;\n }\n else if (hasContext) {\n abytes(context, undefined, 'context');\n const ctx = context;\n const contextKey = new _BLAKE3({ dkLen: 32 }, B3_Flags.DERIVE_KEY_CONTEXT)\n .update(ctx)\n .digest();\n this.IV = u32(contextKey);\n swap32IfBE(this.IV);\n this.flags = flags | B3_Flags.DERIVE_KEY_MATERIAL;\n }\n else {\n this.IV = B3_IV.slice();\n this.flags = flags;\n }\n this.state = this.IV.slice();\n this.bufferOut = u8(this.bufferOut32);\n }\n // _BLAKE2's scalar-state hooks are unused here: BLAKE3 keeps its tree/XOF state in arrays and\n // copies it directly in _cloneInto().\n get() {\n return [];\n }\n set() { }\n // Truncated chunk/parent compression: seed v8..v15 as IV[0..3], t0, t1,\n // block length, and flags, then keep only the first 8 output words.\n b2Compress(counter, flags, buf, bufPos = 0) {\n const { state: s, pos } = this;\n const { h, l } = fromBig(BigInt(counter), true);\n // prettier-ignore\n const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } = compress(B3_SIGMA, bufPos, buf, 7, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], B3_IV[0], B3_IV[1], B3_IV[2], B3_IV[3], h, l, pos, flags);\n s[0] = v0 ^ v8;\n s[1] = v1 ^ v9;\n s[2] = v2 ^ v10;\n s[3] = v3 ^ v11;\n s[4] = v4 ^ v12;\n s[5] = v5 ^ v13;\n s[6] = v6 ^ v14;\n s[7] = v7 ^ v15;\n }\n compress(buf, bufPos = 0, isLast = false) {\n // Compress last block\n let flags = this.flags;\n if (!this.chunkPos)\n flags |= B3_Flags.CHUNK_START;\n if (this.chunkPos === 15 || isLast)\n flags |= B3_Flags.CHUNK_END;\n if (!isLast)\n this.pos = this.blockLen;\n this.b2Compress(this.chunksDone, flags, buf, bufPos);\n this.chunkPos += 1;\n // If current block is last in chunk (16 blocks), then compress chunks\n if (this.chunkPos === 16 || isLast) {\n let chunk = this.state;\n this.state = this.IV.slice();\n // If not the last one, compress only when there are trailing zeros in chunk counter\n // Chunks are used as a binary tree where the current stack is the path.\n // Zero means the current leaf is finished and can be compressed.\n // 1 (001) - leaf not finished (just push current chunk to stack)\n // 2 (010) - leaf finished at depth=1 (merge with last elm on stack and push back)\n // 3 (011) - last leaf not finished\n // 4 (100) - leafs finished at depth=1 and depth=2\n for (let last, chunks = this.chunksDone + 1; isLast || !(chunks & 1); chunks >>= 1) {\n if (!(last = this.stack.pop()))\n break;\n this.buffer32.set(last, 0);\n this.buffer32.set(chunk, 8);\n this.pos = this.blockLen;\n this.b2Compress(0, this.flags | B3_Flags.PARENT, this.buffer32, 0);\n chunk = this.state;\n this.state = this.IV.slice();\n }\n this.chunksDone++;\n this.chunkPos = 0;\n this.stack.push(chunk);\n }\n this.pos = 0;\n }\n _cloneInto(to) {\n to = super._cloneInto(to);\n const { IV, flags, state, chunkPos, posOut, chunkOut, stack, chunksDone } = this;\n to.state.set(state.slice());\n // Clone each CV stack entry by value so extending or destroying the clone\n // cannot alias the source tree state.\n to.stack = stack.map((i) => Uint32Array.from(i));\n to.IV.set(IV);\n to.flags = flags;\n to.chunkPos = chunkPos;\n to.chunksDone = chunksDone;\n to.posOut = posOut;\n to.chunkOut = chunkOut;\n to.enableXOF = this.enableXOF;\n to.bufferOut32.set(this.bufferOut32);\n return to;\n }\n destroy() {\n this.destroyed = true;\n clean(this.state, this.buffer32, this.IV, this.bufferOut32);\n clean(...this.stack);\n }\n // Root/XOF compression: rerun the same ROOT inputs with incrementing output\n // counter `t` and materialize all 16 output words.\n // Same as b2Compress, but doesn't modify state and returns 16 u32 array (instead of 8)\n b2CompressOut() {\n const { state: s, pos, flags, buffer32, bufferOut32: out32 } = this;\n const { h, l } = fromBig(BigInt(this.chunkOut++));\n swap32IfBE(buffer32);\n // prettier-ignore\n const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } = compress(B3_SIGMA, 0, buffer32, 7, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], B3_IV[0], B3_IV[1], B3_IV[2], B3_IV[3], l, h, pos, flags);\n out32[0] = v0 ^ v8;\n out32[1] = v1 ^ v9;\n out32[2] = v2 ^ v10;\n out32[3] = v3 ^ v11;\n out32[4] = v4 ^ v12;\n out32[5] = v5 ^ v13;\n out32[6] = v6 ^ v14;\n out32[7] = v7 ^ v15;\n out32[8] = s[0] ^ v8;\n out32[9] = s[1] ^ v9;\n out32[10] = s[2] ^ v10;\n out32[11] = s[3] ^ v11;\n out32[12] = s[4] ^ v12;\n out32[13] = s[5] ^ v13;\n out32[14] = s[6] ^ v14;\n out32[15] = s[7] ^ v15;\n swap32IfBE(buffer32);\n swap32IfBE(out32);\n this.posOut = 0;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n // Padding\n clean(this.buffer.subarray(this.pos));\n // Process last chunk\n let flags = this.flags | B3_Flags.ROOT;\n if (this.stack.length) {\n // Finalize the current chunk first, then rerun the last parent\n // compression as ROOT with t = 0 and b = 64.\n flags |= B3_Flags.PARENT;\n swap32IfBE(this.buffer32);\n this.compress(this.buffer32, 0, true);\n swap32IfBE(this.buffer32);\n this.chunksDone = 0;\n this.pos = this.blockLen;\n }\n else {\n flags |= (!this.chunkPos ? B3_Flags.CHUNK_START : 0) | B3_Flags.CHUNK_END;\n }\n this.flags = flags;\n this.b2CompressOut();\n }\n writeInto(out) {\n aexists(this, false);\n abytes(out);\n this.finish();\n const { blockLen, bufferOut } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.b2CompressOut();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n if (!this.enableXOF)\n throw new Error('XOF is not possible after digest call');\n return this.writeInto(out);\n }\n xof(bytes) {\n anumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n aoutput(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.enableXOF = false;\n // `aoutput(...)` allows oversized buffers; digestInto() must fill only the configured digest.\n this.writeInto(out.subarray(0, this.outputLen));\n this.destroy();\n }\n digest() {\n const out = new Uint8Array(this.outputLen);\n this.digestInto(out);\n return out;\n }\n}\n/**\n * BLAKE3 hash function. Can be used as MAC and KDF.\n * @param msg - message that would be hashed\n * @param opts - Optional output, MAC, or KDF configuration. `key` must be\n * exactly 32 bytes, `context` is caller-encoded bytes, and `dkLen` can be\n * 0..2^64-1 via the XOF-backed output path. See {@link Blake3Opts}.\n * @returns Digest bytes.\n * @example\n * Hash, MAC, or derive key material with BLAKE3.\n * ```ts\n * import { blake3 } from '@noble/hashes/blake3.js';\n * import { utf8ToBytes } from '@noble/hashes/utils.js';\n * const data = new Uint8Array(32);\n * const hash = blake3(data);\n * const mac = blake3(data, { key: new Uint8Array(32) });\n * const kdf = blake3(data, { context: utf8ToBytes('application name') });\n * ```\n */\nexport const blake3 = /* @__PURE__ */ createHasher((opts = {}) => new _BLAKE3(opts));\n//# sourceMappingURL=blake3.js.map","// Some numerical data is initialized as -1 even when it doesn't need initialization to help the JIT infer types\n// aliases for shorter compressed code (most minifers don't do this)\nvar ab = ArrayBuffer, u8 = Uint8Array, u16 = Uint16Array, i16 = Int16Array, u32 = Uint32Array, i32 = Int32Array;\nvar slc = function (v, s, e) {\n if (u8.prototype.slice)\n return u8.prototype.slice.call(v, s, e);\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new u8(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar fill = function (v, n, s, e) {\n if (u8.prototype.fill)\n return u8.prototype.fill.call(v, n, s, e);\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n for (; s < e; ++s)\n v[s] = n;\n return v;\n};\nvar cpw = function (v, t, s, e) {\n if (u8.prototype.copyWithin)\n return u8.prototype.copyWithin.call(v, t, s, e);\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n while (s < e) {\n v[t++] = v[s++];\n }\n};\n/**\n * Codes for errors generated within this library\n */\nexport var ZstdErrorCode = {\n InvalidData: 0,\n WindowSizeTooLarge: 1,\n InvalidBlockType: 2,\n FSEAccuracyTooHigh: 3,\n DistanceTooFarBack: 4,\n UnexpectedEOF: 5\n};\n// error codes\nvar ec = [\n 'invalid zstd data',\n 'window size too large (>2046MB)',\n 'invalid block type',\n 'FSE accuracy too high',\n 'match distance too far back',\n 'unexpected EOF'\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};\nvar rb = function (d, b, n) {\n var i = 0, o = 0;\n for (; i < n; ++i)\n o |= d[b++] << (i << 3);\n return o;\n};\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\n// read Zstandard frame header\nvar rzfh = function (dat, w) {\n var n3 = dat[0] | (dat[1] << 8) | (dat[2] << 16);\n if (n3 == 0x2FB528 && dat[3] == 253) {\n // Zstandard\n var flg = dat[4];\n // single segment checksum dict flag frame content flag\n var ss = (flg >> 5) & 1, cc = (flg >> 2) & 1, df = flg & 3, fcf = flg >> 6;\n if (flg & 8)\n err(0);\n // byte\n var bt = 6 - ss;\n // dict bytes\n var db = df == 3 ? 4 : df;\n // dictionary id\n var di = rb(dat, bt, db);\n bt += db;\n // frame size bytes\n var fsb = fcf ? (1 << fcf) : ss;\n // frame source size\n var fss = rb(dat, bt, fsb) + ((fcf == 1) && 256);\n // window size\n var ws = fss;\n if (!ss) {\n // window descriptor\n var wb = 1 << (10 + (dat[5] >> 3));\n ws = wb + (wb >> 3) * (dat[5] & 7);\n }\n if (ws > 2145386496)\n err(1);\n var buf = new u8((w == 1 ? (fss || ws) : w ? 0 : ws) + 12);\n buf[0] = 1, buf[4] = 4, buf[8] = 8;\n return {\n b: bt + fsb,\n y: 0,\n l: 0,\n d: di,\n w: (w && w != 1) ? w : buf.subarray(12),\n e: ws,\n o: new i32(buf.buffer, 0, 3),\n u: fss,\n c: cc,\n m: Math.min(131072, ws)\n };\n }\n else if (((n3 >> 4) | (dat[3] << 20)) == 0x184D2A5) {\n // skippable\n return b4(dat, 4) + 8;\n }\n err(0);\n};\n// most significant bit for nonzero\nvar msb = function (val) {\n var bits = 0;\n for (; (1 << bits) <= val; ++bits)\n ;\n return bits - 1;\n};\n// read finite state entropy\nvar rfse = function (dat, bt, mal) {\n // table pos\n var tpos = (bt << 3) + 4;\n // accuracy log\n var al = (dat[bt] & 15) + 5;\n if (al > mal)\n err(3);\n // size\n var sz = 1 << al;\n // probabilities symbols repeat index high threshold\n var probs = sz, sym = -1, re = -1, i = -1, ht = sz;\n // optimization: single allocation is much faster\n var buf = new ab(512 + (sz << 2));\n var freq = new i16(buf, 0, 256);\n // same view as freq\n var dstate = new u16(buf, 0, 256);\n var nstate = new u16(buf, 512, sz);\n var bb1 = 512 + (sz << 1);\n var syms = new u8(buf, bb1, sz);\n var nbits = new u8(buf, bb1 + sz);\n while (sym < 255 && probs > 0) {\n var bits = msb(probs + 1);\n var cbt = tpos >> 3;\n // mask\n var msk = (1 << (bits + 1)) - 1;\n var val = ((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (tpos & 7)) & msk;\n // mask (1 fewer bit)\n var msk1fb = (1 << bits) - 1;\n // max small value\n var msv = msk - probs - 1;\n // small value\n var sval = val & msk1fb;\n if (sval < msv)\n tpos += bits, val = sval;\n else {\n tpos += bits + 1;\n if (val > msk1fb)\n val -= msv;\n }\n freq[++sym] = --val;\n if (val == -1) {\n probs += val;\n syms[--ht] = sym;\n }\n else\n probs -= val;\n if (!val) {\n do {\n // repeat byte\n var rbt = tpos >> 3;\n re = ((dat[rbt] | (dat[rbt + 1] << 8)) >> (tpos & 7)) & 3;\n tpos += 2;\n sym += re;\n } while (re == 3);\n }\n }\n if (sym > 255 || probs)\n err(0);\n var sympos = 0;\n // sym step (coprime with sz - formula from zstd source)\n var sstep = (sz >> 1) + (sz >> 3) + 3;\n // sym mask\n var smask = sz - 1;\n for (var s = 0; s <= sym; ++s) {\n var sf = freq[s];\n if (sf < 1) {\n dstate[s] = -sf;\n continue;\n }\n // This is split into two loops in zstd to avoid branching, but as JS is higher-level that is unnecessary\n for (i = 0; i < sf; ++i) {\n syms[sympos] = s;\n do {\n sympos = (sympos + sstep) & smask;\n } while (sympos >= ht);\n }\n }\n // After spreading symbols, should be zero again\n if (sympos)\n err(0);\n for (i = 0; i < sz; ++i) {\n // next state\n var ns = dstate[syms[i]]++;\n // num bits\n var nb = nbits[i] = al - msb(ns);\n nstate[i] = (ns << nb) - sz;\n }\n return [(tpos + 7) >> 3, {\n b: al,\n s: syms,\n n: nbits,\n t: nstate\n }];\n};\n// read huffman\nvar rhu = function (dat, bt) {\n // index weight count\n var i = 0, wc = -1;\n // buffer header byte\n var buf = new u8(292), hb = dat[bt];\n // huffman weights\n var hw = buf.subarray(0, 256);\n // rank count\n var rc = buf.subarray(256, 268);\n // rank index\n var ri = new u16(buf.buffer, 268);\n // NOTE: at this point bt is 1 less than expected\n if (hb < 128) {\n // end byte, fse decode table\n var _a = rfse(dat, bt + 1, 6), ebt = _a[0], fdt = _a[1];\n bt += hb;\n var epos = ebt << 3;\n // last byte\n var lb = dat[bt];\n if (!lb)\n err(0);\n // state1 state2 state1 bits state2 bits\n var st1 = 0, st2 = 0, btr1 = fdt.b, btr2 = btr1;\n // fse pos\n // pre-increment to account for original deficit of 1\n var fpos = (++bt << 3) - 8 + msb(lb);\n for (;;) {\n fpos -= btr1;\n if (fpos < epos)\n break;\n var cbt = fpos >> 3;\n st1 += ((dat[cbt] | (dat[cbt + 1] << 8)) >> (fpos & 7)) & ((1 << btr1) - 1);\n hw[++wc] = fdt.s[st1];\n fpos -= btr2;\n if (fpos < epos)\n break;\n cbt = fpos >> 3;\n st2 += ((dat[cbt] | (dat[cbt + 1] << 8)) >> (fpos & 7)) & ((1 << btr2) - 1);\n hw[++wc] = fdt.s[st2];\n btr1 = fdt.n[st1];\n st1 = fdt.t[st1];\n btr2 = fdt.n[st2];\n st2 = fdt.t[st2];\n }\n if (++wc > 255)\n err(0);\n }\n else {\n wc = hb - 127;\n for (; i < wc; i += 2) {\n var byte = dat[++bt];\n hw[i] = byte >> 4;\n hw[i + 1] = byte & 15;\n }\n ++bt;\n }\n // weight exponential sum\n var wes = 0;\n for (i = 0; i < wc; ++i) {\n var wt = hw[i];\n // bits must be at most 11, same as weight\n if (wt > 11)\n err(0);\n wes += wt && (1 << (wt - 1));\n }\n // max bits\n var mb = msb(wes) + 1;\n // table size\n var ts = 1 << mb;\n // remaining sum\n var rem = ts - wes;\n // must be power of 2\n if (rem & (rem - 1))\n err(0);\n hw[wc++] = msb(rem) + 1;\n for (i = 0; i < wc; ++i) {\n var wt = hw[i];\n ++rc[hw[i] = wt && (mb + 1 - wt)];\n }\n // huf buf\n var hbuf = new u8(ts << 1);\n // symbols num bits\n var syms = hbuf.subarray(0, ts), nb = hbuf.subarray(ts);\n ri[mb] = 0;\n for (i = mb; i > 0; --i) {\n var pv = ri[i];\n fill(nb, i, pv, ri[i - 1] = pv + rc[i] * (1 << (mb - i)));\n }\n if (ri[0] != ts)\n err(0);\n for (i = 0; i < wc; ++i) {\n var bits = hw[i];\n if (bits) {\n var code = ri[bits];\n fill(syms, i, code, ri[bits] = code + (1 << (mb - bits)));\n }\n }\n return [bt, {\n n: nb,\n b: mb,\n s: syms\n }];\n};\n// Tables generated using this:\n// https://gist.github.com/101arrowz/a979452d4355992cbf8f257cbffc9edd\n// default literal length table\nvar dllt = /*#__PURE__*/ rfse(/*#__PURE__*/ new u8([\n 81, 16, 99, 140, 49, 198, 24, 99, 12, 33, 196, 24, 99, 102, 102, 134, 70, 146, 4\n]), 0, 6)[1];\n// default match length table\nvar dmlt = /*#__PURE__*/ rfse(/*#__PURE__*/ new u8([\n 33, 20, 196, 24, 99, 140, 33, 132, 16, 66, 8, 33, 132, 16, 66, 8, 33, 68, 68, 68, 68, 68, 68, 68, 68, 36, 9\n]), 0, 6)[1];\n// default offset code table\nvar doct = /*#__PURE__ */ rfse(/*#__PURE__*/ new u8([\n 32, 132, 16, 66, 102, 70, 68, 68, 68, 68, 36, 73, 2\n]), 0, 5)[1];\n// bits to baseline\nvar b2bl = function (b, s) {\n var len = b.length, bl = new i32(len);\n for (var i = 0; i < len; ++i) {\n bl[i] = s;\n s += 1 << b[i];\n }\n return bl;\n};\n// literal length bits\nvar llb = /*#__PURE__ */ new u8(( /*#__PURE__ */new i32([\n 0, 0, 0, 0, 16843009, 50528770, 134678020, 202050057, 269422093\n])).buffer, 0, 36);\n// literal length baseline\nvar llbl = /*#__PURE__ */ b2bl(llb, 0);\n// match length bits\nvar mlb = /*#__PURE__ */ new u8(( /*#__PURE__ */new i32([\n 0, 0, 0, 0, 0, 0, 0, 0, 16843009, 50528770, 117769220, 185207048, 252579084, 16\n])).buffer, 0, 53);\n// match length baseline\nvar mlbl = /*#__PURE__ */ b2bl(mlb, 3);\n// decode huffman stream\nvar dhu = function (dat, out, hu) {\n var len = dat.length, ss = out.length, lb = dat[len - 1], msk = (1 << hu.b) - 1, eb = -hu.b;\n if (!lb)\n err(0);\n var st = 0, btr = hu.b, pos = (len << 3) - 8 + msb(lb) - btr, i = -1;\n for (; pos > eb && i < ss;) {\n var cbt = pos >> 3;\n var val = (dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (pos & 7);\n st = ((st << btr) | val) & msk;\n out[++i] = hu.s[st];\n pos -= (btr = hu.n[st]);\n }\n if (pos != eb || i + 1 != ss)\n err(0);\n};\n// decode huffman stream 4x\n// TODO: use workers to parallelize\nvar dhu4 = function (dat, out, hu) {\n var bt = 6;\n var ss = out.length, sz1 = (ss + 3) >> 2, sz2 = sz1 << 1, sz3 = sz1 + sz2;\n dhu(dat.subarray(bt, bt += dat[0] | (dat[1] << 8)), out.subarray(0, sz1), hu);\n dhu(dat.subarray(bt, bt += dat[2] | (dat[3] << 8)), out.subarray(sz1, sz2), hu);\n dhu(dat.subarray(bt, bt += dat[4] | (dat[5] << 8)), out.subarray(sz2, sz3), hu);\n dhu(dat.subarray(bt), out.subarray(sz3), hu);\n};\n// read Zstandard block\nvar rzb = function (dat, st, out) {\n var _a;\n var bt = st.b;\n // byte 0 block type\n var b0 = dat[bt], btype = (b0 >> 1) & 3;\n st.l = b0 & 1;\n var sz = (b0 >> 3) | (dat[bt + 1] << 5) | (dat[bt + 2] << 13);\n // end byte for block\n var ebt = (bt += 3) + sz;\n if (btype == 1) {\n if (bt >= dat.length)\n return;\n st.b = bt + 1;\n if (out) {\n fill(out, dat[bt], st.y, st.y += sz);\n return out;\n }\n return fill(new u8(sz), dat[bt]);\n }\n if (ebt > dat.length)\n return;\n if (btype == 0) {\n st.b = ebt;\n if (out) {\n out.set(dat.subarray(bt, ebt), st.y);\n st.y += sz;\n return out;\n }\n return slc(dat, bt, ebt);\n }\n if (btype == 2) {\n // byte 3 lit btype size format\n var b3 = dat[bt], lbt = b3 & 3, sf = (b3 >> 2) & 3;\n // lit src size lit cmp sz 4 streams\n var lss = b3 >> 4, lcs = 0, s4 = 0;\n if (lbt < 2) {\n if (sf & 1)\n lss |= (dat[++bt] << 4) | ((sf & 2) && (dat[++bt] << 12));\n else\n lss = b3 >> 3;\n }\n else {\n s4 = sf;\n if (sf < 2)\n lss |= ((dat[++bt] & 63) << 4), lcs = (dat[bt] >> 6) | (dat[++bt] << 2);\n else if (sf == 2)\n lss |= (dat[++bt] << 4) | ((dat[++bt] & 3) << 12), lcs = (dat[bt] >> 2) | (dat[++bt] << 6);\n else\n lss |= (dat[++bt] << 4) | ((dat[++bt] & 63) << 12), lcs = (dat[bt] >> 6) | (dat[++bt] << 2) | (dat[++bt] << 10);\n }\n ++bt;\n // add literals to end - can never overlap with backreferences because unused literals always appended\n var buf = out ? out.subarray(st.y, st.y + st.m) : new u8(st.m);\n // starting point for literals\n var spl = buf.length - lss;\n if (lbt == 0)\n buf.set(dat.subarray(bt, bt += lss), spl);\n else if (lbt == 1)\n fill(buf, dat[bt++], spl);\n else {\n // huffman table\n var hu = st.h;\n if (lbt == 2) {\n var hud = rhu(dat, bt);\n // subtract description length\n lcs += bt - (bt = hud[0]);\n st.h = hu = hud[1];\n }\n else if (!hu)\n err(0);\n (s4 ? dhu4 : dhu)(dat.subarray(bt, bt += lcs), buf.subarray(spl), hu);\n }\n // num sequences\n var ns = dat[bt++];\n if (ns) {\n if (ns == 255)\n ns = (dat[bt++] | (dat[bt++] << 8)) + 0x7F00;\n else if (ns > 127)\n ns = ((ns - 128) << 8) | dat[bt++];\n // symbol compression modes\n var scm = dat[bt++];\n if (scm & 3)\n err(0);\n var dts = [dmlt, doct, dllt];\n for (var i = 2; i > -1; --i) {\n var md = (scm >> ((i << 1) + 2)) & 3;\n if (md == 1) {\n // rle buf\n var rbuf = new u8([0, 0, dat[bt++]]);\n dts[i] = {\n s: rbuf.subarray(2, 3),\n n: rbuf.subarray(0, 1),\n t: new u16(rbuf.buffer, 0, 1),\n b: 0\n };\n }\n else if (md == 2) {\n // accuracy log 8 for offsets, 9 for others\n _a = rfse(dat, bt, 9 - (i & 1)), bt = _a[0], dts[i] = _a[1];\n }\n else if (md == 3) {\n if (!st.t)\n err(0);\n dts[i] = st.t[i];\n }\n }\n var _b = st.t = dts, mlt = _b[0], oct = _b[1], llt = _b[2];\n var lb = dat[ebt - 1];\n if (!lb)\n err(0);\n var spos = (ebt << 3) - 8 + msb(lb) - llt.b, cbt = spos >> 3, oubt = 0;\n var lst = ((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << llt.b) - 1);\n cbt = (spos -= oct.b) >> 3;\n var ost = ((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << oct.b) - 1);\n cbt = (spos -= mlt.b) >> 3;\n var mst = ((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << mlt.b) - 1);\n for (++ns; --ns;) {\n var llc = llt.s[lst];\n var lbtr = llt.n[lst];\n var mlc = mlt.s[mst];\n var mbtr = mlt.n[mst];\n var ofc = oct.s[ost];\n var obtr = oct.n[ost];\n cbt = (spos -= ofc) >> 3;\n var ofp = 1 << ofc;\n var off = ofp + (((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16) | (dat[cbt + 3] << 24)) >>> (spos & 7)) & (ofp - 1));\n cbt = (spos -= mlb[mlc]) >> 3;\n var ml = mlbl[mlc] + (((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (spos & 7)) & ((1 << mlb[mlc]) - 1));\n cbt = (spos -= llb[llc]) >> 3;\n var ll = llbl[llc] + (((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (spos & 7)) & ((1 << llb[llc]) - 1));\n cbt = (spos -= lbtr) >> 3;\n lst = llt.t[lst] + (((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << lbtr) - 1));\n cbt = (spos -= mbtr) >> 3;\n mst = mlt.t[mst] + (((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << mbtr) - 1));\n cbt = (spos -= obtr) >> 3;\n ost = oct.t[ost] + (((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << obtr) - 1));\n if (off > 3) {\n st.o[2] = st.o[1];\n st.o[1] = st.o[0];\n st.o[0] = off -= 3;\n }\n else {\n var idx = off - (ll != 0);\n if (idx) {\n off = idx == 3 ? st.o[0] - 1 : st.o[idx];\n if (idx > 1)\n st.o[2] = st.o[1];\n st.o[1] = st.o[0];\n st.o[0] = off;\n }\n else\n off = st.o[0];\n }\n for (var i = 0; i < ll; ++i) {\n buf[oubt + i] = buf[spl + i];\n }\n oubt += ll, spl += ll;\n var stin = oubt - off;\n if (stin < 0) {\n var len = -stin;\n var bs = st.e + stin;\n if (len > ml)\n len = ml;\n for (var i = 0; i < len; ++i) {\n buf[oubt + i] = st.w[bs + i];\n }\n oubt += len, ml -= len, stin = 0;\n }\n for (var i = 0; i < ml; ++i) {\n buf[oubt + i] = buf[stin + i];\n }\n oubt += ml;\n }\n if (oubt != spl) {\n while (spl < buf.length) {\n buf[oubt++] = buf[spl++];\n }\n }\n else\n oubt = buf.length;\n if (out)\n st.y += oubt;\n else\n buf = slc(buf, 0, oubt);\n }\n else if (out) {\n st.y += lss;\n if (spl) {\n for (var i = 0; i < lss; ++i) {\n buf[i] = buf[spl + i];\n }\n }\n }\n else if (spl)\n buf = slc(buf, spl);\n st.b = ebt;\n return buf;\n }\n err(2);\n};\n// concat\nvar cct = function (bufs, ol) {\n if (bufs.length == 1)\n return bufs[0];\n var buf = new u8(ol);\n for (var i = 0, b = 0; i < bufs.length; ++i) {\n var chk = bufs[i];\n buf.set(chk, b);\n b += chk.length;\n }\n return buf;\n};\n/**\n * Decompresses Zstandard data\n * @param dat The input data\n * @param buf The output buffer. If unspecified, the function will allocate\n * exactly enough memory to fit the decompressed data. If your\n * data has multiple frames and you know the output size, specifying\n * it will yield better performance.\n * @returns The decompressed data\n */\nexport function decompress(dat, buf) {\n var bufs = [], nb = +!buf;\n var bt = 0, ol = 0;\n for (; dat.length;) {\n var st = rzfh(dat, nb || buf);\n if (typeof st == 'object') {\n if (nb) {\n buf = null;\n if (st.w.length == st.u) {\n bufs.push(buf = st.w);\n ol += st.u;\n }\n }\n else {\n bufs.push(buf);\n st.e = 0;\n }\n for (; !st.l;) {\n var blk = rzb(dat, st, buf);\n if (!blk)\n err(5);\n if (buf)\n st.e = st.y;\n else {\n bufs.push(blk);\n ol += blk.length;\n cpw(st.w, 0, blk.length);\n st.w.set(blk, st.w.length - blk.length);\n }\n }\n bt = st.b + (st.c * 4);\n }\n else\n bt = st;\n dat = dat.subarray(bt);\n }\n return cct(bufs, ol);\n}\n/**\n * Decompressor for Zstandard streamed data\n */\nvar Decompress = /*#__PURE__*/ (function () {\n /**\n * Creates a Zstandard decompressor\n * @param ondata The handler for stream data\n */\n function Decompress(ondata) {\n this.ondata = ondata;\n this.c = [];\n this.l = 0;\n this.z = 0;\n }\n /**\n * Pushes data to be decompressed\n * @param chunk The chunk of data to push\n * @param final Whether or not this is the last chunk in the stream\n */\n Decompress.prototype.push = function (chunk, final) {\n if (typeof this.s == 'number') {\n var sub = Math.min(chunk.length, this.s);\n chunk = chunk.subarray(sub);\n this.s -= sub;\n }\n var sl = chunk.length;\n var ncs = sl + this.l;\n if (!this.s) {\n if (final) {\n if (!ncs) {\n this.ondata(new u8(0), true);\n return;\n }\n // min for frame + one block\n if (ncs < 5)\n err(5);\n }\n else if (ncs < 18) {\n this.c.push(chunk);\n this.l = ncs;\n return;\n }\n if (this.l) {\n this.c.push(chunk);\n chunk = cct(this.c, ncs);\n this.c = [];\n this.l = 0;\n }\n if (typeof (this.s = rzfh(chunk)) == 'number')\n return this.push(chunk, final);\n }\n if (typeof this.s != 'number') {\n if (ncs < (this.z || 3)) {\n if (final)\n err(5);\n this.c.push(chunk);\n this.l = ncs;\n return;\n }\n if (this.l) {\n this.c.push(chunk);\n chunk = cct(this.c, ncs);\n this.c = [];\n this.l = 0;\n }\n if (!this.z && ncs < (this.z = (chunk[this.s.b] & 2) ? 4 : 3 + ((chunk[this.s.b] >> 3) | (chunk[this.s.b + 1] << 5) | (chunk[this.s.b + 2] << 13)))) {\n if (final)\n err(5);\n this.c.push(chunk);\n this.l = ncs;\n return;\n }\n else\n this.z = 0;\n for (;;) {\n var blk = rzb(chunk, this.s);\n if (!blk) {\n if (final)\n err(5);\n var adc = chunk.subarray(this.s.b);\n this.s.b = 0;\n this.c.push(adc), this.l += adc.length;\n return;\n }\n else {\n this.ondata(blk, false);\n cpw(this.s.w, 0, blk.length);\n this.s.w.set(blk, this.s.w.length - blk.length);\n }\n if (this.s.l) {\n var rest = chunk.subarray(this.s.b);\n this.s = this.s.c * 4;\n this.push(rest, final);\n return;\n }\n }\n }\n else if (final)\n err(5);\n };\n return Decompress;\n}());\nexport { Decompress };\n","// Growable little/big-endian byte buffer primitives for the brdb codecs.\n// msgpack multi-byte values are big-endian; brdb flat arrays are little-endian.\n\nexport class ByteWriter {\n private buf = new Uint8Array(256);\n private view = new DataView(this.buf.buffer);\n private len = 0;\n\n private ensure(n: number) {\n if (this.len + n <= this.buf.length) return;\n let size = this.buf.length * 2;\n while (size < this.len + n) size *= 2;\n const next = new Uint8Array(size);\n next.set(this.buf.subarray(0, this.len));\n this.buf = next;\n this.view = new DataView(next.buffer);\n }\n\n get length(): number {\n return this.len;\n }\n\n u8(v: number) {\n this.ensure(1);\n this.buf[this.len++] = v & 0xff;\n }\n\n i8(v: number) {\n this.ensure(1);\n this.view.setInt8(this.len, v);\n this.len += 1;\n }\n\n bytes(v: Uint8Array | number[]) {\n const arr = v instanceof Uint8Array ? v : Uint8Array.from(v);\n this.ensure(arr.length);\n this.buf.set(arr, this.len);\n this.len += arr.length;\n }\n\n u16be(v: number) {\n this.ensure(2);\n this.view.setUint16(this.len, v, false);\n this.len += 2;\n }\n u32be(v: number) {\n this.ensure(4);\n this.view.setUint32(this.len, v, false);\n this.len += 4;\n }\n u64be(v: bigint) {\n this.ensure(8);\n this.view.setBigUint64(this.len, v, false);\n this.len += 8;\n }\n i16be(v: number) {\n this.ensure(2);\n this.view.setInt16(this.len, v, false);\n this.len += 2;\n }\n i32be(v: number) {\n this.ensure(4);\n this.view.setInt32(this.len, v, false);\n this.len += 4;\n }\n i64be(v: bigint) {\n this.ensure(8);\n this.view.setBigInt64(this.len, v, false);\n this.len += 8;\n }\n f32be(v: number) {\n this.ensure(4);\n this.view.setFloat32(this.len, v, false);\n this.len += 4;\n }\n f64be(v: number) {\n this.ensure(8);\n this.view.setFloat64(this.len, v, false);\n this.len += 8;\n }\n\n u16le(v: number) {\n this.ensure(2);\n this.view.setUint16(this.len, v, true);\n this.len += 2;\n }\n u32le(v: number) {\n this.ensure(4);\n this.view.setUint32(this.len, v, true);\n this.len += 4;\n }\n u64le(v: bigint) {\n this.ensure(8);\n this.view.setBigUint64(this.len, v, true);\n this.len += 8;\n }\n i16le(v: number) {\n this.ensure(2);\n this.view.setInt16(this.len, v, true);\n this.len += 2;\n }\n i32le(v: number) {\n this.ensure(4);\n this.view.setInt32(this.len, v, true);\n this.len += 4;\n }\n i64le(v: bigint) {\n this.ensure(8);\n this.view.setBigInt64(this.len, v, true);\n this.len += 8;\n }\n f32le(v: number) {\n this.ensure(4);\n this.view.setFloat32(this.len, v, true);\n this.len += 4;\n }\n f64le(v: number) {\n this.ensure(8);\n this.view.setFloat64(this.len, v, true);\n this.len += 8;\n }\n\n toBytes(): Uint8Array {\n return this.buf.slice(0, this.len);\n }\n}\n\nexport class ByteReader {\n private view: DataView;\n offset: number;\n\n constructor(public data: Uint8Array, offset = 0) {\n this.view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n this.offset = offset;\n }\n\n get remaining(): number {\n return this.data.length - this.offset;\n }\n\n private need(n: number) {\n if (this.offset + n > this.data.length)\n throw new RangeError(\n `brdb: unexpected end of data (need ${n} bytes at offset ${this.offset} of ${this.data.length})`\n );\n }\n\n peek(): number {\n this.need(1);\n return this.data[this.offset];\n }\n\n u8(): number {\n this.need(1);\n return this.data[this.offset++];\n }\n i8(): number {\n this.need(1);\n return this.view.getInt8(this.offset++);\n }\n\n bytes(n: number): Uint8Array {\n this.need(n);\n const out = this.data.subarray(this.offset, this.offset + n);\n this.offset += n;\n return out;\n }\n\n u16be(): number {\n this.need(2);\n const v = this.view.getUint16(this.offset, false);\n this.offset += 2;\n return v;\n }\n u32be(): number {\n this.need(4);\n const v = this.view.getUint32(this.offset, false);\n this.offset += 4;\n return v;\n }\n u64be(): bigint {\n this.need(8);\n const v = this.view.getBigUint64(this.offset, false);\n this.offset += 8;\n return v;\n }\n i16be(): number {\n this.need(2);\n const v = this.view.getInt16(this.offset, false);\n this.offset += 2;\n return v;\n }\n i32be(): number {\n this.need(4);\n const v = this.view.getInt32(this.offset, false);\n this.offset += 4;\n return v;\n }\n i64be(): bigint {\n this.need(8);\n const v = this.view.getBigInt64(this.offset, false);\n this.offset += 8;\n return v;\n }\n f32be(): number {\n this.need(4);\n const v = this.view.getFloat32(this.offset, false);\n this.offset += 4;\n return v;\n }\n f64be(): number {\n this.need(8);\n const v = this.view.getFloat64(this.offset, false);\n this.offset += 8;\n return v;\n }\n\n u16le(): number {\n this.need(2);\n const v = this.view.getUint16(this.offset, true);\n this.offset += 2;\n return v;\n }\n u32le(): number {\n this.need(4);\n const v = this.view.getUint32(this.offset, true);\n this.offset += 4;\n return v;\n }\n u64le(): bigint {\n this.need(8);\n const v = this.view.getBigUint64(this.offset, true);\n this.offset += 8;\n return v;\n }\n i16le(): number {\n this.need(2);\n const v = this.view.getInt16(this.offset, true);\n this.offset += 2;\n return v;\n }\n i32le(): number {\n this.need(4);\n const v = this.view.getInt32(this.offset, true);\n this.offset += 4;\n return v;\n }\n i64le(): bigint {\n this.need(8);\n const v = this.view.getBigInt64(this.offset, true);\n this.offset += 8;\n return v;\n }\n f32le(): number {\n this.need(4);\n const v = this.view.getFloat32(this.offset, true);\n this.offset += 4;\n return v;\n }\n f64le(): number {\n this.need(8);\n const v = this.view.getFloat64(this.offset, true);\n this.offset += 8;\n return v;\n }\n}\n","// .brz container serializer/deserializer, byte-compatible with the game's\n// archive format.\nimport { blake3 } from '@noble/hashes/blake3.js';\nimport { bytesToHex } from '@noble/hashes/utils.js';\nimport { decompress as zstdDecompress } from 'fzstd';\nimport { ByteReader, ByteWriter } from './bytes';\nimport type { FoundFile, WorldFs } from './fs';\nimport { PendingEntry, PendingNode } from './pending';\n\nexport type Compressor = (data: Uint8Array) => Uint8Array | null;\n\nexport interface BrzContainerOptions {\n /** zstd compressor (e.g. node:zlib zstdCompressSync); return null to skip.\n * Omitted -> every blob stored raw (still a valid archive, and what the\n * byte-parity gates compare against). */\n compress?: Compressor;\n}\n\nexport function writeBrzContainer(\n root: PendingEntry[],\n options: BrzContainerOptions = {}\n): Uint8Array {\n interface QueueItem {\n parentId: number;\n name: string;\n node: PendingNode;\n }\n // BFS; ids are assigned when an entry is dequeued\n const queue: QueueItem[] = root.map(([name, node]) => ({\n parentId: -1,\n name,\n node,\n }));\n\n const folderParentIds: number[] = [];\n const folderNames: string[] = [];\n const fileParentIds: number[] = [];\n const fileContentIds: number[] = [];\n const fileNames: string[] = [];\n const methods: number[] = [];\n const sizesUncompressed: number[] = [];\n const sizesCompressed: number[] = [];\n const blobHashes: Uint8Array[] = [];\n const blobChunks: Uint8Array[] = [];\n const hashToBlobId = new Map<string, number>();\n\n for (let head = 0; head < queue.length; head++) {\n const { parentId, name, node } = queue[head];\n if (node.type === 'folder') {\n const folderId = folderParentIds.length;\n folderParentIds.push(parentId);\n folderNames.push(name);\n for (const [childName, child] of node.children)\n queue.push({ parentId: folderId, name: childName, node: child });\n } else {\n fileParentIds.push(parentId);\n fileNames.push(name);\n const content = node.content;\n let contentId: number;\n if (content.length === 0) {\n contentId = -1; // empty file: no blob\n } else {\n const hash = blake3(content);\n const hex = bytesToHex(hash);\n const existing = hashToBlobId.get(hex);\n if (existing !== undefined) {\n contentId = existing; // dedup by hash of uncompressed content\n } else {\n contentId = blobHashes.length;\n hashToBlobId.set(hex, contentId);\n blobHashes.push(hash);\n sizesUncompressed.push(content.length);\n const compressed = options.compress\n ? options.compress(content)\n : null;\n if (compressed && compressed.length < content.length) {\n methods.push(1); // GenericZstd, only when strictly smaller\n sizesCompressed.push(compressed.length);\n blobChunks.push(compressed);\n } else {\n methods.push(0);\n sizesCompressed.push(content.length);\n blobChunks.push(content);\n }\n }\n }\n fileContentIds.push(contentId);\n }\n }\n\n const utf8 = new TextEncoder();\n const iw = new ByteWriter();\n iw.i32le(folderNames.length);\n iw.i32le(fileNames.length);\n iw.i32le(blobHashes.length);\n for (const id of folderParentIds) iw.i32le(id);\n const folderNameBytes = folderNames.map(n => utf8.encode(n));\n for (const n of folderNameBytes) iw.u16le(n.length);\n for (const n of folderNameBytes) iw.bytes(n);\n for (const id of fileParentIds) iw.i32le(id);\n for (const id of fileContentIds) iw.i32le(id);\n const fileNameBytes = fileNames.map(n => utf8.encode(n));\n for (const n of fileNameBytes) iw.u16le(n.length);\n for (const n of fileNameBytes) iw.bytes(n);\n for (const m of methods) iw.u8(m);\n for (const s of sizesUncompressed) iw.i32le(s);\n for (const s of sizesCompressed) iw.i32le(s);\n for (const h of blobHashes) iw.bytes(h);\n const index = iw.toBytes();\n\n const out = new ByteWriter();\n out.bytes([0x42, 0x52, 0x5a]); // \"BRZ\"\n out.u8(0); // version: Initial\n // The index is always stored uncompressed — the format's reference writer\n // never compresses it, and byte parity requires matching that. Readers\n // still accept a compressed index.\n out.u8(0); // index_method: None\n out.i32le(index.length);\n out.i32le(index.length); // compressed size mirrors uncompressed when raw\n out.bytes(blake3(index)); // BLAKE3 of the uncompressed index\n out.bytes(index);\n for (const chunk of blobChunks) out.bytes(chunk);\n return out.toBytes();\n}\n\ninterface BlobInfo {\n method: number;\n sizeUncompressed: number;\n sizeCompressed: number;\n hash: Uint8Array;\n start: number;\n end: number;\n}\n\nexport class BrzReader implements WorldFs {\n private folderLut = new Map<string, number>();\n private fileLut = new Map<string, number>();\n private pathCache: string[] | null = null;\n\n private constructor(\n readonly folderParentIds: number[],\n readonly folderNames: string[],\n readonly fileParentIds: number[],\n readonly fileContentIds: number[],\n readonly fileNames: string[],\n private blobs: BlobInfo[],\n private blobData: Uint8Array\n ) {\n for (let i = 0; i < folderNames.length; i++)\n this.folderLut.set(`${folderParentIds[i]} ${folderNames[i]}`, i);\n for (let i = 0; i < fileNames.length; i++)\n this.fileLut.set(`${fileParentIds[i]} ${fileNames[i]}`, i);\n }\n\n static from(data: Uint8Array): BrzReader {\n const r = new ByteReader(data);\n const magic = r.bytes(3);\n if (magic[0] !== 0x42 || magic[1] !== 0x52 || magic[2] !== 0x5a)\n throw new Error('brdb: invalid .brz magic');\n const version = r.u8();\n if (version !== 0)\n throw new Error(`brdb: unsupported .brz version ${version}`);\n const method = r.u8();\n if (method !== 0 && method !== 1)\n throw new Error(`brdb: invalid index compression method ${method}`);\n const sizeUncompressed = r.i32le();\n const sizeCompressed = r.i32le();\n if (sizeUncompressed < 0 || sizeCompressed < 0)\n throw new Error('brdb: negative index size');\n const headerHash = r.bytes(32);\n let index: Uint8Array;\n if (method === 0) {\n index = r.bytes(sizeUncompressed);\n } else {\n index = zstdDecompress(\n r.bytes(sizeCompressed),\n new Uint8Array(sizeUncompressed)\n );\n if (index.length !== sizeUncompressed)\n throw new Error('brdb: index decompressed to the wrong size');\n }\n if (bytesToHex(blake3(index)) !== bytesToHex(headerHash))\n throw new Error('brdb: index hash mismatch');\n const blobData = r.bytes(r.remaining);\n\n const ir = new ByteReader(index);\n const numFolders = ir.i32le();\n const numFiles = ir.i32le();\n const numBlobs = ir.i32le();\n if (numFolders < 0 || numFiles < 0 || numBlobs < 0)\n throw new Error('brdb: negative index count');\n const readArray = <T>(n: number, fn: () => T): T[] =>\n Array.from({ length: n }, fn);\n const folderParentIds = readArray(numFolders, () => ir.i32le());\n const folderNameLens = readArray(numFolders, () => ir.u16le());\n const utf8 = new TextDecoder('utf-8', { fatal: true });\n const folderNames = folderNameLens.map(len => utf8.decode(ir.bytes(len)));\n const fileParentIds = readArray(numFiles, () => ir.i32le());\n const fileContentIds = readArray(numFiles, () => ir.i32le());\n const fileNameLens = readArray(numFiles, () => ir.u16le());\n const fileNames = fileNameLens.map(len => utf8.decode(ir.bytes(len)));\n const methods = readArray(numBlobs, () => ir.u8());\n const sizesUncompressed = readArray(numBlobs, () => ir.i32le());\n const sizesCompressed = readArray(numBlobs, () => ir.i32le());\n const hashes = readArray(numBlobs, () => ir.bytes(32).slice());\n if (ir.remaining !== 0) throw new Error('brdb: trailing bytes in index');\n\n // blob byte ranges are not stored: reconstruct by accumulating on-disk sizes\n const blobs: BlobInfo[] = [];\n let offset = 0;\n for (let i = 0; i < numBlobs; i++) {\n if (sizesUncompressed[i] < 0 || sizesCompressed[i] < 0)\n throw new Error('brdb: negative blob size');\n const length =\n methods[i] === 0 ? sizesUncompressed[i] : sizesCompressed[i];\n blobs.push({\n method: methods[i],\n sizeUncompressed: sizesUncompressed[i],\n sizeCompressed: sizesCompressed[i],\n hash: hashes[i],\n start: offset,\n end: offset + length,\n });\n offset += length;\n }\n return new BrzReader(\n folderParentIds,\n folderNames,\n fileParentIds,\n fileContentIds,\n fileNames,\n blobs,\n blobData\n );\n }\n\n /** parentId -1 = root */\n findFolder(parentId: number, name: string): number | null {\n return this.folderLut.get(`${parentId} ${name}`) ?? null;\n }\n\n findFile(parentId: number, name: string): { contentId: number } | null {\n const i = this.fileLut.get(`${parentId} ${name}`);\n return i === undefined ? null : { contentId: this.fileContentIds[i] };\n }\n\n private folderIdOf(path: string): number | null {\n if (path === '') return -1;\n let id = -1;\n for (const part of path.split('/')) {\n const next = this.findFolder(id, part);\n if (next === null) return null;\n id = next;\n }\n return id;\n }\n\n /** Names of the subfolders of a folder path ('' = root), in id order.\n * A missing path yields []. */\n childFolders(path: string): string[] {\n const parent = this.folderIdOf(path);\n if (parent === null) return [];\n const out: string[] = [];\n for (let i = 0; i < this.folderNames.length; i++)\n if (this.folderParentIds[i] === parent) out.push(this.folderNames[i]);\n return out;\n }\n\n /** Names of the files directly inside a folder path ('' = root), in id\n * order. A missing path yields []. */\n childFiles(path: string): string[] {\n const parent = this.folderIdOf(path);\n if (parent === null) return [];\n const out: string[] = [];\n for (let i = 0; i < this.fileNames.length; i++)\n if (this.fileParentIds[i] === parent) out.push(this.fileNames[i]);\n return out;\n }\n\n blobMethod(contentId: number): number {\n return this.blob(contentId).method;\n }\n\n private blob(contentId: number): BlobInfo {\n if (contentId < 0 || contentId >= this.blobs.length)\n throw new Error(`brdb: blob ${contentId} not found`);\n return this.blobs[contentId];\n }\n\n /** Decompress (if needed) and verify size + BLAKE3. */\n readBlob(contentId: number): Uint8Array {\n const blob = this.blob(contentId);\n const raw = this.blobData.subarray(blob.start, blob.end);\n let content: Uint8Array;\n if (blob.method === 0) {\n content = raw;\n } else {\n if (raw.length !== blob.sizeCompressed)\n throw new Error('brdb: blob compressed size mismatch');\n content = zstdDecompress(raw, new Uint8Array(blob.sizeUncompressed));\n }\n if (content.length !== blob.sizeUncompressed)\n throw new Error('brdb: blob uncompressed size mismatch');\n if (bytesToHex(blake3(content)) !== bytesToHex(blob.hash))\n throw new Error('brdb: blob hash mismatch');\n return content;\n }\n\n /** '/'-separated path from the root. An empty file (contentId -1) returns\n * an empty buffer (the reference reader treats empty files as unfindable\n * — deliberate, documented deviation for usability). */\n readFile(path: string): Uint8Array {\n if (path.startsWith('/'))\n throw new Error('brdb: absolute paths not allowed');\n const parts = path.split('/');\n let parentId = -1;\n for (let i = 0; i < parts.length - 1; i++) {\n const next = this.findFolder(parentId, parts[i]);\n if (next === null)\n throw new Error(`brdb: folder not found: ${parts[i]} in ${path}`);\n parentId = next;\n }\n const found = this.findFile(parentId, parts[parts.length - 1]);\n if (!found) throw new Error(`brdb: file not found: ${path}`);\n return found.contentId === -1\n ? new Uint8Array(0)\n : this.readBlob(found.contentId);\n }\n\n /** Path lookup returning the WorldFs FoundFile shape. createdAt is always\n * 0: a .brz archive holds exactly one revision. */\n findFileByPath(path: string): FoundFile | null {\n if (path.startsWith('/'))\n throw new Error('brdb: absolute paths not allowed');\n const slash = path.lastIndexOf('/');\n const parentId = this.folderIdOf(slash === -1 ? '' : path.slice(0, slash));\n if (parentId === null) return null;\n const found = this.findFile(parentId, path.slice(slash + 1));\n return found === null ? null : { contentId: found.contentId, createdAt: 0 };\n }\n\n findFileByPathAtRevision(path: string, _date: number): FoundFile | null {\n return this.findFileByPath(path);\n }\n\n /** All file paths in file-id (BFS) order. */\n listPaths(): string[] {\n if (this.pathCache) return this.pathCache;\n const folderPaths: string[] = [];\n for (let i = 0; i < this.folderNames.length; i++) {\n const parent = this.folderParentIds[i];\n // parents always precede children in BFS id order\n folderPaths.push(\n parent === -1\n ? this.folderNames[i]\n : `${folderPaths[parent]}/${this.folderNames[i]}`\n );\n }\n this.pathCache = this.fileNames.map((name, i) => {\n const parent = this.fileParentIds[i];\n return parent === -1 ? name : `${folderPaths[parent]}/${name}`;\n });\n return this.pathCache;\n }\n}\n","// GENERATED by scripts/syncBrdbData.mjs — do not edit by hand.\n// Regenerate with: just sync-brdb-data\n\nexport const BASIC_BRICK_ASSETS: readonly string[] = [\n 'B_1x1_Reroute_Node',\n 'B_1x1_Gate_AND',\n 'B_1x1_Gate_OR',\n 'B_1x1_Gate_XOR',\n 'B_1x1_Gate_NAND',\n 'B_1x1_Gate_NOR',\n 'B_1x1_NOT_Gate',\n 'B_1x1_Gate_AND_Bitwise',\n 'B_1x1_Gate_OR_Bitwise',\n 'B_1x1_Gate_XOR_Bitwise',\n 'B_1x1_Gate_NAND_Bitwise',\n 'B_1x1_Gate_NOR_Bitwise',\n 'B_1x1_Gate_NOT_Bitwise',\n 'B_1x1_Gate_ShiftLeft_Bitwise',\n 'B_1x1_Gate_ShiftRight_Bitwise',\n 'B_1x1_Gate_Add',\n 'B_1x1_Gate_Subtract',\n 'B_1x1_Gate_Multiply',\n 'B_1x1_Gate_ModFloored',\n 'B_1x1_Gate_Mod',\n 'B_1x1_Gate_Divide',\n 'B_1x1_Gate_Equal',\n 'B_1x1_Gate_NotEqual',\n 'B_1x1_Gate_LessThan',\n 'B_1x1_Gate_LessThanEqual',\n 'B_1x1_Gate_GreaterThan',\n 'B_1x1_Gate_GreaterThanEqual',\n 'B_1x1_Gate_Ceiling',\n 'B_1x1_Gate_Floor',\n 'B_1x1_Gate_Constant',\n 'B_1x1_Gate_Blend',\n 'B_1x1_Gate_EdgeDetector',\n 'B_1x1_Gate_Timer',\n 'B_1x1_Gate_Timer_Tick',\n 'B_1x1_Microchip',\n 'B_1x1_Gate_MicrochipInput',\n 'B_1x1_Gate_MicrochipOutput',\n 'B_2x2_Overhang',\n 'B_1x4_Brick_Side',\n 'B_1x2_Overhang',\n 'B_1x1_Brick_Side_Lip',\n 'B_1x1_Brick_Side',\n 'B_Jar',\n 'B_Chalice',\n 'B_Cauldron',\n 'B_Small_Flower',\n 'B_Pine_Tree',\n 'B_Leaf_Bush',\n 'B_Hedge_1x4',\n 'B_Hedge_1x2',\n 'B_Hedge_1x1_Corner',\n 'B_Hedge_1x1',\n 'B_Flower',\n 'B_Fern',\n 'B_Branch',\n 'B_2x4_Door_Frame',\n 'B_Turkey_Leg',\n 'B_Turkey_Body',\n 'B_Swirl_Plate',\n 'B_Sausage',\n 'B_Pumpkin_Carved',\n 'B_Pumpkin',\n 'B_Ladder',\n 'B_Inverted_Cone',\n 'B_Handle',\n 'B_Gravestone',\n 'B_Frog_Small',\n 'B_Frog',\n 'B_Flame',\n 'B_Coffin_Lid',\n 'B_Coffin',\n 'B_BoneStraight',\n 'B_Bone',\n 'B_1x1_Coin_Diagonal',\n 'B_1x1_Coin',\n 'B_Spoon',\n 'B_Fork',\n 'B_2x2_Corner',\n 'B_2x2f_Plate_Center_Inv',\n 'B_2x2f_Plate_Center',\n 'B_1x2f_Plate_Center_Inv',\n 'B_4x4_Round',\n 'B_2x2_Round',\n 'B_2x2F_Round',\n 'B_2x_Octo_T_Inv',\n 'B_2x_Octo_T',\n 'B_2x2F_Octo_Converter_Inv',\n 'B_2x2F_Octo_Converter',\n 'B_2x2F_Octo',\n 'B_8x8_Lattice_Plate',\n 'B_1x2_MetalIngot',\n 'B_1x1f_Tile_Corner',\n 'B_1x1f_Inverse_Tile_Corner',\n 'B_Rook',\n 'B_Queen',\n 'B_Pawn',\n 'B_Knight',\n 'B_King',\n 'B_Bishop',\n 'B_1x2f_Plate_Center',\n 'B_2x2_Cone',\n 'B_1x1_Round',\n 'B_1x1_Cone',\n 'B_1x1F_Round',\n 'B_2x_Octo_Cone',\n 'B_2x_Octo_90Deg_Inv',\n 'B_2x_Octo_90Deg',\n 'B_2x_Octo',\n 'B_1x_Octo_T_Inv',\n 'B_1x_Octo_T',\n 'B_1x_Octo_90Deg_Inv',\n 'B_1x_Octo_90Deg',\n 'B_1x_Octo',\n 'B_1x1F_Octo',\n 'B_2x2_Slipper',\n 'B_2x1_Slipper',\n 'B_Joint_Wheel_Micro',\n 'B_Joint_Wheel',\n 'B_Joint_Socket_Micro',\n 'B_Joint_Servo_Micro',\n 'B_Joint_Servo',\n 'B_Joint_Motor_Micro',\n 'B_Joint_Motor',\n 'B_Joint_Coupler',\n 'B_Joint_Bearing_Micro',\n 'B_Joint_Bearing',\n 'B_1x1_SoundEmitter',\n 'B_1x1_Gate_Teleport',\n 'B_1x1_Gate_RelativeTeleport',\n 'B_1x1_EntityGate_SetVelocity',\n 'B_1x1_EntityGate_SetLocationAndRotation',\n 'B_1x1_EntityGate_SetLocation',\n 'B_1x1_EntityGate_ReadBrickGrid',\n 'B_1x1_EntityGate_PlayAudioAt',\n 'B_1x1_EntityGate_AddVelocity',\n 'B_1x1_EntityGate_AddLocationAndRotation',\n 'B_1x1_CharacterGate_SetGravityDirection',\n 'B_Vehicle_Engine',\n 'B_Switch_Test',\n 'B_SpawnPoint',\n 'B_Seat',\n 'B_GoalPoint',\n 'B_DestinationPoint',\n 'B_CheckPoint',\n 'B_Button_Square',\n 'B_Button',\n 'B_Bot_Spawn_Point',\n 'B_2x2F_Target',\n 'B_2x2F_Speaker',\n 'B_1x1_Gate_WheelEngineSlim',\n 'B_1x1F_Speaker',\n];\n\nexport const PROCEDURAL_BRICK_ASSETS: readonly string[] = [\n 'PB_DefaultBrick',\n 'PB_DefaultStudded',\n 'PB_DefaultRampInnerCornerInverted',\n 'PB_DefaultRampCrestEnd',\n 'PB_DefaultRampCrestCorner',\n 'PB_DefaultRampCrest',\n 'PB_DefaultRamp',\n 'PB_PicketFence',\n 'BP_LatticeThin',\n 'PB_DefaultWedge',\n 'PB_DefaultTile',\n 'PB_DefaultSmoothTile',\n 'PB_DefaultSideWedge',\n 'PB_DefaultRampInverted',\n 'PB_DefaultRampInnerCorner',\n 'PB_DefaultRampCornerInverted',\n 'PB_DefaultRampCorner',\n 'PB_DefaultPole',\n 'PB_DefaultMicroWedgeTriangleCorner',\n 'PB_DefaultMicroWedgeOuterCorner',\n 'PB_DefaultMicroWedgeInnerCorner',\n 'PB_DefaultMicroWedgeHalfOuterCorner',\n 'PB_DefaultMicroWedgeHalfInnerCornerInverted',\n 'PB_DefaultMicroWedgeHalfInnerCorner',\n 'PB_DefaultMicroWedgeCorner',\n 'PB_DefaultMicroWedge',\n 'PB_DefaultMicroRamp',\n 'PB_DefaultMicroBrick',\n 'PB_DefaultArch',\n 'BP_SquarePlate',\n 'BP_SpikePlate',\n 'PB_Spike',\n 'PB_SliderJoint',\n 'PB_ServoSliderJoint',\n 'PB_MotorSliderJoint',\n 'BP_RoundPlate',\n 'PB_RoundedCap',\n 'PB_Baguette',\n];\n\nconst BASIC = new Set(BASIC_BRICK_ASSETS);\nconst PROCEDURAL = new Set(PROCEDURAL_BRICK_ASSETS);\n\n/** Classify a brick asset as procedural (parametric, carries a size) or basic. */\nexport function isProceduralAsset(name: string): boolean {\n if (PROCEDURAL.has(name)) return true;\n if (BASIC.has(name)) return false;\n // Fallback for assets not in the catalog: PB_*/BP_* families are procedural.\n return name.startsWith('PB_') || name.startsWith('BP_');\n}\n","// GENERATED by scripts/syncBrdbData.mjs — do not edit by hand.\n// Regenerate with: just sync-brdb-data\n\n/** Component type name -> data struct name (\"None\" = no data struct). */\nexport const COMPONENT_TYPE_STRUCTS: ReadonlyMap<string, string> = new Map([\n [\n 'BrickComponentType_Internal_CharacterZoneEvent_Entered',\n 'BrickComponentData_Internal_CharacterZoneEvent',\n ],\n [\n 'BrickComponentType_Internal_CharacterZoneEvent_Left',\n 'BrickComponentData_Internal_CharacterZoneEvent',\n ],\n [\n 'BrickComponentType_Internal_EntityZoneEvent_Entered',\n 'BrickComponentData_Internal_EntityZoneEvent',\n ],\n [\n 'BrickComponentType_Internal_EntityZoneEvent_Left',\n 'BrickComponentData_Internal_EntityZoneEvent',\n ],\n [\n 'BrickComponentType_Internal_MicrochipInput',\n 'BrickComponentData_Internal_MicrochipInput',\n ],\n [\n 'BrickComponentType_Internal_MicrochipOutput',\n 'BrickComponentData_Internal_MicrochipOutput',\n ],\n [\n 'BrickComponentType_Internal_ProjectileZoneEvent_Entered',\n 'BrickComponentData_Internal_ProjectileZoneEvent',\n ],\n [\n 'BrickComponentType_Internal_ProjectileZoneEvent_Left',\n 'BrickComponentData_Internal_ProjectileZoneEvent',\n ],\n [\n 'BrickComponentType_Internal_ReadBrickGrid',\n 'BrickComponentData_Internal_ReadBrickGrid',\n ],\n [\n 'BrickComponentType_Internal_TeleportDestination',\n 'BrickComponentData_TeleportDestination',\n ],\n [\n 'BrickComponentType_Internal_ZoneEvent_BrickChanged',\n 'BrickComponentData_Internal_ZoneEvent',\n ],\n [\n 'BrickComponentType_Internal_ZoneEvent_BrickRemoved',\n 'BrickComponentData_Internal_ZoneEvent',\n ],\n ['BrickComponentType_PrefabSpawn', 'BrickComponentData_PrefabSpawn'],\n [\n 'BrickComponentType_WireGraphPseudo_ArrayVar',\n 'BrickComponentData_WireGraphPseudo_ArrayVar',\n ],\n [\n 'BrickComponentType_WireGraphPseudo_BufferSeconds',\n 'BrickComponentData_WireGraphPseudo_BufferSeconds',\n ],\n [\n 'BrickComponentType_WireGraphPseudo_BufferTicks',\n 'BrickComponentData_WireGraphPseudo_BufferTicks',\n ],\n [\n 'BrickComponentType_WireGraphPseudo_Dampen',\n 'BrickComponentData_WireGraphPseudo_Dampen',\n ],\n [\n 'BrickComponentType_WireGraphPseudo_QueueSeconds',\n 'BrickComponentData_WireGraphPseudo_QueueSeconds',\n ],\n [\n 'BrickComponentType_WireGraphPseudo_QueueTicks',\n 'BrickComponentData_WireGraphPseudo_QueueTicks',\n ],\n [\n 'BrickComponentType_WireGraphPseudo_Timer',\n 'BrickComponentData_WireGraphPseudo_Timer',\n ],\n [\n 'BrickComponentType_WireGraphPseudo_Tween',\n 'BrickComponentData_WireGraphPseudo_Tween',\n ],\n [\n 'BrickComponentType_WireGraphPseudo_Var',\n 'BrickComponentData_WireGraphPseudo_Var',\n ],\n [\n 'BrickComponentType_WireGraph_AudioReference',\n 'BrickComponentData_WireGraph_AudioReference',\n ],\n [\n 'BrickComponentType_WireGraph_BrickAssetReference',\n 'BrickComponentData_WireGraph_BrickAssetReference',\n ],\n [\n 'BrickComponentType_WireGraph_DeltaTime',\n 'BrickComponentData_WireGraph_DeltaTime',\n ],\n [\n 'BrickComponentType_WireGraph_EntityTypeReference',\n 'BrickComponentData_WireGraph_EntityTypeReference',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Append',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_DualRef',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Average',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Average',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Clear',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Base',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_CopyFrom',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_DualRef',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Fill',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Push',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Find',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Find',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Get',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Get',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_GetLength',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_GetLength',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Insert',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Insert',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Max',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_MinMax',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Min',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_MinMax',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Pop',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Pop',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Push',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Push',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_RemoveAtIndex',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_RemoveAtIndex',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Resize',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Resize',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Reverse',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Base',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_SetAtIndex',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_ElementOp',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Shuffle',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Base',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Slice',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Slice',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Sort',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Sort',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Sum',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Sum',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Swap',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Swap',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Branch',\n 'BrickComponentData_WireGraph_ExecBranch',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_AddInventoryBrick',\n 'BrickComponentData_WireGraph_Exec_Character_AddInventoryBrick',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_AddInventoryEntity',\n 'BrickComponentData_WireGraph_Exec_Character_AddInventoryEntity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_AddInventoryEntry',\n 'BrickComponentData_WireGraph_Exec_Character_AddInventoryEntry',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_AddInventoryItem',\n 'BrickComponentData_WireGraph_Exec_Character_AddInventoryItem',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_GetAim',\n 'BrickComponentData_WireGraph_Exec_Character_GetAim',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_GetDamage',\n 'BrickComponentData_WireGraph_Exec_Character_GetDamage',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_GetFromController',\n 'BrickComponentData_WireGraph_Exec_Character_GetFromController',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_IncDamage',\n 'BrickComponentData_WireGraph_Exec_Character_IncDamage',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_SetDamage',\n 'BrickComponentData_WireGraph_Exec_Character_SetDamage',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_SetInventoryBrick',\n 'BrickComponentData_WireGraph_Exec_Character_SetInventoryBrick',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_SetInventoryEntity',\n 'BrickComponentData_WireGraph_Exec_Character_SetInventoryEntity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_SetInventoryEntry',\n 'BrickComponentData_WireGraph_Exec_Character_SetInventoryEntry',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_SetInventoryItem',\n 'BrickComponentData_WireGraph_Exec_Character_SetInventoryItem',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_SetTempPermission',\n 'BrickComponentData_WireGraph_Exec_Character_SetTempPermission',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_ShowHint',\n 'BrickComponentData_WireGraph_Exec_Character_ShowHint',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ChatCommand',\n 'BrickComponentData_WireGraph_Exec_ChatCommand',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_DisplayText',\n 'BrickComponentData_WireGraph_Exec_Controller_DisplayText',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_GetDisplayName',\n 'BrickComponentData_WireGraph_Exec_Controller_GetDisplayName',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_GetFromEntity',\n 'BrickComponentData_WireGraph_Exec_Controller_GetFromEntity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_GetUserId',\n 'BrickComponentData_WireGraph_Exec_Controller_GetUserId',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_GetUserName',\n 'BrickComponentData_WireGraph_Exec_Controller_GetUserName',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_HasPermission',\n 'BrickComponentData_WireGraph_Exec_Controller_HasPermission',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_HasRole',\n 'BrickComponentData_WireGraph_Exec_Controller_HasRole',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_IsTrustedByBrickOwner',\n 'BrickComponentData_WireGraph_Exec_Controller_IsTrustedByBrickOwner',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_SetCanRespawn',\n 'BrickComponentData_WireGraph_Exec_Controller_SetCanRespawn',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_ShowChatMessage',\n 'BrickComponentData_WireGraph_Exec_Controller_ShowChatMessage',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_ShowStatusMessage',\n 'BrickComponentData_WireGraph_Exec_Controller_ShowStatusMessage',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Cycle',\n 'BrickComponentData_WireGraph_Exec_Cycle',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_AddLocationRotation',\n 'BrickComponentData_WireGraph_Exec_Entity_AddLocationRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_AddVelocity',\n 'BrickComponentData_WireGraph_Exec_Entity_AddVelocity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_GetAngularVelocity',\n 'BrickComponentData_WireGraph_Exec_Entity_GetAngularVelocity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_GetLinearVelocity',\n 'BrickComponentData_WireGraph_Exec_Entity_GetLinearVelocity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_GetLocation',\n 'BrickComponentData_WireGraph_Exec_Entity_GetLocation',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_GetLocationRotation',\n 'BrickComponentData_WireGraph_Exec_Entity_GetLocationRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_GetRotation',\n 'BrickComponentData_WireGraph_Exec_Entity_GetRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_GetTag',\n 'BrickComponentData_WireGraph_Exec_Entity_GetTag',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_GetVelocity',\n 'BrickComponentData_WireGraph_Exec_Entity_GetVelocity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_RelativeTeleport',\n 'BrickComponentData_WireGraph_Exec_Entity_RelativeTeleport',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetAngularVelocity',\n 'BrickComponentData_WireGraph_Exec_Entity_SetAngularVelocity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetFrozen',\n 'BrickComponentData_WireGraph_Exec_Entity_SetFrozen',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetGravityDirection',\n 'BrickComponentData_WireGraph_Exec_Entity_SetGravityDirection',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetLinearVelocity',\n 'BrickComponentData_WireGraph_Exec_Entity_SetLinearVelocity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetLocation',\n 'BrickComponentData_WireGraph_Exec_Entity_SetLocation',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetLocationRotation',\n 'BrickComponentData_WireGraph_Exec_Entity_SetLocationRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetRotation',\n 'BrickComponentData_WireGraph_Exec_Entity_SetRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetTag',\n 'BrickComponentData_WireGraph_Exec_Entity_SetTag',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetVelocity',\n 'BrickComponentData_WireGraph_Exec_Entity_SetVelocity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_Teleport',\n 'BrickComponentData_WireGraph_Exec_Entity_Teleport',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_BroadcastChatMessage',\n 'BrickComponentData_WireGraph_Exec_Gamemode_BroadcastChatMessage',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_BroadcastStatusMessage',\n 'BrickComponentData_WireGraph_Exec_Gamemode_BroadcastStatusMessage',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_FillArrayFromPlayers',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Base',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_FillArrayFromTeamMembers',\n 'BrickComponentData_WireGraph_Exec_Gamemode_FillArrayFromTeamMembers',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_GetCurrentRound',\n 'BrickComponentData_WireGraph_Exec_Gamemode_GetCurrentRound',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_GetLeaderboardValue',\n 'BrickComponentData_WireGraph_Exec_Gamemode_GetLeaderboardValue',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_GetTeam',\n 'BrickComponentData_WireGraph_Exec_Gamemode_GetTeam',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_GetTeamByName',\n 'BrickComponentData_WireGraph_Exec_Gamemode_GetTeamByName',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_GetTeamLeaderboardValue',\n 'BrickComponentData_WireGraph_Exec_Gamemode_GetTeamLeaderboardValue',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_GetTeamName',\n 'BrickComponentData_WireGraph_Exec_Gamemode_GetTeamName',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_IncrementLeaderboardValue',\n 'BrickComponentData_WireGraph_Exec_Gamemode_LeaderboardValue',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_IncrementTeamLeaderboardValue',\n 'BrickComponentData_WireGraph_Exec_Gamemode_TeamLeaderboardValue',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_PlayerWins',\n 'BrickComponentData_WireGraph_Exec_Gamemode_PlayerWins',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_SetLeaderboardValue',\n 'BrickComponentData_WireGraph_Exec_Gamemode_LeaderboardValue',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_SetTeam',\n 'BrickComponentData_WireGraph_Exec_Gamemode_SetTeam',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_SetTeamLeaderboardValue',\n 'BrickComponentData_WireGraph_Exec_Gamemode_TeamLeaderboardValue',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_SetTeamPinned',\n 'BrickComponentData_WireGraph_Exec_Gamemode_SetTeamPinned',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_TeamWins',\n 'BrickComponentData_WireGraph_Exec_Gamemode_TeamWins',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_PlayGlobalAudio',\n 'BrickComponentData_WireGraph_Exec_PlayGlobalAudio',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_PrefabSpawner',\n 'BrickComponentData_WireGraph_Exec_PrefabSpawner',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_PrintToConsole',\n 'BrickComponentData_WireGraph_Exec_PrintToConsole',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Random',\n 'BrickComponentData_WireGraph_Exec_Random',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Sweep',\n 'BrickComponentData_WireGraph_Exec_Sweep',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Toggle',\n 'BrickComponentData_WireGraph_Exec_Toggle',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Union',\n 'BrickComponentData_WireGraph_ExecUnion',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Var_Get',\n 'BrickComponentData_WireGraph_Exec_Var_Get',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Var_Increment',\n 'BrickComponentData_WireGraph_Exec_Var_EditOrGet',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Var_Set',\n 'BrickComponentData_WireGraph_Exec_Var_EditOrGet',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseAND',\n 'BrickComponentData_WireGraph_Expr_IntInt_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseBitCount',\n 'BrickComponentData_WireGraph_Expr_Int_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseNAND',\n 'BrickComponentData_WireGraph_Expr_IntInt_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseNOR',\n 'BrickComponentData_WireGraph_Expr_IntInt_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseNOT',\n 'BrickComponentData_WireGraph_Expr_Int_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseOR',\n 'BrickComponentData_WireGraph_Expr_IntInt_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseShiftLeft',\n 'BrickComponentData_WireGraph_Expr_IntInt_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseShiftRight',\n 'BrickComponentData_WireGraph_Expr_IntInt_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseXOR',\n 'BrickComponentData_WireGraph_Expr_IntInt_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_Ceil',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_ColorBlend',\n 'BrickComponentData_WireGraph_Expr_ColorBlend',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_ColorConvert',\n 'BrickComponentData_WireGraph_Expr_ColorConvert',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_ColorToHex',\n 'BrickComponentData_WireGraph_Expr_ColorToHex',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_CompareEqual',\n 'BrickComponentData_WireGraph_Expr_Compare',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_CompareGreater',\n 'BrickComponentData_WireGraph_Expr_MathCompare',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_CompareGreaterOrEqual',\n 'BrickComponentData_WireGraph_Expr_MathCompare',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_CompareLess',\n 'BrickComponentData_WireGraph_Expr_MathCompare',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_CompareLessOrEqual',\n 'BrickComponentData_WireGraph_Expr_MathCompare',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_CompareNotEqual',\n 'BrickComponentData_WireGraph_Expr_Compare',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_Convert',\n 'BrickComponentData_WireGraph_Expr_Convert',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_DirectionToRotation',\n 'BrickComponentData_WireGraph_Expr_DirectionToRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_EdgeDetector',\n 'BrickComponentData_WireGraph_Expr_EdgeDetector',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_Floor',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_InvertRotation',\n 'BrickComponentData_WireGraph_Expr_InvertRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_LogicalAND',\n 'BrickComponentData_WireGraph_Expr_BoolBool_Bool',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_LogicalNAND',\n 'BrickComponentData_WireGraph_Expr_BoolBool_Bool',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_LogicalNOR',\n 'BrickComponentData_WireGraph_Expr_BoolBool_Bool',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_LogicalNOT',\n 'BrickComponentData_WireGraph_Expr_Bool_Bool',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_LogicalOR',\n 'BrickComponentData_WireGraph_Expr_BoolBool_Bool',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_LogicalXOR',\n 'BrickComponentData_WireGraph_Expr_BoolBool_Bool',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MakeColor',\n 'BrickComponentData_WireGraph_Expr_MakeColor',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MakeColorHex',\n 'BrickComponentData_WireGraph_Expr_MakeColorHex',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MakeColorSRGB',\n 'BrickComponentData_WireGraph_Expr_MakeColorSRGB',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MakeQuaternion',\n 'BrickComponentData_WireGraph_Expr_MakeQuaternion',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MakeRotation',\n 'BrickComponentData_WireGraph_Expr_MakeRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MakeVector',\n 'BrickComponentData_WireGraph_Expr_MakeVector',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAbs',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAcos',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAcosh',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAdd',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAsin',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAsinh',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAtan',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAtan2',\n 'BrickComponentData_WireGraph_Expr_MathAtan2',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAtanh',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathBlend',\n 'BrickComponentData_WireGraph_Expr_MathBlend',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathClamp',\n 'BrickComponentData_WireGraph_Expr_MathClamp',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathCos',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathCosh',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathDegreesToRadians',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathDivide',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathEasing',\n 'BrickComponentData_WireGraph_Expr_MathEasing',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathExp',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathLn',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathLogBase',\n 'BrickComponentData_WireGraph_Expr_MathLogBase',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathMax',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathMin',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathModulo',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathModuloFloored',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathMultiply',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathNegate',\n 'BrickComponentData_WireGraph_Expr_Variant_Variant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathPow',\n 'BrickComponentData_WireGraph_Expr_MathPow',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathRadiansToDegrees',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathSign',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathSin',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathSinh',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathSqrt',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathSubtract',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathTan',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathTanh',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_NearlyEqual',\n 'BrickComponentData_WireGraph_Expr_NearlyEqual',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_QuatAngleBetween',\n 'BrickComponentData_WireGraph_Expr_QuatAngleBetween',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_QuatBetween',\n 'BrickComponentData_WireGraph_Expr_QuatBetween',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_QuatDotProduct',\n 'BrickComponentData_WireGraph_Expr_QuatDotProduct',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_QuatFromAxisAngle',\n 'BrickComponentData_WireGraph_Expr_QuatFromAxisAngle',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_QuatSlerp',\n 'BrickComponentData_WireGraph_Expr_QuatSlerp',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_QuatToAxisAngle',\n 'BrickComponentData_WireGraph_Expr_QuatToAxisAngle',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_RotateVector',\n 'BrickComponentData_WireGraph_Expr_RotateVector',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_RotationToDirection',\n 'BrickComponentData_WireGraph_Expr_RotationToDirection',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_Round',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_Select',\n 'BrickComponentData_WireGraph_Expr_Select',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_SplitColor',\n 'BrickComponentData_WireGraph_Expr_SplitColor',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_SplitColorSRGB',\n 'BrickComponentData_WireGraph_Expr_SplitColorSRGB',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_SplitQuaternion',\n 'BrickComponentData_WireGraph_Expr_SplitQuaternion',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_SplitRotation',\n 'BrickComponentData_WireGraph_Expr_SplitRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_SplitVector',\n 'BrickComponentData_WireGraph_Expr_SplitVector',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_Concatenate',\n 'BrickComponentData_WireGraph_Expr_String_Concatenate',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_Contains',\n 'BrickComponentData_WireGraph_Expr_String_Contains',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_EndsWith',\n 'BrickComponentData_WireGraph_Expr_String_EndsWith',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_Find',\n 'BrickComponentData_WireGraph_Expr_String_Find',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_FormatText',\n 'BrickComponentData_WireGraph_Expr_String_FormatText',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_Length',\n 'BrickComponentData_WireGraph_Expr_String_Length',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_ParseInt',\n 'BrickComponentData_WireGraph_Expr_String_ParseInt',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_ParseNumber',\n 'BrickComponentData_WireGraph_Expr_String_ParseNumber',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_Replace',\n 'BrickComponentData_WireGraph_Expr_String_Replace',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_Split',\n 'BrickComponentData_WireGraph_Expr_String_Split',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_StartsWith',\n 'BrickComponentData_WireGraph_Expr_String_StartsWith',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_Substring',\n 'BrickComponentData_WireGraph_Expr_String_Substring',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_ToLower',\n 'BrickComponentData_WireGraph_Expr_String_ToLower',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_ToUpper',\n 'BrickComponentData_WireGraph_Expr_String_ToUpper',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_Trim',\n 'BrickComponentData_WireGraph_Expr_String_Trim',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_Swap',\n 'BrickComponentData_WireGraph_Expr_Swap',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_VecCrossProduct',\n 'BrickComponentData_WireGraph_Expr_VecVec_Vec',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_VecDistance',\n 'BrickComponentData_WireGraph_Expr_VecVec_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_VecDistanceSquared',\n 'BrickComponentData_WireGraph_Expr_VecVec_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_VecDotProduct',\n 'BrickComponentData_WireGraph_Expr_VecVec_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_VecMagnitude',\n 'BrickComponentData_WireGraph_Expr_Vec_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_VecMagnitudeSquared',\n 'BrickComponentData_WireGraph_Expr_Vec_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_VecNormalize',\n 'BrickComponentData_WireGraph_Expr_Vec_Vec',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_VecScale',\n 'BrickComponentData_WireGraph_Expr_VecFloat_Vec',\n ],\n [\n 'BrickComponentType_WireGraph_Fake_Gamemode_CharacterDamagedEvent',\n 'BrickComponentData_WireGraph_Fake_CharacterDamageEvent',\n ],\n [\n 'BrickComponentType_WireGraph_Fake_Gamemode_CharacterDiedEvent',\n 'BrickComponentData_WireGraph_Fake_CharacterDeathEvent',\n ],\n [\n 'BrickComponentType_WireGraph_Fake_Gamemode_CharacterSpawnedEvent',\n 'BrickComponentData_WireGraph_Fake_CharacterEvent',\n ],\n [\n 'BrickComponentType_WireGraph_Fake_Gamemode_ControllerJoinedEvent',\n 'BrickComponentData_WireGraph_Fake_ControllerEvent',\n ],\n [\n 'BrickComponentType_WireGraph_Fake_Gamemode_ControllerLeftEvent',\n 'BrickComponentData_WireGraph_Fake_ControllerEvent',\n ],\n [\n 'BrickComponentType_WireGraph_Fake_Gamemode_RoundEndEvent',\n 'BrickComponentData_WireGraph_Fake_RoundEvent',\n ],\n [\n 'BrickComponentType_WireGraph_Fake_Gamemode_RoundStartEvent',\n 'BrickComponentData_WireGraph_Fake_RoundEvent',\n ],\n [\n 'BrickComponentType_WireGraph_FindPlayer',\n 'BrickComponentData_WireGraph_FindPlayer',\n ],\n [\n 'BrickComponentType_WireGraph_FontReference',\n 'BrickComponentData_WireGraph_FontReference',\n ],\n [\n 'BrickComponentType_WireGraph_ItemReference',\n 'BrickComponentData_WireGraph_ItemReference',\n ],\n [\n 'BrickComponentType_WireGraph_OneShotAudioReference',\n 'BrickComponentData_WireGraph_OneShotAudioReference',\n ],\n [\n 'BrickComponentType_WireGraph_ParticleReference',\n 'BrickComponentData_WireGraph_ParticleReference',\n ],\n [\n 'BrickComponentType_WireGraph_PickupReference',\n 'BrickComponentData_WireGraph_PickupReference',\n ],\n [\n 'BrickComponentType_WireGraph_ProjectileReference',\n 'BrickComponentData_WireGraph_ProjectileReference',\n ],\n [\n 'BrickComponentType_WireGraph_ServerUptime',\n 'BrickComponentData_WireGraph_ServerUptime',\n ],\n [\n 'BrickComponentType_WireGraph_WheelEngineAudioReference',\n 'BrickComponentData_WireGraph_WheelEngineAudioReference',\n ],\n ['Component_AudioEmitter', 'BrickComponentData_AudioEmitter'],\n ['Component_BotSpawn', 'BrickComponentData_BotSpawn'],\n ['Component_BrickPropertyChanger', 'BrickComponentData_BrickPropertyChanger'],\n ['Component_Button', 'BrickComponentData_Button'],\n ['Component_CheckPoint', 'BrickComponentData_CheckPoint'],\n ['Component_Damage', 'BrickComponentData_Damage'],\n ['Component_Interact', 'BrickComponentData_Interact'],\n ['Component_Internal_AnimatedButton', 'BrickComponentData_Button'],\n ['Component_Internal_AnimatedPressurePlate', 'BrickComponentData_Touch'],\n ['Component_Internal_AnimatedSwitch', 'BrickComponentData_Switch'],\n [\n 'Component_Internal_AttachedZone',\n 'BrickComponentData_Internal_AttachedZone',\n ],\n ['Component_Internal_Bearing', 'BrickComponentData_Bearing'],\n ['Component_Internal_Gyroscope', 'BrickComponentData_Gyroscope'],\n [\n 'Component_Internal_InputSplitter',\n 'BrickComponentData_Internal_InputSplitter_V2',\n ],\n ['Component_Internal_Joint_Wheel', 'BrickComponentData_Joint_Wheel'],\n [\n 'Component_Internal_Joint_Wheel_Suspension',\n 'BrickComponentData_Joint_Wheel_Suspension',\n ],\n ['Component_Internal_Microchip', 'BrickComponentData_Internal_Microchip'],\n ['Component_Internal_Motor', 'BrickComponentData_Motor'],\n ['Component_Internal_MotorSlider', 'BrickComponentData_MotorSlider'],\n [\n 'Component_Internal_ProjectileSpawner_Cannon',\n 'BrickComponentData_ProjectileSpawner',\n ],\n ['Component_Internal_Rerouter', 'BrickComponentData_Rerouter'],\n ['Component_Internal_RigidBearing', 'BrickComponentData_RigidBearing'],\n ['Component_Internal_RigidSlider', 'BrickComponentData_RigidSlider'],\n ['Component_Internal_Seat', 'BrickComponentData_Seat_V2'],\n ['Component_Internal_Servo', 'BrickComponentData_Servo'],\n ['Component_Internal_ServoSlider', 'BrickComponentData_ServoSlider'],\n ['Component_Internal_Slider', 'BrickComponentData_Slider'],\n ['Component_Internal_Thruster', 'BrickComponentData_Thruster'],\n ['Component_Internal_WeightBrick', 'BrickComponentData_WeightBrick'],\n ['Component_Internal_WheelEngine', 'BrickComponentData_WheelEngine_V2'],\n ['Component_ItemSpawn', 'BrickComponentData_ItemSpawn'],\n ['Component_OneShotAudioEmitter', 'BrickComponentData_OneShotAudioEmitter'],\n ['Component_PointLight', 'BrickComponentData_PointLight'],\n ['Component_ProjectileSpawner', 'BrickComponentData_ProjectileSpawner'],\n ['Component_SpawnPoint', 'BrickComponentData_SpawnPoint'],\n ['Component_SpotLight', 'BrickComponentData_SpotLight'],\n ['Component_Switch', 'BrickComponentData_Switch'],\n ['Component_Target', 'BrickComponentData_Target'],\n ['Component_TextDisplay', 'BrickComponentData_TextDisplay'],\n ['Component_Touch', 'BrickComponentData_Touch'],\n [\n 'Component_WireGraph_PlayAudioAt',\n 'BrickComponentData_WireGraph_Exec_Entity_PlayAudioAt',\n ],\n]);\n\n/** Known wire port names (a save's port registry is built from the ports\n * its wires actually use, but names must come from this vocabulary). */\nexport const WIRE_PORT_NAMES: readonly string[] = [\n 'A',\n 'ActiveDamping',\n 'AdditionalIgnoredEntities',\n 'AggroRange',\n 'Agression',\n 'Alpha',\n 'Amount',\n 'Anchor',\n 'Anchor.X',\n 'Anchor.Y',\n 'AnchorX',\n 'AnchorY',\n 'Angle',\n 'AngularVelocity',\n 'AngularVelocity.X',\n 'AngularVelocity.Y',\n 'AngularVelocity.Z',\n 'Arguments',\n 'ArrayVarRef',\n 'Arrived',\n 'AttackDamageMultiplier',\n 'AttackMovementAmount',\n 'Attacker',\n 'AttackerWeapon',\n 'AttackerWeaponName',\n 'AudioDescriptor',\n 'Axis',\n 'Axis.X',\n 'Axis.Y',\n 'Axis.Z',\n 'B',\n 'Base',\n 'BeginTouchSound',\n 'Billboard',\n 'Blend',\n 'BotName',\n 'BotWeapon',\n 'BrickAsset',\n 'BrickGrid',\n 'Brightness',\n 'CenterOfSteering',\n 'Character',\n 'CharacterThatJustHit',\n 'Color',\n 'Color.A',\n 'Color.B',\n 'Color.G',\n 'Color.R',\n 'ColorA',\n 'ColorA.A',\n 'ColorA.B',\n 'ColorA.G',\n 'ColorA.R',\n 'ColorB',\n 'ColorB.A',\n 'ColorB.B',\n 'ColorB.G',\n 'ColorB.R',\n 'ConsoleTag',\n 'Control_DriveAndSteer',\n 'Controller',\n 'CorpseTimeout',\n 'Count',\n 'CurrentAngle',\n 'CurrentPosition',\n 'CustomMass',\n 'CustomMassVerticalOffset',\n 'Damage',\n 'DamageLimit',\n 'DamageMultiplier',\n 'Damping',\n 'DataIn1',\n 'DataIn2',\n 'DataIn3',\n 'DataIn4',\n 'DataIn5',\n 'DataIn6',\n 'DataIn7',\n 'DataIn8',\n 'DataOut1',\n 'DataOut2',\n 'DataOut3',\n 'DataOut4',\n 'DataOut5',\n 'DataOut6',\n 'DataOut7',\n 'DataOut8',\n 'Delimiter',\n 'DeltaTime',\n 'Destination',\n 'DestroyAll',\n 'Direction',\n 'Direction.X',\n 'Direction.Y',\n 'Direction.Z',\n 'DisplayName',\n 'Distance',\n 'DistanceToTarget',\n 'DriveAcceleratingPowerMultiplier',\n 'DriveBrakingPowerMultiplier',\n 'DriveDampingMultiplier',\n 'DriveInterpSpeed',\n 'DrivePower',\n 'DriveSpeed',\n 'Duration',\n 'EndTouchSound',\n 'Entity',\n 'EntityType',\n 'Exec',\n 'ExecA',\n 'ExecB',\n 'ExecDown',\n 'ExecIn',\n 'ExecOut',\n 'ExecOutA',\n 'ExecOutB',\n 'ExecOutDown',\n 'ExitOffset',\n 'ExitOffset.X',\n 'ExitOffset.Y',\n 'ExitOffset.Z',\n 'Expired',\n 'Exponent',\n 'Face',\n 'FireRate',\n 'FireSound',\n 'FocusAzimuth',\n 'FocusCharacter',\n 'Font',\n 'FontColor',\n 'FontColor.A',\n 'FontColor.B',\n 'FontColor.G',\n 'FontColor.R',\n 'Force',\n 'ForceLimit',\n 'FormatString',\n 'From',\n 'From.X',\n 'From.Y',\n 'From.Z',\n 'Function',\n 'G',\n 'GraffitiAngleLimit',\n 'GraffitiDepthLimit',\n 'GraffitiLayer',\n 'GunSkill',\n 'HealthMultiplier',\n 'Hex',\n 'Hit',\n 'HitDistance',\n 'HitEntity',\n 'HitLocation',\n 'HitNormal',\n 'IgnoreEntity',\n 'Index',\n 'IndexA',\n 'IndexB',\n 'InnerConeAngle',\n 'InnerRadius',\n 'Input',\n 'Input.A',\n 'Input.B',\n 'Input.G',\n 'Input.Pitch',\n 'Input.R',\n 'Input.Roll',\n 'Input.W',\n 'Input.X',\n 'Input.Y',\n 'Input.Yaw',\n 'Input.Z',\n 'InputA',\n 'InputA.W',\n 'InputA.X',\n 'InputA.Y',\n 'InputA.Z',\n 'InputB',\n 'InputB.W',\n 'InputB.X',\n 'InputB.Y',\n 'InputB.Z',\n 'InputC',\n 'InputD',\n 'InputE',\n 'InputF',\n 'InputForward',\n 'InputG',\n 'InputRight',\n 'Instigator',\n 'InteractSound',\n 'InterpMode',\n 'Item',\n 'ItemNameOverride',\n 'JointDistance',\n 'Jumpyness',\n 'Kerning',\n 'Key',\n 'Killer',\n 'KillerWeapon',\n 'KillerWeaponName',\n 'Left',\n 'Length',\n 'Lifetime',\n 'Limit',\n 'LimitAngle',\n 'LineHeight',\n 'LineOffset',\n 'LinearVelocity',\n 'LinearVelocity.X',\n 'LinearVelocity.Y',\n 'LinearVelocity.Z',\n 'ManualInput_Drive',\n 'ManualInput_Steer',\n 'Mass',\n 'MassOffset',\n 'MassOffset.X',\n 'MassOffset.Y',\n 'MassOffset.Z',\n 'MassSize',\n 'MassSize.X',\n 'MassSize.Y',\n 'MassSize.Z',\n 'Material',\n 'MaterialAlpha',\n 'MaterialSlider',\n 'Max',\n 'MaxDistance',\n 'MaxForce',\n 'Message',\n 'Min',\n 'Miss',\n 'MoveTarget',\n 'MoveTarget.X',\n 'MoveTarget.Y',\n 'MoveTarget.Z',\n 'MovementAmount',\n 'MovementGoalDummy',\n 'MovementRandomness',\n 'Name',\n 'NonFocusAzimuth',\n 'NonFocusVolumeAttenuation',\n 'NumberOfShots',\n 'OccupantCount',\n 'Offset',\n 'Offset.X',\n 'Offset.Y',\n 'Offset.Z',\n 'OnFired',\n 'OnTime',\n 'Origin',\n 'Origin.X',\n 'Origin.Y',\n 'Origin.Z',\n 'OuterConeAngle',\n 'Outline',\n 'OutlineColor',\n 'OutlineColor.A',\n 'OutlineColor.B',\n 'OutlineColor.G',\n 'OutlineColor.R',\n 'OutlineSize',\n 'OutlineWidth',\n 'Output',\n 'OutputB',\n 'Pause',\n 'PickupAnimationAxis',\n 'PickupAnimationPhase',\n 'PickupBobHeight',\n 'PickupBobSpeed',\n 'PickupClass',\n 'PickupMeshColors',\n 'PickupMinigameResetRespawnDelay',\n 'PickupOffsetDirection',\n 'PickupOffsetDistance',\n 'PickupRespawnTime',\n 'PickupRotation',\n 'PickupRotation.Pitch',\n 'PickupRotation.Roll',\n 'PickupRotation.Yaw',\n 'PickupScale',\n 'PickupSpinSpeed',\n 'Pitch',\n 'PitchMultiplier',\n 'Play',\n 'Player',\n 'PositionX',\n 'PositionY',\n 'Power',\n 'Prefab',\n 'Prefab.Path',\n 'Prefix',\n 'PressCount',\n 'PressSound',\n 'ProceduralSize',\n 'ProceduralSize.X',\n 'ProceduralSize.Y',\n 'ProceduralSize.Z',\n 'Projectile',\n 'ProjectileClass',\n 'ProjectileOverride',\n 'PromptCustomLabel',\n 'Query',\n 'R',\n 'RER_Input',\n 'RER_Output',\n 'Radius',\n 'ReactionTime',\n 'ReleaseSound',\n 'RepeatCount',\n 'RepeatDelay',\n 'RepeatTime',\n 'RepeatVariance',\n 'Replacement',\n 'RespawnTime',\n 'Restart',\n 'Resume',\n 'Right',\n 'Roll',\n 'Rotation',\n 'Rotation.Pitch',\n 'Rotation.Roll',\n 'Rotation.W',\n 'Rotation.X',\n 'Rotation.Y',\n 'Rotation.Yaw',\n 'Rotation.Z',\n 'RoundNumber',\n 'RunSpeed',\n 'Scalar',\n 'ScaleMultiplier',\n 'ScaleX',\n 'ScaleY',\n 'ScuffWidth',\n 'Search',\n 'SecondsToWait',\n 'Separator',\n 'Shading',\n 'ShadingWidth',\n 'SittingCharacter',\n 'Size',\n 'Skew',\n 'Skin',\n 'Skin.Parts',\n 'Slot',\n 'SmoothTime',\n 'Source',\n 'SourceRef',\n 'SpawnLocation',\n 'SpawnMargin',\n 'SpawnOffset',\n 'SpawnOffset.X',\n 'SpawnOffset.Y',\n 'SpawnOffset.Z',\n 'SpawnOffsetRotation',\n 'SpawnOffsetRotation.Pitch',\n 'SpawnOffsetRotation.Roll',\n 'SpawnOffsetRotation.Yaw',\n 'SpawnVelocity',\n 'SpawnVelocity.X',\n 'SpawnVelocity.Y',\n 'SpawnVelocity.Z',\n 'SpawnedCharacter',\n 'SpawnedEntity',\n 'Speed',\n 'SpeedMultiplier',\n 'SpreadConeAngle',\n 'Start',\n 'Steer',\n 'SteerInterpSpeed',\n 'SteerLimitDegree',\n 'SteerLimitSpeedFalloff',\n 'SteerPower',\n 'SteerPowerMultiplier',\n 'Stop',\n 'Strength',\n 'Suffix',\n 'SuspensionDamping',\n 'SuspensionLength',\n 'SuspensionOffset',\n 'SuspensionStiffness',\n 'Tag',\n 'TagFilter',\n 'TankSteerSpeedMultiplier',\n 'Target',\n 'TargetAngle',\n 'TargetAxis',\n 'TargetAxis.X',\n 'TargetAxis.Y',\n 'TargetAxis.Z',\n 'TargetPosition',\n 'Team',\n 'TeamCollisionChannel',\n 'TeamName',\n 'Text',\n 'TextId',\n 'TextIdOut',\n 'ThisDestination',\n 'Throttle',\n 'TicksToWait',\n 'Time',\n 'To',\n 'To.X',\n 'To.Y',\n 'To.Z',\n 'Tolerance',\n 'TopSpeed',\n 'TouchCount',\n 'Transition',\n 'Typeface',\n 'Uptime',\n 'UserId',\n 'UserName',\n 'Value',\n 'VarRef',\n 'Vector',\n 'Vector.X',\n 'Vector.Y',\n 'Vector.Z',\n 'VolumeMultiplier',\n 'W',\n 'WaterDriveForce',\n 'WaterSteeringForce',\n 'Weapon',\n 'WeaponName',\n 'WeaponNameThatJustHit',\n 'WeaponSpeedMultiplier',\n 'WeaponThatJustHit',\n 'WheelFrictionMultiplier',\n 'X',\n 'Y',\n 'Yaw',\n 'Z',\n 'ZeroSecondsToWait',\n 'ZeroTicksToWait',\n 'Zone',\n 'ZoneEndDistance',\n 'ZoneRef',\n 'ZoneStartDistance',\n 'bActiveBot',\n 'bAlignToWedge',\n 'bAllowEngineSteerCorrect',\n 'bAllowNearbyInteraction',\n 'bAnglesArePercentages',\n 'bAutoRight',\n 'bBackVision',\n 'bCanBrake',\n 'bCanJump',\n 'bCanRespawn',\n 'bCanTargetBots',\n 'bCanTargetPlayers',\n 'bCaseSensitive',\n 'bCastShadows',\n 'bCollisionEnabled',\n 'bCollisionEnabled_Interaction',\n 'bCollisionEnabled_Physics',\n 'bCollisionEnabled_Player',\n 'bCollisionEnabled_Player1',\n 'bCollisionEnabled_Player2',\n 'bCollisionEnabled_Player3',\n 'bCollisionEnabled_Weapon',\n 'bCond',\n 'bDeleteBot',\n 'bDescending',\n 'bDetectBricks',\n 'bDetectEntities',\n 'bDetectMap',\n 'bDetectPhysics',\n 'bDetectPlayers',\n 'bDetectPlayers1',\n 'bDetectPlayers2',\n 'bDetectPlayers3',\n 'bDetectPlayers4',\n 'bDetectProjectiles',\n 'bDriveWhenNotAttachedToEngine',\n 'bEnable',\n 'bEnableManualControl',\n 'bEnableRepeat',\n 'bEnabled',\n 'bFlashIfUnchanged',\n 'bFlipShading',\n 'bForeground',\n 'bFound',\n 'bFrozen',\n 'bHasPermission',\n 'bHasRole',\n 'bHeld',\n 'bHiddenInteraction',\n 'bIgnoreOwningGrid',\n 'bInput',\n 'bInputA',\n 'bInputB',\n 'bIsBuildingZone',\n 'bIsEmpty',\n 'bIsLooseZone',\n 'bIsOccupied',\n 'bIsShareZone',\n 'bIsTrusted',\n 'bJustHit',\n 'bLimitAngle',\n 'bManualInput_Brake',\n 'bMatchBrickShape',\n 'bOccupied',\n 'bOutOfBounds',\n 'bOutput',\n 'bOverrideColor',\n 'bOverrideOutlineColor',\n 'bOverridePickupColors',\n 'bPermissionEnable',\n 'bPickupAnimationAxisLocal',\n 'bPickupAnimationEnabled',\n 'bPickupAutoDisableOnPickup',\n 'bPickupEnabled',\n 'bPickupRespawnOnMinigameReset',\n 'bPinPlayerToTeam',\n 'bPinned',\n 'bPositionsArePercentages',\n 'bPressedJump',\n 'bPulseOnFallingEdge',\n 'bPulseOnRisingEdge',\n 'bRelative',\n 'bRenderTranslucentWhenDisabled',\n 'bReversed',\n 'bRollCameraInThirdPerson',\n 'bRotatePlayerGravityOnSpawn',\n 'bSelectB',\n 'bSharpCorners',\n 'bSharpOutlines',\n 'bShowPickupEnabled',\n 'bSpatialization',\n 'bSpawnEnable',\n 'bSpawnLight',\n 'bSpreadBiasedTowardsCenter',\n 'bSteerEnabled',\n 'bStopped',\n 'bSuccess',\n 'bSuspensionEnabled',\n 'bSwap',\n 'bTankSteering',\n 'bTeamCollision',\n 'bTeamCollision1',\n 'bTeamCollision2',\n 'bTeamCollision3',\n 'bTeamWinsInstead',\n 'bTouching',\n 'bUseBrickColor',\n 'bVisibility',\n 'bVisionRaycasting',\n 'bWelded',\n];\n\n/** Entity type name -> data class name. */\nexport const ENTITY_TYPE_STRUCTS: ReadonlyMap<string, string> = new Map([\n ['Entity_DynamicBrickGrid', 'BrickGridDynamicActor'],\n ['Entity_MicrochipDynamicBrickGrid', 'BP_MicrochipBrickGridDynamicActor_C'],\n]);\n","// brdb Guids are four u32s (A,B,C,D) = the uuid's u128 split into\n// big-endian quarters. Flat-serialized as\n// BRGuid { A,B,C,D: u32 } with each u32 little-endian on disk — the\n// value walkers handle the LE part; this module only maps strings.\nimport { uuidParse, uuidStringify } from '../uuid';\n\nexport interface BrGuid {\n A: number;\n B: number;\n C: number;\n D: number;\n}\n\n/** Owner-table row 0 sentinel (the PUBLIC owner). */\nexport const PUBLIC_GUID: BrGuid = {\n A: 0xffffffff,\n B: 0xffffffff,\n C: 0xffffffff,\n D: 0xffffffff,\n};\n\nexport function uuidToGuid(uuid: string): BrGuid {\n const bytes = uuidParse(uuid);\n const view = new DataView(bytes.buffer, bytes.byteOffset, 16);\n return {\n A: view.getUint32(0, false),\n B: view.getUint32(4, false),\n C: view.getUint32(8, false),\n D: view.getUint32(12, false),\n };\n}\n\nexport function guidToUuid(guid: BrGuid): string {\n const bytes = new Uint8Array(16);\n const view = new DataView(bytes.buffer);\n view.setUint32(0, guid.A, false);\n view.setUint32(4, guid.B, false);\n view.setUint32(8, guid.C, false);\n view.setUint32(12, guid.D, false);\n return uuidStringify(Array.from(bytes));\n}\n","// Pending virtual-filesystem tree: the interchange type between the world\n// serializer and the container writers.\n// Children are ordered; that order determines archive ids (BFS, Task 4).\nexport type PendingEntry = [name: string, node: PendingNode];\nexport type PendingNode =\n | { type: 'folder'; children: PendingEntry[] }\n | { type: 'file'; content: Uint8Array };\n\nexport const folder = (children: PendingEntry[]): PendingNode => ({\n type: 'folder',\n children,\n});\n\nexport const file = (content: Uint8Array): PendingNode => ({\n type: 'file',\n content,\n});\n","// msgpack primitives for the brdb msgpack-schema encoding. This is NOT standard\n// msgpack: see the u8 negative-fixint band and the float shrink predicates.\nimport { ByteReader, ByteWriter } from './bytes';\n\nconst utf8Encoder = new TextEncoder();\nconst utf8Decoder = new TextDecoder('utf-8', { fatal: true });\n\nconst checkSafe = (v: number, what: string) => {\n if (!Number.isSafeInteger(v))\n throw new RangeError(`brdb: ${what} ${v} is not a safe integer`);\n};\n\nexport const mpNil = (w: ByteWriter) => w.u8(0xc0);\nexport const mpBool = (w: ByteWriter, v: boolean) => w.u8(v ? 0xc3 : 0xc2);\n\n// The 'u8' schema type only. 0..=127 pfix; 225..=255 negative fixint\n// (0xe1..0xff); 128..=224 u8 marker.\nexport function mpU8(w: ByteWriter, v: number) {\n if (v < 0 || v > 255 || !Number.isInteger(v))\n throw new RangeError(`brdb: u8 value out of range: ${v}`);\n if (v <= 127) w.u8(v);\n // reinterpreted as negative fixint on the wire\n else if (v > 224) w.u8(v);\n else {\n w.u8(0xcc);\n w.u8(v);\n }\n}\n\n// u16/u32/u64 schema types.\nexport function mpUint(w: ByteWriter, v: number) {\n checkSafe(v, 'uint');\n if (v < 0) throw new RangeError(`brdb: uint value negative: ${v}`);\n if (v <= 127) w.u8(v);\n else if (v <= 0xff) {\n w.u8(0xcc);\n w.u8(v);\n } else if (v <= 0xffff) {\n w.u8(0xcd);\n w.u16be(v);\n } else if (v <= 0xffffffff) {\n w.u8(0xce);\n w.u32be(v);\n } else {\n w.u8(0xcf);\n w.u64be(BigInt(v));\n }\n}\n\n// i8..i64 schema types. Positive values use SIGNED markers (never 0xcc+),\n// and positives 128..=32767 skip i8 and go straight to i16.\nexport function mpInt(w: ByteWriter, v: number) {\n checkSafe(v, 'int');\n if (v >= 0) {\n if (v < 128) w.u8(v);\n else if (v <= 32767) {\n w.u8(0xd1);\n w.i16be(v);\n } else if (v <= 2147483647) {\n w.u8(0xd2);\n w.i32be(v);\n } else {\n w.u8(0xd3);\n w.i64be(BigInt(v));\n }\n } else {\n // negative fixint 0xe1..0xff\n if (v > -32) w.u8(0x100 + v);\n else if (v >= -128) {\n w.u8(0xd0);\n w.i8(v);\n } else if (v >= -32768) {\n w.u8(0xd1);\n w.i16be(v);\n } else if (v >= -2147483648) {\n w.u8(0xd2);\n w.i32be(v);\n } else {\n w.u8(0xd3);\n w.i64be(BigInt(v));\n }\n }\n}\n\n// Whole f32 shrinks to int when (v as u16) < 65535 && (v as i16) > -32768.\n// With saturating casts this reduces to v < 65535 && v > -32768.\nexport function mpF32(w: ByteWriter, v: number) {\n if (v === Math.round(v) && v < 65535 && v > -32768) mpInt(w, v === 0 ? 0 : v);\n else {\n w.u8(0xca);\n w.f32be(v);\n }\n}\n\n// Whole f64 shrinks when (v as u32) < 4294967295 && (v as i32) > -2147483648.\nexport function mpF64(w: ByteWriter, v: number) {\n if (v === Math.round(v) && v < 4294967295 && v > -2147483648)\n mpInt(w, v === 0 ? 0 : v);\n else {\n w.u8(0xcb);\n w.f64be(v);\n }\n}\n\nexport function mpStr(w: ByteWriter, s: string) {\n const bytes = utf8Encoder.encode(s);\n const len = bytes.length;\n if (len < 32) w.u8(0xa0 | len);\n else if (len < 256) {\n w.u8(0xd9);\n w.u8(len);\n } else if (len <= 0xffff) {\n w.u8(0xda);\n w.u16be(len);\n } else {\n w.u8(0xdb);\n w.u32be(len);\n }\n w.bytes(bytes);\n}\n\nexport function mpBinHeader(w: ByteWriter, len: number) {\n if (len < 256) {\n w.u8(0xc4);\n w.u8(len);\n } else if (len <= 0xffff) {\n w.u8(0xc5);\n w.u16be(len);\n } else {\n w.u8(0xc6);\n w.u32be(len);\n }\n}\n\nexport function mpArrayHeader(w: ByteWriter, len: number) {\n if (len < 16) w.u8(0x90 | len);\n else if (len <= 0xffff) {\n w.u8(0xdc);\n w.u16be(len);\n } else {\n w.u8(0xdd);\n w.u32be(len);\n }\n}\n\nexport function mpMapHeader(w: ByteWriter, len: number) {\n if (len < 16) w.u8(0x80 | len);\n else if (len <= 0xffff) {\n w.u8(0xde);\n w.u16be(len);\n } else {\n w.u8(0xdf);\n w.u32be(len);\n }\n}\n\n// ---- readers ----\n\nconst fromBigint = (v: bigint): number => {\n if (\n v > BigInt(Number.MAX_SAFE_INTEGER) ||\n v < BigInt(Number.MIN_SAFE_INTEGER)\n )\n throw new RangeError(\n `brdb: 64-bit value ${v} exceeds JS safe integer range`\n );\n return Number(v);\n};\n\nconst badMarker = (marker: number, expected: string): never => {\n throw new TypeError(\n `brdb: unexpected marker 0x${marker.toString(16)} for ${expected}`\n );\n};\n\nconst isFixPos = (m: number) => (m & 0x80) === 0;\nconst isFixNeg = (m: number) => (m & 0xe0) === 0xe0;\n\n// Accepts every int marker, signed and unsigned.\nexport function rdInt(r: ByteReader): number {\n const m = r.u8();\n if (isFixPos(m)) return m;\n if (isFixNeg(m)) return m - 256;\n switch (m) {\n case 0xcc:\n return r.u8();\n case 0xcd:\n return r.u16be();\n case 0xce:\n return r.u32be();\n case 0xcf:\n return fromBigint(r.u64be());\n case 0xd0:\n return r.i8();\n case 0xd1:\n return r.i16be();\n case 0xd2:\n return r.i32be();\n case 0xd3:\n return fromBigint(r.i64be());\n default:\n return badMarker(m, 'integer');\n }\n}\n\n// Negative fixint bytes are unsigned 224..255 in this format (256+v).\n// The reference encoder sign-extends an explicit negative I8 marker into\n// a huge u64; that only occurs on malformed data, so we throw instead\n// (documented deviation).\nexport function rdUint(r: ByteReader): number {\n const m = r.u8();\n if (isFixPos(m)) return m;\n if (isFixNeg(m)) return m; // 0xe0..0xff read back as 224..255\n switch (m) {\n case 0xcc:\n return r.u8();\n case 0xcd:\n return r.u16be();\n case 0xce:\n return r.u32be();\n case 0xcf:\n return fromBigint(r.u64be());\n case 0xd0: {\n const v = r.i8();\n if (v < 0)\n throw new RangeError(`brdb: negative i8 marker for uint field`);\n return v;\n }\n default:\n return badMarker(m, 'uint');\n }\n}\n\n// f32 accepts FixPos/FixNeg/I8/I16/U8/U16/F32 only.\nexport function rdF32(r: ByteReader): number {\n const m = r.u8();\n if (isFixPos(m)) return m;\n if (isFixNeg(m)) return m - 256;\n switch (m) {\n case 0xcc:\n return r.u8();\n case 0xcd:\n return r.u16be();\n case 0xd0:\n return r.i8();\n case 0xd1:\n return r.i16be();\n case 0xca:\n return r.f32be();\n default:\n return badMarker(m, 'float32');\n }\n}\n\n// f64 additionally accepts I32/U32/F32/F64.\nexport function rdF64(r: ByteReader): number {\n const m = r.u8();\n if (isFixPos(m)) return m;\n if (isFixNeg(m)) return m - 256;\n switch (m) {\n case 0xcc:\n return r.u8();\n case 0xcd:\n return r.u16be();\n case 0xce:\n return r.u32be();\n case 0xd0:\n return r.i8();\n case 0xd1:\n return r.i16be();\n case 0xd2:\n return r.i32be();\n case 0xca:\n return r.f32be();\n case 0xcb:\n return r.f64be();\n default:\n return badMarker(m, 'float64');\n }\n}\n\nexport function rdBool(r: ByteReader): boolean {\n const m = r.u8();\n if (m === 0xc3) return true;\n if (m === 0xc2) return false;\n return badMarker(m, 'bool');\n}\n\nexport function rdStr(r: ByteReader): string {\n const m = r.u8();\n let len: number;\n if ((m & 0xe0) === 0xa0) len = m & 0x1f;\n else if (m === 0xd9) len = r.u8();\n else if (m === 0xda) len = r.u16be();\n else if (m === 0xdb) len = r.u32be();\n else return badMarker(m, 'str');\n return utf8Decoder.decode(r.bytes(len));\n}\n\nexport function rdBinLen(r: ByteReader): number {\n const m = r.u8();\n if (m === 0xc4) return r.u8();\n if (m === 0xc5) return r.u16be();\n if (m === 0xc6) return r.u32be();\n return badMarker(m, 'bin');\n}\n\nexport function rdArrayLen(r: ByteReader): number {\n const m = r.u8();\n if ((m & 0xf0) === 0x90) return m & 0x0f;\n if (m === 0xdc) return r.u16be();\n if (m === 0xdd) return r.u32be();\n return badMarker(m, 'array');\n}\n\nexport function rdMapLen(r: ByteReader): number {\n const m = r.u8();\n if ((m & 0xf0) === 0x80) return m & 0x0f;\n if (m === 0xde) return r.u16be();\n if (m === 0xdf) return r.u32be();\n return badMarker(m, 'map');\n}\n\nexport function rdNil(r: ByteReader): void {\n const m = r.u8();\n if (m !== 0xc0) badMarker(m, 'nil');\n}\n","// Parser for the plaintext .schema sources: enum, variant, and struct\n// declarations. Enum keys are qualified (\"EFoo::Bar\"); enum values accept\n// decimal, 0b binary, and 0x hex literals with optional underscores.\nimport type { PropDesc } from './schema';\n\nexport interface SchemaData {\n enums: Map<string, Map<string, number>>;\n variants: Map<string, string[]>;\n structs: Map<string, Map<string, PropDesc>>;\n}\n\nconst stripComments = (text: string): string =>\n text\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, ' ')\n .replace(/\\/\\/[^\\n]*/g, ' ')\n .replace(/#[^\\n]*/g, ' ');\n\n// Identifier, optionally qualified: EBRColorSpace::Linear\nconst IDENT = String.raw`[A-Za-z_]\\w*(?:::\\w+)*`;\n\nfunction parseIntLiteral(raw: string): number {\n const t = raw.replace(/_/g, '');\n if (t.startsWith('0b')) return parseInt(t.slice(2), 2);\n if (t.startsWith('0x')) return parseInt(t.slice(2), 16);\n return parseInt(t, 10);\n}\n\nexport function parseSchemaText(text: string): SchemaData {\n const src = stripComments(text);\n const enums = new Map<string, Map<string, number>>();\n const variants = new Map<string, string[]>();\n const structs = new Map<string, Map<string, PropDesc>>();\n const declRe = /\\b(enum|variant|struct)\\s+([A-Za-z0-9_]+)\\s*\\{([^{}]*)\\}/g;\n const enumEntryRe = new RegExp(\n String.raw`^(${IDENT})\\s*=\\s*(-?\\d+(?:_\\d+)*|0b[01]+(?:_[01]+)*|0x[0-9a-fA-F]+(?:_[0-9a-fA-F]+)*)$`\n );\n const memberRe = new RegExp(String.raw`^${IDENT}$`);\n const propRe = new RegExp(\n String.raw`^(\\w+)\\s*:\\s*(\\w+)\\s*(\\[\\s*(flat)?\\s*\\])?$`\n );\n\n let lastEnd = 0;\n let match: RegExpExecArray | null;\n while ((match = declRe.exec(src))) {\n if (src.slice(lastEnd, match.index).trim() !== '')\n throw new Error(`brdb: unexpected schema text before ${match[2]}`);\n lastEnd = declRe.lastIndex;\n const [, keyword, name, body] = match;\n const items = body\n .split(',')\n .map(s => s.trim())\n .filter(s => s !== '');\n\n if (keyword === 'enum') {\n const values = new Map<string, number>();\n for (const item of items) {\n const m = enumEntryRe.exec(item);\n if (!m)\n throw new Error(`brdb: cannot parse enum entry '${item}' in ${name}`);\n values.set(m[1], parseIntLiteral(m[2]));\n }\n enums.set(name, values);\n } else if (keyword === 'variant') {\n const members: string[] = [];\n for (const item of items) {\n if (!memberRe.test(item))\n throw new Error(\n `brdb: cannot parse variant member '${item}' in ${name}`\n );\n members.push(item);\n }\n variants.set(name, members);\n } else {\n const props = new Map<string, PropDesc>();\n for (const item of items) {\n const m = propRe.exec(item);\n if (!m)\n throw new Error(\n `brdb: cannot parse struct property '${item}' in ${name}`\n );\n const [, prop, ty, isArray, isFlat] = m;\n props.set(\n prop,\n isArray\n ? { kind: isFlat ? 'flatarray' : 'array', type: ty }\n : { kind: 'type', type: ty }\n );\n }\n structs.set(name, props);\n }\n }\n if (src.slice(lastEnd).trim() !== '')\n throw new Error('brdb: trailing unparsed schema text');\n return { enums, variants, structs };\n}\n","// GENERATED by scripts/syncBrdbData.mjs — do not edit by hand.\n// Regenerate with: just sync-brdb-data\n\nimport type { SchemaSource } from './schema';\n\nexport type EmbeddedSchemaName =\n | 'BRSavedGlobalDataSoA'\n | 'BRSavedOwnerTableSoA'\n | 'BRSavedBrickChunkIndexSoA'\n | 'BRSavedBrickChunkSoA'\n | 'BRSavedWireChunkSoA'\n | 'BRSavedComponentChunkSoA'\n | 'BRSavedComponentChunkSoA_max'\n | 'BRSavedEntityChunkIndexSoA'\n | 'BRSavedEntityChunkSoA';\n\nexport const SCHEMAS: Record<EmbeddedSchemaName, SchemaSource> = {\n BRSavedGlobalDataSoA: {\n enums: {},\n variants: {},\n structs: {\n BRSavedPrimaryAssetId: {\n PrimaryAssetType: 'str',\n PrimaryAssetName: 'str',\n },\n BRSavedGlobalDataSoA: {\n EntityTypeNames: ['str'],\n EntityDataClassNames: ['str'],\n BasicBrickAssetNames: ['str'],\n ProceduralBrickAssetNames: ['str'],\n MaterialAssetNames: ['str'],\n ComponentTypeNames: ['str'],\n ComponentDataStructNames: ['str'],\n ComponentWirePortNames: ['str'],\n ExternalAssetReferences: ['BRSavedPrimaryAssetId'],\n GlobalGridEntityTypeIndex: 'i32',\n },\n },\n },\n BRSavedOwnerTableSoA: {\n enums: {},\n variants: {},\n structs: {\n BRGuid: {\n A: 'u32',\n B: 'u32',\n C: 'u32',\n D: 'u32',\n },\n BRSavedOwnerTableSoA: {\n UserIds: ['BRGuid', null],\n UserNames: ['str'],\n DisplayNames: ['str'],\n EntityCounts: ['u32'],\n BrickCounts: ['u32'],\n ComponentCounts: ['u32'],\n WireCounts: ['u32'],\n },\n },\n },\n BRSavedBrickChunkIndexSoA: {\n enums: {},\n variants: {},\n structs: {\n BRSavedChunk3DIndex: {\n X: 'i16',\n Y: 'i16',\n Z: 'i16',\n },\n IntVector: {\n X: 'i32',\n Y: 'i32',\n Z: 'i32',\n },\n BRSavedBrickChunkIndexSoA: {\n Chunk3DIndices: ['BRSavedChunk3DIndex'],\n ChunkOffsets: ['IntVector'],\n ChunkSizes: ['i32'],\n NumBricks: ['u32'],\n NumComponents: ['u32'],\n NumWires: ['u32'],\n },\n },\n },\n BRSavedBrickChunkSoA: {\n enums: {},\n variants: {},\n structs: {\n BRSavedBitFlags: {\n Flags: ['u8', null],\n },\n BRSavedBrickColor: {\n R: 'u8',\n G: 'u8',\n B: 'u8',\n A: 'u8',\n },\n BRSavedBrickSize: {\n X: 'u16',\n Y: 'u16',\n Z: 'u16',\n },\n BRSavedBrickSizeCounter: {\n AssetIndex: 'u32',\n NumSizes: 'u32',\n },\n BRSavedRelativeBrickPosition: {\n X: 'i16',\n Y: 'i16',\n Z: 'i16',\n },\n BRSavedBrickChunkSoA: {\n ProceduralBrickStartingIndex: 'u32',\n BrickSizeCounters: ['BRSavedBrickSizeCounter'],\n BrickSizes: ['BRSavedBrickSize'],\n BrickTypeIndices: ['u32'],\n OwnerIndices: ['u32'],\n OriginalOwnerIndices: ['u32'],\n RelativePositions: ['BRSavedRelativeBrickPosition', null],\n Orientations: ['u8', null],\n CollisionFlags_Player: 'BRSavedBitFlags',\n CollisionFlags_Player1: 'BRSavedBitFlags',\n CollisionFlags_Player2: 'BRSavedBitFlags',\n CollisionFlags_Player3: 'BRSavedBitFlags',\n CollisionFlags_Weapon: 'BRSavedBitFlags',\n CollisionFlags_Interaction: 'BRSavedBitFlags',\n CollisionFlags_Physics: 'BRSavedBitFlags',\n VisibilityFlags: 'BRSavedBitFlags',\n MaterialIndices: ['u8', null],\n ColorsAndAlphas: ['BRSavedBrickColor', null],\n bColorsAreLinear: 'bool',\n },\n },\n },\n BRSavedWireChunkSoA: {\n enums: {},\n variants: {},\n structs: {\n BRSavedBitFlags: {\n Flags: ['u8', null],\n },\n BRSavedChunk3DIndex: {\n X: 'i16',\n Y: 'i16',\n Z: 'i16',\n },\n BRSavedLocalWirePortSource: {\n BrickIndexInChunk: 'u32',\n ComponentTypeIndex: 'u16',\n PortIndex: 'u16',\n },\n BRSavedWirePortTarget: {\n BrickIndexInChunk: 'u32',\n ComponentTypeIndex: 'u16',\n PortIndex: 'u16',\n },\n BRSavedRemoteWirePortSource: {\n GridPersistentIndex: 'u32',\n ChunkIndex: 'BRSavedChunk3DIndex',\n BrickIndexInChunk: 'u32',\n ComponentTypeIndex: 'u16',\n PortIndex: 'u16',\n },\n BRSavedWireChunkSoA: {\n RemoteWireSources: ['BRSavedRemoteWirePortSource'],\n LocalWireSources: ['BRSavedLocalWirePortSource'],\n RemoteWireTargets: ['BRSavedWirePortTarget'],\n LocalWireTargets: ['BRSavedWirePortTarget'],\n PendingPropagationFlags: 'BRSavedBitFlags',\n },\n },\n },\n BRSavedComponentChunkSoA: {\n enums: {},\n variants: {},\n structs: {\n BRSavedBrickComponentTypeCounter: {\n TypeIndex: 'u32',\n NumInstances: 'u32',\n },\n Quat4f: {\n X: 'f32',\n Y: 'f32',\n Z: 'f32',\n W: 'f32',\n },\n Vector3f: {\n X: 'f32',\n Y: 'f32',\n Z: 'f32',\n },\n BRSavedComponentChunkSoA: {\n ComponentTypeCounters: ['BRSavedBrickComponentTypeCounter'],\n ComponentBrickIndices: ['u32'],\n JointBrickIndices: ['u32'],\n JointEntityReferences: ['u32'],\n JointInitialRelativeOffsets: ['Vector3f', null],\n JointInitialRelativeRotations: ['Quat4f', null],\n MicrochipBrickIndices: ['u32'],\n MicrochipBrickGridReferences: ['u32'],\n },\n },\n },\n BRSavedComponentChunkSoA_max: {\n enums: {\n EBRColorSpace: {\n 'EBRColorSpace::Linear': 0,\n 'EBRColorSpace::Srgb': 1,\n 'EBRColorSpace::Oklab': 2,\n 'EBRColorSpace::Hsv': 3,\n 'EBRColorSpace::EBRColorSpace_MAX': 4,\n },\n EBRDisplayTextEasing: {\n 'EBRDisplayTextEasing::Linear': 0,\n 'EBRDisplayTextEasing::EaseIn': 1,\n 'EBRDisplayTextEasing::EaseOut': 2,\n 'EBRDisplayTextEasing::EaseInOut': 3,\n 'EBRDisplayTextEasing::EBRDisplayTextEasing_MAX': 4,\n },\n EBRDisplayTextJustification: {\n 'EBRDisplayTextJustification::Left': 0,\n 'EBRDisplayTextJustification::Center': 1,\n 'EBRDisplayTextJustification::Right': 2,\n 'EBRDisplayTextJustification::EBRDisplayTextJustification_MAX': 3,\n },\n EBREasingDirection: {\n 'EBREasingDirection::In': 0,\n 'EBREasingDirection::Out': 1,\n 'EBREasingDirection::InOut': 2,\n 'EBREasingDirection::EBREasingDirection_MAX': 3,\n },\n EBREasingFunction: {\n 'EBREasingFunction::Linear': 0,\n 'EBREasingFunction::Sine': 1,\n 'EBREasingFunction::Quad': 2,\n 'EBREasingFunction::Cubic': 3,\n 'EBREasingFunction::Quart': 4,\n 'EBREasingFunction::Quint': 5,\n 'EBREasingFunction::Expo': 6,\n 'EBREasingFunction::Circ': 7,\n 'EBREasingFunction::Back': 8,\n 'EBREasingFunction::Elastic': 9,\n 'EBREasingFunction::Bounce': 10,\n 'EBREasingFunction::EBREasingFunction_MAX': 11,\n },\n EBrickAxis: {\n 'EBrickAxis::X': 0,\n 'EBrickAxis::Y': 1,\n 'EBrickAxis::Z': 2,\n 'EBrickAxis::MAX': 3,\n },\n EBrickDirection: {\n 'EBrickDirection::X_Positive': 0,\n 'EBrickDirection::X_Negative': 1,\n 'EBrickDirection::Y_Positive': 2,\n 'EBrickDirection::Y_Negative': 3,\n 'EBrickDirection::Z_Positive': 4,\n 'EBrickDirection::Z_Negative': 5,\n 'EBrickDirection::MAX': 6,\n },\n EBrickMaterial: {\n 'EBrickMaterial::Plastic': 0,\n 'EBrickMaterial::Glass': 1,\n 'EBrickMaterial::TranslucentPlastic': 2,\n 'EBrickMaterial::Glow': 3,\n 'EBrickMaterial::Metal': 4,\n 'EBrickMaterial::Hologram': 5,\n 'EBrickMaterial::EBrickMaterial_MAX': 6,\n },\n EBrickRigidJointInterpMode: {\n 'EBrickRigidJointInterpMode::Snap': 0,\n 'EBrickRigidJointInterpMode::Linear': 1,\n 'EBrickRigidJointInterpMode::Smooth': 2,\n 'EBrickRigidJointInterpMode::EBrickRigidJointInterpMode_MAX': 3,\n },\n EBRInventoryEntryPlanType: {\n 'EBRInventoryEntryPlanType::Nothing': 0,\n 'EBRInventoryEntryPlanType::Brick': 1,\n 'EBRInventoryEntryPlanType::Entity': 2,\n 'EBRInventoryEntryPlanType::Item': 3,\n 'EBRInventoryEntryPlanType::EBRInventoryEntryPlanType_MAX': 4,\n },\n EBRPawnCollisionChannel: {\n 'EBRPawnCollisionChannel::Channel1': 0,\n 'EBRPawnCollisionChannel::Channel2': 1,\n 'EBRPawnCollisionChannel::Channel3': 2,\n 'EBRPawnCollisionChannel::Channel4': 3,\n 'EBRPawnCollisionChannel::EBRPawnCollisionChannel_MAX': 4,\n },\n EBRTextFacing: {\n 'EBRTextFacing::None': 0,\n 'EBRTextFacing::Full': 1,\n 'EBRTextFacing::InPlane': 2,\n 'EBRTextFacing::EBRTextFacing_MAX': 3,\n },\n EBRTextMaterial: {\n 'EBRTextMaterial::Unlit': 0,\n 'EBRTextMaterial::Graffiti': 1,\n 'EBRTextMaterial::Plastic': 2,\n 'EBRTextMaterial::Metallic': 3,\n 'EBRTextMaterial::Glow': 4,\n 'EBRTextMaterial::TranslucentPlastic': 5,\n 'EBRTextMaterial::Glass': 6,\n 'EBRTextMaterial::EBRTextMaterial_MAX': 7,\n },\n EBRTextOutline: {\n 'EBRTextOutline::None': 0,\n 'EBRTextOutline::Inlined': 1,\n 'EBRTextOutline::Outlined': 2,\n 'EBRTextOutline::HollowInlined': 3,\n 'EBRTextOutline::HollowOutlined': 4,\n 'EBRTextOutline::EBRTextOutline_MAX': 5,\n },\n EBRTextShading: {\n 'EBRTextShading::None': 0,\n 'EBRTextShading::Chamfer': 1,\n 'EBRTextShading::Fillet': 2,\n 'EBRTextShading::DoubleChamfer': 3,\n 'EBRTextShading::DoubleFillet': 4,\n 'EBRTextShading::Rounded': 5,\n 'EBRTextShading::EBRTextShading_MAX': 6,\n },\n EBRTextTypeface: {\n 'EBRTextTypeface::Regular': 0,\n 'EBRTextTypeface::Bold': 1,\n 'EBRTextTypeface::Italic': 2,\n 'EBRTextTypeface::BoldItalic': 3,\n 'EBRTextTypeface::EBRTextTypeface_MAX': 4,\n },\n EProjectileSpawnLocation: {\n 'EProjectileSpawnLocation::FaceCenter': 0,\n 'EProjectileSpawnLocation::RandomPointInFace': 1,\n 'EProjectileSpawnLocation::EProjectileSpawnLocation_MAX': 2,\n },\n },\n variants: {\n WireGraphArrayVariant: [\n 'WireGraphDoubleArray',\n 'WireGraphInt64Array',\n 'WireGraphBoolArray',\n 'WireGraphObjectArray',\n 'WireGraphVectorArray',\n 'WireGraphRotatorArray',\n 'WireGraphQuatArray',\n 'WireGraphStringArray',\n 'WireGraphLinearColorArray',\n 'WireGraphEnumArrayWrapper',\n ],\n WireGraphEnumArrayVariant: [\n 'WireGraphEnumArray_EBrickDirection',\n 'WireGraphEnumArray_EBrickAxis',\n 'WireGraphEnumArray_EBRPawnCollisionChannel',\n 'WireGraphEnumArray_EBRTextShading',\n 'WireGraphEnumArray_EBRTextOutline',\n 'WireGraphEnumArray_EBRTextMaterial',\n 'WireGraphEnumArray_EBRTextTypeface',\n 'WireGraphEnumArray_EBRTextFacing',\n 'WireGraphEnumArray_EBREasingFunction',\n 'WireGraphEnumArray_EBREasingDirection',\n 'WireGraphEnumArray_EBRColorSpace',\n 'WireGraphEnumArray_EProjectileSpawnLocation',\n 'WireGraphEnumArray_EBrickRigidJointInterpMode',\n 'WireGraphEnumArray_EBRDisplayTextJustification',\n 'WireGraphEnumArray_EBRDisplayTextEasing',\n 'WireGraphEnumArray_EBrickMaterial',\n ],\n WireGraphEnumVariant: [\n 'EBrickDirection',\n 'EBrickAxis',\n 'EBrickMaterial',\n 'EBRPawnCollisionChannel',\n 'EBRTextShading',\n 'EBRTextOutline',\n 'EBRTextMaterial',\n 'EBRTextTypeface',\n 'EBRTextFacing',\n 'EBREasingFunction',\n 'EBREasingDirection',\n 'EBRColorSpace',\n 'EProjectileSpawnLocation',\n 'EBrickRigidJointInterpMode',\n 'EBRDisplayTextJustification',\n 'EBRDisplayTextEasing',\n ],\n WireGraphPrimMathVariant: [\n 'f64',\n 'i64',\n 'Vector',\n 'Rotator',\n 'Quat',\n 'LinearColor',\n ],\n WireGraphVariant: [\n 'f64',\n 'i64',\n 'bool',\n 'weak_object',\n 'WireGraphExec',\n 'Vector',\n 'Rotator',\n 'Quat',\n 'str',\n 'LinearColor',\n 'WireGraphEnumWrapper',\n ],\n },\n structs: {\n BrickComponentData_AudioEmitter: {\n bEnabled: 'bool',\n AudioDescriptor: 'object',\n VolumeMultiplier: 'f32',\n PitchMultiplier: 'f32',\n InnerRadius: 'f32',\n MaxDistance: 'f32',\n bSpatialization: 'bool',\n FocusAzimuth: 'f32',\n NonFocusAzimuth: 'f32',\n NonFocusVolumeAttenuation: 'f32',\n },\n BrickComponentData_Bearing: {\n bLimitAngle: 'bool',\n LimitAngle: 'f32',\n bAnglesArePercentages: 'bool',\n bReversed: 'bool',\n Damping: 'f32',\n },\n BrickComponentData_Button: {\n PressSound: 'object',\n ReleaseSound: 'object',\n bAllowNearbyInteraction: 'bool',\n bHiddenInteraction: 'bool',\n PromptCustomLabel: 'str',\n },\n BrickComponentData_CheckPoint: {\n bRotatePlayerGravityOnSpawn: 'bool',\n },\n BrickComponentData_Damage: {\n Damage: 'f32',\n RepeatDelay: 'f32',\n Message: 'str',\n ConsoleTag: 'str',\n },\n BrickComponentData_Interact: {\n InteractSound: 'object',\n Message: 'str',\n ConsoleTag: 'str',\n bAllowNearbyInteraction: 'bool',\n bHiddenInteraction: 'bool',\n PromptCustomLabel: 'str',\n },\n BrickComponentData_Internal_AttachedZone: {\n ZoneStartDistance: 'i32',\n ZoneEndDistance: 'i32',\n bIsBuildingZone: 'bool',\n bIsLooseZone: 'bool',\n bIsShareZone: 'bool',\n bDetectPlayers: 'bool',\n bDetectPlayers1: 'bool',\n bDetectPlayers2: 'bool',\n bDetectPlayers3: 'bool',\n bDetectEntities: 'bool',\n bDetectProjectiles: 'bool',\n TagFilter: 'str',\n },\n BrickComponentData_Internal_CharacterZoneEvent: {\n bCollisionEnabled_Player: 'bool',\n bCollisionEnabled_Player1: 'bool',\n bCollisionEnabled_Player2: 'bool',\n bCollisionEnabled_Player3: 'bool',\n },\n BrickComponentData_Internal_EntityZoneEvent: {},\n BrickComponentData_Internal_InputSplitter_V2: {},\n BrickComponentData_Internal_Microchip: {},\n BrickComponentData_Internal_MicrochipInput: {\n PortLabel: 'str',\n },\n BrickComponentData_Internal_MicrochipOutput: {\n PortLabel: 'str',\n },\n BrickComponentData_Internal_ProjectileZoneEvent: {},\n BrickComponentData_Internal_ReadBrickGrid: {},\n BrickComponentData_Internal_ZoneEvent: {},\n BrickComponentData_Motor: {\n bEnabled: 'bool',\n Speed: 'f32',\n Power: 'f32',\n bLimitAngle: 'bool',\n LimitAngle: 'f32',\n bAnglesArePercentages: 'bool',\n bReversed: 'bool',\n Damping: 'f32',\n },\n BrickComponentData_MotorSlider: {\n bEnabled: 'bool',\n Speed: 'f32',\n Power: 'f32',\n bPositionsArePercentages: 'bool',\n bReversed: 'bool',\n Damping: 'f32',\n },\n BrickComponentData_OneShotAudioEmitter: {\n AudioDescriptor: 'object',\n VolumeMultiplier: 'f32',\n PitchMultiplier: 'f32',\n InnerRadius: 'f32',\n MaxDistance: 'f32',\n bSpatialization: 'bool',\n bEnableRepeat: 'bool',\n RepeatTime: 'f32',\n RepeatVariance: 'f32',\n RepeatCount: 'i32',\n },\n BrickComponentData_ProjectileSpawner: {\n ProjectileClass: 'class',\n FireSound: 'object',\n Direction: 'EBrickDirection',\n SpawnLocation: 'EProjectileSpawnLocation',\n SpawnMargin: 'f32',\n bEnabled: 'bool',\n NumberOfShots: 'i32',\n SpreadConeAngle: 'f32',\n bSpreadBiasedTowardsCenter: 'bool',\n FireRate: 'f32',\n DamageMultiplier: 'f32',\n SpeedMultiplier: 'f32',\n ScaleMultiplier: 'f32',\n },\n BrickComponentData_Rerouter: {},\n BrickComponentData_RigidBearing: {\n TargetAngle: 'f32',\n bAnglesArePercentages: 'bool',\n bReversed: 'bool',\n InterpMode: 'EBrickRigidJointInterpMode',\n SmoothTime: 'f32',\n TopSpeed: 'f32',\n },\n BrickComponentData_RigidSlider: {\n TargetPosition: 'f32',\n bPositionsArePercentages: 'bool',\n bReversed: 'bool',\n InterpMode: 'EBrickRigidJointInterpMode',\n SmoothTime: 'f32',\n TopSpeed: 'f32',\n },\n BrickComponentData_Servo: {\n bEnabled: 'bool',\n TargetAngle: 'f32',\n Power: 'f32',\n ActiveDamping: 'f32',\n ForceLimit: 'f32',\n bLimitAngle: 'bool',\n LimitAngle: 'f32',\n bAnglesArePercentages: 'bool',\n bReversed: 'bool',\n Damping: 'f32',\n },\n BrickComponentData_ServoSlider: {\n bEnabled: 'bool',\n TargetPosition: 'f32',\n Power: 'f32',\n TopSpeed: 'f32',\n Exponent: 'f32',\n bPositionsArePercentages: 'bool',\n bReversed: 'bool',\n Damping: 'f32',\n },\n BrickComponentData_Slider: {\n bPositionsArePercentages: 'bool',\n bReversed: 'bool',\n Damping: 'f32',\n },\n BrickComponentData_SpawnPoint: {\n bRotatePlayerGravityOnSpawn: 'bool',\n bEnable: 'bool',\n },\n BrickComponentData_Switch: {\n bEnabled: 'bool',\n InteractSound: 'object',\n bAllowNearbyInteraction: 'bool',\n bHiddenInteraction: 'bool',\n PromptCustomLabel: 'str',\n },\n BrickComponentData_Target: {\n OnTime: 'f32',\n },\n BrickComponentData_TeleportDestination: {},\n BrickComponentData_Thruster: {\n bEnabled: 'bool',\n Force: 'f32',\n Throttle: 'f32',\n Pitch: 'f32',\n Yaw: 'f32',\n bSpawnLight: 'bool',\n },\n BrickComponentData_Touch: {\n BeginTouchSound: 'object',\n EndTouchSound: 'object',\n bCollisionEnabled_Player: 'bool',\n bCollisionEnabled_Player1: 'bool',\n bCollisionEnabled_Player2: 'bool',\n bCollisionEnabled_Player3: 'bool',\n },\n BrickComponentData_WireGraph_AudioReference: {\n Asset: 'object',\n },\n BrickComponentData_WireGraph_BrickAssetReference: {\n Asset: 'object',\n },\n BrickComponentData_WireGraph_DeltaTime: {},\n BrickComponentData_WireGraph_EntityTypeReference: {\n Asset: 'class',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Average: {\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Base: {},\n BrickComponentData_WireGraph_Exec_ArrayVar_DualRef: {},\n BrickComponentData_WireGraph_Exec_ArrayVar_ElementOp: {\n Index: 'i64',\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Find: {\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Get: {\n Index: 'i64',\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_GetLength: {},\n BrickComponentData_WireGraph_Exec_ArrayVar_Insert: {\n Index: 'i64',\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_MinMax: {\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Pop: {\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Push: {\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_RemoveAtIndex: {\n Index: 'i64',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Resize: {\n Size: 'i64',\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Slice: {\n Start: 'i64',\n Count: 'i64',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Sort: {\n bDescending: 'bool',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Sum: {\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Swap: {\n IndexA: 'i64',\n IndexB: 'i64',\n },\n BrickComponentData_WireGraph_Exec_Character_AddInventoryEntity: {},\n BrickComponentData_WireGraph_Exec_Character_AddInventoryItem: {},\n BrickComponentData_WireGraph_Exec_Character_GetAim: {},\n BrickComponentData_WireGraph_Exec_Character_GetDamage: {},\n BrickComponentData_WireGraph_Exec_Character_GetFromController: {},\n BrickComponentData_WireGraph_Exec_Character_IncDamage: {\n Amount: 'f64',\n },\n BrickComponentData_WireGraph_Exec_Character_SetDamage: {\n Damage: 'f64',\n },\n BrickComponentData_WireGraph_Exec_Character_SetInventoryEntity: {\n Slot: 'i32',\n },\n BrickComponentData_WireGraph_Exec_Character_SetInventoryItem: {\n Slot: 'i32',\n },\n BrickComponentData_WireGraph_Exec_Character_SetTempPermission: {\n PermissionTagStr: 'str',\n bPermissionEnable: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Character_ShowHint: {\n HintTitle: 'str',\n HintText: 'str',\n },\n BrickComponentData_WireGraph_Exec_ChatCommand: {\n CommandName: 'str',\n HelpText: 'str',\n },\n BrickComponentData_WireGraph_Exec_Controller_GetDisplayName: {},\n BrickComponentData_WireGraph_Exec_Controller_GetFromEntity: {},\n BrickComponentData_WireGraph_Exec_Controller_GetUserId: {},\n BrickComponentData_WireGraph_Exec_Controller_GetUserName: {},\n BrickComponentData_WireGraph_Exec_Controller_HasPermission: {\n PermissionName: 'str',\n },\n BrickComponentData_WireGraph_Exec_Controller_HasRole: {\n RoleName: 'str',\n },\n BrickComponentData_WireGraph_Exec_Controller_IsTrustedByBrickOwner: {},\n BrickComponentData_WireGraph_Exec_Controller_SetCanRespawn: {\n bCanRespawn: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Controller_ShowChatMessage: {\n Message: 'str',\n },\n BrickComponentData_WireGraph_Exec_Controller_ShowStatusMessage: {},\n BrickComponentData_WireGraph_Exec_Cycle: {\n Count: 'i64',\n Value: 'i64',\n },\n BrickComponentData_WireGraph_Exec_Entity_GetAngularVelocity: {},\n BrickComponentData_WireGraph_Exec_Entity_GetLinearVelocity: {},\n BrickComponentData_WireGraph_Exec_Entity_GetLocation: {},\n BrickComponentData_WireGraph_Exec_Entity_GetLocationRotation: {},\n BrickComponentData_WireGraph_Exec_Entity_GetRotation: {},\n BrickComponentData_WireGraph_Exec_Entity_GetTag: {},\n BrickComponentData_WireGraph_Exec_Entity_GetVelocity: {},\n BrickComponentData_WireGraph_Exec_Entity_PlayAudioAt: {\n AudioDescriptor: 'object',\n VolumeMultiplier: 'f32',\n PitchMultiplier: 'f32',\n InnerRadius: 'f32',\n MaxDistance: 'f32',\n bSpatialization: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetFrozen: {\n bFrozen: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetTag: {\n Tag: 'str',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_BroadcastChatMessage: {\n Message: 'str',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_BroadcastStatusMessage: {\n Message: 'str',\n bFlashIfUnchanged: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_FillArrayFromTeamMembers: {},\n BrickComponentData_WireGraph_Exec_Gamemode_GetCurrentRound: {},\n BrickComponentData_WireGraph_Exec_Gamemode_GetLeaderboardValue: {\n Key: 'str',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_GetTeam: {},\n BrickComponentData_WireGraph_Exec_Gamemode_GetTeamByName: {\n TeamName: 'str',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_GetTeamLeaderboardValue: {\n Key: 'str',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_GetTeamName: {},\n BrickComponentData_WireGraph_Exec_Gamemode_LeaderboardValue: {\n Key: 'str',\n Value: 'i64',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_PlayerWins: {\n bTeamWinsInstead: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_SetTeam: {\n bPinPlayerToTeam: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_SetTeamPinned: {\n bPinned: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_TeamLeaderboardValue: {\n Key: 'str',\n Value: 'i64',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_TeamWins: {},\n BrickComponentData_WireGraph_Exec_PlayGlobalAudio: {\n AudioDescriptor: 'object',\n VolumeMultiplier: 'f32',\n PitchMultiplier: 'f32',\n },\n BrickComponentData_WireGraph_Exec_PrintToConsole: {\n Text: 'str',\n },\n BrickComponentData_WireGraph_Exec_Random: {\n Min: 'WireGraphPrimMathVariant',\n Max: 'WireGraphPrimMathVariant',\n },\n BrickComponentData_WireGraph_Exec_Toggle: {\n Value: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Var_EditOrGet: {\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_Var_Get: {\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_ExecBranch: {\n bCond: 'bool',\n },\n BrickComponentData_WireGraph_ExecUnion: {},\n BrickComponentData_WireGraph_Expr_Bool_Bool: {\n bInput: 'bool',\n },\n BrickComponentData_WireGraph_Expr_BoolBool_Bool: {\n bInputA: 'bool',\n bInputB: 'bool',\n },\n BrickComponentData_WireGraph_Expr_Compare: {\n InputA: 'WireGraphVariant',\n InputB: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Expr_Convert: {\n TargetType: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Expr_EdgeDetector: {\n Input: 'f64',\n bPulseOnRisingEdge: 'bool',\n bPulseOnFallingEdge: 'bool',\n },\n BrickComponentData_WireGraph_Expr_Float_Float: {\n Input: 'f64',\n },\n BrickComponentData_WireGraph_Expr_Int_Int: {\n Input: 'i64',\n },\n BrickComponentData_WireGraph_Expr_IntInt_Int: {\n InputA: 'i64',\n InputB: 'i64',\n },\n BrickComponentData_WireGraph_Expr_MakeColor: {\n R: 'f64',\n G: 'f64',\n B: 'f64',\n A: 'f64',\n },\n BrickComponentData_WireGraph_Expr_MakeColorHex: {\n Hex: 'str',\n },\n BrickComponentData_WireGraph_Expr_MakeColorSRGB: {\n R: 'i64',\n G: 'i64',\n B: 'i64',\n A: 'i64',\n },\n BrickComponentData_WireGraph_Expr_MakeQuaternion: {\n X: 'f64',\n Y: 'f64',\n Z: 'f64',\n W: 'f64',\n },\n BrickComponentData_WireGraph_Expr_MakeRotation: {\n Pitch: 'f64',\n Yaw: 'f64',\n Roll: 'f64',\n },\n BrickComponentData_WireGraph_Expr_MakeVector: {\n X: 'f64',\n Y: 'f64',\n Z: 'f64',\n },\n BrickComponentData_WireGraph_Expr_MathAtan2: {\n Y: 'f64',\n X: 'f64',\n },\n BrickComponentData_WireGraph_Expr_MathBlend: {\n Blend: 'f64',\n bClampAlpha: 'bool',\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n BrickComponentData_WireGraph_Expr_MathClamp: {\n Min: 'WireGraphPrimMathVariant',\n Max: 'WireGraphPrimMathVariant',\n Input: 'WireGraphPrimMathVariant',\n },\n BrickComponentData_WireGraph_Expr_MathCompare: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n BrickComponentData_WireGraph_Expr_MathEasing: {\n Blend: 'f64',\n Function: 'EBREasingFunction',\n Direction: 'EBREasingDirection',\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n BrickComponentData_WireGraph_Expr_MathLogBase: {\n Input: 'f64',\n Base: 'f64',\n },\n BrickComponentData_WireGraph_Expr_MathPow: {\n Input: 'f64',\n Exponent: 'f64',\n },\n BrickComponentData_WireGraph_Expr_NearlyEqual: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n Tolerance: 'f64',\n },\n BrickComponentData_WireGraph_Expr_PrimMathVariant_PrimMathVariant: {\n Input: 'WireGraphPrimMathVariant',\n },\n BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant:\n {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n BrickComponentData_WireGraph_Expr_Select: {\n bSelectB: 'bool',\n InputA: 'WireGraphVariant',\n InputB: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Expr_String_Concatenate: {\n InputA: 'str',\n InputB: 'str',\n Separator: 'str',\n },\n BrickComponentData_WireGraph_Expr_String_Contains: {\n Input: 'str',\n Search: 'str',\n bCaseSensitive: 'bool',\n },\n BrickComponentData_WireGraph_Expr_String_EndsWith: {\n Input: 'str',\n Suffix: 'str',\n bCaseSensitive: 'bool',\n },\n BrickComponentData_WireGraph_Expr_String_Find: {\n Input: 'str',\n Search: 'str',\n bCaseSensitive: 'bool',\n },\n BrickComponentData_WireGraph_Expr_String_FormatText: {\n FormatString: 'str',\n InputA: 'WireGraphVariant',\n InputB: 'WireGraphVariant',\n InputC: 'WireGraphVariant',\n InputD: 'WireGraphVariant',\n InputE: 'WireGraphVariant',\n InputF: 'WireGraphVariant',\n InputG: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Expr_String_Length: {\n Input: 'str',\n },\n BrickComponentData_WireGraph_Expr_String_ParseInt: {\n Input: 'str',\n },\n BrickComponentData_WireGraph_Expr_String_ParseNumber: {\n Input: 'str',\n },\n BrickComponentData_WireGraph_Expr_String_Replace: {\n Input: 'str',\n Search: 'str',\n Replacement: 'str',\n bCaseSensitive: 'bool',\n },\n BrickComponentData_WireGraph_Expr_String_Split: {\n Input: 'str',\n Delimiter: 'str',\n bCaseSensitive: 'bool',\n },\n BrickComponentData_WireGraph_Expr_String_StartsWith: {\n Input: 'str',\n Prefix: 'str',\n bCaseSensitive: 'bool',\n },\n BrickComponentData_WireGraph_Expr_String_Substring: {\n Input: 'str',\n Start: 'i64',\n Length: 'i64',\n },\n BrickComponentData_WireGraph_Expr_String_ToLower: {\n Input: 'str',\n },\n BrickComponentData_WireGraph_Expr_String_ToUpper: {\n Input: 'str',\n },\n BrickComponentData_WireGraph_Expr_String_Trim: {\n Input: 'str',\n },\n BrickComponentData_WireGraph_Expr_Swap: {\n bSwap: 'bool',\n InputA: 'WireGraphVariant',\n InputB: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Expr_Variant_Variant: {\n Input: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Fake_CharacterDamageEvent: {},\n BrickComponentData_WireGraph_Fake_CharacterDeathEvent: {},\n BrickComponentData_WireGraph_Fake_CharacterEvent: {},\n BrickComponentData_WireGraph_Fake_ControllerEvent: {},\n BrickComponentData_WireGraph_Fake_RoundEvent: {\n RoundNumber: 'i32',\n },\n BrickComponentData_WireGraph_FindPlayer: {\n Query: 'str',\n },\n BrickComponentData_WireGraph_FontReference: {\n Asset: 'object',\n },\n BrickComponentData_WireGraph_ItemReference: {\n Asset: 'class',\n },\n BrickComponentData_WireGraph_OneShotAudioReference: {\n Asset: 'object',\n },\n BrickComponentData_WireGraph_ParticleReference: {\n Asset: 'object',\n },\n BrickComponentData_WireGraph_PickupReference: {\n Asset: 'class',\n },\n BrickComponentData_WireGraph_ProjectileReference: {\n Asset: 'class',\n },\n BrickComponentData_WireGraph_ServerUptime: {},\n BrickComponentData_WireGraph_WheelEngineAudioReference: {\n Asset: 'object',\n },\n BrickComponentData_WireGraphPseudo_ArrayVar: {\n Value: 'WireGraphArrayVariant',\n },\n BrickComponentData_WireGraphPseudo_BufferSeconds: {\n SecondsToWait: 'f32',\n ZeroSecondsToWait: 'f32',\n CurrentTime: 'f32',\n Input: 'WireGraphVariant',\n Output: 'WireGraphVariant',\n Buffered: 'WireGraphVariant',\n bHasQueued: 'bool',\n bIsOffTimer: 'bool',\n },\n BrickComponentData_WireGraphPseudo_BufferTicks: {\n TicksToWait: 'i32',\n ZeroTicksToWait: 'i32',\n CurrentTicks: 'i32',\n Input: 'WireGraphVariant',\n Output: 'WireGraphVariant',\n Buffered: 'WireGraphVariant',\n bHasQueued: 'bool',\n bIsOffTimer: 'bool',\n },\n BrickComponentData_WireGraphPseudo_Timer: {\n Limit: 'f64',\n Time: 'f64',\n bRunning: 'bool',\n },\n BrickComponentData_WireGraphPseudo_Tween: {\n Target: 'WireGraphVariant',\n Value: 'WireGraphVariant',\n StartValue: 'WireGraphVariant',\n Duration: 'f64',\n Elapsed: 'f64',\n Function: 'EBREasingFunction',\n Direction: 'EBREasingDirection',\n },\n BrickComponentData_WireGraphPseudo_Var: {\n Value: 'WireGraphVariant',\n },\n BrickComponentWireControl_DriveAndSteer: {},\n BrickComponentWirePortControl_TeleportDestination: {},\n BRInventoryEntryVariant: {},\n BRQueueSecondsEntry: {\n Data: ['WireGraphVariant'],\n RemainingTime: 'f32',\n },\n BRQueueTicksEntry: {\n Data: ['WireGraphVariant'],\n RemainingTicks: 'i32',\n },\n BRSavedBrickComponentTypeCounter: {\n TypeIndex: 'u32',\n NumInstances: 'u32',\n },\n Color: {\n B: 'u8',\n G: 'u8',\n R: 'u8',\n A: 'u8',\n },\n IntVector: {\n X: 'i32',\n Y: 'i32',\n Z: 'i32',\n },\n LinearColor: {\n R: 'f32',\n G: 'f32',\n B: 'f32',\n A: 'f32',\n },\n Quat: {\n X: 'f64',\n Y: 'f64',\n Z: 'f64',\n W: 'f64',\n },\n Quat4f: {\n X: 'f32',\n Y: 'f32',\n Z: 'f32',\n W: 'f32',\n },\n Rotator: {\n Pitch: 'f64',\n Yaw: 'f64',\n Roll: 'f64',\n },\n Rotator3f: {\n Pitch: 'f32',\n Yaw: 'f32',\n Roll: 'f32',\n },\n Vector: {\n X: 'f64',\n Y: 'f64',\n Z: 'f64',\n },\n Vector2f: {\n X: 'f32',\n Y: 'f32',\n },\n Vector3f: {\n X: 'f32',\n Y: 'f32',\n Z: 'f32',\n },\n Vector4: {\n X: 'f64',\n Y: 'f64',\n Z: 'f64',\n W: 'f64',\n },\n WireGraphBoolArray: {\n Values: ['bool'],\n },\n WireGraphDoubleArray: {\n Values: ['f64'],\n },\n WireGraphEnumArray_EBRColorSpace: {\n Values: ['EBRColorSpace'],\n },\n WireGraphEnumArray_EBRDisplayTextEasing: {\n Values: ['EBRDisplayTextEasing'],\n },\n WireGraphEnumArray_EBRDisplayTextJustification: {\n Values: ['EBRDisplayTextJustification'],\n },\n WireGraphEnumArray_EBREasingDirection: {\n Values: ['EBREasingDirection'],\n },\n WireGraphEnumArray_EBREasingFunction: {\n Values: ['EBREasingFunction'],\n },\n WireGraphEnumArray_EBrickAxis: {\n Values: ['EBrickAxis'],\n },\n WireGraphEnumArray_EBrickDirection: {\n Values: ['EBrickDirection'],\n },\n WireGraphEnumArray_EBrickMaterial: {\n Values: ['EBrickMaterial'],\n },\n WireGraphEnumArray_EBrickRigidJointInterpMode: {\n Values: ['EBrickRigidJointInterpMode'],\n },\n WireGraphEnumArray_EBRPawnCollisionChannel: {\n Values: ['EBRPawnCollisionChannel'],\n },\n WireGraphEnumArray_EBRTextFacing: {\n Values: ['EBRTextFacing'],\n },\n WireGraphEnumArray_EBRTextMaterial: {\n Values: ['EBRTextMaterial'],\n },\n WireGraphEnumArray_EBRTextOutline: {\n Values: ['EBRTextOutline'],\n },\n WireGraphEnumArray_EBRTextShading: {\n Values: ['EBRTextShading'],\n },\n WireGraphEnumArray_EBRTextTypeface: {\n Values: ['EBRTextTypeface'],\n },\n WireGraphEnumArray_EProjectileSpawnLocation: {\n Values: ['EProjectileSpawnLocation'],\n },\n WireGraphEnumArrayWrapper: {\n Enum: 'WireGraphEnumArrayVariant',\n },\n WireGraphEnumWrapper: {\n Enum: 'WireGraphEnumVariant',\n },\n WireGraphExec: {},\n WireGraphInt64Array: {\n Values: ['i64'],\n },\n WireGraphObjectArray: {\n Values: ['weak_object'],\n },\n WireGraphStringArray: {\n Values: ['str'],\n },\n BrickComponentData_BrickPropertyChanger: {\n bVisibility: 'bool',\n bCollisionEnabled: 'bool',\n bCollisionEnabled_Player: 'bool',\n bCollisionEnabled_Player1: 'bool',\n bCollisionEnabled_Player2: 'bool',\n bCollisionEnabled_Player3: 'bool',\n bCollisionEnabled_Weapon: 'bool',\n bCollisionEnabled_Interaction: 'bool',\n bCollisionEnabled_Physics: 'bool',\n Color: 'Color',\n MaterialAlpha: 'u8',\n Material: 'EBrickMaterial',\n },\n BrickComponentData_Gyroscope: {\n bEnabled: 'bool',\n Strength: 'f32',\n Damping: 'f32',\n MaxForce: 'f32',\n TargetAxis: 'Vector',\n },\n BrickComponentData_ItemSpawn: {\n PickupClass: 'class',\n bPickupEnabled: 'bool',\n bPickupRespawnOnMinigameReset: 'bool',\n PickupMinigameResetRespawnDelay: 'f32',\n bPickupAutoDisableOnPickup: 'bool',\n PickupRespawnTime: 'f32',\n bRenderTranslucentWhenDisabled: 'bool',\n DamageMultiplier: 'f32',\n WeaponSpeedMultiplier: 'f32',\n ItemNameOverride: 'str',\n ProjectileOverride: 'class',\n PickupOffsetDirection: 'EBrickDirection',\n PickupOffsetDistance: 'f32',\n PickupRotation: 'Rotator3f',\n PickupScale: 'f32',\n bOverridePickupColors: 'bool',\n PickupMeshColors: ['Color'],\n bPickupAnimationEnabled: 'bool',\n PickupAnimationAxis: 'EBrickAxis',\n bPickupAnimationAxisLocal: 'bool',\n PickupSpinSpeed: 'f32',\n PickupBobSpeed: 'f32',\n PickupBobHeight: 'f32',\n PickupAnimationPhase: 'f32',\n },\n BrickComponentData_Joint_Wheel: {\n Control_DriveAndSteer: 'BrickComponentWireControl_DriveAndSteer',\n bEnabled: 'bool',\n DriveSpeed: 'f32',\n DrivePower: 'f32',\n bSteerEnabled: 'bool',\n Steer: 'f32',\n SteerLimitDegree: 'f32',\n SteerPower: 'f32',\n bSuspensionEnabled: 'bool',\n SuspensionStiffness: 'f32',\n SuspensionDamping: 'f32',\n JointDistance: 'i32',\n bDriveWhenNotAttachedToEngine: 'bool',\n bCanBrake: 'bool',\n bAllowEngineSteerCorrect: 'bool',\n bReversed: 'bool',\n Damping: 'f32',\n },\n BrickComponentData_Joint_Wheel_Suspension: {\n Control_DriveAndSteer: 'BrickComponentWireControl_DriveAndSteer',\n bEnabled: 'bool',\n DriveSpeed: 'f32',\n DrivePower: 'f32',\n bSteerEnabled: 'bool',\n Steer: 'f32',\n SteerLimitDegree: 'f32',\n SteerPower: 'f32',\n bSuspensionEnabled: 'bool',\n SuspensionStiffness: 'f32',\n SuspensionDamping: 'f32',\n SuspensionOffset: 'f32',\n SuspensionLength: 'f32',\n JointDistance: 'i32',\n bDriveWhenNotAttachedToEngine: 'bool',\n bCanBrake: 'bool',\n bAllowEngineSteerCorrect: 'bool',\n bReversed: 'bool',\n Damping: 'f32',\n },\n BrickComponentData_PointLight: {\n bMatchBrickShape: 'bool',\n bEnabled: 'bool',\n Brightness: 'f32',\n Radius: 'f32',\n Color: 'Color',\n bUseBrickColor: 'bool',\n bCastShadows: 'bool',\n },\n BrickComponentData_PrefabSpawn: {\n Prefab: 'bundle_path_ref',\n SpawnOffset: 'Vector',\n SpawnOffsetRotation: 'Rotator',\n SpawnVelocity: 'Vector',\n bSpawnEnable: 'bool',\n RespawnTime: 'f64',\n SpawnedEntityIds: ['u32'],\n },\n BrickComponentData_Seat_V2: {\n bIsOccupied: 'bool',\n ExitOffset: 'IntVector',\n bRollCameraInThirdPerson: 'bool',\n bAllowNearbyInteraction: 'bool',\n bHiddenInteraction: 'bool',\n PromptCustomLabel: 'str',\n },\n BrickComponentData_SpotLight: {\n Rotation: 'Rotator3f',\n InnerConeAngle: 'f32',\n OuterConeAngle: 'f32',\n bEnabled: 'bool',\n Brightness: 'f32',\n Radius: 'f32',\n Color: 'Color',\n bUseBrickColor: 'bool',\n bCastShadows: 'bool',\n },\n BrickComponentData_TextDisplay: {\n Text: 'str',\n Font: 'object',\n Rotation: 'f32',\n Skew: 'f32',\n Kerning: 'f32',\n LineHeight: 'f32',\n LineOffset: 'f32',\n Anchor: 'Vector2f',\n Offset: 'Vector3f',\n Color: 'Color',\n MaterialSlider: 'i32',\n ShadingWidth: 'f32',\n OutlineColor: 'Color',\n OutlineWidth: 'f32',\n ScuffWidth: 'f32',\n GraffitiDepthLimit: 'f32',\n GraffitiAngleLimit: 'f32',\n GraffitiLayer: 'i32',\n bEnabled: 'bool',\n Face: 'EBrickDirection',\n bAlignToWedge: 'bool',\n bOverrideColor: 'bool',\n Typeface: 'EBRTextTypeface',\n Billboard: 'EBRTextFacing',\n Material: 'EBRTextMaterial',\n Shading: 'EBRTextShading',\n bFlipShading: 'bool',\n Outline: 'EBRTextOutline',\n bSharpCorners: 'bool',\n bSharpOutlines: 'bool',\n bOverrideOutlineColor: 'bool',\n bForeground: 'bool',\n },\n BrickComponentData_WeightBrick: {\n Mass: 'f32',\n MassSize: 'IntVector',\n MassOffset: 'IntVector',\n },\n BrickComponentData_WheelEngine_V2: {\n bEnabled: 'bool',\n bEnableManualControl: 'bool',\n ManualInput_Drive: 'f32',\n ManualInput_Steer: 'f32',\n bManualInput_Brake: 'bool',\n Control_DriveAndSteer: 'BrickComponentWireControl_DriveAndSteer',\n CustomMass: 'f32',\n CustomMassVerticalOffset: 'f32',\n DriveInterpSpeed: 'f32',\n DriveSpeed: 'f32',\n DriveAcceleratingPowerMultiplier: 'f32',\n DriveBrakingPowerMultiplier: 'f32',\n DriveDampingMultiplier: 'f32',\n SteerPowerMultiplier: 'f32',\n WheelFrictionMultiplier: 'f32',\n SteerInterpSpeed: 'f32',\n SteerLimitSpeedFalloff: 'f32',\n SteerLimitDegree: 'f32',\n CenterOfSteering: 'f32',\n bTankSteering: 'bool',\n TankSteerSpeedMultiplier: 'f32',\n bAutoRight: 'bool',\n WaterDriveForce: 'f32',\n WaterSteeringForce: 'f32',\n AudioDescriptor: 'object',\n },\n BrickComponentData_WireGraph_Exec_Character_AddInventoryBrick: {\n ProceduralSize: 'Vector',\n },\n BrickComponentData_WireGraph_Exec_Character_SetInventoryBrick: {\n Slot: 'i32',\n ProceduralSize: 'Vector',\n },\n BrickComponentData_WireGraph_Exec_Controller_DisplayText: {\n Text: 'str',\n AnchorX: 'f64',\n AnchorY: 'f64',\n PositionX: 'f64',\n PositionY: 'f64',\n Angle: 'f64',\n ScaleX: 'f64',\n ScaleY: 'f64',\n FontSize: 'i32',\n FontColor: 'Color',\n OutlineSize: 'i64',\n OutlineColor: 'Color',\n Justification: 'EBRDisplayTextJustification',\n Transition: 'f64',\n Easing: 'EBRDisplayTextEasing',\n Lifetime: 'f64',\n TextId: 'i64',\n },\n BrickComponentData_WireGraph_Exec_Entity_AddLocationRotation: {\n Vector: 'Vector',\n Rotation: 'Rotator',\n },\n BrickComponentData_WireGraph_Exec_Entity_AddVelocity: {\n Vector: 'Vector',\n Rotation: 'Vector',\n },\n BrickComponentData_WireGraph_Exec_Entity_RelativeTeleport: {\n Source: 'BrickComponentWirePortControl_TeleportDestination',\n Destination: 'BrickComponentWirePortControl_TeleportDestination',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetAngularVelocity: {\n AngularVelocity: 'Vector',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetGravityDirection: {\n Rotation: 'Rotator',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetLinearVelocity: {\n LinearVelocity: 'Vector',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetLocation: {\n Vector: 'Vector',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetLocationRotation: {\n Vector: 'Vector',\n Rotation: 'Rotator',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetRotation: {\n Rotation: 'Rotator',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetVelocity: {\n Vector: 'Vector',\n Rotation: 'Vector',\n },\n BrickComponentData_WireGraph_Exec_Entity_Teleport: {\n Destination: 'BrickComponentWirePortControl_TeleportDestination',\n },\n BrickComponentData_WireGraph_Exec_PrefabSpawner: {\n Prefab: 'bundle_path_ref',\n SpawnOffset: 'Vector',\n SpawnOffsetRotation: 'Rotator',\n SpawnVelocity: 'Vector',\n Lifetime: 'f64',\n Limit: 'i64',\n SpawnedEntityIds: ['u32'],\n },\n BrickComponentData_WireGraph_Exec_Sweep: {\n Origin: 'Vector',\n Direction: 'Vector',\n Distance: 'f64',\n Radius: 'f64',\n bDetectBricks: 'bool',\n bDetectPlayers1: 'bool',\n bDetectPlayers2: 'bool',\n bDetectPlayers3: 'bool',\n bDetectPlayers4: 'bool',\n bDetectPhysics: 'bool',\n bDetectMap: 'bool',\n bRelative: 'bool',\n bIgnoreOwningGrid: 'bool',\n },\n BrickComponentData_WireGraph_Expr_ColorBlend: {\n ColorA: 'LinearColor',\n ColorB: 'LinearColor',\n Alpha: 'f64',\n BlendSpace: 'EBRColorSpace',\n bClampAlpha: 'bool',\n },\n BrickComponentData_WireGraph_Expr_ColorConvert: {\n Input: 'LinearColor',\n FromSpace: 'EBRColorSpace',\n ToSpace: 'EBRColorSpace',\n },\n BrickComponentData_WireGraph_Expr_ColorToHex: {\n Input: 'LinearColor',\n },\n BrickComponentData_WireGraph_Expr_DirectionToRotation: {\n Direction: 'Vector',\n },\n BrickComponentData_WireGraph_Expr_InvertRotation: {\n Input: 'Quat',\n },\n BrickComponentData_WireGraph_Expr_QuatAngleBetween: {\n InputA: 'Quat',\n InputB: 'Quat',\n },\n BrickComponentData_WireGraph_Expr_QuatBetween: {\n From: 'Vector',\n To: 'Vector',\n },\n BrickComponentData_WireGraph_Expr_QuatDotProduct: {\n InputA: 'Quat',\n InputB: 'Quat',\n },\n BrickComponentData_WireGraph_Expr_QuatFromAxisAngle: {\n Axis: 'Vector',\n Angle: 'f64',\n },\n BrickComponentData_WireGraph_Expr_QuatSlerp: {\n InputA: 'Quat',\n InputB: 'Quat',\n Alpha: 'f64',\n bShortestPath: 'bool',\n bClampAlpha: 'bool',\n },\n BrickComponentData_WireGraph_Expr_QuatToAxisAngle: {\n Input: 'Quat',\n },\n BrickComponentData_WireGraph_Expr_RotateVector: {\n Rotation: 'Quat',\n Vector: 'Vector',\n },\n BrickComponentData_WireGraph_Expr_RotationToDirection: {\n Rotation: 'Quat',\n },\n BrickComponentData_WireGraph_Expr_SplitColor: {\n Input: 'LinearColor',\n },\n BrickComponentData_WireGraph_Expr_SplitColorSRGB: {\n Input: 'LinearColor',\n },\n BrickComponentData_WireGraph_Expr_SplitQuaternion: {\n Input: 'Quat',\n },\n BrickComponentData_WireGraph_Expr_SplitRotation: {\n Input: 'Rotator',\n },\n BrickComponentData_WireGraph_Expr_SplitVector: {\n Input: 'Vector',\n },\n BrickComponentData_WireGraph_Expr_Vec_Float: {\n Input: 'Vector',\n },\n BrickComponentData_WireGraph_Expr_Vec_Vec: {\n Input: 'Vector',\n },\n BrickComponentData_WireGraph_Expr_VecFloat_Vec: {\n Input: 'Vector',\n Scalar: 'f64',\n },\n BrickComponentData_WireGraph_Expr_VecVec_Float: {\n InputA: 'Vector',\n InputB: 'Vector',\n },\n BrickComponentData_WireGraph_Expr_VecVec_Vec: {\n InputA: 'Vector',\n InputB: 'Vector',\n },\n BrickComponentData_WireGraphPseudo_Dampen: {\n Target: 'WireGraphVariant',\n Value: 'WireGraphVariant',\n SmoothTime: 'f64',\n Velocity: 'Vector4',\n },\n BrickComponentData_WireGraphPseudo_QueueSeconds: {\n SecondsToWait: 'f32',\n Entries: ['BRQueueSecondsEntry'],\n DataIn1: 'WireGraphVariant',\n DataIn2: 'WireGraphVariant',\n DataIn3: 'WireGraphVariant',\n DataIn4: 'WireGraphVariant',\n DataIn5: 'WireGraphVariant',\n DataIn6: 'WireGraphVariant',\n DataIn7: 'WireGraphVariant',\n DataIn8: 'WireGraphVariant',\n DataOut1: 'WireGraphVariant',\n DataOut2: 'WireGraphVariant',\n DataOut3: 'WireGraphVariant',\n DataOut4: 'WireGraphVariant',\n DataOut5: 'WireGraphVariant',\n DataOut6: 'WireGraphVariant',\n DataOut7: 'WireGraphVariant',\n DataOut8: 'WireGraphVariant',\n },\n BrickComponentData_WireGraphPseudo_QueueTicks: {\n TicksToWait: 'i32',\n Entries: ['BRQueueTicksEntry'],\n DataIn1: 'WireGraphVariant',\n DataIn2: 'WireGraphVariant',\n DataIn3: 'WireGraphVariant',\n DataIn4: 'WireGraphVariant',\n DataIn5: 'WireGraphVariant',\n DataIn6: 'WireGraphVariant',\n DataIn7: 'WireGraphVariant',\n DataIn8: 'WireGraphVariant',\n DataOut1: 'WireGraphVariant',\n DataOut2: 'WireGraphVariant',\n DataOut3: 'WireGraphVariant',\n DataOut4: 'WireGraphVariant',\n DataOut5: 'WireGraphVariant',\n DataOut6: 'WireGraphVariant',\n DataOut7: 'WireGraphVariant',\n DataOut8: 'WireGraphVariant',\n },\n BrickTypeNetWrapper: {\n BrickAsset: 'object',\n ProceduralSize: 'IntVector',\n },\n BRInventoryEntryConfig: {\n Item: 'BRInventoryEntryVariant',\n },\n BRPlayerPartCustomizationV3: {\n PartDescriptor: 'object',\n DecalDescriptor: 'object',\n SocketName: 'str',\n Colors: ['Color'],\n },\n BRSavedComponentChunkSoA: {\n ComponentTypeCounters: ['BRSavedBrickComponentTypeCounter'],\n ComponentBrickIndices: ['u32'],\n JointBrickIndices: ['u32'],\n JointEntityReferences: ['u32'],\n JointInitialRelativeOffsets: ['Vector3f', null],\n JointInitialRelativeRotations: ['Quat4f', null],\n MicrochipBrickIndices: ['u32'],\n MicrochipBrickGridReferences: ['u32'],\n },\n WireGraphLinearColorArray: {\n Values: ['LinearColor'],\n },\n WireGraphQuatArray: {\n Values: ['Quat'],\n },\n WireGraphRotatorArray: {\n Values: ['Rotator'],\n },\n WireGraphVectorArray: {\n Values: ['Vector'],\n },\n BrickComponentData_WireGraph_Exec_Character_AddInventoryEntry: {\n Entry: 'BRInventoryEntryConfig',\n },\n BRInventoryEntryPlan: {\n Type: 'EBRInventoryEntryPlanType',\n BrickTypeIfBrick: 'BrickTypeNetWrapper',\n EntityTypeIfEntity: 'class',\n ItemTypeIfItem: 'class',\n },\n BRPlayerAvatarCustomizationV3: {\n Parts: ['BRPlayerPartCustomizationV3'],\n },\n BrickComponentData_BotSpawn: {\n RespawnTime: 'f32',\n CorpseTimeout: 'f32',\n GunSkill: 'f32',\n Agression: 'f32',\n ReactionTime: 'f32',\n MovementRandomness: 'f32',\n RunSpeed: 'f32',\n HealthMultiplier: 'f32',\n Jumpyness: 'f32',\n MovementAmount: 'f32',\n AttackMovementAmount: 'f32',\n AggroRange: 'f32',\n AttackDamageMultiplier: 'f32',\n bCanJump: 'bool',\n bBackVision: 'bool',\n bVisionRaycasting: 'bool',\n bCanTargetPlayers: 'bool',\n bCanTargetBots: 'bool',\n bActiveBot: 'bool',\n bSpawnEnable: 'bool',\n bDeleteBot: 'bool',\n MoveTarget: 'Vector',\n MovementGoalDummy: 'BrickComponentWirePortControl_TeleportDestination',\n BotName: 'str',\n Skin: 'BRPlayerAvatarCustomizationV3',\n bColorsAreLinear: 'bool',\n TeamCollisionChannel: 'EBRPawnCollisionChannel',\n bTeamCollision: 'bool',\n bTeamCollision1: 'bool',\n bTeamCollision2: 'bool',\n bTeamCollision3: 'bool',\n BotWeapon: 'class',\n },\n BrickComponentData_WireGraph_Exec_Character_SetInventoryEntry: {\n Slot: 'i32',\n Entry: 'BRInventoryEntryConfig',\n EntryPlan: 'BRInventoryEntryPlan',\n },\n },\n },\n BRSavedEntityChunkIndexSoA: {\n enums: {},\n variants: {},\n structs: {\n BRSavedChunk3DIndex: {\n X: 'i16',\n Y: 'i16',\n Z: 'i16',\n },\n BRSavedEntityChunkIndexSoA: {\n NextPersistentIndex: 'u32',\n Chunk3DIndices: ['BRSavedChunk3DIndex'],\n NumEntities: ['u32'],\n },\n },\n },\n BRSavedEntityChunkSoA: {\n enums: {},\n variants: {},\n structs: {\n BrickGridDynamicActor: {\n BouyancyScale: 'f32',\n MassScale: 'f32',\n bEnableGravity: 'bool',\n bUseNewMassCalculation: 'bool',\n bReceivesDecals: 'bool',\n EntityTag: 'str',\n },\n BRSavedBitFlags: {\n Flags: ['u8', null],\n },\n BRSavedBrickColor: {\n R: 'u8',\n G: 'u8',\n B: 'u8',\n A: 'u8',\n },\n BRSavedEntityTypeCounter: {\n TypeIndex: 'u32',\n NumEntities: 'u32',\n },\n IntVector: {\n X: 'i32',\n Y: 'i32',\n Z: 'i32',\n },\n Quat4f: {\n X: 'f32',\n Y: 'f32',\n Z: 'f32',\n W: 'f32',\n },\n Vector3f: {\n X: 'f32',\n Y: 'f32',\n Z: 'f32',\n },\n BP_MicrochipBrickGridDynamicActor_C: {\n bCollapsed: 'bool',\n PlaneCenter: 'IntVector',\n PlaneExtent: 'IntVector',\n },\n BRSavedEntityColors: {\n Color0: 'BRSavedBrickColor',\n Color1: 'BRSavedBrickColor',\n Color2: 'BRSavedBrickColor',\n Color3: 'BRSavedBrickColor',\n Color4: 'BRSavedBrickColor',\n Color5: 'BRSavedBrickColor',\n Color6: 'BRSavedBrickColor',\n Color7: 'BRSavedBrickColor',\n },\n BRSavedEntityChunkSoA: {\n TypeCounters: ['BRSavedEntityTypeCounter'],\n PersistentIndices: ['u32'],\n OwnerIndices: ['u32'],\n OriginalOwnerIndices: ['u32'],\n Locations: ['Vector3f', null],\n Rotations: ['Quat4f', null],\n WeldParentFlags: 'BRSavedBitFlags',\n PhysicsLockedFlags: 'BRSavedBitFlags',\n PhysicsSleepingFlags: 'BRSavedBitFlags',\n WeldParentIndices: ['u32'],\n LinearVelocities: ['Vector3f', null],\n AngularVelocities: ['Vector3f', null],\n ColorsAndAlphas: ['BRSavedEntityColors', null],\n RemainingLifeSpans: ['f32', null],\n bColorsAreLinear: 'bool',\n },\n },\n },\n};\n","// BrdbSchema: the msgpack-schema model plus its binary (de)serialization.\n// Wire form: always the 3-element [enums, variants, structs] msgpack array,\n// structs in topological dependency-first order.\nimport { ByteReader, ByteWriter } from './bytes';\nimport {\n mpArrayHeader,\n mpBinHeader,\n mpBool,\n mpF32,\n mpF64,\n mpInt,\n mpMapHeader,\n mpNil,\n mpStr,\n mpU8,\n mpUint,\n rdArrayLen,\n rdBinLen,\n rdBool,\n rdF32,\n rdF64,\n rdInt,\n rdMapLen,\n rdNil,\n rdStr,\n rdUint,\n} from './msgpack';\nimport { parseSchemaText, SchemaData } from './schemaText';\nimport { EmbeddedSchemaName, SCHEMAS } from './schemas';\n\nexport type PropDesc =\n | { kind: 'type' | 'array' | 'flatarray'; type: string }\n | { kind: 'map'; key: string; value: string };\n\n/** Compact data form emitted by scripts/syncBrdbData.mjs:\n * 'T' = plain type, ['T'] = array, ['T', null] = flat array,\n * { K: 'V' } = map (single entry). */\nexport type SchemaSourceProp =\n | string\n | readonly [string]\n | readonly [string, null]\n | Readonly<Record<string, string>>;\n\nexport interface SchemaSource {\n enums: Readonly<Record<string, Readonly<Record<string, number>>>>;\n variants: Readonly<Record<string, readonly string[]>>;\n structs: Readonly<Record<string, Readonly<Record<string, SchemaSourceProp>>>>;\n}\n\nfunction propFromSource(source: SchemaSourceProp, ctx: string): PropDesc {\n if (typeof source === 'string') return { kind: 'type', type: source };\n if (Array.isArray(source)) {\n if (source.length === 1) return { kind: 'array', type: source[0] };\n if (source.length === 2 && source[1] === null)\n return { kind: 'flatarray', type: source[0] };\n throw new Error(`brdb: invalid schema prop source at ${ctx}`);\n }\n const entries = Object.entries(source);\n if (entries.length === 1)\n return { kind: 'map', key: entries[0][0], value: entries[0][1] as string };\n throw new Error(`brdb: invalid schema prop source at ${ctx}`);\n}\n\nexport type BrdbValue =\n | number\n | boolean\n | string\n | null\n | BrdbValue[]\n | { [field: string]: BrdbValue };\n\n/** A decoded variant value: which member the tag selected, plus its payload.\n * Kept tagged (rather than flattened like the reference reader) so that\n * decode -> encode round-trips byte-identically. */\nexport interface BrdbVariant {\n $variant: string;\n value: BrdbValue;\n}\n\n// The legacy (pre-variant-table) unions use fixed tags; the member names\n// match the named-variant vocabulary so both share one representation.\nconst LEGACY_WIRE_MEMBERS = [\n 'f64',\n 'i64',\n 'bool',\n 'weak_object',\n 'WireGraphExec',\n];\nconst LEGACY_PRIM_MATH_MEMBERS = ['f64', 'i64'];\n\nfunction asVariant(value: BrdbValue, ty: string): BrdbVariant {\n if (\n value !== null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n typeof (value as { $variant?: unknown }).$variant === 'string'\n )\n return value as unknown as BrdbVariant;\n throw new Error(`brdb: variant ${ty} requires a { $variant, value } wrapper`);\n}\n\nconst FLAT_SIZES: Record<string, number> = {\n u8: 1,\n i8: 1,\n u16: 2,\n i16: 2,\n u32: 4,\n i32: 4,\n f32: 4,\n u64: 8,\n i64: 8,\n f64: 8,\n};\n\nfunction readPropDesc(r: ByteReader): PropDesc {\n const m = r.peek();\n // Type: FixStr/Str8/Str16 only (Str32 descriptors are invalid in this format)\n if ((m & 0xe0) === 0xa0 || m === 0xd9 || m === 0xda)\n return { kind: 'type', type: rdStr(r) };\n if ((m & 0xf0) === 0x90) {\n const len = rdArrayLen(r);\n if (len === 1) return { kind: 'array', type: rdStr(r) };\n if (len === 2) {\n const type = rdStr(r);\n rdNil(r); // FlatArray is exactly [type, nil]\n return { kind: 'flatarray', type };\n }\n throw new Error(`brdb: unsupported property array length ${len}`);\n }\n if ((m & 0xf0) === 0x80) {\n const len = rdMapLen(r);\n if (len !== 1)\n throw new Error(`brdb: unsupported property map length ${len}`);\n return { kind: 'map', key: rdStr(r), value: rdStr(r) };\n }\n throw new Error(`brdb: unsupported property marker 0x${m.toString(16)}`);\n}\n\nexport class BrdbSchema {\n constructor(\n readonly enums: Map<string, Map<string, number>>,\n readonly variants: Map<string, string[]>,\n readonly structs: Map<string, Map<string, PropDesc>>\n ) {}\n\n static fromText(text: string): BrdbSchema {\n const { enums, variants, structs } = parseSchemaText(text);\n return new BrdbSchema(enums, variants, structs);\n }\n\n /** Hydrate a schema from the generated data form (see SchemaSource). */\n static fromData(data: SchemaSource): BrdbSchema {\n const enums = new Map(\n Object.entries(data.enums).map(([name, values]) => [\n name,\n new Map(Object.entries(values)),\n ])\n );\n const variants = new Map(\n Object.entries(data.variants).map(([name, members]) => [\n name,\n [...members],\n ])\n );\n const structs = new Map(\n Object.entries(data.structs).map(([name, props]) => [\n name,\n new Map(\n Object.entries(props).map(([field, source]) => [\n field,\n propFromSource(source, `${name}.${field}`),\n ])\n ),\n ])\n );\n return new BrdbSchema(enums, variants, structs);\n }\n\n static fromBinary(bytes: Uint8Array): BrdbSchema {\n const r = new ByteReader(bytes);\n const header = rdArrayLen(r);\n if (header !== 2 && header !== 3)\n throw new Error(`brdb: invalid schema header length ${header}`);\n const enums = new Map<string, Map<string, number>>();\n for (let i = 0, n = rdMapLen(r); i < n; i++) {\n const name = rdStr(r);\n const values = new Map<string, number>();\n for (let j = 0, m = rdMapLen(r); j < m; j++)\n values.set(rdStr(r), rdInt(r));\n enums.set(name, values);\n }\n const variants = new Map<string, string[]>();\n if (header === 3) {\n for (let i = 0, n = rdMapLen(r); i < n; i++) {\n const name = rdStr(r);\n const members: string[] = [];\n for (let j = 0, m = rdArrayLen(r); j < m; j++) members.push(rdStr(r));\n variants.set(name, members);\n }\n }\n const structs = new Map<string, Map<string, PropDesc>>();\n for (let i = 0, n = rdMapLen(r); i < n; i++) {\n const name = rdStr(r);\n const props = new Map<string, PropDesc>();\n for (let j = 0, m = rdMapLen(r); j < m; j++)\n props.set(rdStr(r), readPropDesc(r));\n structs.set(name, props);\n }\n if (r.remaining !== 0)\n throw new Error(`brdb: ${r.remaining} trailing bytes after schema`);\n return new BrdbSchema(enums, variants, structs);\n }\n\n /** Extract the named structs plus every type they transitively reference\n * (sub-structs, enums, variants, and variant member types) into a\n * self-contained subset. Primitive/unknown names are skipped. Uses a LIFO\n * worklist; the result ORDER matches the reference implementation, and\n * that order determines the serialized schema's bytes. */\n extractStructsTransitive(seeds: Iterable<string>): SchemaData {\n const enums = new Map<string, Map<string, number>>();\n const variants = new Map<string, string[]>();\n const structs = new Map<string, Map<string, PropDesc>>();\n const seen = new Set<string>();\n const work = [...seeds];\n for (let name = work.pop(); name !== undefined; name = work.pop()) {\n if (seen.has(name)) continue;\n seen.add(name);\n const variantMembers = this.variants.get(name);\n if (variantMembers) {\n work.push(...variantMembers);\n variants.set(name, [...variantMembers]);\n continue;\n }\n const enumValues = this.enums.get(name);\n if (enumValues) {\n enums.set(name, new Map(enumValues));\n continue;\n }\n const props = this.structs.get(name);\n if (props) {\n const copy = new Map<string, PropDesc>();\n for (const [field, prop] of props) {\n if (prop.kind === 'map') work.push(prop.key, prop.value);\n else work.push(prop.type);\n copy.set(field, { ...prop });\n }\n structs.set(name, copy);\n }\n // else: primitive/unknown type, nothing to extract\n }\n return { enums, variants, structs };\n }\n\n /** Merge definitions into this schema. Existing names keep their position\n * (and are replaced); new names append, matching the reference merge. */\n merge(data: SchemaData): void {\n for (const [name, values] of data.enums) this.enums.set(name, values);\n for (const [name, members] of data.variants)\n this.variants.set(name, members);\n for (const [name, props] of data.structs) this.structs.set(name, props);\n }\n\n /** The zero value of a type: numbers 0, bool false, str '', asset refs\n * null, arrays empty, structs recursive, enums ordinal 0, variants tag 0\n * with the first member's zero value. */\n zeroValue(ty: string): BrdbValue {\n switch (ty) {\n case 'u8':\n case 'u16':\n case 'u32':\n case 'u64':\n case 'i8':\n case 'i16':\n case 'i32':\n case 'i64':\n case 'f32':\n case 'f64':\n return 0;\n case 'bool':\n return false;\n case 'str':\n return '';\n case 'class':\n case 'object':\n case 'weak_object':\n return null;\n case 'wire_graph_variant':\n case 'wire_graph_prim_math_variant':\n return { $variant: 'f64', value: 0 };\n }\n const variant = this.variants.get(ty);\n if (variant) {\n const first = variant[0];\n if (first === undefined) throw new Error(`brdb: empty variant ${ty}`);\n return { $variant: first, value: this.zeroValue(first) };\n }\n if (this.enums.has(ty)) return 0;\n const struct = this.structs.get(ty);\n if (struct) {\n const obj: { [k: string]: BrdbValue } = {};\n for (const [field, prop] of struct)\n obj[field] = prop.kind === 'type' ? this.zeroValue(prop.type) : [];\n return obj;\n }\n throw new Error(`brdb: unknown type ${ty}`);\n }\n\n /** Complete a partial struct value: present fields pass through, missing\n * fields get their zero value. Unknown keys are an error. */\n fillStruct(\n structName: string,\n partial: Readonly<Record<string, BrdbValue>>\n ): Record<string, BrdbValue> {\n const struct = this.structs.get(structName);\n if (!struct) throw new Error(`brdb: unknown struct ${structName}`);\n for (const key of Object.keys(partial))\n if (!struct.has(key))\n throw new Error(`brdb: ${structName} has no field '${key}'`);\n const out: Record<string, BrdbValue> = {};\n for (const [field, prop] of struct) {\n const given = partial[field];\n out[field] =\n given !== undefined\n ? given\n : prop.kind === 'type'\n ? this.zeroValue(prop.type)\n : [];\n }\n return out;\n }\n\n // DFS post-order: a struct is emitted after every struct it references.\n // Roots iterate in insertion order; deps in property declaration order\n // (map: key then value).\n topoStructOrder(): string[] {\n const visited = new Set<string>();\n const order: string[] = [];\n const visit = (name: string) => {\n if (visited.has(name)) return;\n visited.add(name);\n const props = this.structs.get(name);\n if (props)\n for (const prop of props.values()) {\n const deps =\n prop.kind === 'map' ? [prop.key, prop.value] : [prop.type];\n for (const dep of deps) if (this.structs.has(dep)) visit(dep);\n }\n order.push(name);\n };\n for (const name of this.structs.keys()) visit(name);\n return order;\n }\n\n toBinary(): Uint8Array {\n const w = new ByteWriter();\n // Always the 3-element form; an empty variants map is valid.\n mpArrayHeader(w, 3);\n mpMapHeader(w, this.enums.size);\n for (const [name, values] of this.enums) {\n mpStr(w, name);\n mpMapHeader(w, values.size);\n for (const [key, value] of values) {\n mpStr(w, key);\n mpInt(w, value);\n }\n }\n mpMapHeader(w, this.variants.size);\n for (const [name, members] of this.variants) {\n mpStr(w, name);\n mpArrayHeader(w, members.length);\n for (const member of members) mpStr(w, member);\n }\n const order = this.topoStructOrder();\n mpMapHeader(w, order.length);\n for (const structName of order) {\n const props = this.structs.get(structName)!;\n mpStr(w, structName);\n mpMapHeader(w, props.size);\n for (const [propName, prop] of props) {\n mpStr(w, propName);\n switch (prop.kind) {\n case 'type':\n mpStr(w, prop.type);\n break;\n case 'array':\n mpArrayHeader(w, 1);\n mpStr(w, prop.type);\n break;\n case 'flatarray':\n mpArrayHeader(w, 2);\n mpStr(w, prop.type);\n mpNil(w);\n break;\n case 'map':\n mpMapHeader(w, 1);\n mpStr(w, prop.key);\n mpStr(w, prop.value);\n break;\n }\n }\n }\n return w.toBytes();\n }\n\n flatTypeSize(ty: string): number {\n const prim = FLAT_SIZES[ty];\n if (prim) return prim;\n const struct = this.structs.get(ty);\n if (!struct) return 0;\n let sum = 0;\n for (const prop of struct.values())\n sum += prop.kind === 'type' ? this.flatTypeSize(prop.type) : 0;\n return sum;\n }\n\n writeValue(w: ByteWriter, ty: string, value: BrdbValue): void {\n switch (ty) {\n case 'u8':\n return mpU8(w, value as number);\n case 'u16':\n case 'u32':\n case 'u64':\n return mpUint(w, value as number);\n case 'i8':\n case 'i16':\n case 'i32':\n case 'i64':\n return mpInt(w, value as number);\n case 'f32':\n return mpF32(w, value as number);\n case 'f64':\n return mpF64(w, value as number);\n case 'str':\n return mpStr(w, value as string);\n case 'bool':\n return mpBool(w, value as boolean);\n case 'class':\n case 'object':\n case 'weak_object':\n // asset reference: index into external_asset_references; null = -1\n if (value === null) return mpInt(w, -1);\n return mpUint(w, value as number);\n case 'wire_graph_variant':\n case 'wire_graph_prim_math_variant':\n return this.writeLegacyWireVariant(w, ty, value);\n }\n // Named variants (e.g. WireGraphVariant): uint tag (the member's index\n // in the schema's ordered member list — resolved per schema, never\n // hardcoded) followed by the member value.\n const variantTy = this.variants.get(ty);\n if (variantTy) {\n const v = asVariant(value, ty);\n const tag = variantTy.indexOf(v.$variant);\n if (tag === -1)\n throw new Error(\n `brdb: '${v.$variant}' is not a member of variant ${ty}`\n );\n mpUint(w, tag);\n return this.writeVariantPayload(w, v.$variant, v.value);\n }\n const enumTy = this.enums.get(ty);\n if (enumTy) {\n const ordinal = value as number;\n if (ordinal < 0 || ordinal >= enumTy.size)\n throw new RangeError(\n `brdb: enum ${ty} ordinal ${ordinal} out of bounds`\n );\n return mpUint(w, ordinal); // ordinal, NOT the declared value\n }\n const struct = this.structs.get(ty);\n if (struct) {\n const obj = value as { [k: string]: BrdbValue };\n for (const [field, prop] of struct) {\n if (!(field in obj))\n throw new Error(`brdb: missing struct field ${ty}.${field}`);\n this.writeProperty(w, prop, obj[field], `${ty}.${field}`);\n }\n return;\n }\n throw new Error(`brdb: unknown type ${ty}`);\n }\n\n private writeVariantPayload(\n w: ByteWriter,\n member: string,\n value: BrdbValue\n ): void {\n // weak_object payloads inside variants use the signed-int encoder for\n // both null and non-null (matching the component write path); plain\n // schema-typed asset refs use the uint encoder when set.\n if (member === 'weak_object')\n return mpInt(w, value === null ? -1 : (value as number));\n this.writeValue(w, member, value);\n }\n\n private writeLegacyWireVariant(\n w: ByteWriter,\n ty: string,\n value: BrdbValue\n ): void {\n const members =\n ty === 'wire_graph_variant'\n ? LEGACY_WIRE_MEMBERS\n : LEGACY_PRIM_MATH_MEMBERS;\n const v = asVariant(value, ty);\n const tag = members.indexOf(v.$variant);\n if (tag === -1)\n throw new Error(`brdb: '${v.$variant}' is not a member of ${ty}`);\n mpUint(w, tag);\n switch (v.$variant) {\n case 'f64':\n return mpF64(w, v.value as number);\n case 'i64':\n return mpInt(w, v.value as number);\n case 'bool':\n return mpBool(w, v.value as boolean);\n case 'weak_object':\n return mpInt(w, v.value === null ? -1 : (v.value as number));\n case 'WireGraphExec':\n return; // no payload\n }\n }\n\n private writeProperty(\n w: ByteWriter,\n prop: PropDesc,\n value: BrdbValue,\n ctx: string\n ): void {\n switch (prop.kind) {\n case 'type':\n return this.writeValue(w, prop.type, value);\n case 'array': {\n const arr = value as BrdbValue[];\n mpArrayHeader(w, arr.length);\n for (const item of arr) this.writeValue(w, prop.type, item);\n return;\n }\n case 'flatarray': {\n const arr = value as BrdbValue[];\n const size = this.flatTypeSize(prop.type);\n if (size === 0)\n throw new Error(`brdb: invalid flat type ${prop.type} at ${ctx}`);\n mpBinHeader(w, arr.length * size);\n for (const item of arr) this.writeFlat(w, prop.type, item, ctx);\n return;\n }\n case 'map':\n // No shipped schema uses Map properties, and the format's reference\n // reader/writer disagree on the wire form (BRDB.md §4.4 item 10).\n throw new Error(`brdb: Map properties are unsupported (${ctx})`);\n }\n }\n\n private writeFlat(\n w: ByteWriter,\n ty: string,\n value: BrdbValue,\n ctx: string\n ): void {\n switch (ty) {\n case 'u8':\n return w.u8(value as number);\n case 'i8':\n return w.i8(value as number);\n case 'u16':\n return w.u16le(value as number);\n case 'i16':\n return w.i16le(value as number);\n case 'u32':\n return w.u32le(value as number);\n case 'i32':\n return w.i32le(value as number);\n case 'f32':\n return w.f32le(value as number);\n case 'f64':\n return w.f64le(value as number);\n case 'u64':\n return w.u64le(BigInt(value as number));\n case 'i64':\n return w.i64le(BigInt(value as number));\n }\n const struct = this.structs.get(ty);\n if (!struct) throw new Error(`brdb: invalid flat type ${ty} at ${ctx}`);\n const obj = value as { [k: string]: BrdbValue };\n for (const [field, prop] of struct) {\n if (prop.kind !== 'type')\n throw new Error(`brdb: flat struct ${ty} has non-flat field ${field}`);\n if (!(field in obj))\n throw new Error(`brdb: missing struct field ${ty}.${field}`);\n this.writeFlat(w, prop.type, obj[field], `${ctx}.${field}`);\n }\n }\n\n // A hostile .schema blob can declare a struct that references itself\n // (directly or transitively) as a plain field, which would otherwise\n // recurse forever consuming zero input bytes. depth is threaded through\n // the decode-side walk only (readValue/readProperty); encode is\n // unaffected since it always terminates against caller-supplied values.\n private static readonly MAX_DECODE_DEPTH = 64;\n\n readValue(r: ByteReader, ty: string, depth = 0): BrdbValue {\n if (depth > BrdbSchema.MAX_DECODE_DEPTH)\n throw new Error('brdb: schema recursion too deep');\n switch (ty) {\n case 'u8':\n case 'u16':\n case 'u32':\n case 'u64':\n return rdUint(r);\n case 'i8':\n case 'i16':\n case 'i32':\n case 'i64':\n return rdInt(r);\n case 'f32':\n return rdF32(r);\n case 'f64':\n return rdF64(r);\n case 'str':\n return rdStr(r);\n case 'bool':\n return rdBool(r);\n case 'class':\n case 'object':\n case 'weak_object': {\n const id = rdInt(r);\n return id < 0 ? null : id;\n }\n case 'wire_graph_variant':\n case 'wire_graph_prim_math_variant':\n return this.readLegacyWireVariant(r, ty);\n }\n // Named variant: uint tag indexes the schema's ordered member list.\n const variantTy = this.variants.get(ty);\n if (variantTy) {\n const tag = rdUint(r);\n const member = variantTy[tag];\n if (member === undefined)\n throw new Error(`brdb: unknown tag ${tag} for variant ${ty}`);\n return { $variant: member, value: this.readValue(r, member, depth + 1) };\n }\n const enumTy = this.enums.get(ty);\n if (enumTy) {\n const ordinal = rdUint(r);\n if (ordinal >= enumTy.size)\n throw new RangeError(\n `brdb: enum ${ty} ordinal ${ordinal} out of bounds`\n );\n return ordinal;\n }\n const struct = this.structs.get(ty);\n if (struct) {\n const obj: { [k: string]: BrdbValue } = {};\n for (const [field, prop] of struct)\n obj[field] = this.readProperty(r, prop, `${ty}.${field}`, depth + 1);\n return obj;\n }\n throw new Error(`brdb: unknown type ${ty}`);\n }\n\n private readLegacyWireVariant(r: ByteReader, ty: string): BrdbValue {\n const members =\n ty === 'wire_graph_variant'\n ? LEGACY_WIRE_MEMBERS\n : LEGACY_PRIM_MATH_MEMBERS;\n const tag = rdUint(r);\n const member = members[tag];\n switch (member) {\n case 'f64':\n return { $variant: member, value: rdF64(r) };\n case 'i64':\n return { $variant: member, value: rdInt(r) };\n case 'bool':\n return { $variant: member, value: rdBool(r) };\n case 'weak_object': {\n const id = rdInt(r);\n return { $variant: member, value: id < 0 ? null : id };\n }\n case 'WireGraphExec':\n return { $variant: member, value: null }; // no payload\n default:\n throw new Error(`brdb: unknown tag ${tag} for ${ty}`);\n }\n }\n\n private readProperty(\n r: ByteReader,\n prop: PropDesc,\n ctx: string,\n depth = 0\n ): BrdbValue {\n switch (prop.kind) {\n case 'type':\n return this.readValue(r, prop.type, depth);\n case 'array': {\n const len = rdArrayLen(r);\n const out: BrdbValue[] = [];\n for (let i = 0; i < len; i++)\n out.push(this.readValue(r, prop.type, depth));\n return out;\n }\n case 'flatarray': {\n const byteLen = rdBinLen(r);\n const size = this.flatTypeSize(prop.type);\n if (size === 0)\n throw new Error(`brdb: invalid flat type ${prop.type} at ${ctx}`);\n if (byteLen % size !== 0)\n throw new Error(\n `brdb: flat data length ${byteLen} not divisible by ${size} (${ctx})`\n );\n const out: BrdbValue[] = [];\n for (let i = 0; i < byteLen / size; i++)\n out.push(this.readFlat(r, prop.type, ctx));\n return out;\n }\n case 'map':\n throw new Error(`brdb: Map properties are unsupported (${ctx})`);\n }\n }\n\n private readFlat(r: ByteReader, ty: string, ctx: string): BrdbValue {\n switch (ty) {\n case 'u8':\n return r.u8();\n case 'i8':\n return r.i8();\n case 'u16':\n return r.u16le();\n case 'i16':\n return r.i16le();\n case 'u32':\n return r.u32le();\n case 'i32':\n return r.i32le();\n case 'f32':\n return r.f32le();\n case 'f64':\n return r.f64le();\n case 'u64':\n case 'i64': {\n const v = ty === 'u64' ? r.u64le() : r.i64le();\n if (\n v > BigInt(Number.MAX_SAFE_INTEGER) ||\n v < BigInt(Number.MIN_SAFE_INTEGER)\n )\n throw new RangeError(\n `brdb: flat 64-bit value ${v} exceeds JS safe range`\n );\n return Number(v);\n }\n }\n const struct = this.structs.get(ty);\n if (!struct) throw new Error(`brdb: invalid flat type ${ty} at ${ctx}`);\n const obj: { [k: string]: BrdbValue } = {};\n for (const [field, prop] of struct) {\n if (prop.kind !== 'type')\n throw new Error(`brdb: flat struct ${ty} has non-flat field ${field}`);\n obj[field] = this.readFlat(r, prop.type, `${ctx}.${field}`);\n }\n return obj;\n }\n\n encode(ty: string, value: BrdbValue): Uint8Array {\n const w = new ByteWriter();\n this.writeValue(w, ty, value);\n return w.toBytes();\n }\n\n decode(bytes: Uint8Array, ty: string): BrdbValue {\n const r = new ByteReader(bytes);\n const value = this.readValue(r, ty);\n if (r.remaining !== 0)\n throw new Error(`brdb: ${r.remaining} trailing bytes after ${ty}`);\n return value;\n }\n}\n\nconst embeddedCache = new Map<string, BrdbSchema>();\n\nexport function embeddedSchema(name: EmbeddedSchemaName): BrdbSchema {\n let schema = embeddedCache.get(name);\n if (!schema) {\n schema = BrdbSchema.fromData(SCHEMAS[name]);\n embeddedCache.set(name, schema);\n }\n return schema;\n}\n","// WriteSaveObject -> brdb world tree -> .brz. Bricks, brdb-native\n// components, and wires; entities are a later phase.\nimport { DEFAULT_UUID } from '../brs/constants';\nimport type { WriteSaveObject } from '../brs/types';\nimport { BitFlags } from './bits';\nimport { BrzContainerOptions, Compressor, writeBrzContainer } from './brz';\nimport { ByteWriter } from './bytes';\nimport { isProceduralAsset } from './catalog';\nimport { COMPONENT_TYPE_STRUCTS } from './componentDb';\nimport { BrGuid, PUBLIC_GUID, uuidToGuid } from './guid';\nimport { file, folder, PendingEntry } from './pending';\nimport { BrdbSchema, BrdbValue, embeddedSchema } from './schema';\nimport { SCHEMAS } from './schemas';\n\nexport const CHUNK_SIZE = 2048;\nexport const CHUNK_HALF = 1024;\n\nexport interface BundleJson {\n type: string;\n iD: string;\n name: string;\n version: string;\n tags: string[];\n authors: string[];\n createdAt: string;\n updatedAt: string;\n description: string;\n dependencies: unknown[];\n gameVersion: string;\n}\n\nexport interface WriteBrzOptions {\n /** zstd compressor for blobs; omitted -> all blobs stored raw (valid, and\n * what the byte-parity gates compare against). */\n compress?: Compressor;\n /** Meta/World.json environment. save.map is NOT used. Default \"Plate\". */\n environment?: string;\n /** Meta/Bundle.json field overrides. */\n bundle?: Partial<BundleJson>;\n}\n\n/** A brdb-native component on a brick. Legacy brs components\n * (save.components / brick.components) are NOT converted. */\nexport interface BrdbComponentInput {\n /** brdb component type name, e.g. 'Component_Internal_Seat' */\n type: string;\n /** fields of the component's data struct; omitted fields zero-fill */\n data?: Record<string, BrdbValue>;\n}\n\nexport interface BrdbWireEndpointInput {\n /** index into save.bricks */\n brick_index: number;\n /** brdb component type name (must be used by a brick in this save) */\n component_type: string;\n /** wire port name, e.g. 'Output' */\n port: string;\n}\n\n/** A wire between two component ports, using brdb-native names. Legacy\n * save.wires (brs component names) are NOT converted. */\nexport interface BrdbWireInput {\n source: BrdbWireEndpointInput;\n target: BrdbWireEndpointInput;\n}\n\n/** brdb-native extras alongside the legacy save shape: bricks carry a\n * modern `components` ARRAY of typed inputs (replacing the legacy .brs\n * component map on that field, which is not converted) and the save\n * carries `wires`. */\nexport interface BrdbBrickExtras {\n components?: BrdbComponentInput[];\n}\n\nexport interface BrdbSaveExtras {\n wires?: BrdbWireInput[];\n}\n\n/** The legacy save shape plus the brdb-native extras. The brick-level\n * legacy `components` map and the save-level legacy `wires` list are\n * replaced by the modern forms. */\nexport type WriteBrzSave = Omit<WriteSaveObject, 'bricks' | 'wires'> & {\n bricks: (Omit<WriteSaveObject['bricks'][number], 'components'> &\n BrdbBrickExtras)[];\n} & BrdbSaveExtras;\n\n/** What the world writers accept: the modern shape, or an unmodified\n * legacy save (whose map-shaped `components` and legacy-named `wires`\n * are ignored rather than converted). */\nexport type WriteBrzInput = WriteBrzSave | WriteSaveObject;\n\nconst floorDiv = (a: number, n: number) => Math.floor(a / n);\nconst euclidMod = (a: number, n: number) => ((a % n) + n) % n;\n\nexport function toRelative(position: readonly number[]): {\n chunk: [number, number, number];\n rel: [number, number, number];\n} {\n const chunk = position.map(v => floorDiv(v, CHUNK_SIZE)) as [\n number,\n number,\n number\n ];\n const rel = position.map(v => euclidMod(v, CHUNK_SIZE) - CHUNK_HALF) as [\n number,\n number,\n number\n ];\n return { chunk, rel };\n}\n\ninterface Brick {\n assetName: string;\n procedural: boolean;\n size: [number, number, number];\n position: [number, number, number];\n direction: number;\n rotation: number;\n collision: {\n player: boolean;\n weapon: boolean;\n interaction: boolean;\n physics: boolean;\n };\n visible: boolean;\n materialName: string;\n intensity: number;\n color: [number, number, number];\n ownerIndex: number;\n components: BrdbComponentInput[];\n}\n\nfunction normalizeBricks(save: WriteBrzInput): Brick[] {\n const assets = save.brick_assets ?? ['PB_DefaultBrick'];\n const materials = save.materials ?? ['BMC_Plastic'];\n const numOwners = save.brick_owners?.length ?? 0;\n return save.bricks.map((brick, i) => {\n const at = `bricks[${i}]`;\n // Only the modern array form is written; a legacy map-shaped .brs\n // `components` object on a brick is ignored (not converted).\n const componentInputs = Array.isArray(brick.components)\n ? brick.components\n : [];\n const components = componentInputs.map((c, ci) => {\n if (!COMPONENT_TYPE_STRUCTS.has(c.type))\n throw new Error(\n `brdb: ${at}.components[${ci}]: unknown component type '${c.type}'`\n );\n return c;\n });\n const assetName = assets[brick.asset_name_index ?? 0];\n if (assetName === undefined)\n throw new Error(\n `brdb: ${at}: asset_name_index ${brick.asset_name_index} out of range`\n );\n const materialName = materials[brick.material_index ?? 0];\n if (materialName === undefined)\n throw new Error(\n `brdb: ${at}: material_index ${brick.material_index} out of range`\n );\n const position = brick.position.map(v => {\n if (!Number.isSafeInteger(v))\n throw new Error(\n `brdb: ${at}: position must be integers, got ${brick.position}`\n );\n if (!(v >= -32768 * CHUNK_SIZE && v <= 32768 * CHUNK_SIZE - 1))\n throw new Error(\n `brdb: ${at}: position ${v} outside the i16 chunk range`\n );\n return v;\n }) as [number, number, number];\n const size = brick.size.map(v => {\n if (!Number.isInteger(v) || v < 0 || v > 0xffff)\n throw new Error(\n `brdb: ${at}: size components must be u16, got ${brick.size}`\n );\n return v;\n }) as [number, number, number];\n let collision: Brick['collision'];\n if (typeof brick.collision === 'boolean') {\n const b = brick.collision;\n collision = { player: b, weapon: b, interaction: b, physics: b };\n } else {\n collision = {\n player: brick.collision?.player ?? true,\n weapon: brick.collision?.weapon ?? true,\n interaction: brick.collision?.interaction ?? true,\n physics: brick.collision?.physics ?? true,\n // Collision.tool is not serialized in brdb (the column was removed)\n };\n }\n let color: [number, number, number];\n const c = brick.color;\n if (typeof c === 'number') {\n const entry = save.colors?.[c];\n if (!entry)\n throw new Error(`brdb: ${at}: color palette index ${c} out of range`);\n color = [entry[0], entry[1], entry[2]]; // in-memory palette is RGBA\n } else if (Array.isArray(c)) {\n if (c.length < 3)\n throw new Error(\n `brdb: ${at}: color array must have at least 3 components`\n );\n color = [c[0], c[1], c[2]];\n } else {\n color = [255, 255, 255];\n }\n color = color.map((v, ci) => {\n if (!Number.isInteger(v) || v < 0 || v > 255)\n throw new Error(\n `brdb: ${at}: resolved color component ${ci} must be u8, got ${v}`\n );\n return v;\n }) as [number, number, number];\n const intensity = brick.material_intensity ?? 5;\n if (!Number.isInteger(intensity) || intensity < 0 || intensity > 255)\n throw new Error(\n `brdb: ${at}: material_intensity must be u8, got ${intensity}`\n );\n const ownerIndex = brick.owner_index ?? 0;\n if (\n !Number.isInteger(ownerIndex) ||\n ownerIndex < 0 ||\n ownerIndex > numOwners\n )\n throw new Error(\n `brdb: ${at}: owner_index ${ownerIndex} out of range (0..${numOwners})`\n );\n return {\n assetName,\n procedural: isProceduralAsset(assetName),\n size,\n position,\n direction: brick.direction ?? 4, // ZPositive\n rotation: brick.rotation ?? 0, // Deg0\n collision,\n visible: brick.visibility ?? true,\n materialName,\n intensity,\n color,\n ownerIndex,\n components,\n };\n });\n}\n\nclass Registry {\n private map = new Map<string, number>();\n add(name: string): number {\n let i = this.map.get(name);\n if (i === undefined) {\n i = this.map.size;\n this.map.set(name, i);\n }\n return i;\n }\n indexOf(name: string): number {\n const i = this.map.get(name);\n if (i === undefined) throw new Error(`brdb: registry miss for ${name}`);\n return i;\n }\n has(name: string): boolean {\n return this.map.has(name);\n }\n get names(): string[] {\n return [...this.map.keys()];\n }\n get size(): number {\n return this.map.size;\n }\n}\n\n// Column packer for one chunk of the brick SoA.\nclass ChunkBuilder {\n private sizeCounters: { AssetIndex: number; NumSizes: number }[] = [];\n private sizes: { X: number; Y: number; Z: number }[] = [];\n private typeIndices: number[] = [];\n private ownerIndices: number[] = [];\n private originalOwnerIndices: number[] = [];\n private relPositions: { X: number; Y: number; Z: number }[] = [];\n private orientations: number[] = [];\n private colPlayer = new BitFlags();\n private colPlayer1 = new BitFlags();\n private colPlayer2 = new BitFlags();\n private colPlayer3 = new BitFlags();\n private colWeapon = new BitFlags();\n private colInteraction = new BitFlags();\n private colPhysics = new BitFlags();\n private visibility = new BitFlags();\n private materialIndices: number[] = [];\n private colors: { R: number; G: number; B: number; A: number }[] = [];\n private sizeIndexMap = new Map<string, number>();\n private numBrickSizes = 0;\n numBricks = 0;\n\n addBrick(\n b: Brick,\n rel: [number, number, number],\n reg: { materials: Registry; basic: Registry; procedural: Registry },\n basicCount: number\n ) {\n let typeIndex: number;\n if (!b.procedural) {\n typeIndex = reg.basic.indexOf(b.assetName);\n } else {\n const tyIndex = reg.procedural.indexOf(b.assetName);\n const key = `${tyIndex}:${b.size[0]},${b.size[1]},${b.size[2]}`;\n let sizeIndex = this.sizeIndexMap.get(key);\n if (sizeIndex === undefined) {\n // slot = per-chunk running size count, offset past the basic assets\n sizeIndex = this.numBrickSizes + basicCount;\n const last = this.sizeCounters[this.sizeCounters.length - 1];\n if (last && last.AssetIndex === tyIndex) {\n // extend the tail run; the equal-size case is unreachable because\n // a repeated (asset,size) pair hits sizeIndexMap above\n last.NumSizes += 1;\n } else {\n this.sizeCounters.push({ AssetIndex: tyIndex, NumSizes: 1 });\n }\n this.sizes.push({ X: b.size[0], Y: b.size[1], Z: b.size[2] });\n this.sizeIndexMap.set(key, sizeIndex);\n this.numBrickSizes += 1;\n }\n typeIndex = sizeIndex;\n }\n this.typeIndices.push(typeIndex);\n this.ownerIndices.push(b.ownerIndex);\n this.originalOwnerIndices.push(b.ownerIndex); // mirrors owner (legacy rule)\n this.relPositions.push({ X: rel[0], Y: rel[1], Z: rel[2] });\n this.orientations.push(((b.direction & 0x7) << 2) | (b.rotation & 0x3));\n this.colPlayer.push(b.collision.player);\n this.colPlayer1.push(b.collision.player); // Player1..3 mirror player\n this.colPlayer2.push(b.collision.player);\n this.colPlayer3.push(b.collision.player);\n this.colWeapon.push(b.collision.weapon);\n this.colInteraction.push(b.collision.interaction);\n this.colPhysics.push(b.collision.physics);\n this.visibility.push(b.visible);\n this.materialIndices.push(reg.materials.indexOf(b.materialName));\n this.colors.push({\n R: b.color[0],\n G: b.color[1],\n B: b.color[2],\n A: b.intensity,\n });\n this.numBricks += 1;\n }\n\n toValue(proceduralBrickStartingIndex: number): BrdbValue {\n return {\n ProceduralBrickStartingIndex: proceduralBrickStartingIndex,\n BrickSizeCounters: this.sizeCounters,\n BrickSizes: this.sizes,\n BrickTypeIndices: this.typeIndices,\n OwnerIndices: this.ownerIndices,\n OriginalOwnerIndices: this.originalOwnerIndices,\n RelativePositions: this.relPositions,\n Orientations: this.orientations,\n CollisionFlags_Player: this.colPlayer.toValue(),\n CollisionFlags_Player1: this.colPlayer1.toValue(),\n CollisionFlags_Player2: this.colPlayer2.toValue(),\n CollisionFlags_Player3: this.colPlayer3.toValue(),\n CollisionFlags_Weapon: this.colWeapon.toValue(),\n CollisionFlags_Interaction: this.colInteraction.toValue(),\n CollisionFlags_Physics: this.colPhysics.toValue(),\n VisibilityFlags: this.visibility.toValue(),\n MaterialIndices: this.materialIndices,\n ColorsAndAlphas: this.colors,\n bColorsAreLinear: false, // new saves always store sRGB\n };\n }\n}\n\n// Column packer for one chunk's component SoA plus the trailing\n// per-instance data structs (appended back-to-back after the SoA; a type\n// whose data-struct slot is \"None\" contributes no trailing bytes).\nclass ComponentChunkBuilder {\n private counters: { TypeIndex: number; NumInstances: number }[] = [];\n private brickIndices: number[] = [];\n private trailing: { structName: string; data: Record<string, BrdbValue> }[] =\n [];\n numComponents = 0;\n\n add(\n typeIndex: number,\n brickIndex: number,\n structName: string,\n data: Record<string, BrdbValue>\n ) {\n // run-length counters merge only consecutive same-type instances\n const last = this.counters[this.counters.length - 1];\n if (last && last.TypeIndex === typeIndex) last.NumInstances += 1;\n else this.counters.push({ TypeIndex: typeIndex, NumInstances: 1 });\n this.brickIndices.push(brickIndex);\n if (structName !== 'None') this.trailing.push({ structName, data });\n this.numComponents += 1;\n }\n\n toBytes(schema: BrdbSchema): Uint8Array {\n const w = new ByteWriter();\n schema.writeValue(w, 'BRSavedComponentChunkSoA', {\n ComponentTypeCounters: this.counters,\n ComponentBrickIndices: this.brickIndices,\n JointBrickIndices: [],\n JointEntityReferences: [],\n JointInitialRelativeOffsets: [],\n JointInitialRelativeRotations: [],\n MicrochipBrickIndices: [],\n MicrochipBrickGridReferences: [],\n });\n for (const t of this.trailing)\n schema.writeValue(\n w,\n t.structName,\n schema.fillStruct(t.structName, t.data)\n );\n return w.toBytes();\n }\n}\n\nexport function saveToPendingFs(\n save: WriteBrzInput,\n options: WriteBrzOptions = {}\n): PendingEntry[] {\n const bricks = normalizeBricks(save);\n\n // Registry pre-pass: material THEN asset, per brick, in brick order.\n // Registration must complete before any chunk packs — procedural type\n // indices embed the final basic-asset count.\n const materials = new Registry();\n const basic = new Registry();\n const procedural = new Registry();\n for (const b of bricks) {\n materials.add(b.materialName);\n (b.procedural ? procedural : basic).add(b.assetName);\n }\n if (materials.size > 256)\n throw new Error(\n `brdb: too many distinct materials (${materials.size}); MaterialIndices is u8 (max 256)`\n );\n const reg = { materials, basic, procedural };\n const basicCount = basic.size;\n\n // Component registries: type names first-seen across bricks, with the\n // parallel data-struct column; port names come from the wires that use\n // them (matching the reference writer's used-only registration).\n const componentTypes = new Registry();\n const componentStructNames: string[] = [];\n for (const b of bricks)\n for (const c of b.components) {\n const before = componentTypes.size;\n if (componentTypes.add(c.type) === before)\n componentStructNames.push(COMPONENT_TYPE_STRUCTS.get(c.type)!);\n }\n\n // Legacy .brs wires name endpoints by brs component; only modern-shaped\n // wires (component_type) are written, matching the components handling.\n const wires = (save.wires ?? []).filter(\n (w): w is BrdbWireInput => 'component_type' in w.source\n );\n const ports = new Registry();\n wires.forEach((wire, wi) => {\n for (const [role, end] of [\n ['source', wire.source],\n ['target', wire.target],\n ] as const) {\n if (\n !Number.isInteger(end.brick_index) ||\n end.brick_index < 0 ||\n end.brick_index >= bricks.length\n )\n throw new Error(\n `brdb: wires[${wi}].${role}: brick_index ${end.brick_index} out of range`\n );\n if (!componentTypes.has(end.component_type))\n throw new Error(\n `brdb: wires[${wi}].${role}: component type '${end.component_type}' is not used by any brick`\n );\n ports.add(end.port);\n }\n });\n\n // ComponentsShared.schema: the minimal SoA scaffolding, plus (when\n // components are used) the data structs actually referenced and their\n // transitive dependencies pulled from the max catalog schema.\n const componentsSchema = BrdbSchema.fromData(\n SCHEMAS.BRSavedComponentChunkSoA\n );\n if (componentTypes.size > 0) {\n const seeds: string[] = [];\n for (const structName of componentStructNames)\n if (structName !== 'None' && !seeds.includes(structName))\n seeds.push(structName);\n componentsSchema.merge(\n embeddedSchema('BRSavedComponentChunkSoA_max').extractStructsTransitive(\n seeds\n )\n );\n }\n\n // Owner table: row 0 = PUBLIC, then brick_owners\n const ownerRows: { guid: BrGuid; name: string; display: string }[] = [\n { guid: PUBLIC_GUID, name: 'PUBLIC', display: 'PUBLIC' },\n ];\n for (const o of save.brick_owners ?? []) {\n ownerRows.push({\n guid: uuidToGuid(o.id ?? DEFAULT_UUID),\n name: o.name ?? 'Unknown',\n display: o.display_name ?? o.name ?? 'Unknown',\n });\n }\n const brickCounts = ownerRows.map(() => 0);\n const componentCounts = ownerRows.map(() => 0);\n\n // Chunking: first-seen chunk order (deterministic; the ChunkIndex SoA\n // rows use the same order)\n const chunkOrder: string[] = [];\n const chunks = new Map<\n string,\n { index: [number, number, number]; builder: ChunkBuilder }\n >();\n const componentChunks = new Map<string, ComponentChunkBuilder>();\n const brickLocations: {\n key: string;\n chunk: [number, number, number];\n localIndex: number;\n }[] = [];\n for (const b of bricks) {\n const { chunk, rel } = toRelative(b.position);\n const key = chunk.join('_');\n let entry = chunks.get(key);\n if (!entry) {\n entry = { index: chunk, builder: new ChunkBuilder() };\n chunks.set(key, entry);\n chunkOrder.push(key);\n }\n const localIndex = entry.builder.numBricks;\n entry.builder.addBrick(b, rel, reg, basicCount);\n brickLocations.push({ key, chunk, localIndex });\n brickCounts[b.ownerIndex] += 1;\n if (b.components.length > 0) {\n componentCounts[b.ownerIndex] += b.components.length;\n let componentBuilder = componentChunks.get(key);\n if (!componentBuilder)\n componentChunks.set(\n key,\n (componentBuilder = new ComponentChunkBuilder())\n );\n for (const c of b.components) {\n const typeIndex = componentTypes.indexOf(c.type);\n componentBuilder.add(\n typeIndex,\n localIndex,\n componentStructNames[typeIndex],\n c.data ?? {}\n );\n }\n }\n }\n\n // Wires live in the TARGET's chunk. Local rows are same-chunk sources\n // (the legacy writer is single-grid); anything else is a remote source\n // carrying the source grid + chunk.\n interface WireRows {\n remoteSources: Record<string, BrdbValue>[];\n localSources: Record<string, BrdbValue>[];\n remoteTargets: Record<string, BrdbValue>[];\n localTargets: Record<string, BrdbValue>[];\n }\n const wireChunks = new Map<string, WireRows>();\n const chunkWireCounts = new Map<string, number>();\n for (const wire of wires) {\n const source = brickLocations[wire.source.brick_index];\n const targetLoc = brickLocations[wire.target.brick_index];\n const target = {\n BrickIndexInChunk: targetLoc.localIndex,\n ComponentTypeIndex: componentTypes.indexOf(wire.target.component_type),\n PortIndex: ports.indexOf(wire.target.port),\n };\n let rows = wireChunks.get(targetLoc.key);\n if (!rows)\n wireChunks.set(\n targetLoc.key,\n (rows = {\n remoteSources: [],\n localSources: [],\n remoteTargets: [],\n localTargets: [],\n })\n );\n chunkWireCounts.set(\n targetLoc.key,\n (chunkWireCounts.get(targetLoc.key) ?? 0) + 1\n );\n if (source.key === targetLoc.key) {\n rows.localSources.push({\n BrickIndexInChunk: source.localIndex,\n ComponentTypeIndex: componentTypes.indexOf(wire.source.component_type),\n PortIndex: ports.indexOf(wire.source.port),\n });\n rows.localTargets.push(target);\n } else {\n rows.remoteSources.push({\n GridPersistentIndex: 1, // single (main) grid in the legacy writer\n ChunkIndex: {\n X: source.chunk[0],\n Y: source.chunk[1],\n Z: source.chunk[2],\n },\n BrickIndexInChunk: source.localIndex,\n ComponentTypeIndex: componentTypes.indexOf(wire.source.component_type),\n PortIndex: ports.indexOf(wire.source.port),\n });\n rows.remoteTargets.push(target);\n }\n }\n\n const globalDataSchema = embeddedSchema('BRSavedGlobalDataSoA');\n const ownersSchema = embeddedSchema('BRSavedOwnerTableSoA');\n const chunkIndexSchema = embeddedSchema('BRSavedBrickChunkIndexSoA');\n const chunkSchema = embeddedSchema('BRSavedBrickChunkSoA');\n const wiresSchema = embeddedSchema('BRSavedWireChunkSoA');\n const entityChunkIndexSchema = embeddedSchema('BRSavedEntityChunkIndexSoA');\n const entitySchema = embeddedSchema('BRSavedEntityChunkSoA');\n\n const globalDataMps = globalDataSchema.encode('BRSavedGlobalDataSoA', {\n EntityTypeNames: [],\n EntityDataClassNames: [],\n BasicBrickAssetNames: basic.names,\n ProceduralBrickAssetNames: procedural.names,\n MaterialAssetNames: materials.names,\n ComponentTypeNames: componentTypes.names,\n ComponentDataStructNames: componentStructNames,\n ComponentWirePortNames: ports.names,\n ExternalAssetReferences: [],\n GlobalGridEntityTypeIndex: -1,\n });\n\n const ownersMps = ownersSchema.encode('BRSavedOwnerTableSoA', {\n UserIds: ownerRows.map(r => ({\n A: r.guid.A,\n B: r.guid.B,\n C: r.guid.C,\n D: r.guid.D,\n })),\n UserNames: ownerRows.map(r => r.name),\n DisplayNames: ownerRows.map(r => r.display),\n EntityCounts: ownerRows.map(() => 0),\n BrickCounts: brickCounts,\n ComponentCounts: componentCounts,\n WireCounts: ownerRows.map(() => 0),\n });\n\n const chunkIndexMps = chunkIndexSchema.encode('BRSavedBrickChunkIndexSoA', {\n Chunk3DIndices: chunkOrder.map(k => {\n const [X, Y, Z] = chunks.get(k)!.index;\n return { X, Y, Z };\n }),\n // origin chunk gets zero offsets; every other chunk (CHUNK_HALF)³\n ChunkOffsets: chunkOrder.map(k => {\n const zero = chunks.get(k)!.index.every(v => v === 0);\n const off = zero ? 0 : CHUNK_HALF;\n return { X: off, Y: off, Z: off };\n }),\n ChunkSizes: chunkOrder.map(() => CHUNK_SIZE),\n NumBricks: chunkOrder.map(k => chunks.get(k)!.builder.numBricks),\n NumComponents: chunkOrder.map(\n k => componentChunks.get(k)?.numComponents ?? 0\n ),\n NumWires: chunkOrder.map(k => chunkWireCounts.get(k) ?? 0),\n });\n\n const entityChunkIndexMps = entityChunkIndexSchema.encode(\n 'BRSavedEntityChunkIndexSoA',\n {\n NextPersistentIndex: 2, // sub-grids/entities start at 2; none in phase 1\n Chunk3DIndices: [],\n NumEntities: [],\n }\n );\n\n const utf8 = new TextEncoder();\n const bundle: BundleJson = {\n type: 'World',\n iD: '00000000-0000-0000-0000-000000000000',\n name: '',\n version: '',\n tags: [],\n authors: save.author?.name ? [save.author.name] : [],\n createdAt: '0001.01.01-00.00.00',\n updatedAt: '0001.01.01-00.00.00',\n description: save.description ?? 'A Generated World',\n dependencies: [],\n gameVersion: 'CL0',\n ...options.bundle,\n };\n\n // Tree creation order below defines archive ids — it is part of the\n // byte format; do not reorder.\n const gridDir: PendingEntry[] = [['ChunkIndex.mps', file(chunkIndexMps)]];\n if (chunkOrder.length > 0) {\n gridDir.push([\n 'Chunks',\n folder(\n chunkOrder.map(k => [\n `${k}.mps`,\n file(\n chunkSchema.encode(\n 'BRSavedBrickChunkSoA',\n chunks.get(k)!.builder.toValue(basicCount)\n )\n ),\n ])\n ),\n ]);\n }\n if (componentChunks.size > 0) {\n gridDir.push([\n 'Components',\n folder(\n chunkOrder\n .filter(k => componentChunks.has(k))\n .map(k => [\n `${k}.mps`,\n file(componentChunks.get(k)!.toBytes(componentsSchema)),\n ])\n ),\n ]);\n }\n if (wireChunks.size > 0) {\n gridDir.push([\n 'Wires',\n folder(\n chunkOrder\n .filter(k => wireChunks.has(k))\n .map(k => {\n const rows = wireChunks.get(k)!;\n return [\n `${k}.mps`,\n file(\n wiresSchema.encode('BRSavedWireChunkSoA', {\n RemoteWireSources: rows.remoteSources,\n LocalWireSources: rows.localSources,\n RemoteWireTargets: rows.remoteTargets,\n LocalWireTargets: rows.localTargets,\n PendingPropagationFlags: { Flags: [] },\n })\n ),\n ];\n })\n ),\n ]);\n }\n return [\n [\n 'Meta',\n folder([\n ['Bundle.json', file(utf8.encode(JSON.stringify(bundle)))],\n // Screenshot.jpg / Thumbnail.png: no content -> omitted entirely\n [\n 'World.json',\n file(\n utf8.encode(\n JSON.stringify({ environment: options.environment ?? 'Plate' })\n )\n ),\n ],\n ]),\n ],\n [\n 'World',\n folder([\n [\n '0',\n folder([\n ['GlobalData.schema', file(globalDataSchema.toBinary())],\n ['GlobalData.mps', file(globalDataMps)],\n ['Owners.schema', file(ownersSchema.toBinary())],\n ['Owners.mps', file(ownersMps)],\n [\n 'Bricks',\n folder([\n ['ChunkIndexShared.schema', file(chunkIndexSchema.toBinary())],\n ['ChunksShared.schema', file(chunkSchema.toBinary())],\n ['WiresShared.schema', file(wiresSchema.toBinary())],\n ['ComponentsShared.schema', file(componentsSchema.toBinary())],\n ['Grids', folder([['1', folder(gridDir)]])],\n ]),\n ],\n [\n 'Entities',\n folder([\n ['ChunkIndex.schema', file(entityChunkIndexSchema.toBinary())],\n ['ChunkIndex.mps', file(entityChunkIndexMps)],\n ['ChunksShared.schema', file(entitySchema.toBinary())],\n ]),\n ],\n ]),\n ],\n ]),\n ],\n ];\n}\n\n/** Write a .brz world from a legacy .brs-shaped WriteSaveObject. A\n * builder-style world API for authoring saves from scratch is planned;\n * this entry point exists for converting existing saves. */\nexport function writeBrzLegacy(\n save: WriteBrzInput,\n options: WriteBrzOptions = {}\n): Uint8Array {\n const containerOptions: BrzContainerOptions = { compress: options.compress };\n return writeBrzContainer(saveToPendingFs(save, options), containerOptions);\n}\n","// Lazy .brz world reader. Schemas are parsed once and cached per archive\n// path; chunk payloads are decoded on demand (never all at once); grids and\n// entities are enumerated from the archive rather than assumed. Decoding\n// always uses the ARCHIVE's own schemas — game-authored files may carry\n// field sets that differ from the embedded (current) schemas, and a .brz\n// holds exactly one schema per category.\nimport type { Collision, Owner, Vector } from '../brs/types';\nimport { bit } from './bits';\nimport { ByteReader } from './bytes';\nimport { BrzReader } from './brz';\nimport { ENTITY_TYPE_STRUCTS } from './componentDb';\nimport type { FoundFile, WorldFs } from './fs';\nimport { guidToUuid } from './guid';\nimport { BrdbSchema, BrdbValue } from './schema';\nimport { BundleJson, CHUNK_HALF, CHUNK_SIZE } from './world';\n\nexport type { FoundFile, WorldFs } from './fs';\n\nexport const MAIN_GRID = 1;\n\nexport interface ChunkCoord {\n x: number;\n y: number;\n z: number;\n}\n\nexport interface BrickChunkRef {\n index: ChunkCoord;\n offset: ChunkCoord;\n size: number;\n numBricks: number;\n numComponents: number;\n numWires: number;\n}\n\nexport interface EntityChunkRef {\n index: ChunkCoord;\n numEntities: number;\n}\n\nexport interface EntityChunkIndex {\n nextPersistentIndex: number;\n chunks: EntityChunkRef[];\n}\n\nexport interface ComponentInstance {\n typeName: string;\n structName: string | null;\n /** the owning brick's local index within its chunk */\n brickIndex: number;\n data: Record<string, BrdbValue> | null;\n}\n\nexport interface WireEndpoint {\n /** the endpoint brick's local index within its chunk */\n brickIndex: number;\n componentType: string;\n port: string;\n}\n\nexport interface RemoteWireEndpoint extends WireEndpoint {\n gridId: number;\n chunk: ChunkCoord;\n}\n\nexport interface WireChunk {\n /** wires whose source is in the same grid+chunk as the target */\n local: Array<{ source: WireEndpoint; target: WireEndpoint }>;\n /** wires whose source lives in another grid or chunk */\n remote: Array<{ source: RemoteWireEndpoint; target: WireEndpoint }>;\n}\n\nexport interface EntityRecord {\n typeName: string;\n className: string | null;\n persistentIndex: number;\n ownerIndex: number;\n originalOwnerIndex: number;\n location: { X: number; Y: number; Z: number };\n rotation: { X: number; Y: number; Z: number; W: number };\n frozen: boolean;\n sleeping: boolean;\n linearVelocity: { X: number; Y: number; Z: number };\n angularVelocity: { X: number; Y: number; Z: number };\n colors: Record<string, BrdbValue>;\n remainingLifeSpan: number;\n data: Record<string, BrdbValue> | null;\n}\n\nexport interface BrzWorldBrick {\n asset_name_index: number;\n size: Vector;\n position: Vector;\n direction: number;\n rotation: number;\n collision: Collision;\n visibility: boolean;\n material_index: number;\n material_intensity: number;\n color: [number, number, number];\n owner_index: number;\n}\n\n/** Convert one linear-light color channel (0-255) to sRGB. Saves whose\n * colors are stored linear (bColorsAreLinear true, or the field missing\n * entirely on older saves) need this on read; new saves store sRGB already\n * and skip the conversion. Values at or below 0x0F scale into a 15-wide\n * range instead of 255, matching the low-value storage convention used\n * throughout the color format. */\nexport function linearToSrgb(v: number): number {\n const scale = v <= 0x0f ? 15 : 255;\n return Math.trunc(Math.pow(v / 255, 1 / 2.2) * scale);\n}\n\n/** Convert one brick color's R/G/B from linear to sRGB, leaving A (material\n * intensity) untouched. */\nfunction colorToSrgb<T extends { R: number; G: number; B: number }>(c: T): T {\n return {\n ...c,\n R: linearToSrgb(c.R),\n G: linearToSrgb(c.G),\n B: linearToSrgb(c.B),\n };\n}\n\n/** Convert every Color0..Color7 slot of an entity's packed colors struct\n * from linear to sRGB, leaving each slot's A untouched. */\nfunction entityColorsToSrgb(\n colors: Record<string, BrdbValue>\n): Record<string, BrdbValue> {\n const out: Record<string, BrdbValue> = {};\n for (const [key, value] of Object.entries(colors))\n out[key] = colorToSrgb(\n value as { R: number; G: number; B: number; A: number }\n );\n return out;\n}\n\n/** Expand one decoded brick chunk SoA into bricks. Positions are relative to\n * the owning grid's origin (world origin for the main grid). */\nfunction decodeChunkBricks(\n soa: any,\n chunk: ChunkCoord,\n basicCount: number\n): BrzWorldBrick[] {\n // Expand the run-length size table: slot s belongs to the counter\n // covering it; BrickSizes[s] is its size. Bound the expansion by the real\n // payload (a hostile/corrupt chunk could otherwise claim billions of\n // slots from a single counter): the total must not exceed BrickSizes.\n let totalNumSizes = 0;\n for (const counter of soa.BrickSizeCounters)\n totalNumSizes += counter.NumSizes;\n if (totalNumSizes < 0 || totalNumSizes > soa.BrickSizes.length)\n throw new Error('brdb: brick size counters exceed size table');\n const slotAssets: number[] = [];\n for (const counter of soa.BrickSizeCounters)\n for (let s = 0; s < counter.NumSizes; s++)\n slotAssets.push(counter.AssetIndex);\n const start: number = soa.ProceduralBrickStartingIndex;\n // Saves whose colors are stored linear (older saves, or the field simply\n // absent from this archive's schema) need converting to sRGB on read; new\n // saves write bColorsAreLinear = false and are returned unchanged.\n const linear: boolean = soa.bColorsAreLinear ?? true;\n\n const bricks: BrzWorldBrick[] = [];\n for (let i = 0; i < soa.BrickTypeIndices.length; i++) {\n const ty: number = soa.BrickTypeIndices[i];\n let asset_name_index: number;\n let size: Vector;\n if (ty < start) {\n asset_name_index = ty; // basic: same index in the combined list\n size = [0, 0, 0];\n } else {\n const slot = ty - start;\n const sz = soa.BrickSizes[slot];\n if (sz === undefined || slotAssets[slot] === undefined)\n throw new Error(`brdb: invalid procedural size slot ${slot}`);\n asset_name_index = basicCount + slotAssets[slot];\n size = [sz.X, sz.Y, sz.Z];\n }\n const rel = soa.RelativePositions[i];\n const orientation: number = soa.Orientations[i];\n const rawColor = soa.ColorsAndAlphas[i];\n const color = linear ? colorToSrgb(rawColor) : rawColor;\n bricks.push({\n asset_name_index,\n size,\n position: [\n chunk.x * CHUNK_SIZE + CHUNK_HALF + rel.X,\n chunk.y * CHUNK_SIZE + CHUNK_HALF + rel.Y,\n chunk.z * CHUNK_SIZE + CHUNK_HALF + rel.Z,\n ],\n direction: (orientation >> 2) & 0x7,\n rotation: orientation & 0x3,\n collision: {\n player: bit(soa.CollisionFlags_Player, i),\n weapon: bit(soa.CollisionFlags_Weapon, i),\n interaction: bit(soa.CollisionFlags_Interaction, i),\n tool: true, // not stored in brdb\n physics: bit(soa.CollisionFlags_Physics, i),\n },\n visibility: bit(soa.VisibilityFlags, i),\n material_index: soa.MaterialIndices[i],\n material_intensity: color.A,\n color: [color.R, color.G, color.B],\n owner_index: soa.OwnerIndices[i],\n });\n }\n return bricks;\n}\n\n/** Reads a .brz or .brdb world lazily through a WorldFs. Schema blobs and\n * decoded metadata (GlobalData, Owners, Bundle/World JSON) are cached for\n * the lifetime of the reader; chunk payloads are always decoded fresh. For\n * a .brz this is safe by construction (the archive never changes), but a\n * reader built over a live Brdb (Brdb.worldReader()) must not be reused\n * across a write to that database: construct a new reader afterward so\n * cached metadata cannot mix with newly written chunk data. */\nexport class WorldReader {\n private schemas = new Map<string, BrdbSchema>();\n private values = new Map<string, unknown>();\n\n constructor(readonly fs: WorldFs, readonly worldId: number = 0) {}\n\n static from(data: Uint8Array): WorldReader {\n return new WorldReader(BrzReader.from(data));\n }\n\n private path(rel: string): string {\n return `World/${this.worldId}/${rel}`;\n }\n\n /** Parse a .schema blob once per revision; later calls return the cached\n * schema. The public form resolves the schema file's own (latest)\n * revision. */\n schema(path: string): BrdbSchema {\n const found = this.fs.findFileByPath(path);\n if (!found) throw new Error(`brdb: file not found: ${path}`);\n return this.schemaAt(path, found.createdAt);\n }\n\n /** Schema as it existed at `revision` (a created_at timestamp). Schemas\n * evolve over a world's history; data files must decode with the schema\n * revision that was live when they were written. */\n private schemaAt(path: string, revision: number): BrdbSchema {\n const key = `${path}@${revision}`;\n let schema = this.schemas.get(key);\n if (!schema) {\n const found = this.fs.findFileByPathAtRevision(path, revision);\n if (!found)\n throw new Error(`brdb: file not found: ${path} at ${revision}`);\n schema = BrdbSchema.fromBinary(this.fs.readBlob(found.contentId));\n this.schemas.set(key, schema);\n }\n return schema;\n }\n\n private decode(mpsPath: string, schemaPath: string, struct: string): any {\n const found = this.fs.findFileByPath(mpsPath);\n if (!found) throw new Error(`brdb: file not found: ${mpsPath}`);\n return this.schemaAt(schemaPath, found.createdAt).decode(\n this.fs.readBlob(found.contentId),\n struct\n );\n }\n\n private cached<T>(key: string, load: () => T): T {\n if (!this.values.has(key)) this.values.set(key, load());\n return this.values.get(key) as T;\n }\n\n bundle(): BundleJson {\n return this.cached('Meta/Bundle.json', () =>\n JSON.parse(new TextDecoder().decode(this.fs.readFile('Meta/Bundle.json')))\n );\n }\n\n environment(): { environment: string } {\n return this.cached('Meta/World.json', () =>\n JSON.parse(new TextDecoder().decode(this.fs.readFile('Meta/World.json')))\n );\n }\n\n globalData(): any {\n return this.cached(this.path('GlobalData.mps'), () =>\n this.decode(\n this.path('GlobalData.mps'),\n this.path('GlobalData.schema'),\n 'BRSavedGlobalDataSoA'\n )\n );\n }\n\n owners(): any {\n return this.cached(this.path('Owners.mps'), () =>\n this.decode(\n this.path('Owners.mps'),\n this.path('Owners.schema'),\n 'BRSavedOwnerTableSoA'\n )\n );\n }\n\n /** Basic asset names followed by procedural — decoded brick\n * asset_name_index values point into this combined list. */\n brickAssets(): string[] {\n const globalData = this.globalData();\n return [\n ...globalData.BasicBrickAssetNames,\n ...globalData.ProceduralBrickAssetNames,\n ];\n }\n\n materials(): string[] {\n return this.globalData().MaterialAssetNames;\n }\n\n /** Owner rows 1.. (the PUBLIC row 0 is excluded). */\n brickOwners(): Owner[] {\n const owners = this.owners();\n const out: Owner[] = [];\n for (let i = 1; i < owners.UserNames.length; i++) {\n out.push({\n id: guidToUuid(owners.UserIds[i]),\n name: owners.UserNames[i],\n display_name: owners.DisplayNames[i],\n bricks: owners.BrickCounts[i],\n });\n }\n return out;\n }\n\n /** Grid ids under Bricks/Grids: 1 = the main grid, ≥2 = entity sub-grids. */\n gridIds(): number[] {\n return this.fs\n .childFolders(this.path('Bricks/Grids'))\n .map(Number)\n .sort((a, b) => a - b);\n }\n\n brickChunkIndex(gridId: number = MAIN_GRID): BrickChunkRef[] {\n const soa = this.decode(\n this.path(`Bricks/Grids/${gridId}/ChunkIndex.mps`),\n this.path('Bricks/ChunkIndexShared.schema'),\n 'BRSavedBrickChunkIndexSoA'\n );\n // ChunkOffsets/ChunkSizes were added to the format later; older worlds\n // decode without them (the archive's own schema simply omits the\n // keys), so default to a half-chunk offset and the standard chunk size.\n return soa.Chunk3DIndices.map((c: any, i: number) => {\n const off = soa.ChunkOffsets?.[i];\n return {\n index: { x: c.X, y: c.Y, z: c.Z },\n offset: off\n ? { x: off.X, y: off.Y, z: off.Z }\n : { x: CHUNK_HALF, y: CHUNK_HALF, z: CHUNK_HALF },\n size: soa.ChunkSizes?.[i] ?? CHUNK_SIZE,\n numBricks: soa.NumBricks[i],\n numComponents: soa.NumComponents[i],\n numWires: soa.NumWires[i],\n };\n });\n }\n\n /** Decode one brick chunk's SoA. Not cached: chunk payloads are the bulk\n * of an archive and are meant to be streamed, not retained. */\n brickChunkSoa(gridId: number, chunk: ChunkCoord): any {\n return this.decode(\n this.path(\n `Bricks/Grids/${gridId}/Chunks/${chunk.x}_${chunk.y}_${chunk.z}.mps`\n ),\n this.path('Bricks/ChunksShared.schema'),\n 'BRSavedBrickChunkSoA'\n );\n }\n\n /** Lazily decode a grid's bricks, one chunk at a time. Positions are\n * relative to the grid's origin: world origin for the main grid (1),\n * entity-relative for sub-grids (≥2). */\n *bricks(gridId: number = MAIN_GRID): Generator<BrzWorldBrick, void, void> {\n const basicCount = this.globalData().BasicBrickAssetNames.length;\n for (const ref of this.brickChunkIndex(gridId)) {\n yield* decodeChunkBricks(\n this.brickChunkSoa(gridId, ref.index),\n ref.index,\n basicCount\n );\n }\n }\n\n /** Entity chunk registry. */\n entityChunkIndex(): EntityChunkIndex {\n const soa = this.decode(\n this.path('Entities/ChunkIndex.mps'),\n this.path('Entities/ChunkIndex.schema'),\n 'BRSavedEntityChunkIndexSoA'\n );\n return {\n nextPersistentIndex: soa.NextPersistentIndex,\n chunks: soa.Chunk3DIndices.map((c: any, i: number) => ({\n index: { x: c.X, y: c.Y, z: c.Z },\n numEntities: soa.NumEntities[i],\n })),\n };\n }\n\n /** Decode a component chunk: the SoA plus each instance's trailing data\n * struct. Instances stream in counter order; a type whose data-struct\n * slot is missing or \"None\" contributes no trailing bytes. */\n componentChunk(\n gridId: number,\n chunk: ChunkCoord\n ): { soa: any; components: ComponentInstance[] } {\n const mpsPath = this.path(\n `Bricks/Grids/${gridId}/Components/${chunk.x}_${chunk.y}_${chunk.z}.mps`\n );\n const found = this.fs.findFileByPath(mpsPath);\n if (!found) throw new Error(`brdb: file not found: ${mpsPath}`);\n const bytes = this.fs.readBlob(found.contentId);\n const schema = this.schemaAt(\n this.path('Bricks/ComponentsShared.schema'),\n found.createdAt\n );\n const globalData = this.globalData();\n const r = new ByteReader(bytes);\n const soa: any = schema.readValue(r, 'BRSavedComponentChunkSoA');\n // A hostile/corrupt chunk could claim billions of instances from a\n // single counter with no backing data; validate the total against the\n // real row count before looping instead of allocating unbounded.\n let totalInstances = 0;\n for (const counter of soa.ComponentTypeCounters)\n totalInstances += counter.NumInstances;\n if (totalInstances !== soa.ComponentBrickIndices.length)\n throw new Error(\n 'brdb: component counters do not match brick index count'\n );\n\n const components: ComponentInstance[] = [];\n let stream = 0;\n for (const counter of soa.ComponentTypeCounters) {\n const typeName: string =\n globalData.ComponentTypeNames[counter.TypeIndex] ?? '<invalid>';\n const rawStruct: string | undefined =\n globalData.ComponentDataStructNames[counter.TypeIndex];\n const structName = rawStruct && rawStruct !== 'None' ? rawStruct : null;\n for (let i = 0; i < counter.NumInstances; i++) {\n components.push({\n typeName,\n structName,\n brickIndex: soa.ComponentBrickIndices[stream],\n data: structName\n ? (schema.readValue(r, structName) as Record<string, BrdbValue>)\n : null,\n });\n stream += 1;\n }\n }\n if (r.remaining !== 0)\n throw new Error(\n `brdb: ${r.remaining} trailing bytes after component chunk`\n );\n return { soa, components };\n }\n\n /** Decode a wire chunk. Wires live in the TARGET's grid+chunk; local\n * rows are same-grid-same-chunk sources, remote rows carry the source\n * grid + chunk. Component/port names resolve through GlobalData. */\n wireChunk(gridId: number, chunk: ChunkCoord): WireChunk {\n const soa: any = this.decode(\n this.path(\n `Bricks/Grids/${gridId}/Wires/${chunk.x}_${chunk.y}_${chunk.z}.mps`\n ),\n this.path('Bricks/WiresShared.schema'),\n 'BRSavedWireChunkSoA'\n );\n const globalData = this.globalData();\n const endpoint = (row: any): WireEndpoint => ({\n brickIndex: row.BrickIndexInChunk,\n componentType:\n globalData.ComponentTypeNames[row.ComponentTypeIndex] ?? '<invalid>',\n port: globalData.ComponentWirePortNames[row.PortIndex] ?? '<invalid>',\n });\n return {\n local: soa.LocalWireSources.map((s: any, i: number) => ({\n source: endpoint(s),\n target: endpoint(soa.LocalWireTargets[i]),\n })),\n remote: soa.RemoteWireSources.map((s: any, i: number) => ({\n source: {\n ...endpoint(s),\n gridId: s.GridPersistentIndex,\n chunk: {\n x: s.ChunkIndex.X,\n y: s.ChunkIndex.Y,\n z: s.ChunkIndex.Z,\n },\n },\n target: endpoint(soa.RemoteWireTargets[i]),\n })),\n };\n }\n\n /** Decode one entity chunk: the SoA plus each entity's trailing data\n * struct (gated on EntityDataClassNames: absent or \"None\" = no struct). */\n entityChunk(chunk: ChunkCoord): EntityRecord[] {\n const mpsPath = this.path(\n `Entities/Chunks/${chunk.x}_${chunk.y}_${chunk.z}.mps`\n );\n const found = this.fs.findFileByPath(mpsPath);\n if (!found) throw new Error(`brdb: file not found: ${mpsPath}`);\n const bytes = this.fs.readBlob(found.contentId);\n const schema = this.schemaAt(\n this.path('Entities/ChunksShared.schema'),\n found.createdAt\n );\n const globalData = this.globalData();\n const r = new ByteReader(bytes);\n const soa: any = schema.readValue(r, 'BRSavedEntityChunkSoA');\n // A hostile/corrupt chunk could claim billions of entities from a\n // single counter with no backing rows; validate the total against the\n // real row count before looping instead of allocating unbounded.\n let totalEntities = 0;\n for (const counter of soa.TypeCounters)\n totalEntities += counter.NumEntities;\n if (totalEntities !== soa.PersistentIndices.length)\n throw new Error(\n 'brdb: entity counters do not match persistent index count'\n );\n // Very old (legacy) worlds omit EntityDataClassNames from GlobalData\n // entirely; fall back to the known entity-type-to-class table, using\n // 'Unknown' for anything not in it (an 'Unknown' struct decode throws\n // loudly below, same as the reference behavior for such saves).\n const entityDataClassNames: string[] =\n globalData.EntityDataClassNames ??\n globalData.EntityTypeNames.map(\n (n: string) => ENTITY_TYPE_STRUCTS.get(n) ?? 'Unknown'\n );\n // Colors are stored linear on older saves (or any save whose schema\n // simply omits the flag); convert to sRGB on read, alpha untouched.\n const entityColorsLinear: boolean = soa.bColorsAreLinear ?? true;\n\n const entities: EntityRecord[] = [];\n let index = 0;\n for (const counter of soa.TypeCounters) {\n const typeName: string =\n globalData.EntityTypeNames[counter.TypeIndex] ?? '<invalid>';\n const rawClass: string | undefined =\n entityDataClassNames[counter.TypeIndex];\n const className = rawClass && rawClass !== 'None' ? rawClass : null;\n for (let i = 0; i < counter.NumEntities; i++) {\n const rawColors = soa.ColorsAndAlphas[index];\n entities.push({\n typeName,\n className,\n persistentIndex: soa.PersistentIndices[index],\n ownerIndex: soa.OwnerIndices[index],\n // Added alongside the per-entity original-owner update; older\n // saves omit this column and mirror the owner index instead.\n originalOwnerIndex:\n soa.OriginalOwnerIndices?.[index] ?? soa.OwnerIndices[index],\n location: soa.Locations[index],\n rotation: soa.Rotations[index],\n frozen: bit(soa.PhysicsLockedFlags, index),\n sleeping: bit(soa.PhysicsSleepingFlags, index),\n linearVelocity: soa.LinearVelocities[index],\n angularVelocity: soa.AngularVelocities[index],\n colors: entityColorsLinear\n ? entityColorsToSrgb(rawColors)\n : rawColors,\n remainingLifeSpan: soa.RemainingLifeSpans?.[index] ?? 0,\n data: className\n ? (schema.readValue(r, className) as Record<string, BrdbValue>)\n : null,\n });\n index += 1;\n }\n }\n if (r.remaining !== 0)\n throw new Error(`brdb: ${r.remaining} trailing bytes after entity chunk`);\n return entities;\n }\n\n /** Lazily decode every entity, one chunk at a time. */\n *entities(): Generator<EntityRecord, void, void> {\n for (const ref of this.entityChunkIndex().chunks)\n yield* this.entityChunk(ref.index);\n }\n}\n","// .brdb container: the same virtual filesystem as .brz, stored in SQLite\n// with content-addressed blobs and soft-delete revision history. This module\n// is engine-free: it speaks to any handle satisfying BrdbSqlite (better-\n// sqlite3 does structurally). The static openers below lazily load\n// better-sqlite3 so the web bundle never needs it.\nimport { blake3 } from '@noble/hashes/blake3.js';\nimport { decompress as zstdDecompress } from 'fzstd';\nimport type { Compressor } from './brz';\nimport type { FoundFile, WorldFs } from './fs';\nimport type { PendingEntry, PendingNode } from './pending';\nimport { WorldReader } from './reader';\nimport { saveToPendingFs, WriteBrzInput, WriteBrzOptions } from './world';\n\nexport interface BrdbStatement {\n run(...params: unknown[]): { lastInsertRowid: number | bigint };\n get(...params: unknown[]): unknown;\n all(...params: unknown[]): unknown[];\n}\n\nexport interface BrdbSqlite {\n exec(sql: string): unknown;\n prepare(sql: string): BrdbStatement;\n close(): void;\n}\n\nexport interface BrdbBlob {\n blobId: number;\n compression: number;\n sizeUncompressed: number;\n sizeCompressed: number;\n deltaBaseId: number | null;\n hash: Uint8Array;\n content: Uint8Array;\n}\n\nexport interface BrdbRevision {\n revisionId: number;\n description: string;\n createdAt: number;\n}\n\nexport interface WritePendingOptions {\n /** Revision timestamp in unix seconds. Defaults to the wall clock. */\n createdAt?: number;\n /** Blob compressor. undefined uses the instance default (zstd level 14\n * when opened through the lazy openers); null stores raw. */\n compress?: Compressor | null;\n}\n\n// The exact statement text matters: SQLite stores CREATE statements verbatim\n// in sqlite_schema, and the parity suite compares this against databases\n// created by the reference implementation (whose DDL indents columns with\n// four tabs and closing parens with three).\nconst C = '\\n\\t\\t\\t\\t';\nconst E = '\\n\\t\\t\\t';\nexport const BRDB_SQLITE_SCHEMA =\n `CREATE TABLE blobs (${C}blob_id INTEGER PRIMARY KEY,${C}compression INTEGER,` +\n `${C}size_uncompressed INTEGER,${C}size_compressed INTEGER,` +\n `${C}delta_base_id INTEGER REFERENCES blobs(blob_id),${C}hash BLOB,` +\n `${C}content BLOB${E});\\n` +\n `CREATE TABLE revisions (${C}revision_id INTEGER PRIMARY KEY,` +\n `${C}description TEXT,${C}created_at INTEGER${E});\\n` +\n `CREATE TABLE folders (${C}folder_id INTEGER PRIMARY KEY,` +\n `${C}parent_id INTEGER REFERENCES folders(folder_id),${C}name TEXT,` +\n `${C}created_at INTEGER,${C}deleted_at INTEGER${E});\\n` +\n `CREATE TABLE files (${C}file_id INTEGER PRIMARY KEY,` +\n `${C}parent_id INTEGER REFERENCES folders(folder_id),${C}name TEXT,` +\n `${C}content_id INTEGER REFERENCES blobs(blob_id),${C}created_at INTEGER,` +\n `${C}deleted_at INTEGER${E});\\n` +\n 'CREATE INDEX blobs_size_hash ON blobs(size_uncompressed, hash);\\n' +\n 'CREATE INDEX folders_parent_name_deleted ON folders(parent_id, name, deleted_at);\\n' +\n 'CREATE INDEX files_parent_name_deleted ON files(parent_id, name, deleted_at);';\n\nconst REQUIRED_TABLES = ['blobs', 'revisions', 'folders', 'files'] as const;\n\nconst now = () => Math.floor(Date.now() / 1000);\n\n// src/ stays isomorphic (no @types/node), so Buffer has no ambient type here.\n// This module-local declaration describes just enough of the real Node global\n// to type the guarded access below; it shadows (does not conflict with) the\n// full Node typing that test/tsconfig.json brings in for the test suite.\ndeclare const Buffer:\n | {\n from(\n data: ArrayBufferLike | Uint8Array,\n byteOffset?: number,\n length?: number\n ): Uint8Array;\n }\n | undefined;\n\n/** Bind bytes as a BLOB parameter. better-sqlite3 requires Buffer; when\n * unavailable (browser engines), pass the Uint8Array through. */\nconst asBlob = (bytes: Uint8Array): Uint8Array =>\n typeof Buffer === 'undefined'\n ? bytes\n : Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\ndeclare const process: { getBuiltinModule?(name: string): any } | undefined;\n\n/** A node builtin without any import machinery (bundler inert and safe\n * under test runners that cannot compile dynamic import at runtime).\n * Null outside node or below Node 22.3. */\nconst builtin = (name: string): any => {\n try {\n return typeof process !== 'undefined'\n ? process?.getBuiltinModule?.(name) ?? null\n : null;\n } catch {\n return null;\n }\n};\n\n/** Dynamic import kept opaque so bundlers never try to resolve engine or\n * node-builtin specifiers; the web bundle stays SQLite-free. Constructed\n * lazily so merely loading the library never evaluates code under a CSP\n * that bans eval. */\nlet dynamicImport: ((specifier: string) => Promise<any>) | null = null;\nconst loadModule = (specifier: string): Promise<any> => {\n dynamicImport ??= new Function(\n 'specifier',\n 'return import(specifier)'\n ) as any;\n return dynamicImport!(specifier);\n};\n\ninterface SerializableSqlite extends BrdbSqlite {\n serialize(): Uint8Array;\n}\n\nasync function engine(): Promise<\n new (\n source: string | Uint8Array,\n options?: { readonly?: boolean; fileMustExist?: boolean }\n ) => SerializableSqlite\n> {\n try {\n const mod: any = await (\n Brdb.engineLoader ?? (() => loadModule('better-sqlite3'))\n )();\n return mod.default ?? mod;\n } catch {\n throw new Error(\n 'brdb: the Brdb openers require better-sqlite3 (npm install better-sqlite3), or wrap your own handle with new Brdb(db)'\n );\n }\n}\n\nfunction nodeZstd(): Compressor | null {\n const zlib = builtin('node:zlib');\n if (typeof zlib?.zstdCompressSync !== 'function') return null;\n const level = zlib.constants.ZSTD_c_compressionLevel;\n return data =>\n new Uint8Array(zlib.zstdCompressSync(data, { params: { [level]: 14 } }));\n}\n\nexport class Brdb implements WorldFs {\n /** Override how the better-sqlite3 module is resolved. Useful when a\n * bundler or test runner cannot execute a native dynamic import. */\n static engineLoader: (() => Promise<unknown>) | null = null;\n\n /** zstd compressor applied to new blobs when no per-write compressor is\n * given. The lazy openers set this; a directly-wrapped handle has none. */\n defaultCompress: Compressor | null = null;\n\n constructor(readonly db: BrdbSqlite) {\n for (const t of REQUIRED_TABLES) {\n const row = this.db\n .prepare(\n \"SELECT name FROM sqlite_schema WHERE type = 'table' AND name = ?\"\n )\n .get(t);\n if (!row) throw new Error(`brdb: missing required table '${t}'`);\n }\n }\n\n /** Create-container semantics on any handle: run the DDL and stamp the\n * initial revision. */\n static init(db: BrdbSqlite, createdAt: number = now()): Brdb {\n db.exec(BRDB_SQLITE_SCHEMA);\n const brdb = new Brdb(db);\n brdb.createRevision('Initial Revision', createdAt);\n return brdb;\n }\n\n /** Construct create/open semantics on a handle, closing it if construction\n * (the DDL or the required-table guard) throws so a failed opener never\n * leaks the underlying handle (and, on Windows, never leaves it locked). */\n private static async wrap(db: BrdbSqlite, init: boolean): Promise<Brdb> {\n try {\n const brdb = init ? Brdb.init(db) : new Brdb(db);\n brdb.defaultCompress = nodeZstd();\n return brdb;\n } catch (err) {\n db.close();\n throw err;\n }\n }\n\n /** Open an existing database file. Rejects (without creating a file) when\n * the path does not already exist. */\n static async open(path: string): Promise<Brdb> {\n return Brdb.wrap(\n new (await engine())(path, { fileMustExist: true }),\n false\n );\n }\n\n /** Open an existing database file read-only. Rejects (without creating a\n * file) when the path does not already exist. */\n static async openReadonly(path: string): Promise<Brdb> {\n return Brdb.wrap(\n new (await engine())(path, { readonly: true, fileMustExist: true }),\n false\n );\n }\n\n /** Create a new database file (container schema + initial revision). */\n static async create(path: string): Promise<Brdb> {\n return Brdb.wrap(new (await engine())(path), true);\n }\n\n /** Open the file if it exists, otherwise create it. */\n static async openOrCreate(path: string): Promise<Brdb> {\n const fs = builtin('node:fs');\n if (!fs)\n throw new Error(\n 'brdb: openOrCreate requires node 22.3 or newer; call open or create explicitly'\n );\n return fs.existsSync(path) ? Brdb.open(path) : Brdb.create(path);\n }\n\n /** New in-memory database. */\n static async memory(): Promise<Brdb> {\n return Brdb.wrap(new (await engine())(':memory:'), true);\n }\n\n /** Open a database from serialized bytes. */\n static async fromBytes(bytes: Uint8Array): Promise<Brdb> {\n return Brdb.wrap(new (await engine())(Buffer.from(bytes)), false);\n }\n\n /** Serialize the database to bytes (requires a better-sqlite3 handle). */\n toBytes(): Uint8Array {\n const serialize = (this.db as Partial<SerializableSqlite>).serialize;\n if (typeof serialize !== 'function')\n throw new Error(\n 'brdb: toBytes requires a better-sqlite3 database handle'\n );\n return new Uint8Array(serialize.call(this.db));\n }\n\n /** Write a world save as one revision. */\n save(\n description: string,\n save: WriteBrzInput,\n options: Omit<WriteBrzOptions, 'compress'> & WritePendingOptions = {}\n ): void {\n this.writePending(description, saveToPendingFs(save, options), options);\n }\n\n /** Lazy world reader over this database (same surface as .brz reading).\n * The reader caches decoded metadata (GlobalData, Owners, Bundle/World\n * JSON) for its lifetime; if this Brdb is written to (save/writePending)\n * after the reader is created, construct a fresh worldReader() rather\n * than reusing the old one, or later reads may mix stale cached metadata\n * with newly written chunk data. */\n worldReader(): WorldReader {\n return new WorldReader(this);\n }\n\n sqliteSchema(): string {\n return (this.db.prepare('SELECT sql FROM sqlite_schema').all() as any[])\n .map(r => r.sql)\n .join('\\n');\n }\n\n createRevision(description: string, createdAt: number = now()): number {\n return Number(\n this.db\n .prepare(\n 'INSERT INTO revisions (description, created_at) VALUES (?, ?);'\n )\n .run(description, createdAt).lastInsertRowid\n );\n }\n\n revisions(): BrdbRevision[] {\n return (\n this.db\n .prepare(\n 'SELECT revision_id, description, created_at FROM revisions ORDER BY revision_id;'\n )\n .all() as any[]\n ).map(r => ({\n revisionId: Number(r.revision_id),\n description: String(r.description),\n createdAt: Number(r.created_at),\n }));\n }\n\n insertFolder(\n name: string,\n parentId: number | null,\n createdAt: number\n ): number {\n return Number(\n this.db\n .prepare(\n 'INSERT INTO folders (name, parent_id, created_at) VALUES (?, ?, ?);'\n )\n .run(name, parentId, createdAt).lastInsertRowid\n );\n }\n\n insertFile(\n name: string,\n parentId: number | null,\n contentId: number,\n createdAt: number\n ): number {\n return Number(\n this.db\n .prepare(\n 'INSERT INTO files (name, parent_id, content_id, created_at) VALUES (?, ?, ?, ?);'\n )\n .run(name, parentId, contentId, createdAt).lastInsertRowid\n );\n }\n\n /** Insert a blob (dedup by hash + uncompressed size), compressing when the\n * compressor yields something strictly smaller. */\n insertBlob(\n content: Uint8Array,\n hash: Uint8Array,\n compress: Compressor | null\n ): number {\n const existing = this.findBlobByHash(content.length, hash);\n if (existing) return existing.blobId;\n const sizeUncompressed = content.length;\n let sizeCompressed = sizeUncompressed;\n let compression = 0;\n let stored = content;\n const compressed = compress ? compress(content) : null;\n if (compressed && compressed.length < sizeUncompressed) {\n sizeCompressed = compressed.length;\n compression = 1;\n stored = compressed;\n }\n return Number(\n this.db\n .prepare(\n 'INSERT INTO blobs (compression, size_uncompressed, size_compressed, delta_base_id, hash, content) VALUES (?, ?, ?, ?, ?, ?);'\n )\n .run(\n compression,\n sizeUncompressed,\n sizeCompressed,\n null,\n asBlob(hash),\n asBlob(stored)\n ).lastInsertRowid\n );\n }\n\n findBlobByHash(size: number, hash: Uint8Array): BrdbBlob | null {\n const row = this.db\n .prepare(\n 'SELECT blob_id, compression, size_uncompressed, size_compressed, delta_base_id, hash, content FROM blobs WHERE hash = ? AND size_uncompressed = ? LIMIT 1;'\n )\n .get(asBlob(hash), size);\n return row ? rowToBlob(row) : null;\n }\n\n findBlob(contentId: number): BrdbBlob {\n const row = this.db\n .prepare(\n 'SELECT blob_id, compression, size_uncompressed, size_compressed, delta_base_id, hash, content FROM blobs WHERE blob_id = ?;'\n )\n .get(contentId);\n if (!row) throw new Error(`brdb: blob ${contentId} not found`);\n return rowToBlob(row);\n }\n\n deleteFile(fileId: number, deletedAt: number): void {\n this.db\n .prepare('UPDATE files SET deleted_at = ? WHERE file_id = ?;')\n .run(deletedAt, fileId);\n }\n\n deleteFolder(folderId: number, deletedAt: number): void {\n this.db\n .prepare('UPDATE folders SET deleted_at = ? WHERE folder_id = ?;')\n .run(deletedAt, folderId);\n }\n\n findFolder(parentId: number | null, name: string): number | null {\n const row = this.db\n .prepare(\n `SELECT folder_id FROM folders WHERE parent_id ${\n parentId === null ? 'IS NULL' : '= ?'\n } AND name = ? AND deleted_at IS NULL;`\n )\n .get(...(parentId === null ? [name] : [parentId, name]));\n return row ? Number((row as any).folder_id) : null;\n }\n\n /** Like findFolder, but resolves against the tree as of a revision date\n * instead of the current tree. Used by findFileByPathAtRevision so an\n * ancestor folder that was soft-deleted after `date` does not hide a file\n * that was still live at `date`. */\n findFolderAtRevision(\n parentId: number | null,\n name: string,\n date: number\n ): number | null {\n const row = this.db\n .prepare(\n `SELECT folder_id FROM folders WHERE parent_id ${\n parentId === null ? 'IS NULL' : '= ?'\n } AND name = ? AND created_at <= ? AND (deleted_at IS NULL OR deleted_at > ?) ORDER BY created_at ASC LIMIT 1;`\n )\n .get(\n ...(parentId === null\n ? [name, date, date]\n : [parentId, name, date, date])\n );\n return row ? Number((row as any).folder_id) : null;\n }\n\n findFile(parentId: number | null, name: string): FoundFile | null {\n const row = this.db\n .prepare(\n `SELECT content_id, created_at FROM files WHERE parent_id ${\n parentId === null ? 'IS NULL' : '= ?'\n } AND name = ? AND deleted_at IS NULL;`\n )\n .get(...(parentId === null ? [name] : [parentId, name]));\n return row ? rowToFound(row) : null;\n }\n\n findFileAtRevision(\n parentId: number | null,\n name: string,\n date: number\n ): FoundFile | null {\n const row = this.db\n .prepare(\n `SELECT content_id, created_at FROM files WHERE parent_id ${\n parentId === null ? 'IS NULL' : '= ?'\n } AND name = ? AND created_at <= ? AND (deleted_at IS NULL OR deleted_at > ?) ORDER BY created_at ASC LIMIT 1;`\n )\n .get(\n ...(parentId === null\n ? [name, date, date]\n : [parentId, name, date, date])\n );\n return row ? rowToFound(row) : null;\n }\n\n close(): void {\n this.db.close();\n }\n\n /** Merge a COMPLETE pending tree against the current tree in one\n * transaction: identical files are noops, changed files are soft-deleted\n * and reinserted, and existing entries absent from the pending tree are\n * soft-deleted recursively. */\n writePending(\n description: string,\n pending: PendingEntry[],\n options: WritePendingOptions = {}\n ): void {\n const createdAt = options.createdAt ?? now();\n const compress =\n options.compress === undefined ? this.defaultCompress : options.compress;\n this.db.exec('BEGIN');\n try {\n this.createRevision(description, createdAt);\n this.mergeFolder(null, pending, createdAt, compress);\n this.db.exec('COMMIT');\n } catch (err) {\n // Some SQLite error classes (SQLITE_FULL, SQLITE_IOERR, SQLITE_NOMEM)\n // auto-rollback the transaction before the throw reaches here; an\n // explicit ROLLBACK would then fail with its own unrelated error and\n // mask the original one. Swallow that failure so `err` always wins.\n try {\n this.db.exec('ROLLBACK');\n } catch {\n // transaction already rolled back by SQLite\n }\n throw err;\n }\n }\n\n private currentFolders(\n parentId: number | null\n ): { folderId: number; name: string }[] {\n const stmt = this.db.prepare(\n `SELECT folder_id, name FROM folders WHERE parent_id ${\n parentId === null ? 'IS NULL' : '= ?'\n } AND deleted_at IS NULL ORDER BY name;`\n );\n const rows = (parentId === null ? stmt.all() : stmt.all(parentId)) as any[];\n return rows.map(r => ({\n folderId: Number(r.folder_id),\n name: String(r.name),\n }));\n }\n\n private currentFiles(\n parentId: number | null\n ): { fileId: number; name: string; contentId: number | null }[] {\n const stmt = this.db.prepare(\n `SELECT file_id, name, content_id FROM files WHERE parent_id ${\n parentId === null ? 'IS NULL' : '= ?'\n } AND deleted_at IS NULL ORDER BY name;`\n );\n const rows = (parentId === null ? stmt.all() : stmt.all(parentId)) as any[];\n return rows.map(r => ({\n fileId: Number(r.file_id),\n name: String(r.name),\n contentId: r.content_id === null ? null : Number(r.content_id),\n }));\n }\n\n private mergeFolder(\n parentId: number | null,\n changes: PendingEntry[],\n createdAt: number,\n compress: Compressor | null\n ): void {\n const folders = new Map(\n this.currentFolders(parentId).map(f => [f.name, f.folderId])\n );\n const files = new Map(this.currentFiles(parentId).map(f => [f.name, f]));\n const seen = new Set<string>();\n for (const [name, node] of changes) {\n if (seen.has(name))\n throw new Error(`brdb: duplicate name '${name}' in pending tree`);\n seen.add(name);\n if (node.type === 'folder') {\n if (files.has(name))\n throw new Error(\n `brdb: pending folder '${name}' collides with an existing file`\n );\n const existing = folders.get(name);\n if (existing !== undefined)\n this.mergeFolder(existing, node.children, createdAt, compress);\n else this.insertPending(name, parentId, node, createdAt, compress);\n } else {\n if (folders.has(name))\n throw new Error(\n `brdb: pending file '${name}' collides with an existing folder`\n );\n const existing = files.get(name);\n if (existing === undefined) {\n this.insertPending(name, parentId, node, createdAt, compress);\n continue;\n }\n const hash = blake3(node.content);\n const blob = this.findBlobByHash(node.content.length, hash);\n if (blob && existing.contentId === blob.blobId) continue;\n this.deleteFile(existing.fileId, createdAt);\n const contentId = this.insertBlob(node.content, hash, compress);\n this.insertFile(name, parentId, contentId, createdAt);\n }\n }\n for (const [name, folderId] of folders)\n if (!seen.has(name)) this.deleteFolderRecursive(folderId, createdAt);\n for (const [name, f] of files)\n if (!seen.has(name)) this.deleteFile(f.fileId, createdAt);\n }\n\n private insertPending(\n name: string,\n parentId: number | null,\n node: PendingNode,\n createdAt: number,\n compress: Compressor | null\n ): void {\n if (node.type === 'folder') {\n // The reference writer stamps freshly-inserted folders with the wall\n // clock rather than the revision timestamp; we use the revision\n // timestamp for both (content-equivalent, deterministic under an\n // injected createdAt).\n const folderId = this.insertFolder(name, parentId, createdAt);\n const seen = new Set<string>();\n for (const [childName, child] of node.children) {\n if (seen.has(childName))\n throw new Error(\n `brdb: duplicate name '${childName}' in pending tree`\n );\n seen.add(childName);\n this.insertPending(childName, folderId, child, createdAt, compress);\n }\n } else {\n const contentId = this.insertBlob(\n node.content,\n blake3(node.content),\n compress\n );\n this.insertFile(name, parentId, contentId, createdAt);\n }\n }\n\n private deleteFolderRecursive(folderId: number, deletedAt: number): void {\n this.deleteFolder(folderId, deletedAt);\n for (const child of this.currentFolders(folderId))\n this.deleteFolderRecursive(child.folderId, deletedAt);\n for (const f of this.currentFiles(folderId))\n this.deleteFile(f.fileId, deletedAt);\n }\n\n /** Resolve a folder path. '' is the root. With no date, resolves against\n * the current tree; with a date, resolves each segment against the tree\n * as of that revision (see findFolderAtRevision). */\n private folderIdOf(path: string, date?: number): number | null {\n if (path === '') return null;\n let id: number | null = null;\n for (const part of path.split('/')) {\n // Real crate-written databases stamp a freshly inserted folder with\n // the wall clock mid-transaction, so a folder's created_at can be\n // LATER than the files it contains (the revision/file timestamps are\n // captured once at transaction start). When the at-revision lookup\n // misses for that reason, fall back to the current tree so such an\n // ancestor still resolves; a folder deleted after `date` is still\n // caught by the at-revision branch first.\n const next =\n date === undefined\n ? this.findFolder(id, part)\n : this.findFolderAtRevision(id, part, date) ??\n this.findFolder(id, part);\n if (next === null) return null;\n id = next;\n }\n return id;\n }\n\n findFileByPath(path: string): FoundFile | null {\n if (path.startsWith('/'))\n throw new Error('brdb: absolute paths not allowed');\n const slash = path.lastIndexOf('/');\n const parent = slash === -1 ? '' : path.slice(0, slash);\n const parentId = this.folderIdOf(parent);\n if (parent !== '' && parentId === null) return null;\n return this.findFile(parentId, path.slice(slash + 1));\n }\n\n /** Both folders and the leaf file resolve against the tree as of `date`,\n * so a file is still reachable at a date before an ancestor folder was\n * later soft-deleted. */\n findFileByPathAtRevision(path: string, date: number): FoundFile | null {\n if (path.startsWith('/'))\n throw new Error('brdb: absolute paths not allowed');\n const slash = path.lastIndexOf('/');\n const parent = slash === -1 ? '' : path.slice(0, slash);\n const parentId = this.folderIdOf(parent, date);\n if (parent !== '' && parentId === null) return null;\n return this.findFileAtRevision(parentId, path.slice(slash + 1), date);\n }\n\n childFolders(path: string): string[] {\n const parentId = this.folderIdOf(path);\n if (path !== '' && parentId === null) return [];\n return this.currentFolders(parentId).map(f => f.name);\n }\n\n childFiles(path: string): string[] {\n const parentId = this.folderIdOf(path);\n if (path !== '' && parentId === null) return [];\n return this.currentFiles(parentId).map(f => f.name);\n }\n\n /** Decompressed blob content. Empty files (contentId -1) yield empty\n * bytes, matching the .brz reader's documented deviation. */\n readBlob(contentId: number): Uint8Array {\n if (contentId === -1) return new Uint8Array(0);\n const blob = this.findBlob(contentId);\n if (blob.deltaBaseId !== null)\n throw new Error('brdb: delta blobs are not supported');\n let content = blob.content;\n if (blob.compression === 1)\n content = zstdDecompress(content, new Uint8Array(blob.sizeUncompressed));\n else if (blob.compression !== 0)\n throw new Error(`brdb: unknown blob compression ${blob.compression}`);\n if (content.length !== blob.sizeUncompressed)\n throw new Error('brdb: blob uncompressed size mismatch');\n return content;\n }\n\n readFile(path: string): Uint8Array {\n const found = this.findFileByPath(path);\n if (!found) throw new Error(`brdb: file not found: ${path}`);\n return this.readBlob(found.contentId);\n }\n\n /** The full current tree as a pending tree (folders first, then files,\n * each in name order). */\n toPending(): PendingEntry[] {\n const walk = (parentId: number | null): PendingEntry[] => {\n const out: PendingEntry[] = [];\n for (const f of this.currentFolders(parentId))\n out.push([f.name, { type: 'folder', children: walk(f.folderId) }]);\n for (const f of this.currentFiles(parentId))\n out.push([\n f.name,\n { type: 'file', content: this.readBlob(f.contentId ?? -1) },\n ]);\n return out;\n };\n return walk(null);\n }\n}\n\nconst rowToBlob = (row: any): BrdbBlob => ({\n blobId: Number(row.blob_id),\n compression: Number(row.compression),\n sizeUncompressed: Number(row.size_uncompressed),\n sizeCompressed: Number(row.size_compressed),\n deltaBaseId: row.delta_base_id === null ? null : Number(row.delta_base_id),\n hash: new Uint8Array(row.hash),\n content: new Uint8Array(row.content),\n});\n\nconst rowToFound = (row: any): FoundFile => ({\n contentId: row.content_id === null ? -1 : Number(row.content_id),\n createdAt: Number(row.created_at),\n});\n","export {\n CHUNK_HALF,\n CHUNK_SIZE,\n saveToPendingFs,\n toRelative,\n writeBrzLegacy,\n} from './world';\nexport type {\n BrdbBrickExtras,\n BrdbComponentInput,\n BrdbSaveExtras,\n BrdbWireEndpointInput,\n BrdbWireInput,\n BundleJson,\n WriteBrzInput,\n WriteBrzOptions,\n WriteBrzSave,\n} from './world';\nexport { MAIN_GRID, WorldReader } from './reader';\nexport type {\n BrickChunkRef,\n BrzWorldBrick,\n ChunkCoord,\n ComponentInstance,\n EntityChunkIndex,\n EntityChunkRef,\n EntityRecord,\n FoundFile,\n RemoteWireEndpoint,\n WireChunk,\n WireEndpoint,\n WorldFs,\n} from './reader';\nexport { BrzReader, writeBrzContainer } from './brz';\nexport type { BrzContainerOptions, Compressor } from './brz';\nexport { BrdbSchema, embeddedSchema } from './schema';\nexport type {\n BrdbValue,\n BrdbVariant,\n PropDesc,\n SchemaSource,\n SchemaSourceProp,\n} from './schema';\nexport type { SchemaData } from './schemaText';\nexport type { EmbeddedSchemaName } from './schemas';\nexport { guidToUuid, PUBLIC_GUID, uuidToGuid } from './guid';\nexport type { BrGuid } from './guid';\nexport { file, folder } from './pending';\nexport type { PendingEntry, PendingNode } from './pending';\nexport { isProceduralAsset } from './catalog';\nexport { Brdb, BRDB_SQLITE_SCHEMA } from './brdb';\nexport type {\n BrdbBlob,\n BrdbRevision,\n BrdbSqlite,\n BrdbStatement,\n WritePendingOptions,\n} from './brdb';\n// Low-level building blocks for custom SoA (de)serializers: the packed\n// bit-flag column helpers, the growable byte buffers, and the exact\n// msgpack primitives the format uses (including its encoding deviations).\nexport { bit, BitFlags } from './bits';\nexport { ByteReader, ByteWriter } from './bytes';\nexport * as msgpack from './msgpack';\n","import read from './brs/read';\nimport write from './brs/write';\nimport * as utils from './brs/utils';\nimport * as constants from './brs/constants';\nimport * as types from './brs/types';\nimport * as brdb from './brdb';\nexport * from './brs/types';\n\n// https://i.imgur.com/cv1fDWs.png\nconst brs = { read, write, utils, constants, types, brdb };\nexport { read, write, utils, constants, types, brdb };\nexport { Brdb, WorldReader, writeBrzLegacy } from './brdb';\nexport default brs;\n\nif (typeof window !== 'undefined') {\n (window as any).BRS = brs;\n}\n"],"x_google_ignoreList":[1,16,17,18,19,20,21,22],"mappings":"qgBAEa,EAAQ,IAAI,WAAW,CAAC,GAAI,GAAI,EAAE,CAAC,EAEnC,EAAU,WACV,EAAqB,2tBCJlC,IAAI,EAAU,EACV,EAAW,EACX,EAAS,EACT,EAAY,EAChB,SAAS,EAAO,EAAK,CACpB,IAAI,EAAM,EAAI,OACd,KAAO,EAAE,GAAO,GAAG,EAAI,GAAO,CAC/B,CACA,IAAI,EAAe,EACf,EAAe,EACf,EAAY,EACZ,EAAe,GACf,EAAW,IACX,EAAU,IACV,EAAU,GACV,EAAW,GACX,EAAc,IACd,EAAW,GACX,EAAW,GACX,EAAc,EACd,EAAY,IACZ,EAAU,GACV,EAAY,GACZ,EAAc,GACd,EAAc,IAAI,WAAW,CAChC,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACD,CAAC,EACG,GAAc,IAAI,WAAW,CAChC,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,CAAC,EACG,GAAe,IAAI,WAAW,CACjC,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACD,CAAC,EACG,GAAW,IAAI,WAAW,CAC7B,GACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,GACA,EACA,GACA,EACA,GACA,EACA,GACA,EACA,GACA,EACA,EACD,CAAC,EACG,GAAgB,IAChB,GAAmB,MAAM,IAAM,CAAC,EACpC,EAAO,EAAY,EACnB,IAAI,GAAmB,MAAM,EAAU,CAAC,EACxC,EAAO,EAAY,EACnB,IAAI,GAAiB,MAAM,EAAa,EACxC,EAAO,EAAU,EACjB,IAAI,GAAmB,MAAM,GAAG,EAChC,EAAO,EAAY,EACnB,IAAI,GAAkB,MAAM,CAAY,EACxC,EAAO,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AK,EAAK,IAAW,CAC3B,EAAO,GAAO,EAAO,QAAU,GAAQ,GAAK,GAAM,IAClD,SAAS,KACV,MAAO,GAAI,EAAK,GAAI,CACnB,EAAM,KAAO,GACb,MAAM,GACP,KAAO,CACN,EAAK,IAAM,8BACX,EAAM,KAAO,GACb,MAAM,GACP,CACA,KACD,CACD,OAAS,EAAM,GAAQ,EAAO,GAC9B,EAAM,GAAQ,EACd,GAAO,EACP,GAAQ,GAAO,EACf,IAAS,GAAK,GAAQ,EACtB,EAAK,QAAU,EACf,EAAK,SAAW,EAChB,EAAK,SAAW,EAAM,EAAO,GAAK,EAAO,GAAO,GAAK,EAAM,GAC3D,EAAK,UAAY,EAAO,EAAM,KAAO,EAAM,GAAQ,KAAO,EAAO,GACjE,EAAM,KAAO,EACb,EAAM,KAAO,CACd,CAGA,IAAI,GAAU,GACV,GAAgB,IAChB,GAAiB,IACjB,GAAU,EACV,GAAS,EACT,GAAU,EACV,GAAQ,IAAI,YAAY,CAC3B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,CACD,CAAC,EACG,GAAO,IAAI,WAAW,CACzB,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,EACD,CAAC,EACG,GAAQ,IAAI,YAAY,CAC3B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,EACA,CACD,CAAC,EACG,GAAO,IAAI,WAAW,CACzB,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,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CACA,wCACF,EACA,CACE,8CACA,6CACF,EACA,CACE,mDACA,kDACF,EACA,CACE,yCACA,wCACF,EACA,CACE,mDACA,kDACF,EACA,CACE,oDACA,oDACF,EACA,CACE,qDACA,oDACF,EACA,CACE,mDACA,iDACF,EACA,CACE,sDACA,oDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,iDACA,gDACF,EACA,CACE,uDACA,sDACF,EACA,CACE,oDACA,mDACF,EACA,CACE,iDACA,mDACF,EACA,CACE,iDACA,mDACF,EACA,CACE,iDACA,gDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,2DACA,0DACF,EACA,CACE,oDACA,mDACF,EACA,CACE,qDACA,iDACF,EACA,CACE,wDACA,sDACF,EACA,CACE,qDACA,iDACF,EACA,CACE,mDACA,kDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,iDACA,gDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,2CACA,yCACF,EACA,CACE,gEACA,+DACF,EACA,CACE,iEACA,gEACF,EACA,CACE,gEACA,+DACF,EACA,CACE,+DACA,8DACF,EACA,CACE,qDACA,oDACF,EACA,CACE,wDACA,uDACF,EACA,CACE,gEACA,+DACF,EACA,CACE,wDACA,uDACF,EACA,CACE,wDACA,uDACF,EACA,CACE,gEACA,+DACF,EACA,CACE,iEACA,gEACF,EACA,CACE,gEACA,+DACF,EACA,CACE,+DACA,8DACF,EACA,CACE,gEACA,+DACF,EACA,CACE,uDACA,sDACF,EACA,CACE,gDACA,+CACF,EACA,CACE,2DACA,0DACF,EACA,CACE,8DACA,6DACF,EACA,CACE,6DACA,4DACF,EACA,CACE,yDACA,wDACF,EACA,CACE,2DACA,0DACF,EACA,CACE,6DACA,4DACF,EACA,CACE,uDACA,sDACF,EACA,CACE,qEACA,oEACF,EACA,CACE,6DACA,4DACF,EACA,CACE,+DACA,8DACF,EACA,CACE,iEACA,gEACF,EACA,CACE,0CACA,yCACF,EACA,CACE,+DACA,8DACF,EACA,CACE,uDACA,sDACF,EACA,CACE,8DACA,6DACF,EACA,CACE,6DACA,4DACF,EACA,CACE,uDACA,sDACF,EACA,CACE,+DACA,8DACF,EACA,CACE,uDACA,sDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,uDACA,sDACF,EACA,CACE,4DACA,2DACF,EACA,CACE,8DACA,6DACF,EACA,CACE,qDACA,oDACF,EACA,CACE,+DACA,8DACF,EACA,CACE,6DACA,4DACF,EACA,CACE,uDACA,sDACF,EACA,CACE,+DACA,8DACF,EACA,CACE,uDACA,sDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,uDACA,sDACF,EACA,CACE,oDACA,mDACF,EACA,CACE,kEACA,iEACF,EACA,CACE,oEACA,mEACF,EACA,CACE,kEACA,iDACF,EACA,CACE,sEACA,qEACF,EACA,CACE,6DACA,4DACF,EACA,CACE,iEACA,gEACF,EACA,CACE,qDACA,oDACF,EACA,CACE,2DACA,0DACF,EACA,CACE,qEACA,oEACF,EACA,CACE,yDACA,wDACF,EACA,CACE,uEACA,6DACF,EACA,CACE,2EACA,iEACF,EACA,CACE,wDACA,uDACF,EACA,CACE,iEACA,6DACF,EACA,CACE,qDACA,oDACF,EACA,CACE,qEACA,iEACF,EACA,CACE,2DACA,0DACF,EACA,CACE,sDACA,qDACF,EACA,CACE,oDACA,mDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,mDACA,kDACF,EACA,CACE,2CACA,0CACF,EACA,CACE,0CACA,yCACF,EACA,CACE,2CACA,0CACF,EACA,CACE,0CACA,wCACF,EACA,CACE,4CACA,2CACF,EACA,CACE,kDACA,iDACF,EACA,CACE,4CACA,iDACF,EACA,CACE,+CACA,8CACF,EACA,CACE,oDACA,2CACF,EACA,CACE,gDACA,8CACF,EACA,CACE,+CACA,8CACF,EACA,CACE,+CACA,2CACF,EACA,CACE,8CACA,8CACF,EACA,CACE,qDACA,8CACF,EACA,CACE,sDACA,8CACF,EACA,CACE,+CACA,8CACF,EACA,CACE,yCACA,+CACF,EACA,CACE,+CACA,8CACF,EACA,CACE,iDACA,gDACF,EACA,CACE,+CACA,8CACF,EACA,CACE,iDACA,2CACF,EACA,CACE,mDACA,+CACF,EACA,CACE,0DACA,+CACF,EACA,CACE,gDACA,+CACF,EACA,CACE,uDACA,+CACF,EACA,CACE,oDACA,2CACF,EACA,CACE,4CACA,2CACF,EACA,CACE,wDACA,uDACF,EACA,CACE,iDACA,gDACF,EACA,CACE,0CACA,+CACF,EACA,CACE,mDACA,kDACF,EACA,CACE,+CACA,iDACF,EACA,CACE,gDACA,iDACF,EACA,CACE,+CACA,iDACF,EACA,CACE,+CACA,6CACF,EACA,CACE,8CACA,iDACF,EACA,CACE,+CACA,iDACF,EACA,CACE,8CACA,6CACF,EACA,CACE,iDACA,gDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,mDACA,kDACF,EACA,CACE,iDACA,gDACF,EACA,CACE,+CACA,8CACF,EACA,CACE,4CACA,mEACF,EACA,CACE,6CACA,+CACF,EACA,CACE,8CACA,+CACF,EACA,CACE,4CACA,kFACF,EACA,CACE,6CACA,+CACF,EACA,CACE,8CACA,+CACF,EACA,CACE,6CACA,+CACF,EACA,CACE,8CACA,6CACF,EACA,CACE,8CACA,+CACF,EACA,CACE,8CACA,6CACF,EACA,CACE,8CACA,6CACF,EACA,CACE,4CACA,+CACF,EACA,CACE,6CACA,+CACF,EACA,CACE,yDACA,+CACF,EACA,CACE,+CACA,kFACF,EACA,CACE,+CACA,8CACF,EACA,CACE,4CACA,+CACF,EACA,CACE,2CACA,+CACF,EACA,CACE,gDACA,+CACF,EACA,CACE,4CACA,kFACF,EACA,CACE,4CACA,kFACF,EACA,CACE,+CACA,kFACF,EACA,CACE,sDACA,kFACF,EACA,CACE,iDACA,kFACF,EACA,CACE,+CACA,mDACF,EACA,CACE,4CACA,2CACF,EACA,CACE,yDACA,+CACF,EACA,CACE,6CACA,mEACF,EACA,CACE,4CACA,+CACF,EACA,CACE,6CACA,+CACF,EACA,CACE,6CACA,+CACF,EACA,CACE,iDACA,kFACF,EACA,CACE,4CACA,+CACF,EACA,CACE,6CACA,+CACF,EACA,CACE,gDACA,+CACF,EACA,CACE,qDACA,oDACF,EACA,CACE,gDACA,+CACF,EACA,CACE,mDACA,kDACF,EACA,CACE,sDACA,qDACF,EACA,CACE,8CACA,6CACF,EACA,CACE,oDACA,mDACF,EACA,CACE,iDACA,gDACF,EACA,CACE,wDACA,uDACF,EACA,CACE,0CACA,+CACF,EACA,CACE,2CACA,0CACF,EACA,CACE,+CACA,8CACF,EACA,CACE,mDACA,kDACF,EACA,CACE,oDACA,mDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,gDACA,+CACF,EACA,CACE,uDACA,sDACF,EACA,CACE,oDACA,mDACF,EACA,CACE,oDACA,mDACF,EACA,CACE,gDACA,+CACF,EACA,CACE,sDACA,qDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,oDACA,mDACF,EACA,CACE,uDACA,sDACF,EACA,CACE,mDACA,kDACF,EACA,CACE,iDACA,gDACF,EACA,CACE,sDACA,qDACF,EACA,CACE,qDACA,oDACF,EACA,CACE,mDACA,kDACF,EACA,CACE,mDACA,kDACF,EACA,CACE,gDACA,+CACF,EACA,CACE,yCACA,wCACF,EACA,CACE,oDACA,8CACF,EACA,CACE,gDACA,gDACF,EACA,CACE,uDACA,gDACF,EACA,CACE,kDACA,gDACF,EACA,CACE,iDACA,6CACF,EACA,CACE,wDACA,6CACF,EACA,CACE,iDACA,2CACF,EACA,CACE,6CACA,gDACF,EACA,CACE,mEACA,wDACF,EACA,CACE,gEACA,uDACF,EACA,CACE,mEACA,kDACF,EACA,CACE,mEACA,mDACF,EACA,CACE,iEACA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"}
|
|
1
|
+
{"version":3,"file":"dist.js","names":["err","u8","u8"],"sources":["../src/brs/constants.ts","../node_modules/pako/dist/pako.mjs","../src/uuid.ts","../src/brs/utils.ts","../src/brs/read.v1.ts","../src/brs/read.v10.ts","../src/brs/read.v14.ts","../src/brs/read.v2.ts","../src/brs/read.v3.ts","../src/brs/read.v4.ts","../src/brs/read.v8.ts","../src/brs/read.v9.ts","../src/brs/read.ts","../src/brs/write.ts","../src/brs/types.ts","../src/brdb/bits.ts","../node_modules/@noble/hashes/utils.js","../node_modules/@noble/hashes/_md.js","../node_modules/@noble/hashes/_u64.js","../node_modules/@noble/hashes/_blake.js","../node_modules/@noble/hashes/blake2.js","../node_modules/@noble/hashes/blake3.js","../node_modules/fzstd/esm/index.mjs","../src/brdb/bytes.ts","../src/brdb/brz.ts","../src/brdb/catalog.ts","../src/brdb/componentDb.ts","../src/brdb/guid.ts","../src/brdb/pending.ts","../src/brdb/msgpack.ts","../src/brdb/schemaText.ts","../src/brdb/schemas.ts","../src/brdb/schema.ts","../src/brdb/world.ts","../src/brdb/reader.ts","../src/brdb/brdb.ts","../src/brdb/index.ts","../src/index.ts"],"sourcesContent":["import { Uuid } from './types';\n\nexport const MAGIC = new Uint8Array([66, 82, 83]); // BRS\nexport const LATEST_VERSION = 14;\nexport const MAX_INT = ~(1 << 31);\nexport const DEFAULT_UUID: Uuid = '00000000-0000-0000-0000-000000000000';\n","//#region src/zlib/trees.mjs\nvar Z_FIXED = 4;\nvar Z_BINARY = 0;\nvar Z_TEXT = 1;\nvar Z_UNKNOWN = 2;\nfunction zero$1(buf) {\n\tlet len = buf.length;\n\twhile (--len >= 0) buf[len] = 0;\n}\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\nvar LENGTH_CODES = 29;\nvar LITERALS = 256;\nvar L_CODES = 286;\nvar D_CODES = 30;\nvar BL_CODES = 19;\nvar HEAP_SIZE$1 = 573;\nvar MAX_BITS = 15;\nvar Buf_size = 16;\nvar MAX_BL_BITS = 7;\nvar END_BLOCK = 256;\nvar REP_3_6 = 16;\nvar REPZ_3_10 = 17;\nvar REPZ_11_138 = 18;\nvar extra_lbits = new Uint8Array([\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t1,\n\t1,\n\t1,\n\t1,\n\t2,\n\t2,\n\t2,\n\t2,\n\t3,\n\t3,\n\t3,\n\t3,\n\t4,\n\t4,\n\t4,\n\t4,\n\t5,\n\t5,\n\t5,\n\t5,\n\t0\n]);\nvar extra_dbits = new Uint8Array([\n\t0,\n\t0,\n\t0,\n\t0,\n\t1,\n\t1,\n\t2,\n\t2,\n\t3,\n\t3,\n\t4,\n\t4,\n\t5,\n\t5,\n\t6,\n\t6,\n\t7,\n\t7,\n\t8,\n\t8,\n\t9,\n\t9,\n\t10,\n\t10,\n\t11,\n\t11,\n\t12,\n\t12,\n\t13,\n\t13\n]);\nvar extra_blbits = new Uint8Array([\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t0,\n\t2,\n\t3,\n\t7\n]);\nvar bl_order = new Uint8Array([\n\t16,\n\t17,\n\t18,\n\t0,\n\t8,\n\t7,\n\t9,\n\t6,\n\t10,\n\t5,\n\t11,\n\t4,\n\t12,\n\t3,\n\t13,\n\t2,\n\t14,\n\t1,\n\t15\n]);\nvar DIST_CODE_LEN = 512;\nvar static_ltree = new Array(288 * 2);\nzero$1(static_ltree);\nvar static_dtree = new Array(D_CODES * 2);\nzero$1(static_dtree);\nvar _dist_code = new Array(DIST_CODE_LEN);\nzero$1(_dist_code);\nvar _length_code = new Array(256);\nzero$1(_length_code);\nvar base_length = new Array(LENGTH_CODES);\nzero$1(base_length);\nvar base_dist = new Array(D_CODES);\nzero$1(base_dist);\nvar StaticTreeDesc = class {\n\tconstructor(static_tree, extra_bits, extra_base, elems, max_length) {\n\t\tthis.static_tree = static_tree;\n\t\tthis.extra_bits = extra_bits;\n\t\tthis.extra_base = extra_base;\n\t\tthis.elems = elems;\n\t\tthis.max_length = max_length;\n\t\tthis.has_stree = static_tree && static_tree.length;\n\t}\n};\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\nvar TreeDesc = class {\n\tconstructor(dyn_tree, stat_desc) {\n\t\tthis.dyn_tree = dyn_tree;\n\t\tthis.max_code = 0;\n\t\tthis.stat_desc = stat_desc;\n\t}\n};\nvar d_code = (dist) => {\n\treturn dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n};\nvar put_short = (s, w) => {\n\ts.pending_buf[s.pending++] = w & 255;\n\ts.pending_buf[s.pending++] = w >>> 8 & 255;\n};\nvar send_bits = (s, value, length) => {\n\tif (s.bi_valid > Buf_size - length) {\n\t\ts.bi_buf |= value << s.bi_valid & 65535;\n\t\tput_short(s, s.bi_buf);\n\t\ts.bi_buf = value >> Buf_size - s.bi_valid;\n\t\ts.bi_valid += length - Buf_size;\n\t} else {\n\t\ts.bi_buf |= value << s.bi_valid & 65535;\n\t\ts.bi_valid += length;\n\t}\n};\nvar send_code = (s, c, tree) => {\n\tsend_bits(s, tree[c * 2], tree[c * 2 + 1]);\n};\nvar bi_reverse = (code, len) => {\n\tlet res = 0;\n\tdo {\n\t\tres |= code & 1;\n\t\tcode >>>= 1;\n\t\tres <<= 1;\n\t} while (--len > 0);\n\treturn res >>> 1;\n};\nvar bi_flush = (s) => {\n\tif (s.bi_valid === 16) {\n\t\tput_short(s, s.bi_buf);\n\t\ts.bi_buf = 0;\n\t\ts.bi_valid = 0;\n\t} else if (s.bi_valid >= 8) {\n\t\ts.pending_buf[s.pending++] = s.bi_buf & 255;\n\t\ts.bi_buf >>= 8;\n\t\ts.bi_valid -= 8;\n\t}\n};\nvar gen_bitlen = (s, desc) => {\n\tconst tree = desc.dyn_tree;\n\tconst max_code = desc.max_code;\n\tconst stree = desc.stat_desc.static_tree;\n\tconst has_stree = desc.stat_desc.has_stree;\n\tconst extra = desc.stat_desc.extra_bits;\n\tconst base = desc.stat_desc.extra_base;\n\tconst max_length = desc.stat_desc.max_length;\n\tlet h;\n\tlet n, m;\n\tlet bits;\n\tlet xbits;\n\tlet f;\n\tlet overflow = 0;\n\tfor (bits = 0; bits <= MAX_BITS; bits++) s.bl_count[bits] = 0;\n\ttree[s.heap[s.heap_max] * 2 + 1] = 0;\n\tfor (h = s.heap_max + 1; h < HEAP_SIZE$1; h++) {\n\t\tn = s.heap[h];\n\t\tbits = tree[tree[n * 2 + 1] * 2 + 1] + 1;\n\t\tif (bits > max_length) {\n\t\t\tbits = max_length;\n\t\t\toverflow++;\n\t\t}\n\t\ttree[n * 2 + 1] = bits;\n\t\tif (n > max_code) continue;\n\t\ts.bl_count[bits]++;\n\t\txbits = 0;\n\t\tif (n >= base) xbits = extra[n - base];\n\t\tf = tree[n * 2];\n\t\ts.opt_len += f * (bits + xbits);\n\t\tif (has_stree) s.static_len += f * (stree[n * 2 + 1] + xbits);\n\t}\n\tif (overflow === 0) return;\n\tdo {\n\t\tbits = max_length - 1;\n\t\twhile (s.bl_count[bits] === 0) bits--;\n\t\ts.bl_count[bits]--;\n\t\ts.bl_count[bits + 1] += 2;\n\t\ts.bl_count[max_length]--;\n\t\toverflow -= 2;\n\t} while (overflow > 0);\n\tfor (bits = max_length; bits !== 0; bits--) {\n\t\tn = s.bl_count[bits];\n\t\twhile (n !== 0) {\n\t\t\tm = s.heap[--h];\n\t\t\tif (m > max_code) continue;\n\t\t\tif (tree[m * 2 + 1] !== bits) {\n\t\t\t\ts.opt_len += (bits - tree[m * 2 + 1]) * tree[m * 2];\n\t\t\t\ttree[m * 2 + 1] = bits;\n\t\t\t}\n\t\t\tn--;\n\t\t}\n\t}\n};\nvar gen_codes = (tree, max_code, bl_count) => {\n\tconst next_code = new Array(16);\n\tlet code = 0;\n\tlet bits;\n\tlet n;\n\tfor (bits = 1; bits <= MAX_BITS; bits++) {\n\t\tcode = code + bl_count[bits - 1] << 1;\n\t\tnext_code[bits] = code;\n\t}\n\tfor (n = 0; n <= max_code; n++) {\n\t\tlet len = tree[n * 2 + 1];\n\t\tif (len === 0) continue;\n\t\ttree[n * 2] = bi_reverse(next_code[len]++, len);\n\t}\n};\nvar tr_static_init = () => {\n\tlet n;\n\tlet bits;\n\tlet length;\n\tlet code;\n\tlet dist;\n\tconst bl_count = new Array(16);\n\tlength = 0;\n\tfor (code = 0; code < LENGTH_CODES - 1; code++) {\n\t\tbase_length[code] = length;\n\t\tfor (n = 0; n < 1 << extra_lbits[code]; n++) _length_code[length++] = code;\n\t}\n\t_length_code[length - 1] = code;\n\tdist = 0;\n\tfor (code = 0; code < 16; code++) {\n\t\tbase_dist[code] = dist;\n\t\tfor (n = 0; n < 1 << extra_dbits[code]; n++) _dist_code[dist++] = code;\n\t}\n\tdist >>= 7;\n\tfor (; code < D_CODES; code++) {\n\t\tbase_dist[code] = dist << 7;\n\t\tfor (n = 0; n < 1 << extra_dbits[code] - 7; n++) _dist_code[256 + dist++] = code;\n\t}\n\tfor (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;\n\tn = 0;\n\twhile (n <= 143) {\n\t\tstatic_ltree[n * 2 + 1] = 8;\n\t\tn++;\n\t\tbl_count[8]++;\n\t}\n\twhile (n <= 255) {\n\t\tstatic_ltree[n * 2 + 1] = 9;\n\t\tn++;\n\t\tbl_count[9]++;\n\t}\n\twhile (n <= 279) {\n\t\tstatic_ltree[n * 2 + 1] = 7;\n\t\tn++;\n\t\tbl_count[7]++;\n\t}\n\twhile (n <= 287) {\n\t\tstatic_ltree[n * 2 + 1] = 8;\n\t\tn++;\n\t\tbl_count[8]++;\n\t}\n\tgen_codes(static_ltree, 287, bl_count);\n\tfor (n = 0; n < D_CODES; n++) {\n\t\tstatic_dtree[n * 2 + 1] = 5;\n\t\tstatic_dtree[n * 2] = bi_reverse(n, 5);\n\t}\n\tstatic_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, 257, L_CODES, MAX_BITS);\n\tstatic_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n\tstatic_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n};\nvar init_block = (s) => {\n\tlet n;\n\tfor (n = 0; n < L_CODES; n++) s.dyn_ltree[n * 2] = 0;\n\tfor (n = 0; n < D_CODES; n++) s.dyn_dtree[n * 2] = 0;\n\tfor (n = 0; n < BL_CODES; n++) s.bl_tree[n * 2] = 0;\n\ts.dyn_ltree[END_BLOCK * 2] = 1;\n\ts.opt_len = s.static_len = 0;\n\ts.sym_next = s.matches = 0;\n};\nvar bi_windup = (s) => {\n\tif (s.bi_valid > 8) put_short(s, s.bi_buf);\n\telse if (s.bi_valid > 0) s.pending_buf[s.pending++] = s.bi_buf;\n\ts.bi_buf = 0;\n\ts.bi_valid = 0;\n};\nvar smaller = (tree, n, m, depth) => {\n\tconst _n2 = n * 2;\n\tconst _m2 = m * 2;\n\treturn tree[_n2] < tree[_m2] || tree[_n2] === tree[_m2] && depth[n] <= depth[m];\n};\nvar pqdownheap = (s, tree, k) => {\n\tconst v = s.heap[k];\n\tlet j = k << 1;\n\twhile (j <= s.heap_len) {\n\t\tif (j < s.heap_len && smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) j++;\n\t\tif (smaller(tree, v, s.heap[j], s.depth)) break;\n\t\ts.heap[k] = s.heap[j];\n\t\tk = j;\n\t\tj <<= 1;\n\t}\n\ts.heap[k] = v;\n};\nvar compress_block = (s, ltree, dtree) => {\n\tlet dist;\n\tlet lc;\n\tlet sx = 0;\n\tlet code;\n\tlet extra;\n\tif (s.sym_next !== 0) do {\n\t\tdist = s.pending_buf[s.sym_buf + sx++] & 255;\n\t\tdist += (s.pending_buf[s.sym_buf + sx++] & 255) << 8;\n\t\tlc = s.pending_buf[s.sym_buf + sx++];\n\t\tif (dist === 0) send_code(s, lc, ltree);\n\t\telse {\n\t\t\tcode = _length_code[lc];\n\t\t\tsend_code(s, code + LITERALS + 1, ltree);\n\t\t\textra = extra_lbits[code];\n\t\t\tif (extra !== 0) {\n\t\t\t\tlc -= base_length[code];\n\t\t\t\tsend_bits(s, lc, extra);\n\t\t\t}\n\t\t\tdist--;\n\t\t\tcode = d_code(dist);\n\t\t\tsend_code(s, code, dtree);\n\t\t\textra = extra_dbits[code];\n\t\t\tif (extra !== 0) {\n\t\t\t\tdist -= base_dist[code];\n\t\t\t\tsend_bits(s, dist, extra);\n\t\t\t}\n\t\t}\n\t} while (sx < s.sym_next);\n\tsend_code(s, END_BLOCK, ltree);\n};\nvar build_tree = (s, desc) => {\n\tconst tree = desc.dyn_tree;\n\tconst stree = desc.stat_desc.static_tree;\n\tconst has_stree = desc.stat_desc.has_stree;\n\tconst elems = desc.stat_desc.elems;\n\tlet n, m;\n\tlet max_code = -1;\n\tlet node;\n\ts.heap_len = 0;\n\ts.heap_max = HEAP_SIZE$1;\n\tfor (n = 0; n < elems; n++) if (tree[n * 2] !== 0) {\n\t\ts.heap[++s.heap_len] = max_code = n;\n\t\ts.depth[n] = 0;\n\t} else tree[n * 2 + 1] = 0;\n\twhile (s.heap_len < 2) {\n\t\tnode = s.heap[++s.heap_len] = max_code < 2 ? ++max_code : 0;\n\t\ttree[node * 2] = 1;\n\t\ts.depth[node] = 0;\n\t\ts.opt_len--;\n\t\tif (has_stree) s.static_len -= stree[node * 2 + 1];\n\t}\n\tdesc.max_code = max_code;\n\tfor (n = s.heap_len >> 1; n >= 1; n--) pqdownheap(s, tree, n);\n\tnode = elems;\n\tdo {\n\t\t/*** pqremove ***/\n\t\tn = s.heap[1];\n\t\ts.heap[1] = s.heap[s.heap_len--];\n\t\tpqdownheap(s, tree, 1);\n\t\tm = s.heap[1];\n\t\ts.heap[--s.heap_max] = n;\n\t\ts.heap[--s.heap_max] = m;\n\t\ttree[node * 2] = tree[n * 2] + tree[m * 2];\n\t\ts.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n\t\ttree[n * 2 + 1] = tree[m * 2 + 1] = node;\n\t\ts.heap[1] = node++;\n\t\tpqdownheap(s, tree, 1);\n\t} while (s.heap_len >= 2);\n\ts.heap[--s.heap_max] = s.heap[1];\n\tgen_bitlen(s, desc);\n\tgen_codes(tree, max_code, s.bl_count);\n};\nvar scan_tree = (s, tree, max_code) => {\n\tlet n;\n\tlet prevlen = -1;\n\tlet curlen;\n\tlet nextlen = tree[1];\n\tlet count = 0;\n\tlet max_count = 7;\n\tlet min_count = 4;\n\tif (nextlen === 0) {\n\t\tmax_count = 138;\n\t\tmin_count = 3;\n\t}\n\ttree[(max_code + 1) * 2 + 1] = 65535;\n\tfor (n = 0; n <= max_code; n++) {\n\t\tcurlen = nextlen;\n\t\tnextlen = tree[(n + 1) * 2 + 1];\n\t\tif (++count < max_count && curlen === nextlen) continue;\n\t\telse if (count < min_count) s.bl_tree[curlen * 2] += count;\n\t\telse if (curlen !== 0) {\n\t\t\tif (curlen !== prevlen) s.bl_tree[curlen * 2]++;\n\t\t\ts.bl_tree[REP_3_6 * 2]++;\n\t\t} else if (count <= 10) s.bl_tree[REPZ_3_10 * 2]++;\n\t\telse s.bl_tree[REPZ_11_138 * 2]++;\n\t\tcount = 0;\n\t\tprevlen = curlen;\n\t\tif (nextlen === 0) {\n\t\t\tmax_count = 138;\n\t\t\tmin_count = 3;\n\t\t} else if (curlen === nextlen) {\n\t\t\tmax_count = 6;\n\t\t\tmin_count = 3;\n\t\t} else {\n\t\t\tmax_count = 7;\n\t\t\tmin_count = 4;\n\t\t}\n\t}\n};\nvar send_tree = (s, tree, max_code) => {\n\tlet n;\n\tlet prevlen = -1;\n\tlet curlen;\n\tlet nextlen = tree[1];\n\tlet count = 0;\n\tlet max_count = 7;\n\tlet min_count = 4;\n\tif (nextlen === 0) {\n\t\tmax_count = 138;\n\t\tmin_count = 3;\n\t}\n\tfor (n = 0; n <= max_code; n++) {\n\t\tcurlen = nextlen;\n\t\tnextlen = tree[(n + 1) * 2 + 1];\n\t\tif (++count < max_count && curlen === nextlen) continue;\n\t\telse if (count < min_count) do\n\t\t\tsend_code(s, curlen, s.bl_tree);\n\t\twhile (--count !== 0);\n\t\telse if (curlen !== 0) {\n\t\t\tif (curlen !== prevlen) {\n\t\t\t\tsend_code(s, curlen, s.bl_tree);\n\t\t\t\tcount--;\n\t\t\t}\n\t\t\tsend_code(s, REP_3_6, s.bl_tree);\n\t\t\tsend_bits(s, count - 3, 2);\n\t\t} else if (count <= 10) {\n\t\t\tsend_code(s, REPZ_3_10, s.bl_tree);\n\t\t\tsend_bits(s, count - 3, 3);\n\t\t} else {\n\t\t\tsend_code(s, REPZ_11_138, s.bl_tree);\n\t\t\tsend_bits(s, count - 11, 7);\n\t\t}\n\t\tcount = 0;\n\t\tprevlen = curlen;\n\t\tif (nextlen === 0) {\n\t\t\tmax_count = 138;\n\t\t\tmin_count = 3;\n\t\t} else if (curlen === nextlen) {\n\t\t\tmax_count = 6;\n\t\t\tmin_count = 3;\n\t\t} else {\n\t\t\tmax_count = 7;\n\t\t\tmin_count = 4;\n\t\t}\n\t}\n};\nvar build_bl_tree = (s) => {\n\tlet max_blindex;\n\tscan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n\tscan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\tbuild_tree(s, s.bl_desc);\n\tfor (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) if (s.bl_tree[bl_order[max_blindex] * 2 + 1] !== 0) break;\n\ts.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n\treturn max_blindex;\n};\nvar send_all_trees = (s, lcodes, dcodes, blcodes) => {\n\tlet rank;\n\tsend_bits(s, lcodes - 257, 5);\n\tsend_bits(s, dcodes - 1, 5);\n\tsend_bits(s, blcodes - 4, 4);\n\tfor (rank = 0; rank < blcodes; rank++) send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1], 3);\n\tsend_tree(s, s.dyn_ltree, lcodes - 1);\n\tsend_tree(s, s.dyn_dtree, dcodes - 1);\n};\nvar detect_data_type = (s) => {\n\tlet block_mask = 4093624447;\n\tlet n;\n\tfor (n = 0; n <= 31; n++, block_mask >>>= 1) if (block_mask & 1 && s.dyn_ltree[n * 2] !== 0) return Z_BINARY;\n\tif (s.dyn_ltree[18] !== 0 || s.dyn_ltree[20] !== 0 || s.dyn_ltree[26] !== 0) return Z_TEXT;\n\tfor (n = 32; n < LITERALS; n++) if (s.dyn_ltree[n * 2] !== 0) return Z_TEXT;\n\treturn Z_BINARY;\n};\nvar static_init_done = false;\nvar _tr_init = (s) => {\n\tif (!static_init_done) {\n\t\ttr_static_init();\n\t\tstatic_init_done = true;\n\t}\n\ts.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n\ts.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n\ts.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\ts.bi_buf = 0;\n\ts.bi_valid = 0;\n\tinit_block(s);\n};\nvar _tr_stored_block = (s, buf, stored_len, last) => {\n\tsend_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);\n\tbi_windup(s);\n\tput_short(s, stored_len);\n\tput_short(s, ~stored_len);\n\tif (stored_len) s.pending_buf.set(s.window.subarray(buf, buf + stored_len), s.pending);\n\ts.pending += stored_len;\n};\nvar _tr_align = (s) => {\n\tsend_bits(s, STATIC_TREES << 1, 3);\n\tsend_code(s, END_BLOCK, static_ltree);\n\tbi_flush(s);\n};\nvar _tr_flush_block = (s, buf, stored_len, last) => {\n\tlet opt_lenb, static_lenb;\n\tlet max_blindex = 0;\n\tif (s.level > 0) {\n\t\tif (s.strm.data_type === Z_UNKNOWN) s.strm.data_type = detect_data_type(s);\n\t\tbuild_tree(s, s.l_desc);\n\t\tbuild_tree(s, s.d_desc);\n\t\tmax_blindex = build_bl_tree(s);\n\t\topt_lenb = s.opt_len + 3 + 7 >>> 3;\n\t\tstatic_lenb = s.static_len + 3 + 7 >>> 3;\n\t\tif (static_lenb <= opt_lenb) opt_lenb = static_lenb;\n\t} else opt_lenb = static_lenb = stored_len + 5;\n\tif (stored_len + 4 <= opt_lenb && buf !== -1) _tr_stored_block(s, buf, stored_len, last);\n\telse if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\t\tsend_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n\t\tcompress_block(s, static_ltree, static_dtree);\n\t} else {\n\t\tsend_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n\t\tsend_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n\t\tcompress_block(s, s.dyn_ltree, s.dyn_dtree);\n\t}\n\tinit_block(s);\n\tif (last) bi_windup(s);\n};\nvar _tr_tally = (s, dist, lc) => {\n\ts.pending_buf[s.sym_buf + s.sym_next++] = dist;\n\ts.pending_buf[s.sym_buf + s.sym_next++] = dist >> 8;\n\ts.pending_buf[s.sym_buf + s.sym_next++] = lc;\n\tif (dist === 0) s.dyn_ltree[lc * 2]++;\n\telse {\n\t\ts.matches++;\n\t\tdist--;\n\t\ts.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]++;\n\t\ts.dyn_dtree[d_code(dist) * 2]++;\n\t}\n\treturn s.sym_next === s.sym_end;\n};\n//#endregion\n//#region src/zlib/adler32.mjs\nvar adler32 = (adler, buf, len, pos) => {\n\tlet s1 = adler & 65535 | 0, s2 = adler >>> 16 & 65535 | 0, n = 0;\n\twhile (len !== 0) {\n\t\tn = len > 2e3 ? 2e3 : len;\n\t\tlen -= n;\n\t\tdo {\n\t\t\ts1 = s1 + buf[pos++] | 0;\n\t\t\ts2 = s2 + s1 | 0;\n\t\t} while (--n);\n\t\ts1 %= 65521;\n\t\ts2 %= 65521;\n\t}\n\treturn s1 | s2 << 16 | 0;\n};\n//#endregion\n//#region src/zlib/crc32.mjs\nvar makeTable = () => {\n\tlet c, table = [];\n\tfor (var n = 0; n < 256; n++) {\n\t\tc = n;\n\t\tfor (var k = 0; k < 8; k++) c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1;\n\t\ttable[n] = c;\n\t}\n\treturn table;\n};\nvar crcTable = new Uint32Array(makeTable());\nvar crc32 = (crc, buf, len, pos) => {\n\tconst t = crcTable;\n\tconst end = pos + len;\n\tcrc ^= -1;\n\tfor (let i = pos; i < end; i++) crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 255];\n\treturn crc ^ -1;\n};\n//#endregion\n//#region src/zlib/messages.mjs\nvar messages_default = {\n\t2: \"need dictionary\",\n\t1: \"stream end\",\n\t0: \"\",\n\t\"-1\": \"file error\",\n\t\"-2\": \"stream error\",\n\t\"-3\": \"data error\",\n\t\"-4\": \"insufficient memory\",\n\t\"-5\": \"buffer error\",\n\t\"-6\": \"incompatible version\"\n};\n//#endregion\n//#region src/zlib/constants.mjs\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1;\nvar Z_SYNC_FLUSH = 2;\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\nvar Z_TREES = 6;\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_NEED_DICT = 2;\nvar Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\nvar Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//#endregion\n//#region src/zlib/deflate.mjs\nvar MAX_MEM_LEVEL = 9;\nvar MAX_WBITS = 15;\nvar DEF_MEM_LEVEL = 8;\nvar HEAP_SIZE = 573;\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = 262;\nvar PRESET_DICT = 32;\nvar INIT_STATE = 42;\nvar GZIP_STATE = 57;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\nvar BS_NEED_MORE = 1;\nvar BS_BLOCK_DONE = 2;\nvar BS_FINISH_STARTED = 3;\nvar BS_FINISH_DONE = 4;\nvar OS_CODE = 3;\nvar err = (strm, errorCode) => {\n\tstrm.msg = messages_default[errorCode];\n\treturn errorCode;\n};\nvar rank = (f) => {\n\treturn f * 2 - (f > 4 ? 9 : 0);\n};\nvar zero = (buf) => {\n\tlet len = buf.length;\n\twhile (--len >= 0) buf[len] = 0;\n};\nvar slide_hash = (s) => {\n\tlet n, m;\n\tlet p;\n\tlet wsize = s.w_size;\n\tn = s.hash_size;\n\tp = n;\n\tdo {\n\t\tm = s.head[--p];\n\t\ts.head[p] = m >= wsize ? m - wsize : 0;\n\t} while (--n);\n\tn = wsize;\n\tp = n;\n\tdo {\n\t\tm = s.prev[--p];\n\t\ts.prev[p] = m >= wsize ? m - wsize : 0;\n\t} while (--n);\n};\nvar HASH = (s, prev, data) => (prev << s.hash_shift ^ data) & s.hash_mask;\nvar INSERT_STRING = (s, str) => {\n\tlet h;\n\tif (s.legacy_hash) h = s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\telse {\n\t\tconst w = s.window;\n\t\tconst value = w[str] | w[str + 1] << 8 | w[str + 2] << 16 | w[str + 3] << 24;\n\t\th = s.ins_h = Math.imul(value, 66521) + 66521 >>> 16 & s.hash_mask;\n\t}\n\tconst hash_head = s.prev[str & s.w_mask] = s.head[h];\n\ts.head[h] = str;\n\treturn hash_head;\n};\nvar flush_pending = (strm) => {\n\tconst s = strm.state;\n\tlet len = s.pending;\n\tif (len > strm.avail_out) len = strm.avail_out;\n\tif (len === 0) return;\n\tstrm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);\n\tstrm.next_out += len;\n\ts.pending_out += len;\n\tstrm.total_out += len;\n\tstrm.avail_out -= len;\n\ts.pending -= len;\n\tif (s.pending === 0) s.pending_out = 0;\n};\nvar flush_block_only = (s, last) => {\n\t_tr_flush_block(s, s.block_start >= 0 ? s.block_start : -1, s.strstart - s.block_start, last);\n\ts.block_start = s.strstart;\n\tflush_pending(s.strm);\n};\nvar put_byte = (s, b) => {\n\ts.pending_buf[s.pending++] = b;\n};\nvar putShortMSB = (s, b) => {\n\ts.pending_buf[s.pending++] = b >>> 8 & 255;\n\ts.pending_buf[s.pending++] = b & 255;\n};\nvar read_buf = (strm, buf, start, size) => {\n\tlet len = strm.avail_in;\n\tif (len > size) len = size;\n\tif (len === 0) return 0;\n\tstrm.avail_in -= len;\n\tbuf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);\n\tif (strm.state.wrap === 1) strm.adler = adler32(strm.adler, buf, len, start);\n\telse if (strm.state.wrap === 2) strm.adler = crc32(strm.adler, buf, len, start);\n\tstrm.next_in += len;\n\tstrm.total_in += len;\n\treturn len;\n};\nvar longest_match = (s, cur_match) => {\n\tlet chain_length = s.max_chain_length;\n\tlet scan = s.strstart;\n\tlet match;\n\tlet len;\n\tlet best_len = s.prev_length;\n\tlet nice_match = s.nice_match;\n\tconst limit = s.strstart > s.w_size - MIN_LOOKAHEAD ? s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0;\n\tconst _win = s.window;\n\tconst wmask = s.w_mask;\n\tconst prev = s.prev;\n\tconst strend = s.strstart + MAX_MATCH;\n\tlet scan_end1 = _win[scan + best_len - 1];\n\tlet scan_end = _win[scan + best_len];\n\tif (s.prev_length >= s.good_match) chain_length >>= 2;\n\tif (nice_match > s.lookahead) nice_match = s.lookahead;\n\tdo {\n\t\tmatch = cur_match;\n\t\tif (_win[match + best_len] !== scan_end || _win[match + best_len - 1] !== scan_end1 || _win[match] !== _win[scan] || _win[++match] !== _win[scan + 1]) continue;\n\t\tscan += 2;\n\t\tmatch++;\n\t\tdo\t\t;\nwhile (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && scan < strend);\n\t\tlen = MAX_MATCH - (strend - scan);\n\t\tscan = strend - MAX_MATCH;\n\t\tif (len > best_len) {\n\t\t\ts.match_start = cur_match;\n\t\t\tbest_len = len;\n\t\t\tif (len >= nice_match) break;\n\t\t\tscan_end1 = _win[scan + best_len - 1];\n\t\t\tscan_end = _win[scan + best_len];\n\t\t}\n\t} while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\tif (best_len <= s.lookahead) return best_len;\n\treturn s.lookahead;\n};\nvar fill_window = (s) => {\n\tconst _w_size = s.w_size;\n\tlet n, more, str;\n\tdo {\n\t\tmore = s.window_size - s.lookahead - s.strstart;\n\t\tif (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\t\t\ts.window.set(s.window.subarray(_w_size, _w_size + _w_size - more), 0);\n\t\t\ts.match_start -= _w_size;\n\t\t\ts.strstart -= _w_size;\n\t\t\ts.block_start -= _w_size;\n\t\t\tif (s.insert > s.strstart) s.insert = s.strstart;\n\t\t\tslide_hash(s);\n\t\t\tmore += _w_size;\n\t\t}\n\t\tif (s.strm.avail_in === 0) break;\n\t\tn = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n\t\ts.lookahead += n;\n\t\tif (!s.legacy_hash) {\n\t\t\tif (s.lookahead + s.insert > MIN_MATCH) {\n\t\t\t\tstr = s.strstart - s.insert;\n\t\t\t\twhile (s.insert) {\n\t\t\t\t\tINSERT_STRING(s, str);\n\t\t\t\t\tstr++;\n\t\t\t\t\ts.insert--;\n\t\t\t\t\tif (s.lookahead + s.insert <= MIN_MATCH) break;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (s.lookahead + s.insert >= MIN_MATCH) {\n\t\t\tstr = s.strstart - s.insert;\n\t\t\ts.ins_h = s.window[str];\n\t\t\ts.ins_h = HASH(s, s.ins_h, s.window[str + 1]);\n\t\t\twhile (s.insert) {\n\t\t\t\tINSERT_STRING(s, str);\n\t\t\t\tstr++;\n\t\t\t\ts.insert--;\n\t\t\t\tif (s.lookahead + s.insert < MIN_MATCH) break;\n\t\t\t}\n\t\t}\n\t} while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n};\nvar deflate_stored = (s, flush) => {\n\tlet min_block = s.pending_buf_size - 5 > s.w_size ? s.w_size : s.pending_buf_size - 5;\n\tlet len, left, have, last = 0;\n\tlet used = s.strm.avail_in;\n\tdo {\n\t\tlen = 65535;\n\t\thave = s.bi_valid + 42 >> 3;\n\t\tif (s.strm.avail_out < have) break;\n\t\thave = s.strm.avail_out - have;\n\t\tleft = s.strstart - s.block_start;\n\t\tif (len > left + s.strm.avail_in) len = left + s.strm.avail_in;\n\t\tif (len > have) len = have;\n\t\tif (len < min_block && (len === 0 && flush !== 4 || flush === 0 || len !== left + s.strm.avail_in)) break;\n\t\tlast = flush === 4 && len === left + s.strm.avail_in ? 1 : 0;\n\t\t_tr_stored_block(s, 0, 0, last);\n\t\ts.pending_buf[s.pending - 4] = len;\n\t\ts.pending_buf[s.pending - 3] = len >> 8;\n\t\ts.pending_buf[s.pending - 2] = ~len;\n\t\ts.pending_buf[s.pending - 1] = ~len >> 8;\n\t\tflush_pending(s.strm);\n\t\tif (left) {\n\t\t\tif (left > len) left = len;\n\t\t\ts.strm.output.set(s.window.subarray(s.block_start, s.block_start + left), s.strm.next_out);\n\t\t\ts.strm.next_out += left;\n\t\t\ts.strm.avail_out -= left;\n\t\t\ts.strm.total_out += left;\n\t\t\ts.block_start += left;\n\t\t\tlen -= left;\n\t\t}\n\t\tif (len) {\n\t\t\tread_buf(s.strm, s.strm.output, s.strm.next_out, len);\n\t\t\ts.strm.next_out += len;\n\t\t\ts.strm.avail_out -= len;\n\t\t\ts.strm.total_out += len;\n\t\t}\n\t} while (last === 0);\n\tused -= s.strm.avail_in;\n\tif (used) {\n\t\tif (used >= s.w_size) {\n\t\t\ts.matches = 2;\n\t\t\ts.window.set(s.strm.input.subarray(s.strm.next_in - s.w_size, s.strm.next_in), 0);\n\t\t\ts.strstart = s.w_size;\n\t\t\ts.insert = s.strstart;\n\t\t} else {\n\t\t\tif (s.window_size - s.strstart <= used) {\n\t\t\t\ts.strstart -= s.w_size;\n\t\t\t\ts.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n\t\t\t\tif (s.matches < 2) s.matches++;\n\t\t\t\tif (s.insert > s.strstart) s.insert = s.strstart;\n\t\t\t}\n\t\t\ts.window.set(s.strm.input.subarray(s.strm.next_in - used, s.strm.next_in), s.strstart);\n\t\t\ts.strstart += used;\n\t\t\ts.insert += used > s.w_size - s.insert ? s.w_size - s.insert : used;\n\t\t}\n\t\ts.block_start = s.strstart;\n\t}\n\tif (s.high_water < s.strstart) s.high_water = s.strstart;\n\tif (last) return BS_FINISH_DONE;\n\tif (flush !== 0 && flush !== 4 && s.strm.avail_in === 0 && s.strstart === s.block_start) return BS_BLOCK_DONE;\n\thave = s.window_size - s.strstart;\n\tif (s.strm.avail_in > have && s.block_start >= s.w_size) {\n\t\ts.block_start -= s.w_size;\n\t\ts.strstart -= s.w_size;\n\t\ts.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n\t\tif (s.matches < 2) s.matches++;\n\t\thave += s.w_size;\n\t\tif (s.insert > s.strstart) s.insert = s.strstart;\n\t}\n\tif (have > s.strm.avail_in) have = s.strm.avail_in;\n\tif (have) {\n\t\tread_buf(s.strm, s.window, s.strstart, have);\n\t\ts.strstart += have;\n\t\ts.insert += have > s.w_size - s.insert ? s.w_size - s.insert : have;\n\t}\n\tif (s.high_water < s.strstart) s.high_water = s.strstart;\n\thave = s.bi_valid + 42 >> 3;\n\thave = s.pending_buf_size - have > 65535 ? 65535 : s.pending_buf_size - have;\n\tmin_block = have > s.w_size ? s.w_size : have;\n\tleft = s.strstart - s.block_start;\n\tif (left >= min_block || (left || flush === 4) && flush !== 0 && s.strm.avail_in === 0 && left <= have) {\n\t\tlen = left > have ? have : left;\n\t\tlast = flush === 4 && s.strm.avail_in === 0 && len === left ? 1 : 0;\n\t\t_tr_stored_block(s, s.block_start, len, last);\n\t\ts.block_start += len;\n\t\tflush_pending(s.strm);\n\t}\n\treturn last ? BS_FINISH_STARTED : BS_NEED_MORE;\n};\nvar deflate_fast = (s, flush) => {\n\tlet hash_head;\n\tlet bflush;\n\tfor (;;) {\n\t\tif (s.lookahead < MIN_LOOKAHEAD) {\n\t\t\tfill_window(s);\n\t\t\tif (s.lookahead < MIN_LOOKAHEAD && flush === 0) return BS_NEED_MORE;\n\t\t\tif (s.lookahead === 0) break;\n\t\t}\n\t\thash_head = 0;\n\t\tif (s.lookahead >= MIN_MATCH) hash_head = INSERT_STRING(s, s.strstart);\n\t\tif (hash_head !== 0 && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) s.match_length = longest_match(s, hash_head);\n\t\tif (s.match_length >= MIN_MATCH) {\n\t\t\t/*** _tr_tally_dist(s, s.strstart - s.match_start,\n\t\t\ts.match_length - MIN_MATCH, bflush); ***/\n\t\t\tbflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\t\t\ts.lookahead -= s.match_length;\n\t\t\tif (s.match_length <= s.max_lazy_match && s.lookahead >= MIN_MATCH) {\n\t\t\t\ts.match_length--;\n\t\t\t\tdo {\n\t\t\t\t\ts.strstart++;\n\t\t\t\t\thash_head = INSERT_STRING(s, s.strstart);\n\t\t\t\t} while (--s.match_length !== 0);\n\t\t\t\ts.strstart++;\n\t\t\t} else {\n\t\t\t\ts.strstart += s.match_length;\n\t\t\t\ts.match_length = 0;\n\t\t\t\tif (s.legacy_hash) {\n\t\t\t\t\ts.ins_h = s.window[s.strstart];\n\t\t\t\t\ts.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t/*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n\t\t\tbflush = _tr_tally(s, 0, s.window[s.strstart]);\n\t\t\ts.lookahead--;\n\t\t\ts.strstart++;\n\t\t}\n\t\tif (bflush) {\n\t\t\t/*** FLUSH_BLOCK(s, 0); ***/\n\t\t\tflush_block_only(s, false);\n\t\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t\t}\n\t}\n\ts.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n\tif (flush === 4) {\n\t\t/*** FLUSH_BLOCK(s, 1); ***/\n\t\tflush_block_only(s, true);\n\t\tif (s.strm.avail_out === 0) return BS_FINISH_STARTED;\n\t\treturn BS_FINISH_DONE;\n\t}\n\tif (s.sym_next) {\n\t\t/*** FLUSH_BLOCK(s, 0); ***/\n\t\tflush_block_only(s, false);\n\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t}\n\treturn BS_BLOCK_DONE;\n};\nvar deflate_slow = (s, flush) => {\n\tlet hash_head;\n\tlet bflush;\n\tlet max_insert;\n\tfor (;;) {\n\t\tif (s.lookahead < MIN_LOOKAHEAD) {\n\t\t\tfill_window(s);\n\t\t\tif (s.lookahead < MIN_LOOKAHEAD && flush === 0) return BS_NEED_MORE;\n\t\t\tif (s.lookahead === 0) break;\n\t\t}\n\t\thash_head = 0;\n\t\tif (s.lookahead >= MIN_MATCH) hash_head = INSERT_STRING(s, s.strstart);\n\t\ts.prev_length = s.match_length;\n\t\ts.prev_match = s.match_start;\n\t\ts.match_length = MIN_MATCH - 1;\n\t\tif (hash_head !== 0 && s.prev_length < s.max_lazy_match && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) {\n\t\t\ts.match_length = longest_match(s, hash_head);\n\t\t\tif (s.match_length <= 5 && (s.strategy === 1 || s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096)) s.match_length = MIN_MATCH - 1;\n\t\t}\n\t\tif (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n\t\t\tmax_insert = s.strstart + s.lookahead - MIN_MATCH;\n\t\t\t/***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n\t\t\ts.prev_length - MIN_MATCH, bflush);***/\n\t\t\tbflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n\t\t\ts.lookahead -= s.prev_length - 1;\n\t\t\ts.prev_length -= 2;\n\t\t\tdo\n\t\t\t\tif (++s.strstart <= max_insert) hash_head = INSERT_STRING(s, s.strstart);\n\t\t\twhile (--s.prev_length !== 0);\n\t\t\ts.match_available = 0;\n\t\t\ts.match_length = MIN_MATCH - 1;\n\t\t\ts.strstart++;\n\t\t\tif (bflush) {\n\t\t\t\t/*** FLUSH_BLOCK(s, 0); ***/\n\t\t\t\tflush_block_only(s, false);\n\t\t\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t\t\t}\n\t\t} else if (s.match_available) {\n\t\t\t/*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n\t\t\tbflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\t\t\tif (bflush)\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n\t\t\tflush_block_only(s, false);\n\t\t\ts.strstart++;\n\t\t\ts.lookahead--;\n\t\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t\t} else {\n\t\t\ts.match_available = 1;\n\t\t\ts.strstart++;\n\t\t\ts.lookahead--;\n\t\t}\n\t}\n\tif (s.match_available) {\n\t\t/*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n\t\tbflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\t\ts.match_available = 0;\n\t}\n\ts.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n\tif (flush === 4) {\n\t\t/*** FLUSH_BLOCK(s, 1); ***/\n\t\tflush_block_only(s, true);\n\t\tif (s.strm.avail_out === 0) return BS_FINISH_STARTED;\n\t\treturn BS_FINISH_DONE;\n\t}\n\tif (s.sym_next) {\n\t\t/*** FLUSH_BLOCK(s, 0); ***/\n\t\tflush_block_only(s, false);\n\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t}\n\treturn BS_BLOCK_DONE;\n};\nvar deflate_rle = (s, flush) => {\n\tlet bflush;\n\tlet prev;\n\tlet scan, strend;\n\tconst _win = s.window;\n\tfor (;;) {\n\t\tif (s.lookahead <= MAX_MATCH) {\n\t\t\tfill_window(s);\n\t\t\tif (s.lookahead <= MAX_MATCH && flush === 0) return BS_NEED_MORE;\n\t\t\tif (s.lookahead === 0) break;\n\t\t}\n\t\ts.match_length = 0;\n\t\tif (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n\t\t\tscan = s.strstart - 1;\n\t\t\tprev = _win[scan];\n\t\t\tif (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n\t\t\t\tstrend = s.strstart + MAX_MATCH;\n\t\t\t\tdo\t\t\t\t;\nwhile (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && scan < strend);\n\t\t\t\ts.match_length = MAX_MATCH - (strend - scan);\n\t\t\t\tif (s.match_length > s.lookahead) s.match_length = s.lookahead;\n\t\t\t}\n\t\t}\n\t\tif (s.match_length >= MIN_MATCH) {\n\t\t\t/*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n\t\t\tbflush = _tr_tally(s, 1, s.match_length - MIN_MATCH);\n\t\t\ts.lookahead -= s.match_length;\n\t\t\ts.strstart += s.match_length;\n\t\t\ts.match_length = 0;\n\t\t} else {\n\t\t\t/*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n\t\t\tbflush = _tr_tally(s, 0, s.window[s.strstart]);\n\t\t\ts.lookahead--;\n\t\t\ts.strstart++;\n\t\t}\n\t\tif (bflush) {\n\t\t\t/*** FLUSH_BLOCK(s, 0); ***/\n\t\t\tflush_block_only(s, false);\n\t\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t\t}\n\t}\n\ts.insert = 0;\n\tif (flush === 4) {\n\t\t/*** FLUSH_BLOCK(s, 1); ***/\n\t\tflush_block_only(s, true);\n\t\tif (s.strm.avail_out === 0) return BS_FINISH_STARTED;\n\t\treturn BS_FINISH_DONE;\n\t}\n\tif (s.sym_next) {\n\t\t/*** FLUSH_BLOCK(s, 0); ***/\n\t\tflush_block_only(s, false);\n\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t}\n\treturn BS_BLOCK_DONE;\n};\nvar deflate_huff = (s, flush) => {\n\tlet bflush;\n\tfor (;;) {\n\t\tif (s.lookahead === 0) {\n\t\t\tfill_window(s);\n\t\t\tif (s.lookahead === 0) {\n\t\t\t\tif (flush === 0) return BS_NEED_MORE;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\ts.match_length = 0;\n\t\t/*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n\t\tbflush = _tr_tally(s, 0, s.window[s.strstart]);\n\t\ts.lookahead--;\n\t\ts.strstart++;\n\t\tif (bflush) {\n\t\t\t/*** FLUSH_BLOCK(s, 0); ***/\n\t\t\tflush_block_only(s, false);\n\t\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t\t}\n\t}\n\ts.insert = 0;\n\tif (flush === 4) {\n\t\t/*** FLUSH_BLOCK(s, 1); ***/\n\t\tflush_block_only(s, true);\n\t\tif (s.strm.avail_out === 0) return BS_FINISH_STARTED;\n\t\treturn BS_FINISH_DONE;\n\t}\n\tif (s.sym_next) {\n\t\t/*** FLUSH_BLOCK(s, 0); ***/\n\t\tflush_block_only(s, false);\n\t\tif (s.strm.avail_out === 0) return BS_NEED_MORE;\n\t}\n\treturn BS_BLOCK_DONE;\n};\nvar Config = class {\n\tconstructor(good_length, max_lazy, nice_length, max_chain, func) {\n\t\tthis.good_length = good_length;\n\t\tthis.max_lazy = max_lazy;\n\t\tthis.nice_length = nice_length;\n\t\tthis.max_chain = max_chain;\n\t\tthis.func = func;\n\t}\n};\nvar configuration_table = [\n\tnew Config(0, 0, 0, 0, deflate_stored),\n\tnew Config(4, 4, 8, 4, deflate_fast),\n\tnew Config(4, 5, 16, 8, deflate_fast),\n\tnew Config(4, 6, 32, 32, deflate_fast),\n\tnew Config(4, 4, 16, 16, deflate_slow),\n\tnew Config(8, 16, 32, 32, deflate_slow),\n\tnew Config(8, 16, 128, 128, deflate_slow),\n\tnew Config(8, 32, 128, 256, deflate_slow),\n\tnew Config(32, 128, 258, 1024, deflate_slow),\n\tnew Config(32, 258, 258, 4096, deflate_slow)\n];\nvar lm_init = (s) => {\n\ts.window_size = 2 * s.w_size;\n\t/*** CLEAR_HASH(s); ***/\n\tzero(s.head);\n\ts.max_lazy_match = configuration_table[s.level].max_lazy;\n\ts.good_match = configuration_table[s.level].good_length;\n\ts.nice_match = configuration_table[s.level].nice_length;\n\ts.max_chain_length = configuration_table[s.level].max_chain;\n\ts.strstart = 0;\n\ts.block_start = 0;\n\ts.lookahead = 0;\n\ts.insert = 0;\n\ts.match_length = s.prev_length = MIN_MATCH - 1;\n\ts.match_available = 0;\n\ts.ins_h = 0;\n};\nvar DeflateState = class {\n\tconstructor() {\n\t\tthis.strm = null;\n\t\tthis.status = 0;\n\t\tthis.pending_buf = null;\n\t\tthis.pending_buf_size = 0;\n\t\tthis.pending_out = 0;\n\t\tthis.pending = 0;\n\t\tthis.wrap = 0;\n\t\tthis.gzhead = null;\n\t\tthis.gzindex = 0;\n\t\tthis.method = 8;\n\t\tthis.last_flush = -1;\n\t\tthis.w_size = 0;\n\t\tthis.w_bits = 0;\n\t\tthis.w_mask = 0;\n\t\tthis.window = null;\n\t\tthis.window_size = 0;\n\t\tthis.prev = null;\n\t\tthis.head = null;\n\t\tthis.ins_h = 0;\n\t\tthis.legacy_hash = 0;\n\t\tthis.hash_size = 0;\n\t\tthis.hash_bits = 0;\n\t\tthis.hash_mask = 0;\n\t\tthis.hash_shift = 0;\n\t\tthis.block_start = 0;\n\t\tthis.match_length = 0;\n\t\tthis.prev_match = 0;\n\t\tthis.match_available = 0;\n\t\tthis.strstart = 0;\n\t\tthis.match_start = 0;\n\t\tthis.lookahead = 0;\n\t\tthis.prev_length = 0;\n\t\tthis.max_chain_length = 0;\n\t\tthis.max_lazy_match = 0;\n\t\tthis.level = 0;\n\t\tthis.strategy = 0;\n\t\tthis.good_match = 0;\n\t\tthis.nice_match = 0;\n\t\tthis.dyn_ltree = new Uint16Array(HEAP_SIZE * 2);\n\t\tthis.dyn_dtree = /* @__PURE__ */ new Uint16Array(122);\n\t\tthis.bl_tree = /* @__PURE__ */ new Uint16Array(78);\n\t\tzero(this.dyn_ltree);\n\t\tzero(this.dyn_dtree);\n\t\tzero(this.bl_tree);\n\t\tthis.l_desc = null;\n\t\tthis.d_desc = null;\n\t\tthis.bl_desc = null;\n\t\tthis.bl_count = /* @__PURE__ */ new Uint16Array(16);\n\t\tthis.heap = /* @__PURE__ */ new Uint16Array(573);\n\t\tzero(this.heap);\n\t\tthis.heap_len = 0;\n\t\tthis.heap_max = 0;\n\t\tthis.depth = /* @__PURE__ */ new Uint16Array(573);\n\t\tzero(this.depth);\n\t\tthis.sym_buf = 0;\n\t\tthis.lit_bufsize = 0;\n\t\tthis.sym_next = 0;\n\t\tthis.sym_end = 0;\n\t\tthis.opt_len = 0;\n\t\tthis.static_len = 0;\n\t\tthis.matches = 0;\n\t\tthis.insert = 0;\n\t\tthis.bi_buf = 0;\n\t\tthis.bi_valid = 0;\n\t}\n};\nvar deflateStateCheck = (strm) => {\n\tif (!strm) return 1;\n\tconst s = strm.state;\n\tif (!s || s.strm !== strm || s.status !== INIT_STATE && s.status !== GZIP_STATE && s.status !== EXTRA_STATE && s.status !== NAME_STATE && s.status !== COMMENT_STATE && s.status !== HCRC_STATE && s.status !== BUSY_STATE && s.status !== FINISH_STATE) return 1;\n\treturn 0;\n};\nvar deflateResetKeep = (strm) => {\n\tif (deflateStateCheck(strm)) return err(strm, -2);\n\tstrm.total_in = strm.total_out = 0;\n\tstrm.data_type = 2;\n\tconst s = strm.state;\n\ts.pending = 0;\n\ts.pending_out = 0;\n\tif (s.wrap < 0) s.wrap = -s.wrap;\n\ts.status = s.wrap === 2 ? GZIP_STATE : s.wrap ? INIT_STATE : BUSY_STATE;\n\tstrm.adler = s.wrap === 2 ? 0 : 1;\n\ts.last_flush = -2;\n\t_tr_init(s);\n\treturn 0;\n};\nvar deflateReset = (strm) => {\n\tconst ret = deflateResetKeep(strm);\n\tif (ret === 0) lm_init(strm.state);\n\treturn ret;\n};\nvar deflateSetHeader = (strm, head) => {\n\tif (deflateStateCheck(strm) || strm.state.wrap !== 2) return -2;\n\tstrm.state.gzhead = head;\n\treturn 0;\n};\nvar deflateInit2 = (strm, level, method, windowBits, memLevel, strategy, legacyHash) => {\n\tif (!strm) return -2;\n\tlet wrap = 1;\n\tif (level === -1) level = 6;\n\tif (windowBits < 0) {\n\t\twrap = 0;\n\t\twindowBits = -windowBits;\n\t} else if (windowBits > 15) {\n\t\twrap = 2;\n\t\twindowBits -= 16;\n\t}\n\tif (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== 8 || windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > 4 || windowBits === 8 && wrap !== 1) return err(strm, -2);\n\tif (windowBits === 8) windowBits = 9;\n\tconst s = new DeflateState();\n\tstrm.state = s;\n\ts.strm = strm;\n\ts.status = INIT_STATE;\n\ts.wrap = wrap;\n\ts.gzhead = null;\n\ts.w_bits = windowBits;\n\ts.w_size = 1 << s.w_bits;\n\ts.w_mask = s.w_size - 1;\n\ts.legacy_hash = legacyHash ? 1 : 0;\n\ts.hash_bits = memLevel + 7;\n\tif (!s.legacy_hash && s.hash_bits < 15) s.hash_bits = 15;\n\ts.hash_size = 1 << s.hash_bits;\n\ts.hash_mask = s.hash_size - 1;\n\ts.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\ts.window = new Uint8Array(s.w_size * 2);\n\ts.head = new Uint16Array(s.hash_size);\n\ts.prev = new Uint16Array(s.w_size);\n\ts.lit_bufsize = 1 << memLevel + 6;\n\ts.pending_buf_size = s.lit_bufsize * 4;\n\ts.pending_buf = new Uint8Array(s.pending_buf_size);\n\ts.sym_buf = s.lit_bufsize;\n\ts.sym_end = (s.lit_bufsize - 1) * 3;\n\ts.level = level;\n\ts.strategy = strategy;\n\ts.method = method;\n\treturn deflateReset(strm);\n};\nvar deflateInit = (strm, level) => {\n\treturn deflateInit2(strm, level, 8, MAX_WBITS, DEF_MEM_LEVEL, 0);\n};\nvar deflate$1 = (strm, flush) => {\n\tif (deflateStateCheck(strm) || flush > 5 || flush < 0) return strm ? err(strm, -2) : -2;\n\tconst s = strm.state;\n\tif (!strm.output || strm.avail_in !== 0 && !strm.input || s.status === FINISH_STATE && flush !== 4) return err(strm, strm.avail_out === 0 ? -5 : -2);\n\tconst old_flush = s.last_flush;\n\ts.last_flush = flush;\n\tif (s.pending !== 0) {\n\t\tflush_pending(strm);\n\t\tif (strm.avail_out === 0) {\n\t\t\ts.last_flush = -1;\n\t\t\treturn 0;\n\t\t}\n\t} else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && flush !== 4) return err(strm, -5);\n\tif (s.status === FINISH_STATE && strm.avail_in !== 0) return err(strm, -5);\n\tif (s.status === INIT_STATE && s.wrap === 0) s.status = BUSY_STATE;\n\tif (s.status === INIT_STATE) {\n\t\tlet header = 8 + (s.w_bits - 8 << 4) << 8;\n\t\tlet level_flags = -1;\n\t\tif (s.strategy >= 2 || s.level < 2) level_flags = 0;\n\t\telse if (s.level < 6) level_flags = 1;\n\t\telse if (s.level === 6) level_flags = 2;\n\t\telse level_flags = 3;\n\t\theader |= level_flags << 6;\n\t\tif (s.strstart !== 0) header |= PRESET_DICT;\n\t\theader += 31 - header % 31;\n\t\tputShortMSB(s, header);\n\t\tif (s.strstart !== 0) {\n\t\t\tputShortMSB(s, strm.adler >>> 16);\n\t\t\tputShortMSB(s, strm.adler & 65535);\n\t\t}\n\t\tstrm.adler = 1;\n\t\ts.status = BUSY_STATE;\n\t\tflush_pending(strm);\n\t\tif (s.pending !== 0) {\n\t\t\ts.last_flush = -1;\n\t\t\treturn 0;\n\t\t}\n\t}\n\tif (s.status === GZIP_STATE) {\n\t\tstrm.adler = 0;\n\t\tput_byte(s, 31);\n\t\tput_byte(s, 139);\n\t\tput_byte(s, 8);\n\t\tif (!s.gzhead) {\n\t\t\tput_byte(s, 0);\n\t\t\tput_byte(s, 0);\n\t\t\tput_byte(s, 0);\n\t\t\tput_byte(s, 0);\n\t\t\tput_byte(s, 0);\n\t\t\tput_byte(s, s.level === 9 ? 2 : s.strategy >= 2 || s.level < 2 ? 4 : 0);\n\t\t\tput_byte(s, OS_CODE);\n\t\t\ts.status = BUSY_STATE;\n\t\t\tflush_pending(strm);\n\t\t\tif (s.pending !== 0) {\n\t\t\t\ts.last_flush = -1;\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t} else {\n\t\t\tput_byte(s, (s.gzhead.text ? 1 : 0) + (s.gzhead.hcrc ? 2 : 0) + (!s.gzhead.extra ? 0 : 4) + (!s.gzhead.name ? 0 : 8) + (!s.gzhead.comment ? 0 : 16));\n\t\t\tput_byte(s, s.gzhead.time & 255);\n\t\t\tput_byte(s, s.gzhead.time >> 8 & 255);\n\t\t\tput_byte(s, s.gzhead.time >> 16 & 255);\n\t\t\tput_byte(s, s.gzhead.time >> 24 & 255);\n\t\t\tput_byte(s, s.level === 9 ? 2 : s.strategy >= 2 || s.level < 2 ? 4 : 0);\n\t\t\tput_byte(s, s.gzhead.os & 255);\n\t\t\tif (s.gzhead.extra && s.gzhead.extra.length) {\n\t\t\t\tput_byte(s, s.gzhead.extra.length & 255);\n\t\t\t\tput_byte(s, s.gzhead.extra.length >> 8 & 255);\n\t\t\t}\n\t\t\tif (s.gzhead.hcrc) strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n\t\t\ts.gzindex = 0;\n\t\t\ts.status = EXTRA_STATE;\n\t\t}\n\t}\n\tif (s.status === EXTRA_STATE) {\n\t\tif (s.gzhead.extra) {\n\t\t\tlet beg = s.pending;\n\t\t\tlet left = (s.gzhead.extra.length & 65535) - s.gzindex;\n\t\t\twhile (s.pending + left > s.pending_buf_size) {\n\t\t\t\tlet copy = s.pending_buf_size - s.pending;\n\t\t\t\ts.pending_buf.set(s.gzhead.extra.subarray(s.gzindex, s.gzindex + copy), s.pending);\n\t\t\t\ts.pending = s.pending_buf_size;\n\t\t\t\tif (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n\t\t\t\ts.gzindex += copy;\n\t\t\t\tflush_pending(strm);\n\t\t\t\tif (s.pending !== 0) {\n\t\t\t\t\ts.last_flush = -1;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tbeg = 0;\n\t\t\t\tleft -= copy;\n\t\t\t}\n\t\t\tlet gzhead_extra = new Uint8Array(s.gzhead.extra);\n\t\t\ts.pending_buf.set(gzhead_extra.subarray(s.gzindex, s.gzindex + left), s.pending);\n\t\t\ts.pending += left;\n\t\t\tif (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n\t\t\ts.gzindex = 0;\n\t\t}\n\t\ts.status = NAME_STATE;\n\t}\n\tif (s.status === NAME_STATE) {\n\t\tif (s.gzhead.name) {\n\t\t\tlet beg = s.pending;\n\t\t\tlet val;\n\t\t\tdo {\n\t\t\t\tif (s.pending === s.pending_buf_size) {\n\t\t\t\t\tif (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n\t\t\t\t\tflush_pending(strm);\n\t\t\t\t\tif (s.pending !== 0) {\n\t\t\t\t\t\ts.last_flush = -1;\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tbeg = 0;\n\t\t\t\t}\n\t\t\t\tif (s.gzindex < s.gzhead.name.length) val = s.gzhead.name.charCodeAt(s.gzindex++) & 255;\n\t\t\t\telse val = 0;\n\t\t\t\tput_byte(s, val);\n\t\t\t} while (val !== 0);\n\t\t\tif (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n\t\t\ts.gzindex = 0;\n\t\t}\n\t\ts.status = COMMENT_STATE;\n\t}\n\tif (s.status === COMMENT_STATE) {\n\t\tif (s.gzhead.comment) {\n\t\t\tlet beg = s.pending;\n\t\t\tlet val;\n\t\t\tdo {\n\t\t\t\tif (s.pending === s.pending_buf_size) {\n\t\t\t\t\tif (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n\t\t\t\t\tflush_pending(strm);\n\t\t\t\t\tif (s.pending !== 0) {\n\t\t\t\t\t\ts.last_flush = -1;\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tbeg = 0;\n\t\t\t\t}\n\t\t\t\tif (s.gzindex < s.gzhead.comment.length) val = s.gzhead.comment.charCodeAt(s.gzindex++) & 255;\n\t\t\t\telse val = 0;\n\t\t\t\tput_byte(s, val);\n\t\t\t} while (val !== 0);\n\t\t\tif (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n\t\t}\n\t\ts.status = HCRC_STATE;\n\t}\n\tif (s.status === HCRC_STATE) {\n\t\tif (s.gzhead.hcrc) {\n\t\t\tif (s.pending + 2 > s.pending_buf_size) {\n\t\t\t\tflush_pending(strm);\n\t\t\t\tif (s.pending !== 0) {\n\t\t\t\t\ts.last_flush = -1;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tput_byte(s, strm.adler & 255);\n\t\t\tput_byte(s, strm.adler >> 8 & 255);\n\t\t\tstrm.adler = 0;\n\t\t}\n\t\ts.status = BUSY_STATE;\n\t\tflush_pending(strm);\n\t\tif (s.pending !== 0) {\n\t\t\ts.last_flush = -1;\n\t\t\treturn 0;\n\t\t}\n\t}\n\tif (strm.avail_in !== 0 || s.lookahead !== 0 || flush !== 0 && s.status !== FINISH_STATE) {\n\t\tlet bstate = s.level === 0 ? deflate_stored(s, flush) : s.strategy === 2 ? deflate_huff(s, flush) : s.strategy === 3 ? deflate_rle(s, flush) : configuration_table[s.level].func(s, flush);\n\t\tif (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) s.status = FINISH_STATE;\n\t\tif (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n\t\t\tif (strm.avail_out === 0) s.last_flush = -1;\n\t\t\treturn 0;\n\t\t}\n\t\tif (bstate === BS_BLOCK_DONE) {\n\t\t\tif (flush === 1) _tr_align(s);\n\t\t\telse if (flush !== 5) {\n\t\t\t\t_tr_stored_block(s, 0, 0, false);\n\t\t\t\tif (flush === 3) {\n\t\t\t\t\t/*** CLEAR_HASH(s); ***/ zero(s.head);\n\t\t\t\t\tif (s.lookahead === 0) {\n\t\t\t\t\t\ts.strstart = 0;\n\t\t\t\t\t\ts.block_start = 0;\n\t\t\t\t\t\ts.insert = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tflush_pending(strm);\n\t\t\tif (strm.avail_out === 0) {\n\t\t\t\ts.last_flush = -1;\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t}\n\tif (flush !== 4) return 0;\n\tif (s.wrap <= 0) return 1;\n\tif (s.wrap === 2) {\n\t\tput_byte(s, strm.adler & 255);\n\t\tput_byte(s, strm.adler >> 8 & 255);\n\t\tput_byte(s, strm.adler >> 16 & 255);\n\t\tput_byte(s, strm.adler >> 24 & 255);\n\t\tput_byte(s, strm.total_in & 255);\n\t\tput_byte(s, strm.total_in >> 8 & 255);\n\t\tput_byte(s, strm.total_in >> 16 & 255);\n\t\tput_byte(s, strm.total_in >> 24 & 255);\n\t} else {\n\t\tputShortMSB(s, strm.adler >>> 16);\n\t\tputShortMSB(s, strm.adler & 65535);\n\t}\n\tflush_pending(strm);\n\tif (s.wrap > 0) s.wrap = -s.wrap;\n\treturn s.pending !== 0 ? 0 : 1;\n};\nvar deflateEnd = (strm) => {\n\tif (deflateStateCheck(strm)) return -2;\n\tconst status = strm.state.status;\n\tstrm.state = null;\n\treturn status === BUSY_STATE ? err(strm, -3) : 0;\n};\nvar deflateSetDictionary = (strm, dictionary) => {\n\tlet dictLength = dictionary.length;\n\tif (deflateStateCheck(strm)) return -2;\n\tconst s = strm.state;\n\tconst wrap = s.wrap;\n\tif (wrap === 2 || wrap === 1 && s.status !== INIT_STATE || s.lookahead) return -2;\n\tif (wrap === 1) strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n\ts.wrap = 0;\n\tif (dictLength >= s.w_size) {\n\t\tif (wrap === 0) {\n\t\t\t/*** CLEAR_HASH(s); ***/\n\t\t\tzero(s.head);\n\t\t\ts.strstart = 0;\n\t\t\ts.block_start = 0;\n\t\t\ts.insert = 0;\n\t\t}\n\t\tlet tmpDict = new Uint8Array(s.w_size);\n\t\ttmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);\n\t\tdictionary = tmpDict;\n\t\tdictLength = s.w_size;\n\t}\n\tconst avail = strm.avail_in;\n\tconst next = strm.next_in;\n\tconst input = strm.input;\n\tstrm.avail_in = dictLength;\n\tstrm.next_in = 0;\n\tstrm.input = dictionary;\n\tfill_window(s);\n\twhile (s.lookahead >= MIN_MATCH) {\n\t\tlet str = s.strstart;\n\t\tlet n = s.lookahead - (MIN_MATCH - 1);\n\t\tdo {\n\t\t\tINSERT_STRING(s, str);\n\t\t\tstr++;\n\t\t} while (--n);\n\t\ts.strstart = str;\n\t\ts.lookahead = MIN_MATCH - 1;\n\t\tfill_window(s);\n\t}\n\ts.strstart += s.lookahead;\n\ts.block_start = s.strstart;\n\ts.insert = s.lookahead;\n\ts.lookahead = 0;\n\ts.match_length = s.prev_length = MIN_MATCH - 1;\n\ts.match_available = 0;\n\tstrm.next_in = next;\n\tstrm.input = input;\n\tstrm.avail_in = avail;\n\ts.wrap = wrap;\n\treturn 0;\n};\n//#endregion\n//#region src/zlib/inffast.mjs\nvar BAD$1 = 16209;\nvar TYPE$1 = 16191;\nfunction inflate_fast(strm, start) {\n\tlet _in;\n\tlet last;\n\tlet _out;\n\tlet beg;\n\tlet end;\n\tlet dmax;\n\tlet wsize;\n\tlet whave;\n\tlet wnext;\n\tlet s_window;\n\tlet hold;\n\tlet bits;\n\tlet lcode;\n\tlet dcode;\n\tlet lmask;\n\tlet dmask;\n\tlet here;\n\tlet op;\n\tlet len;\n\tlet dist;\n\tlet from;\n\tlet from_source;\n\tlet input, output;\n\tconst state = strm.state;\n\t_in = strm.next_in;\n\tinput = strm.input;\n\tlast = _in + (strm.avail_in - 5);\n\t_out = strm.next_out;\n\toutput = strm.output;\n\tbeg = _out - (start - strm.avail_out);\n\tend = _out + (strm.avail_out - 257);\n\tdmax = state.dmax;\n\twsize = state.wsize;\n\twhave = state.whave;\n\twnext = state.wnext;\n\ts_window = state.window;\n\thold = state.hold;\n\tbits = state.bits;\n\tlcode = state.lencode;\n\tdcode = state.distcode;\n\tlmask = (1 << state.lenbits) - 1;\n\tdmask = (1 << state.distbits) - 1;\n\ttop: do {\n\t\tif (bits < 15) {\n\t\t\thold += input[_in++] << bits;\n\t\t\tbits += 8;\n\t\t\thold += input[_in++] << bits;\n\t\t\tbits += 8;\n\t\t}\n\t\there = lcode[hold & lmask];\n\t\tdolen: for (;;) {\n\t\t\top = here >>> 24;\n\t\t\thold >>>= op;\n\t\t\tbits -= op;\n\t\t\top = here >>> 16 & 255;\n\t\t\tif (op === 0) output[_out++] = here & 65535;\n\t\t\telse if (op & 16) {\n\t\t\t\tlen = here & 65535;\n\t\t\t\top &= 15;\n\t\t\t\tif (op) {\n\t\t\t\t\tif (bits < op) {\n\t\t\t\t\t\thold += input[_in++] << bits;\n\t\t\t\t\t\tbits += 8;\n\t\t\t\t\t}\n\t\t\t\t\tlen += hold & (1 << op) - 1;\n\t\t\t\t\thold >>>= op;\n\t\t\t\t\tbits -= op;\n\t\t\t\t}\n\t\t\t\tif (bits < 15) {\n\t\t\t\t\thold += input[_in++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t\thold += input[_in++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\there = dcode[hold & dmask];\n\t\t\t\tdodist: for (;;) {\n\t\t\t\t\top = here >>> 24;\n\t\t\t\t\thold >>>= op;\n\t\t\t\t\tbits -= op;\n\t\t\t\t\top = here >>> 16 & 255;\n\t\t\t\t\tif (op & 16) {\n\t\t\t\t\t\tdist = here & 65535;\n\t\t\t\t\t\top &= 15;\n\t\t\t\t\t\tif (bits < op) {\n\t\t\t\t\t\t\thold += input[_in++] << bits;\n\t\t\t\t\t\t\tbits += 8;\n\t\t\t\t\t\t\tif (bits < op) {\n\t\t\t\t\t\t\t\thold += input[_in++] << bits;\n\t\t\t\t\t\t\t\tbits += 8;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdist += hold & (1 << op) - 1;\n\t\t\t\t\t\tif (dist > dmax) {\n\t\t\t\t\t\t\tstrm.msg = \"invalid distance too far back\";\n\t\t\t\t\t\t\tstate.mode = BAD$1;\n\t\t\t\t\t\t\tbreak top;\n\t\t\t\t\t\t}\n\t\t\t\t\t\thold >>>= op;\n\t\t\t\t\t\tbits -= op;\n\t\t\t\t\t\top = _out - beg;\n\t\t\t\t\t\tif (dist > op) {\n\t\t\t\t\t\t\top = dist - op;\n\t\t\t\t\t\t\tif (op > whave) {\n\t\t\t\t\t\t\t\tif (state.sane) {\n\t\t\t\t\t\t\t\t\tstrm.msg = \"invalid distance too far back\";\n\t\t\t\t\t\t\t\t\tstate.mode = BAD$1;\n\t\t\t\t\t\t\t\t\tbreak top;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfrom = 0;\n\t\t\t\t\t\t\tfrom_source = s_window;\n\t\t\t\t\t\t\tif (wnext === 0) {\n\t\t\t\t\t\t\t\tfrom += wsize - op;\n\t\t\t\t\t\t\t\tif (op < len) {\n\t\t\t\t\t\t\t\t\tlen -= op;\n\t\t\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t\t\t\toutput[_out++] = s_window[from++];\n\t\t\t\t\t\t\t\t\twhile (--op);\n\t\t\t\t\t\t\t\t\tfrom = _out - dist;\n\t\t\t\t\t\t\t\t\tfrom_source = output;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (wnext < op) {\n\t\t\t\t\t\t\t\tfrom += wsize + wnext - op;\n\t\t\t\t\t\t\t\top -= wnext;\n\t\t\t\t\t\t\t\tif (op < len) {\n\t\t\t\t\t\t\t\t\tlen -= op;\n\t\t\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t\t\t\toutput[_out++] = s_window[from++];\n\t\t\t\t\t\t\t\t\twhile (--op);\n\t\t\t\t\t\t\t\t\tfrom = 0;\n\t\t\t\t\t\t\t\t\tif (wnext < len) {\n\t\t\t\t\t\t\t\t\t\top = wnext;\n\t\t\t\t\t\t\t\t\t\tlen -= op;\n\t\t\t\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t\t\t\t\toutput[_out++] = s_window[from++];\n\t\t\t\t\t\t\t\t\t\twhile (--op);\n\t\t\t\t\t\t\t\t\t\tfrom = _out - dist;\n\t\t\t\t\t\t\t\t\t\tfrom_source = output;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfrom += wnext - op;\n\t\t\t\t\t\t\t\tif (op < len) {\n\t\t\t\t\t\t\t\t\tlen -= op;\n\t\t\t\t\t\t\t\t\tdo\n\t\t\t\t\t\t\t\t\t\toutput[_out++] = s_window[from++];\n\t\t\t\t\t\t\t\t\twhile (--op);\n\t\t\t\t\t\t\t\t\tfrom = _out - dist;\n\t\t\t\t\t\t\t\t\tfrom_source = output;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile (len > 2) {\n\t\t\t\t\t\t\t\toutput[_out++] = from_source[from++];\n\t\t\t\t\t\t\t\toutput[_out++] = from_source[from++];\n\t\t\t\t\t\t\t\toutput[_out++] = from_source[from++];\n\t\t\t\t\t\t\t\tlen -= 3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\t\toutput[_out++] = from_source[from++];\n\t\t\t\t\t\t\t\tif (len > 1) output[_out++] = from_source[from++];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfrom = _out - dist;\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\toutput[_out++] = output[from++];\n\t\t\t\t\t\t\t\toutput[_out++] = output[from++];\n\t\t\t\t\t\t\t\toutput[_out++] = output[from++];\n\t\t\t\t\t\t\t\tlen -= 3;\n\t\t\t\t\t\t\t} while (len > 2);\n\t\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\t\toutput[_out++] = output[from++];\n\t\t\t\t\t\t\t\tif (len > 1) output[_out++] = output[from++];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ((op & 64) === 0) {\n\t\t\t\t\t\there = dcode[(here & 65535) + (hold & (1 << op) - 1)];\n\t\t\t\t\t\tcontinue dodist;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstrm.msg = \"invalid distance code\";\n\t\t\t\t\t\tstate.mode = BAD$1;\n\t\t\t\t\t\tbreak top;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if ((op & 64) === 0) {\n\t\t\t\there = lcode[(here & 65535) + (hold & (1 << op) - 1)];\n\t\t\t\tcontinue dolen;\n\t\t\t} else if (op & 32) {\n\t\t\t\tstate.mode = TYPE$1;\n\t\t\t\tbreak top;\n\t\t\t} else {\n\t\t\t\tstrm.msg = \"invalid literal/length code\";\n\t\t\t\tstate.mode = BAD$1;\n\t\t\t\tbreak top;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t} while (_in < last && _out < end);\n\tlen = bits >> 3;\n\t_in -= len;\n\tbits -= len << 3;\n\thold &= (1 << bits) - 1;\n\tstrm.next_in = _in;\n\tstrm.next_out = _out;\n\tstrm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last);\n\tstrm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end);\n\tstate.hold = hold;\n\tstate.bits = bits;\n}\n//#endregion\n//#region src/zlib/inftrees.mjs\nvar MAXBITS = 15;\nvar ENOUGH_LENS$1 = 852;\nvar ENOUGH_DISTS$1 = 592;\nvar CODES$1 = 0;\nvar LENS$1 = 1;\nvar DISTS$1 = 2;\nvar lbase = new Uint16Array([\n\t3,\n\t4,\n\t5,\n\t6,\n\t7,\n\t8,\n\t9,\n\t10,\n\t11,\n\t13,\n\t15,\n\t17,\n\t19,\n\t23,\n\t27,\n\t31,\n\t35,\n\t43,\n\t51,\n\t59,\n\t67,\n\t83,\n\t99,\n\t115,\n\t131,\n\t163,\n\t195,\n\t227,\n\t258,\n\t0,\n\t0\n]);\nvar lext = new Uint8Array([\n\t16,\n\t16,\n\t16,\n\t16,\n\t16,\n\t16,\n\t16,\n\t16,\n\t17,\n\t17,\n\t17,\n\t17,\n\t18,\n\t18,\n\t18,\n\t18,\n\t19,\n\t19,\n\t19,\n\t19,\n\t20,\n\t20,\n\t20,\n\t20,\n\t21,\n\t21,\n\t21,\n\t21,\n\t16,\n\t199,\n\t75\n]);\nvar dbase = new Uint16Array([\n\t1,\n\t2,\n\t3,\n\t4,\n\t5,\n\t7,\n\t9,\n\t13,\n\t17,\n\t25,\n\t33,\n\t49,\n\t65,\n\t97,\n\t129,\n\t193,\n\t257,\n\t385,\n\t513,\n\t769,\n\t1025,\n\t1537,\n\t2049,\n\t3073,\n\t4097,\n\t6145,\n\t8193,\n\t12289,\n\t16385,\n\t24577,\n\t0,\n\t0\n]);\nvar dext = new Uint8Array([\n\t16,\n\t16,\n\t16,\n\t16,\n\t17,\n\t17,\n\t18,\n\t18,\n\t19,\n\t19,\n\t20,\n\t20,\n\t21,\n\t21,\n\t22,\n\t22,\n\t23,\n\t23,\n\t24,\n\t24,\n\t25,\n\t25,\n\t26,\n\t26,\n\t27,\n\t27,\n\t28,\n\t28,\n\t29,\n\t29,\n\t64,\n\t64\n]);\nvar inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) => {\n\tconst bits = opts.bits;\n\tlet len = 0;\n\tlet sym = 0;\n\tlet min = 0, max = 0;\n\tlet root = 0;\n\tlet curr = 0;\n\tlet drop = 0;\n\tlet left = 0;\n\tlet used = 0;\n\tlet huff = 0;\n\tlet incr;\n\tlet fill;\n\tlet low;\n\tlet mask;\n\tlet next;\n\tlet base = null;\n\tlet match;\n\tconst count = /* @__PURE__ */ new Uint16Array(16);\n\tconst offs = /* @__PURE__ */ new Uint16Array(16);\n\tlet extra = null;\n\tlet here_bits, here_op, here_val;\n\tfor (len = 0; len <= MAXBITS; len++) count[len] = 0;\n\tfor (sym = 0; sym < codes; sym++) count[lens[lens_index + sym]]++;\n\troot = bits;\n\tfor (max = MAXBITS; max >= 1; max--) if (count[max] !== 0) break;\n\tif (root > max) root = max;\n\tif (max === 0) {\n\t\ttable[table_index++] = 20971520;\n\t\ttable[table_index++] = 20971520;\n\t\topts.bits = 1;\n\t\treturn 0;\n\t}\n\tfor (min = 1; min < max; min++) if (count[min] !== 0) break;\n\tif (root < min) root = min;\n\tleft = 1;\n\tfor (len = 1; len <= MAXBITS; len++) {\n\t\tleft <<= 1;\n\t\tleft -= count[len];\n\t\tif (left < 0) return -1;\n\t}\n\tif (left > 0 && (type === CODES$1 || max !== 1)) return -1;\n\toffs[1] = 0;\n\tfor (len = 1; len < MAXBITS; len++) offs[len + 1] = offs[len] + count[len];\n\tfor (sym = 0; sym < codes; sym++) if (lens[lens_index + sym] !== 0) work[offs[lens[lens_index + sym]]++] = sym;\n\tif (type === CODES$1) {\n\t\tbase = extra = work;\n\t\tmatch = 20;\n\t} else if (type === LENS$1) {\n\t\tbase = lbase;\n\t\textra = lext;\n\t\tmatch = 257;\n\t} else {\n\t\tbase = dbase;\n\t\textra = dext;\n\t\tmatch = 0;\n\t}\n\thuff = 0;\n\tsym = 0;\n\tlen = min;\n\tnext = table_index;\n\tcurr = root;\n\tdrop = 0;\n\tlow = -1;\n\tused = 1 << root;\n\tmask = used - 1;\n\tif (type === LENS$1 && used > ENOUGH_LENS$1 || type === DISTS$1 && used > ENOUGH_DISTS$1) return 1;\n\tfor (;;) {\n\t\there_bits = len - drop;\n\t\tif (work[sym] + 1 < match) {\n\t\t\there_op = 0;\n\t\t\there_val = work[sym];\n\t\t} else if (work[sym] >= match) {\n\t\t\there_op = extra[work[sym] - match];\n\t\t\there_val = base[work[sym] - match];\n\t\t} else {\n\t\t\there_op = 96;\n\t\t\there_val = 0;\n\t\t}\n\t\tincr = 1 << len - drop;\n\t\tfill = 1 << curr;\n\t\tmin = fill;\n\t\tdo {\n\t\t\tfill -= incr;\n\t\t\ttable[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val | 0;\n\t\t} while (fill !== 0);\n\t\tincr = 1 << len - 1;\n\t\twhile (huff & incr) incr >>= 1;\n\t\tif (incr !== 0) {\n\t\t\thuff &= incr - 1;\n\t\t\thuff += incr;\n\t\t} else huff = 0;\n\t\tsym++;\n\t\tif (--count[len] === 0) {\n\t\t\tif (len === max) break;\n\t\t\tlen = lens[lens_index + work[sym]];\n\t\t}\n\t\tif (len > root && (huff & mask) !== low) {\n\t\t\tif (drop === 0) drop = root;\n\t\t\tnext += min;\n\t\t\tcurr = len - drop;\n\t\t\tleft = 1 << curr;\n\t\t\twhile (curr + drop < max) {\n\t\t\t\tleft -= count[curr + drop];\n\t\t\t\tif (left <= 0) break;\n\t\t\t\tcurr++;\n\t\t\t\tleft <<= 1;\n\t\t\t}\n\t\t\tused += 1 << curr;\n\t\t\tif (type === LENS$1 && used > ENOUGH_LENS$1 || type === DISTS$1 && used > ENOUGH_DISTS$1) return 1;\n\t\t\tlow = huff & mask;\n\t\t\ttable[low] = root << 24 | curr << 16 | next - table_index | 0;\n\t\t}\n\t}\n\tif (huff !== 0) table[next + huff] = len - drop << 24 | 4194304;\n\topts.bits = root;\n\treturn 0;\n};\n//#endregion\n//#region src/zlib/inflate.mjs\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\nvar HEAD = 16180;\nvar FLAGS = 16181;\nvar TIME = 16182;\nvar OS = 16183;\nvar EXLEN = 16184;\nvar EXTRA = 16185;\nvar NAME = 16186;\nvar COMMENT = 16187;\nvar HCRC = 16188;\nvar DICTID = 16189;\nvar DICT = 16190;\nvar TYPE = 16191;\nvar TYPEDO = 16192;\nvar STORED = 16193;\nvar COPY_ = 16194;\nvar COPY = 16195;\nvar TABLE = 16196;\nvar LENLENS = 16197;\nvar CODELENS = 16198;\nvar LEN_ = 16199;\nvar LEN = 16200;\nvar LENEXT = 16201;\nvar DIST = 16202;\nvar DISTEXT = 16203;\nvar MATCH = 16204;\nvar LIT = 16205;\nvar CHECK = 16206;\nvar LENGTH = 16207;\nvar DONE = 16208;\nvar BAD = 16209;\nvar MEM = 16210;\nvar SYNC = 16211;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\nvar DEF_WBITS = 15;\nvar zswap32 = (q) => {\n\treturn (q >>> 24 & 255) + (q >>> 8 & 65280) + ((q & 65280) << 8) + ((q & 255) << 24);\n};\nvar InflateState = class {\n\tconstructor() {\n\t\tthis.strm = null;\n\t\tthis.mode = 0;\n\t\tthis.last = false;\n\t\tthis.wrap = 0;\n\t\tthis.havedict = false;\n\t\tthis.flags = 0;\n\t\tthis.dmax = 0;\n\t\tthis.check = 0;\n\t\tthis.total = 0;\n\t\tthis.head = null;\n\t\tthis.wbits = 0;\n\t\tthis.wsize = 0;\n\t\tthis.whave = 0;\n\t\tthis.wnext = 0;\n\t\tthis.window = null;\n\t\tthis.hold = 0;\n\t\tthis.bits = 0;\n\t\tthis.length = 0;\n\t\tthis.offset = 0;\n\t\tthis.extra = 0;\n\t\tthis.lencode = null;\n\t\tthis.distcode = null;\n\t\tthis.lenbits = 0;\n\t\tthis.distbits = 0;\n\t\tthis.ncode = 0;\n\t\tthis.nlen = 0;\n\t\tthis.ndist = 0;\n\t\tthis.have = 0;\n\t\tthis.next = null;\n\t\tthis.lens = /* @__PURE__ */ new Uint16Array(320);\n\t\tthis.work = /* @__PURE__ */ new Uint16Array(288);\n\t\tthis.lendyn = null;\n\t\tthis.distdyn = null;\n\t\tthis.sane = 0;\n\t\tthis.back = 0;\n\t\tthis.was = 0;\n\t}\n};\nvar inflateStateCheck = (strm) => {\n\tif (!strm) return 1;\n\tconst state = strm.state;\n\tif (!state || state.strm !== strm || state.mode < HEAD || state.mode > SYNC) return 1;\n\treturn 0;\n};\nvar inflateResetKeep = (strm) => {\n\tif (inflateStateCheck(strm)) return -2;\n\tconst state = strm.state;\n\tstrm.total_in = strm.total_out = state.total = 0;\n\tstrm.msg = \"\";\n\tif (state.wrap) strm.adler = state.wrap & 1;\n\tstate.mode = HEAD;\n\tstate.last = 0;\n\tstate.havedict = 0;\n\tstate.flags = -1;\n\tstate.dmax = 32768;\n\tstate.head = null;\n\tstate.hold = 0;\n\tstate.bits = 0;\n\tstate.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);\n\tstate.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);\n\tstate.sane = 1;\n\tstate.back = -1;\n\treturn 0;\n};\nvar inflateReset = (strm) => {\n\tif (inflateStateCheck(strm)) return -2;\n\tconst state = strm.state;\n\tstate.wsize = 0;\n\tstate.whave = 0;\n\tstate.wnext = 0;\n\treturn inflateResetKeep(strm);\n};\nvar inflateReset2 = (strm, windowBits) => {\n\tlet wrap;\n\tif (inflateStateCheck(strm)) return -2;\n\tconst state = strm.state;\n\tif (windowBits < 0) {\n\t\twrap = 0;\n\t\twindowBits = -windowBits;\n\t} else {\n\t\twrap = (windowBits >> 4) + 5;\n\t\tif (windowBits < 48) windowBits &= 15;\n\t}\n\tif (windowBits && (windowBits < 8 || windowBits > 15)) return -2;\n\tif (state.window !== null && state.wbits !== windowBits) state.window = null;\n\tstate.wrap = wrap;\n\tstate.wbits = windowBits;\n\treturn inflateReset(strm);\n};\nvar inflateInit2 = (strm, windowBits) => {\n\tif (!strm) return -2;\n\tconst state = new InflateState();\n\tstrm.state = state;\n\tstate.strm = strm;\n\tstate.window = null;\n\tstate.mode = HEAD;\n\tconst ret = inflateReset2(strm, windowBits);\n\tif (ret !== 0) strm.state = null;\n\treturn ret;\n};\nvar inflateInit = (strm) => {\n\treturn inflateInit2(strm, DEF_WBITS);\n};\nvar virgin = true;\nvar lenfix, distfix;\nvar fixedtables = (state) => {\n\tif (virgin) {\n\t\tlenfix = /* @__PURE__ */ new Int32Array(512);\n\t\tdistfix = /* @__PURE__ */ new Int32Array(32);\n\t\tlet sym = 0;\n\t\twhile (sym < 144) state.lens[sym++] = 8;\n\t\twhile (sym < 256) state.lens[sym++] = 9;\n\t\twhile (sym < 280) state.lens[sym++] = 7;\n\t\twhile (sym < 288) state.lens[sym++] = 8;\n\t\tinflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\t\tsym = 0;\n\t\twhile (sym < 32) state.lens[sym++] = 5;\n\t\tinflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\t\tvirgin = false;\n\t}\n\tstate.lencode = lenfix;\n\tstate.lenbits = 9;\n\tstate.distcode = distfix;\n\tstate.distbits = 5;\n};\nvar updatewindow = (strm, src, end, copy) => {\n\tlet dist;\n\tconst state = strm.state;\n\tif (state.window === null) state.window = new Uint8Array(1 << state.wbits);\n\tif (state.wsize === 0) {\n\t\tstate.wsize = 1 << state.wbits;\n\t\tstate.wnext = 0;\n\t\tstate.whave = 0;\n\t}\n\tif (copy >= state.wsize) {\n\t\tstate.window.set(src.subarray(end - state.wsize, end), 0);\n\t\tstate.wnext = 0;\n\t\tstate.whave = state.wsize;\n\t} else {\n\t\tdist = state.wsize - state.wnext;\n\t\tif (dist > copy) dist = copy;\n\t\tstate.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);\n\t\tcopy -= dist;\n\t\tif (copy) {\n\t\t\tstate.window.set(src.subarray(end - copy, end), 0);\n\t\t\tstate.wnext = copy;\n\t\t\tstate.whave = state.wsize;\n\t\t} else {\n\t\t\tstate.wnext += dist;\n\t\t\tif (state.wnext === state.wsize) state.wnext = 0;\n\t\t\tif (state.whave < state.wsize) state.whave += dist;\n\t\t}\n\t}\n\treturn 0;\n};\nvar inflate$1 = (strm, flush) => {\n\tlet state;\n\tlet input, output;\n\tlet next;\n\tlet put;\n\tlet have, left;\n\tlet hold;\n\tlet bits;\n\tlet _in, _out;\n\tlet copy;\n\tlet from;\n\tlet from_source;\n\tlet here = 0;\n\tlet here_bits, here_op, here_val;\n\tlet last_bits, last_op, last_val;\n\tlet len;\n\tlet ret;\n\tconst hbuf = /* @__PURE__ */ new Uint8Array(4);\n\tlet opts;\n\tlet n;\n\tconst order = new Uint8Array([\n\t\t16,\n\t\t17,\n\t\t18,\n\t\t0,\n\t\t8,\n\t\t7,\n\t\t9,\n\t\t6,\n\t\t10,\n\t\t5,\n\t\t11,\n\t\t4,\n\t\t12,\n\t\t3,\n\t\t13,\n\t\t2,\n\t\t14,\n\t\t1,\n\t\t15\n\t]);\n\tif (inflateStateCheck(strm) || !strm.output || !strm.input && strm.avail_in !== 0) return -2;\n\tstate = strm.state;\n\tif (state.mode === TYPE) state.mode = TYPEDO;\n\tput = strm.next_out;\n\toutput = strm.output;\n\tleft = strm.avail_out;\n\tnext = strm.next_in;\n\tinput = strm.input;\n\thave = strm.avail_in;\n\thold = state.hold;\n\tbits = state.bits;\n\t_in = have;\n\t_out = left;\n\tret = 0;\n\tinf_leave: for (;;) switch (state.mode) {\n\t\tcase HEAD:\n\t\t\tif (state.wrap === 0) {\n\t\t\t\tstate.mode = TYPEDO;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\twhile (bits < 16) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tif (state.wrap & 2 && hold === 35615) {\n\t\t\t\tif (state.wbits === 0) state.wbits = 15;\n\t\t\t\tstate.check = 0;\n\t\t\t\thbuf[0] = hold & 255;\n\t\t\t\thbuf[1] = hold >>> 8 & 255;\n\t\t\t\tstate.check = crc32(state.check, hbuf, 2, 0);\n\t\t\t\thold = 0;\n\t\t\t\tbits = 0;\n\t\t\t\tstate.mode = FLAGS;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (state.head) state.head.done = false;\n\t\t\tif (!(state.wrap & 1) || (((hold & 255) << 8) + (hold >> 8)) % 31) {\n\t\t\t\tstrm.msg = \"incorrect header check\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ((hold & 15) !== 8) {\n\t\t\t\tstrm.msg = \"unknown compression method\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\thold >>>= 4;\n\t\t\tbits -= 4;\n\t\t\tlen = (hold & 15) + 8;\n\t\t\tif (state.wbits === 0) state.wbits = len;\n\t\t\tif (len > 15 || len > state.wbits) {\n\t\t\t\tstrm.msg = \"invalid window size\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.dmax = 1 << state.wbits;\n\t\t\tstate.flags = 0;\n\t\t\tstrm.adler = state.check = 1;\n\t\t\tstate.mode = hold & 512 ? DICTID : TYPE;\n\t\t\thold = 0;\n\t\t\tbits = 0;\n\t\t\tbreak;\n\t\tcase FLAGS:\n\t\t\twhile (bits < 16) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tstate.flags = hold;\n\t\t\tif ((state.flags & 255) !== 8) {\n\t\t\t\tstrm.msg = \"unknown compression method\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (state.flags & 57344) {\n\t\t\t\tstrm.msg = \"unknown header flags set\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (state.head) state.head.text = hold >> 8 & 1;\n\t\t\tif (state.flags & 512 && state.wrap & 4) {\n\t\t\t\thbuf[0] = hold & 255;\n\t\t\t\thbuf[1] = hold >>> 8 & 255;\n\t\t\t\tstate.check = crc32(state.check, hbuf, 2, 0);\n\t\t\t}\n\t\t\thold = 0;\n\t\t\tbits = 0;\n\t\t\tstate.mode = TIME;\n\t\tcase TIME:\n\t\t\twhile (bits < 32) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tif (state.head) state.head.time = hold;\n\t\t\tif (state.flags & 512 && state.wrap & 4) {\n\t\t\t\thbuf[0] = hold & 255;\n\t\t\t\thbuf[1] = hold >>> 8 & 255;\n\t\t\t\thbuf[2] = hold >>> 16 & 255;\n\t\t\t\thbuf[3] = hold >>> 24 & 255;\n\t\t\t\tstate.check = crc32(state.check, hbuf, 4, 0);\n\t\t\t}\n\t\t\thold = 0;\n\t\t\tbits = 0;\n\t\t\tstate.mode = OS;\n\t\tcase OS:\n\t\t\twhile (bits < 16) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tif (state.head) {\n\t\t\t\tstate.head.xflags = hold & 255;\n\t\t\t\tstate.head.os = hold >> 8;\n\t\t\t}\n\t\t\tif (state.flags & 512 && state.wrap & 4) {\n\t\t\t\thbuf[0] = hold & 255;\n\t\t\t\thbuf[1] = hold >>> 8 & 255;\n\t\t\t\tstate.check = crc32(state.check, hbuf, 2, 0);\n\t\t\t}\n\t\t\thold = 0;\n\t\t\tbits = 0;\n\t\t\tstate.mode = EXLEN;\n\t\tcase EXLEN:\n\t\t\tif (state.flags & 1024) {\n\t\t\t\twhile (bits < 16) {\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\tstate.length = hold;\n\t\t\t\tif (state.head) state.head.extra_len = hold;\n\t\t\t\tif (state.flags & 512 && state.wrap & 4) {\n\t\t\t\t\thbuf[0] = hold & 255;\n\t\t\t\t\thbuf[1] = hold >>> 8 & 255;\n\t\t\t\t\tstate.check = crc32(state.check, hbuf, 2, 0);\n\t\t\t\t}\n\t\t\t\thold = 0;\n\t\t\t\tbits = 0;\n\t\t\t} else if (state.head) state.head.extra = null;\n\t\t\tstate.mode = EXTRA;\n\t\tcase EXTRA:\n\t\t\tif (state.flags & 1024) {\n\t\t\t\tcopy = state.length;\n\t\t\t\tif (copy > have) copy = have;\n\t\t\t\tif (copy) {\n\t\t\t\t\tif (state.head) {\n\t\t\t\t\t\tlen = state.head.extra_len - state.length;\n\t\t\t\t\t\tif (!state.head.extra) state.head.extra = new Uint8Array(state.head.extra_len);\n\t\t\t\t\t\tstate.head.extra.set(input.subarray(next, next + copy), len);\n\t\t\t\t\t}\n\t\t\t\t\tif (state.flags & 512 && state.wrap & 4) state.check = crc32(state.check, input, copy, next);\n\t\t\t\t\thave -= copy;\n\t\t\t\t\tnext += copy;\n\t\t\t\t\tstate.length -= copy;\n\t\t\t\t}\n\t\t\t\tif (state.length) break inf_leave;\n\t\t\t}\n\t\t\tstate.length = 0;\n\t\t\tstate.mode = NAME;\n\t\tcase NAME:\n\t\t\tif (state.flags & 2048) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\tcopy = 0;\n\t\t\t\tdo {\n\t\t\t\t\tlen = input[next + copy++];\n\t\t\t\t\tif (state.head && len && state.length < 65536) state.head.name += String.fromCharCode(len);\n\t\t\t\t} while (len && copy < have);\n\t\t\t\tif (state.flags & 512 && state.wrap & 4) state.check = crc32(state.check, input, copy, next);\n\t\t\t\thave -= copy;\n\t\t\t\tnext += copy;\n\t\t\t\tif (len) break inf_leave;\n\t\t\t} else if (state.head) state.head.name = null;\n\t\t\tstate.length = 0;\n\t\t\tstate.mode = COMMENT;\n\t\tcase COMMENT:\n\t\t\tif (state.flags & 4096) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\tcopy = 0;\n\t\t\t\tdo {\n\t\t\t\t\tlen = input[next + copy++];\n\t\t\t\t\tif (state.head && len && state.length < 65536) state.head.comment += String.fromCharCode(len);\n\t\t\t\t} while (len && copy < have);\n\t\t\t\tif (state.flags & 512 && state.wrap & 4) state.check = crc32(state.check, input, copy, next);\n\t\t\t\thave -= copy;\n\t\t\t\tnext += copy;\n\t\t\t\tif (len) break inf_leave;\n\t\t\t} else if (state.head) state.head.comment = null;\n\t\t\tstate.mode = HCRC;\n\t\tcase HCRC:\n\t\t\tif (state.flags & 512) {\n\t\t\t\twhile (bits < 16) {\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\tif (state.wrap & 4 && hold !== (state.check & 65535)) {\n\t\t\t\t\tstrm.msg = \"header crc mismatch\";\n\t\t\t\t\tstate.mode = BAD;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\thold = 0;\n\t\t\t\tbits = 0;\n\t\t\t}\n\t\t\tif (state.head) {\n\t\t\t\tstate.head.hcrc = state.flags >> 9 & 1;\n\t\t\t\tstate.head.done = true;\n\t\t\t}\n\t\t\tstrm.adler = state.check = 0;\n\t\t\tstate.mode = TYPE;\n\t\t\tbreak;\n\t\tcase DICTID:\n\t\t\twhile (bits < 32) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tstrm.adler = state.check = zswap32(hold);\n\t\t\thold = 0;\n\t\t\tbits = 0;\n\t\t\tstate.mode = DICT;\n\t\tcase DICT:\n\t\t\tif (state.havedict === 0) {\n\t\t\t\tstrm.next_out = put;\n\t\t\t\tstrm.avail_out = left;\n\t\t\t\tstrm.next_in = next;\n\t\t\t\tstrm.avail_in = have;\n\t\t\t\tstate.hold = hold;\n\t\t\t\tstate.bits = bits;\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\tstrm.adler = state.check = 1;\n\t\t\tstate.mode = TYPE;\n\t\tcase TYPE: if (flush === 5 || flush === 6) break inf_leave;\n\t\tcase TYPEDO:\n\t\t\tif (state.last) {\n\t\t\t\thold >>>= bits & 7;\n\t\t\t\tbits -= bits & 7;\n\t\t\t\tstate.mode = CHECK;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\twhile (bits < 3) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tstate.last = hold & 1;\n\t\t\thold >>>= 1;\n\t\t\tbits -= 1;\n\t\t\tswitch (hold & 3) {\n\t\t\t\tcase 0:\n\t\t\t\t\tstate.mode = STORED;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 1:\n\t\t\t\t\tfixedtables(state);\n\t\t\t\t\tstate.mode = LEN_;\n\t\t\t\t\tif (flush === 6) {\n\t\t\t\t\t\thold >>>= 2;\n\t\t\t\t\t\tbits -= 2;\n\t\t\t\t\t\tbreak inf_leave;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tstate.mode = TABLE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tstrm.msg = \"invalid block type\";\n\t\t\t\t\tstate.mode = BAD;\n\t\t\t}\n\t\t\thold >>>= 2;\n\t\t\tbits -= 2;\n\t\t\tbreak;\n\t\tcase STORED:\n\t\t\thold >>>= bits & 7;\n\t\t\tbits -= bits & 7;\n\t\t\twhile (bits < 32) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tif ((hold & 65535) !== (hold >>> 16 ^ 65535)) {\n\t\t\t\tstrm.msg = \"invalid stored block lengths\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.length = hold & 65535;\n\t\t\thold = 0;\n\t\t\tbits = 0;\n\t\t\tstate.mode = COPY_;\n\t\t\tif (flush === 6) break inf_leave;\n\t\tcase COPY_: state.mode = COPY;\n\t\tcase COPY:\n\t\t\tcopy = state.length;\n\t\t\tif (copy) {\n\t\t\t\tif (copy > have) copy = have;\n\t\t\t\tif (copy > left) copy = left;\n\t\t\t\tif (copy === 0) break inf_leave;\n\t\t\t\toutput.set(input.subarray(next, next + copy), put);\n\t\t\t\thave -= copy;\n\t\t\t\tnext += copy;\n\t\t\t\tleft -= copy;\n\t\t\t\tput += copy;\n\t\t\t\tstate.length -= copy;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.mode = TYPE;\n\t\t\tbreak;\n\t\tcase TABLE:\n\t\t\twhile (bits < 14) {\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tstate.nlen = (hold & 31) + 257;\n\t\t\thold >>>= 5;\n\t\t\tbits -= 5;\n\t\t\tstate.ndist = (hold & 31) + 1;\n\t\t\thold >>>= 5;\n\t\t\tbits -= 5;\n\t\t\tstate.ncode = (hold & 15) + 4;\n\t\t\thold >>>= 4;\n\t\t\tbits -= 4;\n\t\t\tif (state.nlen > 286 || state.ndist > 30) {\n\t\t\t\tstrm.msg = \"too many length or distance symbols\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.have = 0;\n\t\t\tstate.mode = LENLENS;\n\t\tcase LENLENS:\n\t\t\twhile (state.have < state.ncode) {\n\t\t\t\twhile (bits < 3) {\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\tstate.lens[order[state.have++]] = hold & 7;\n\t\t\t\thold >>>= 3;\n\t\t\t\tbits -= 3;\n\t\t\t}\n\t\t\twhile (state.have < 19) state.lens[order[state.have++]] = 0;\n\t\t\tstate.lencode = state.lendyn;\n\t\t\tstate.lenbits = 7;\n\t\t\topts = { bits: state.lenbits };\n\t\t\tret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n\t\t\tstate.lenbits = opts.bits;\n\t\t\tif (ret) {\n\t\t\t\tstrm.msg = \"invalid code lengths set\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.have = 0;\n\t\t\tstate.mode = CODELENS;\n\t\tcase CODELENS:\n\t\t\twhile (state.have < state.nlen + state.ndist) {\n\t\t\t\tfor (;;) {\n\t\t\t\t\there = state.lencode[hold & (1 << state.lenbits) - 1];\n\t\t\t\t\there_bits = here >>> 24;\n\t\t\t\t\there_op = here >>> 16 & 255;\n\t\t\t\t\there_val = here & 65535;\n\t\t\t\t\tif (here_bits <= bits) break;\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\tif (here_val < 16) {\n\t\t\t\t\thold >>>= here_bits;\n\t\t\t\t\tbits -= here_bits;\n\t\t\t\t\tstate.lens[state.have++] = here_val;\n\t\t\t\t} else {\n\t\t\t\t\tif (here_val === 16) {\n\t\t\t\t\t\tn = here_bits + 2;\n\t\t\t\t\t\twhile (bits < n) {\n\t\t\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\t\t\thave--;\n\t\t\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\t\t\tbits += 8;\n\t\t\t\t\t\t}\n\t\t\t\t\t\thold >>>= here_bits;\n\t\t\t\t\t\tbits -= here_bits;\n\t\t\t\t\t\tif (state.have === 0) {\n\t\t\t\t\t\t\tstrm.msg = \"invalid bit length repeat\";\n\t\t\t\t\t\t\tstate.mode = BAD;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlen = state.lens[state.have - 1];\n\t\t\t\t\t\tcopy = 3 + (hold & 3);\n\t\t\t\t\t\thold >>>= 2;\n\t\t\t\t\t\tbits -= 2;\n\t\t\t\t\t} else if (here_val === 17) {\n\t\t\t\t\t\tn = here_bits + 3;\n\t\t\t\t\t\twhile (bits < n) {\n\t\t\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\t\t\thave--;\n\t\t\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\t\t\tbits += 8;\n\t\t\t\t\t\t}\n\t\t\t\t\t\thold >>>= here_bits;\n\t\t\t\t\t\tbits -= here_bits;\n\t\t\t\t\t\tlen = 0;\n\t\t\t\t\t\tcopy = 3 + (hold & 7);\n\t\t\t\t\t\thold >>>= 3;\n\t\t\t\t\t\tbits -= 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tn = here_bits + 7;\n\t\t\t\t\t\twhile (bits < n) {\n\t\t\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\t\t\thave--;\n\t\t\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\t\t\tbits += 8;\n\t\t\t\t\t\t}\n\t\t\t\t\t\thold >>>= here_bits;\n\t\t\t\t\t\tbits -= here_bits;\n\t\t\t\t\t\tlen = 0;\n\t\t\t\t\t\tcopy = 11 + (hold & 127);\n\t\t\t\t\t\thold >>>= 7;\n\t\t\t\t\t\tbits -= 7;\n\t\t\t\t\t}\n\t\t\t\t\tif (state.have + copy > state.nlen + state.ndist) {\n\t\t\t\t\t\tstrm.msg = \"invalid bit length repeat\";\n\t\t\t\t\t\tstate.mode = BAD;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\twhile (copy--) state.lens[state.have++] = len;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (state.mode === BAD) break;\n\t\t\tif (state.lens[256] === 0) {\n\t\t\t\tstrm.msg = \"invalid code -- missing end-of-block\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.lenbits = 9;\n\t\t\topts = { bits: state.lenbits };\n\t\t\tret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n\t\t\tstate.lenbits = opts.bits;\n\t\t\tif (ret) {\n\t\t\t\tstrm.msg = \"invalid literal/lengths set\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.distbits = 6;\n\t\t\tstate.distcode = state.distdyn;\n\t\t\topts = { bits: state.distbits };\n\t\t\tret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n\t\t\tstate.distbits = opts.bits;\n\t\t\tif (ret) {\n\t\t\t\tstrm.msg = \"invalid distances set\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.mode = LEN_;\n\t\t\tif (flush === 6) break inf_leave;\n\t\tcase LEN_: state.mode = LEN;\n\t\tcase LEN:\n\t\t\tif (have >= 6 && left >= 258) {\n\t\t\t\tstrm.next_out = put;\n\t\t\t\tstrm.avail_out = left;\n\t\t\t\tstrm.next_in = next;\n\t\t\t\tstrm.avail_in = have;\n\t\t\t\tstate.hold = hold;\n\t\t\t\tstate.bits = bits;\n\t\t\t\tinflate_fast(strm, _out);\n\t\t\t\tput = strm.next_out;\n\t\t\t\toutput = strm.output;\n\t\t\t\tleft = strm.avail_out;\n\t\t\t\tnext = strm.next_in;\n\t\t\t\tinput = strm.input;\n\t\t\t\thave = strm.avail_in;\n\t\t\t\thold = state.hold;\n\t\t\t\tbits = state.bits;\n\t\t\t\tif (state.mode === TYPE) state.back = -1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.back = 0;\n\t\t\tfor (;;) {\n\t\t\t\there = state.lencode[hold & (1 << state.lenbits) - 1];\n\t\t\t\there_bits = here >>> 24;\n\t\t\t\there_op = here >>> 16 & 255;\n\t\t\t\there_val = here & 65535;\n\t\t\t\tif (here_bits <= bits) break;\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tif (here_op && (here_op & 240) === 0) {\n\t\t\t\tlast_bits = here_bits;\n\t\t\t\tlast_op = here_op;\n\t\t\t\tlast_val = here_val;\n\t\t\t\tfor (;;) {\n\t\t\t\t\there = state.lencode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)];\n\t\t\t\t\there_bits = here >>> 24;\n\t\t\t\t\there_op = here >>> 16 & 255;\n\t\t\t\t\there_val = here & 65535;\n\t\t\t\t\tif (last_bits + here_bits <= bits) break;\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\thold >>>= last_bits;\n\t\t\t\tbits -= last_bits;\n\t\t\t\tstate.back += last_bits;\n\t\t\t}\n\t\t\thold >>>= here_bits;\n\t\t\tbits -= here_bits;\n\t\t\tstate.back += here_bits;\n\t\t\tstate.length = here_val;\n\t\t\tif (here_op === 0) {\n\t\t\t\tstate.mode = LIT;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (here_op & 32) {\n\t\t\t\tstate.back = -1;\n\t\t\t\tstate.mode = TYPE;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (here_op & 64) {\n\t\t\t\tstrm.msg = \"invalid literal/length code\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.extra = here_op & 15;\n\t\t\tstate.mode = LENEXT;\n\t\tcase LENEXT:\n\t\t\tif (state.extra) {\n\t\t\t\tn = state.extra;\n\t\t\t\twhile (bits < n) {\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\tstate.length += hold & (1 << state.extra) - 1;\n\t\t\t\thold >>>= state.extra;\n\t\t\t\tbits -= state.extra;\n\t\t\t\tstate.back += state.extra;\n\t\t\t}\n\t\t\tstate.was = state.length;\n\t\t\tstate.mode = DIST;\n\t\tcase DIST:\n\t\t\tfor (;;) {\n\t\t\t\there = state.distcode[hold & (1 << state.distbits) - 1];\n\t\t\t\there_bits = here >>> 24;\n\t\t\t\there_op = here >>> 16 & 255;\n\t\t\t\there_val = here & 65535;\n\t\t\t\tif (here_bits <= bits) break;\n\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\thave--;\n\t\t\t\thold += input[next++] << bits;\n\t\t\t\tbits += 8;\n\t\t\t}\n\t\t\tif ((here_op & 240) === 0) {\n\t\t\t\tlast_bits = here_bits;\n\t\t\t\tlast_op = here_op;\n\t\t\t\tlast_val = here_val;\n\t\t\t\tfor (;;) {\n\t\t\t\t\there = state.distcode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)];\n\t\t\t\t\there_bits = here >>> 24;\n\t\t\t\t\there_op = here >>> 16 & 255;\n\t\t\t\t\there_val = here & 65535;\n\t\t\t\t\tif (last_bits + here_bits <= bits) break;\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\thold >>>= last_bits;\n\t\t\t\tbits -= last_bits;\n\t\t\t\tstate.back += last_bits;\n\t\t\t}\n\t\t\thold >>>= here_bits;\n\t\t\tbits -= here_bits;\n\t\t\tstate.back += here_bits;\n\t\t\tif (here_op & 64) {\n\t\t\t\tstrm.msg = \"invalid distance code\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.offset = here_val;\n\t\t\tstate.extra = here_op & 15;\n\t\t\tstate.mode = DISTEXT;\n\t\tcase DISTEXT:\n\t\t\tif (state.extra) {\n\t\t\t\tn = state.extra;\n\t\t\t\twhile (bits < n) {\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\tstate.offset += hold & (1 << state.extra) - 1;\n\t\t\t\thold >>>= state.extra;\n\t\t\t\tbits -= state.extra;\n\t\t\t\tstate.back += state.extra;\n\t\t\t}\n\t\t\tif (state.offset > state.dmax) {\n\t\t\t\tstrm.msg = \"invalid distance too far back\";\n\t\t\t\tstate.mode = BAD;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.mode = MATCH;\n\t\tcase MATCH:\n\t\t\tif (left === 0) break inf_leave;\n\t\t\tcopy = _out - left;\n\t\t\tif (state.offset > copy) {\n\t\t\t\tcopy = state.offset - copy;\n\t\t\t\tif (copy > state.whave) {\n\t\t\t\t\tif (state.sane) {\n\t\t\t\t\t\tstrm.msg = \"invalid distance too far back\";\n\t\t\t\t\t\tstate.mode = BAD;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (copy > state.wnext) {\n\t\t\t\t\tcopy -= state.wnext;\n\t\t\t\t\tfrom = state.wsize - copy;\n\t\t\t\t} else from = state.wnext - copy;\n\t\t\t\tif (copy > state.length) copy = state.length;\n\t\t\t\tfrom_source = state.window;\n\t\t\t} else {\n\t\t\t\tfrom_source = output;\n\t\t\t\tfrom = put - state.offset;\n\t\t\t\tcopy = state.length;\n\t\t\t}\n\t\t\tif (copy > left) copy = left;\n\t\t\tleft -= copy;\n\t\t\tstate.length -= copy;\n\t\t\tdo\n\t\t\t\toutput[put++] = from_source[from++];\n\t\t\twhile (--copy);\n\t\t\tif (state.length === 0) state.mode = LEN;\n\t\t\tbreak;\n\t\tcase LIT:\n\t\t\tif (left === 0) break inf_leave;\n\t\t\toutput[put++] = state.length;\n\t\t\tleft--;\n\t\t\tstate.mode = LEN;\n\t\t\tbreak;\n\t\tcase CHECK:\n\t\t\tif (state.wrap) {\n\t\t\t\twhile (bits < 32) {\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold |= input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\t_out -= left;\n\t\t\t\tstrm.total_out += _out;\n\t\t\t\tstate.total += _out;\n\t\t\t\tif (state.wrap & 4 && _out) strm.adler = state.check = state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out);\n\t\t\t\t_out = left;\n\t\t\t\tif (state.wrap & 4 && (state.flags ? hold : zswap32(hold)) !== state.check) {\n\t\t\t\t\tstrm.msg = \"incorrect data check\";\n\t\t\t\t\tstate.mode = BAD;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\thold = 0;\n\t\t\t\tbits = 0;\n\t\t\t}\n\t\t\tstate.mode = LENGTH;\n\t\tcase LENGTH:\n\t\t\tif (state.wrap && state.flags) {\n\t\t\t\twhile (bits < 32) {\n\t\t\t\t\tif (have === 0) break inf_leave;\n\t\t\t\t\thave--;\n\t\t\t\t\thold += input[next++] << bits;\n\t\t\t\t\tbits += 8;\n\t\t\t\t}\n\t\t\t\tif (state.wrap & 4 && hold !== (state.total & 4294967295)) {\n\t\t\t\t\tstrm.msg = \"incorrect length check\";\n\t\t\t\t\tstate.mode = BAD;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\thold = 0;\n\t\t\t\tbits = 0;\n\t\t\t}\n\t\t\tstate.mode = DONE;\n\t\tcase DONE:\n\t\t\tret = 1;\n\t\t\tbreak inf_leave;\n\t\tcase BAD:\n\t\t\tret = -3;\n\t\t\tbreak inf_leave;\n\t\tcase MEM: return -4;\n\t\tcase SYNC:\n\t\tdefault: return -2;\n\t}\n\tstrm.next_out = put;\n\tstrm.avail_out = left;\n\tstrm.next_in = next;\n\tstrm.avail_in = have;\n\tstate.hold = hold;\n\tstate.bits = bits;\n\tif (state.wsize || _out !== strm.avail_out && state.mode < BAD && (state.mode < CHECK || flush !== 4)) {\n\t\tif (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n\t\t\tstate.mode = MEM;\n\t\t\treturn -4;\n\t\t}\n\t}\n\t_in -= strm.avail_in;\n\t_out -= strm.avail_out;\n\tstrm.total_in += _in;\n\tstrm.total_out += _out;\n\tstate.total += _out;\n\tif (state.wrap & 4 && _out) strm.adler = state.check = state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out);\n\tstrm.data_type = state.bits + (state.last ? 64 : 0) + (state.mode === TYPE ? 128 : 0) + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n\tif ((_in === 0 && _out === 0 || flush === 4) && ret === 0) ret = -5;\n\treturn ret;\n};\nvar inflateEnd = (strm) => {\n\tif (inflateStateCheck(strm)) return -2;\n\tlet state = strm.state;\n\tif (state.window) state.window = null;\n\tstrm.state = null;\n\treturn 0;\n};\nvar inflateGetHeader = (strm, head) => {\n\tif (inflateStateCheck(strm)) return -2;\n\tconst state = strm.state;\n\tif ((state.wrap & 2) === 0) return -2;\n\tstate.head = head;\n\thead.done = false;\n\treturn 0;\n};\nvar inflateSetDictionary = (strm, dictionary) => {\n\tconst dictLength = dictionary.length;\n\tlet state;\n\tlet dictid;\n\tlet ret;\n\tif (inflateStateCheck(strm)) return -2;\n\tstate = strm.state;\n\tif (state.wrap !== 0 && state.mode !== DICT) return -2;\n\tif (state.mode === DICT) {\n\t\tdictid = 1;\n\t\tdictid = adler32(dictid, dictionary, dictLength, 0);\n\t\tif (dictid !== state.check) return -3;\n\t}\n\tret = updatewindow(strm, dictionary, dictLength, dictLength);\n\tif (ret) {\n\t\tstate.mode = MEM;\n\t\treturn -4;\n\t}\n\tstate.havedict = 1;\n\treturn 0;\n};\n//#endregion\n//#region src/zlib/zstream.mjs\nvar ZStream = class {\n\tconstructor() {\n\t\tthis.input = null;\n\t\tthis.next_in = 0;\n\t\tthis.avail_in = 0;\n\t\tthis.total_in = 0;\n\t\tthis.output = null;\n\t\tthis.next_out = 0;\n\t\tthis.avail_out = 0;\n\t\tthis.total_out = 0;\n\t\tthis.msg = \"\";\n\t\tthis.state = null;\n\t\tthis.data_type = 2;\n\t\tthis.adler = 0;\n\t}\n};\n//#endregion\n//#region src/zlib/gzheader.mjs\nvar GZheader = class {\n\tconstructor() {\n\t\tthis.text = 0;\n\t\tthis.time = 0;\n\t\tthis.xflags = 0;\n\t\tthis.os = 0;\n\t\tthis.extra = null;\n\t\tthis.extra_len = 0;\n\t\tthis.name = \"\";\n\t\tthis.comment = \"\";\n\t\tthis.hcrc = 0;\n\t\tthis.done = false;\n\t}\n};\n//#endregion\n//#region src/utils.ts\nvar flattenChunks = (chunks) => {\n\tconst result = new Uint8Array(chunks.reduce((len, chunk) => len + chunk.length, 0));\n\tlet pos = 0;\n\tfor (const chunk of chunks) {\n\t\tresult.set(chunk, pos);\n\t\tpos += chunk.length;\n\t}\n\treturn result;\n};\n//#endregion\n//#region src/deflate.ts\nvar toString$1 = Object.prototype.toString;\nvar defaultOptions$1 = {\n\tlevel: -1,\n\tchunkSize: 16384,\n\twindowBits: 15,\n\tmemLevel: 8,\n\tstrategy: 0,\n\traw: false,\n\tgzip: false,\n\tlegacyHash: false,\n\tdictionary: /* @__PURE__ */ new Uint8Array(0)\n};\n/**\n* Generic JS-style wrapper for zlib calls. If you don't need\n* streaming behaviour, use the simpler functions {@link deflate},\n* {@link deflateRaw} and {@link gzip}.\n*/\nvar Deflate = class {\n\toptions;\n\t/**\n\t* Error code after deflate finishes. {@link Z_OK} on success.\n\t* You will not need it in real life, because deflate errors\n\t* are possible only on wrong options or bad custom `onData` / `onEnd`\n\t* handlers.\n\t*/\n\terr;\n\t/** Error message, if {@link Deflate.err} is not {@link Z_OK}. */\n\tmsg;\n\tended;\n\tstarted;\n\t/**\n\t* Chunks of output data, if {@link Deflate.onData} not overridden.\n\t* @internal\n\t*/\n\tchunks;\n\tstrm;\n\t/**\n\t* Compressed result, generated by default {@link Deflate.onData}\n\t* and {@link Deflate.onEnd} handlers. Filled after you push last chunk\n\t* (call {@link Deflate.push} with {@link Z_FINISH} / `true` param).\n\t*/\n\tresult;\n\t/**\n\t* Creates a new deflator instance with the specified params. Throws an\n\t* exception on bad params. See {@link DeflateOptions} for the list of\n\t* supported options.\n\t*\n\t* @example\n\t* ```javascript\n\t* import { Deflate } from 'pako'\n\t*\n\t* const chunk1 = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9])\n\t* const chunk2 = new Uint8Array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])\n\t*\n\t* const deflate = new Deflate({ level: 3 })\n\t*\n\t* deflate.push(chunk1, false)\n\t* deflate.push(chunk2, true) // true -> last chunk\n\t*\n\t* if (deflate.err) throw new Error(deflate.err)\n\t*\n\t* console.log(deflate.result)\n\t* ```\n\t*/\n\tconstructor(options = {}) {\n\t\tthis.options = Object.assign({}, defaultOptions$1, options);\n\t\tconst opt = this.options;\n\t\tif (opt.raw && opt.windowBits > 0) opt.windowBits = -opt.windowBits;\n\t\telse if (opt.gzip && opt.windowBits > 0 && opt.windowBits < 16) opt.windowBits += 16;\n\t\tthis.err = 0;\n\t\tthis.msg = \"\";\n\t\tthis.ended = false;\n\t\tthis.started = false;\n\t\tthis.chunks = [];\n\t\tthis.result = /* @__PURE__ */ new Uint8Array(0);\n\t\tthis.strm = new ZStream();\n\t\tthis.strm.avail_out = 0;\n\t\tlet status = deflateInit2(this.strm, opt.level, 8, opt.windowBits, opt.memLevel, opt.strategy, opt.legacyHash);\n\t\tif (status !== 0) throw new Error(messages_default[status]);\n\t\tif (toString$1.call(opt.dictionary) === \"[object ArrayBuffer]\") opt.dictionary = new Uint8Array(opt.dictionary);\n\t\tconst dictionary = opt.dictionary;\n\t\tif (dictionary.length) {\n\t\t\tif (opt.gzip) throw new Error(\"dictionary is not supported with gzip\");\n\t\t\tstatus = deflateSetDictionary(this.strm, dictionary);\n\t\t\tif (status !== 0) throw new Error(messages_default[status]);\n\t\t}\n\t}\n\t/**\n\t* Sends input data to the deflate pipe, generating {@link Deflate.onData} calls\n\t* with new compressed chunks. Returns `true` on success. The last data block must\n\t* have `flush_mode` {@link Z_FINISH} (or `true`). That will flush the internal\n\t* pending buffers and call {@link Deflate.onEnd}.\n\t*\n\t* On failure, calls {@link Deflate.onEnd} with the error code and returns false.\n\t*\n\t* @param data input data. Strings will be converted to utf8 byte sequence.\n\t* @param flush_mode 0..6 for corresponding {@link Z_NO_FLUSH}..{@link Z_TREES} modes.\n\t* See constants. Skipped or `false` means {@link Z_NO_FLUSH}, `true` means {@link Z_FINISH}.\n\t*\n\t* @example\n\t* ```javascript\n\t* push(chunk, false) // push one of data chunks\n\t* ...\n\t* push(chunk, true) // push last chunk\n\t* ```\n\t*/\n\tpush(data, flush_mode = false) {\n\t\tconst strm = this.strm;\n\t\tconst chunkSize = this.options.chunkSize;\n\t\tlet status;\n\t\tlet _flush_mode;\n\t\tif (this.ended) return false;\n\t\tif (typeof flush_mode === \"number\") _flush_mode = flush_mode;\n\t\telse _flush_mode = flush_mode === true ? 4 : 0;\n\t\tif (typeof data === \"string\") strm.input = new TextEncoder().encode(data);\n\t\telse if (toString$1.call(data) === \"[object ArrayBuffer]\") strm.input = new Uint8Array(data);\n\t\telse strm.input = data;\n\t\tstrm.next_in = 0;\n\t\tstrm.avail_in = strm.input.length;\n\t\tif (!this.started) {\n\t\t\tthis.started = true;\n\t\t\tthis.onStart(strm);\n\t\t}\n\t\tfor (;;) {\n\t\t\tif (strm.avail_out === 0) {\n\t\t\t\tstrm.output = new Uint8Array(chunkSize);\n\t\t\t\tstrm.next_out = 0;\n\t\t\t\tstrm.avail_out = chunkSize;\n\t\t\t}\n\t\t\tif ((_flush_mode === 2 || _flush_mode === 3) && strm.avail_out <= 6) {\n\t\t\t\tthis.onData(strm.output.subarray(0, strm.next_out));\n\t\t\t\tstrm.avail_out = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstatus = deflate$1(strm, _flush_mode);\n\t\t\tif (status === 1) {\n\t\t\t\tif (strm.next_out > 0) this.onData(strm.output.subarray(0, strm.next_out));\n\t\t\t\tstatus = deflateEnd(this.strm);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (strm.avail_out === 0) {\n\t\t\t\tthis.onData(strm.output);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (_flush_mode > 0 && strm.next_out > 0) {\n\t\t\t\tthis.onData(strm.output.subarray(0, strm.next_out));\n\t\t\t\tstrm.avail_out = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (strm.avail_in === 0) return true;\n\t\t}\n\t\tthis.err = status;\n\t\tthis.msg = strm.msg || messages_default[status];\n\t\tthis.ended = true;\n\t\tthis.onEnd(status);\n\t\treturn status === 0;\n\t}\n\t/**\n\t* Called once before the first low-level deflate call.\n\t*/\n\tonStart(strm) {}\n\t/**\n\t* By default, stores data blocks in the {@link Deflate.chunks} property and glues\n\t* them in {@link Deflate.onEnd}. Override this handler if you need another behaviour.\n\t*/\n\tonData(chunk) {\n\t\tthis.chunks.push(chunk);\n\t}\n\t/**\n\t* Called once after you tell deflate that the input stream is\n\t* complete ({@link Z_FINISH}). By default, joins the collected {@link Deflate.chunks}\n\t* into the {@link Deflate.result} property.\n\t*\n\t* @param status deflate status. {@link Z_OK} on success, other if not.\n\t*/\n\tonEnd(status) {\n\t\tif (status === 0) this.result = flattenChunks(this.chunks);\n\t\tthis.chunks = [];\n\t}\n};\n/**\n* Compress `data` with deflate algorithm and `options`.\n* See {@link DeflateOptions} for the list of supported options.\n*\n* @example\n* ```javascript\n* import { deflate } from 'pako'\n*\n* const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9])\n*\n* console.log(deflate(data))\n* ```\n*/\nfunction deflate(input, options = {}) {\n\tconst deflator = new Deflate(options);\n\tdeflator.push(input, true);\n\tif (deflator.err) throw new Error(deflator.msg);\n\treturn deflator.result;\n}\n/**\n* The same as {@link deflate}, but creates raw data without a wrapper\n* (header and adler32 crc).\n*/\nfunction deflateRaw(input, options = {}) {\n\treturn deflate(input, Object.assign({}, options, { raw: true }));\n}\n/**\n* The same as {@link deflate}, but creates a gzip wrapper instead of\n* a deflate one.\n*/\nfunction gzip(input, options = {}) {\n\treturn deflate(input, Object.assign({}, options, { gzip: true }));\n}\n//#endregion\n//#region src/inflate.ts\nvar toString = Object.prototype.toString;\nvar defaultOptions = {\n\tchunkSize: 1024 * 64,\n\twindowBits: 15,\n\traw: false,\n\tdictionary: /* @__PURE__ */ new Uint8Array(0)\n};\n/**\n* Generic JS-style wrapper for zlib calls. If you don't need\n* streaming behaviour, use the simpler functions {@link inflate}\n* and {@link inflateRaw}.\n*/\nvar Inflate = class {\n\toptions;\n\t/**\n\t* Error code after inflate finishes. {@link Z_OK} on success.\n\t* Should be checked when broken data is possible.\n\t*/\n\terr;\n\t/** Error message, if {@link Inflate.err} is not {@link Z_OK}. */\n\tmsg;\n\t/**\n\t* `true` once the compressed stream has ended. A stream may end before the\n\t* caller's data does (trailing bytes), so check this to know when to stop\n\t* pushing - further {@link Inflate.push} calls are no-ops.\n\t*/\n\tended;\n\tstarted;\n\t/**\n\t* Chunks of output data, if {@link Inflate.onData} not overridden.\n\t* @internal\n\t*/\n\tchunks;\n\tstrm;\n\t/**\n\t* Uncompressed result, generated by default {@link Inflate.onData}\n\t* and {@link Inflate.onEnd} handlers. Filled after you push last chunk\n\t* (call {@link Inflate.push} with {@link Z_FINISH} / `true` param).\n\t*/\n\tresult;\n\t/**\n\t* Creates a new inflator instance with the specified params. Throws an\n\t* exception on bad params. See {@link InflateOptions} for the list of\n\t* supported options.\n\t*\n\t* By default, when no options are set, the deflate/gzip data format is\n\t* autodetected via the wrapper header.\n\t*\n\t* @example\n\t* ```javascript\n\t* import { Inflate } from 'pako'\n\t*\n\t* const chunk1 = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9])\n\t* const chunk2 = new Uint8Array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])\n\t*\n\t* const inflate = new Inflate({ level: 3 })\n\t*\n\t* inflate.push(chunk1, false)\n\t* inflate.push(chunk2, true) // true -> last chunk\n\t*\n\t* if (inflate.err) throw new Error(inflate.err)\n\t*\n\t* console.log(inflate.result)\n\t* ```\n\t*/\n\tconstructor(options = {}) {\n\t\tthis.options = Object.assign({}, defaultOptions, options);\n\t\tconst opt = this.options;\n\t\tif (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) {\n\t\t\topt.windowBits = -opt.windowBits;\n\t\t\tif (opt.windowBits === 0) opt.windowBits = -15;\n\t\t}\n\t\tif (opt.windowBits >= 0 && opt.windowBits < 16 && !options.windowBits) opt.windowBits += 32;\n\t\tif (opt.windowBits > 15 && opt.windowBits < 48) {\n\t\t\tif ((opt.windowBits & 15) === 0) opt.windowBits |= 15;\n\t\t}\n\t\tthis.err = 0;\n\t\tthis.msg = \"\";\n\t\tthis.ended = false;\n\t\tthis.started = false;\n\t\tthis.chunks = [];\n\t\tthis.result = /* @__PURE__ */ new Uint8Array(0);\n\t\tthis.strm = new ZStream();\n\t\tthis.strm.avail_out = 0;\n\t\tlet status = inflateInit2(this.strm, opt.windowBits);\n\t\tif (status !== 0) throw new Error(messages_default[status]);\n\t\tif (toString.call(opt.dictionary) === \"[object ArrayBuffer]\") opt.dictionary = new Uint8Array(opt.dictionary);\n\t\tconst dictionary = opt.dictionary;\n\t\tif (opt.raw && dictionary.length) {\n\t\t\tstatus = inflateSetDictionary(this.strm, dictionary);\n\t\t\tif (status !== 0) throw new Error(messages_default[status]);\n\t\t}\n\t}\n\t/**\n\t* Sends input data to the inflate pipe, generating {@link Inflate.onData} calls\n\t* with new output chunks. Returns `true` on success. If end of stream is\n\t* detected, {@link Inflate.onEnd} will be called.\n\t*\n\t* `flush_mode` is not needed for normal operation, because end of stream\n\t* is detected automatically. Pass {@link Z_SYNC_FLUSH} to force the decoder\n\t* to emit all currently available output — handy when you need to decode\n\t* data frame-by-frame from a long-running stream.\n\t*\n\t* On failure, calls {@link Inflate.onEnd} with the error code and returns false.\n\t*\n\t* Once the stream has ended (a compressed stream may end before your data\n\t* does), further `push` calls are no-ops and return whether the decode\n\t* finished successfully. The final outcome is in {@link Inflate.result},\n\t* {@link Inflate.err} and {@link Inflate.msg}.\n\t*\n\t* @param flush_mode 0..6 for corresponding {@link Z_NO_FLUSH}..{@link Z_TREES}\n\t* flush modes. See constants. Skipped or `false` means {@link Z_NO_FLUSH},\n\t* `true` means {@link Z_FINISH}.\n\t*\n\t* @example\n\t* ```javascript\n\t* push(chunk, false) // push one of data chunks\n\t* ...\n\t* push(chunk, true) // push last chunk\n\t* ```\n\t*/\n\tpush(data, flush_mode = false) {\n\t\tconst strm = this.strm;\n\t\tconst chunkSize = this.options.chunkSize;\n\t\tlet status;\n\t\tlet _flush_mode;\n\t\tlet last_avail_out;\n\t\tif (this.ended) return this.err === 0;\n\t\tif (typeof flush_mode === \"number\") _flush_mode = flush_mode;\n\t\telse _flush_mode = flush_mode === true ? 4 : 0;\n\t\tif (toString.call(data) === \"[object ArrayBuffer]\") strm.input = new Uint8Array(data);\n\t\telse strm.input = data;\n\t\tstrm.next_in = 0;\n\t\tstrm.avail_in = strm.input.length;\n\t\tif (!this.started) {\n\t\t\tthis.started = true;\n\t\t\tthis.onStart(strm);\n\t\t}\n\t\tfor (;;) {\n\t\t\tif (strm.avail_out === 0) {\n\t\t\t\tstrm.output = new Uint8Array(chunkSize);\n\t\t\t\tstrm.next_out = 0;\n\t\t\t\tstrm.avail_out = chunkSize;\n\t\t\t}\n\t\t\tstatus = inflate$1(strm, _flush_mode);\n\t\t\tif (status === 2) {\n\t\t\t\tconst dictionary = this.options.dictionary;\n\t\t\t\tif (dictionary.length) {\n\t\t\t\t\tstatus = inflateSetDictionary(strm, dictionary);\n\t\t\t\t\tif (status === 0) status = inflate$1(strm, _flush_mode);\n\t\t\t\t\telse if (status === -3) status = 2;\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (strm.avail_in > 0 && status === 1 && strm.state.wrap & 2 && strm.state.flags !== 0 && strm.input[strm.next_in] !== 0) {\n\t\t\t\tinflateReset(strm);\n\t\t\t\tstatus = inflate$1(strm, _flush_mode);\n\t\t\t}\n\t\t\tif (status === -2 || status === -3 || status === 2 || status === -4) break;\n\t\t\tlast_avail_out = strm.avail_out;\n\t\t\tif (strm.next_out) {\n\t\t\t\tif (strm.avail_out === 0 || status === 1 || _flush_mode > 0) {\n\t\t\t\t\tthis.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));\n\t\t\t\t\tstrm.avail_out = 0;\n\t\t\t\t\tstrm.next_out = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ((status === 0 || status === -5) && last_avail_out === 0) continue;\n\t\t\tif (status === 1) {\n\t\t\t\tstatus = inflateEnd(this.strm);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (strm.avail_in === 0) {\n\t\t\t\tif (_flush_mode === 4) {\n\t\t\t\t\tstatus = inflateEnd(this.strm);\n\t\t\t\t\tif (status === 0) status = -5;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tthis.err = status;\n\t\tthis.msg = strm.msg || messages_default[status];\n\t\tthis.ended = true;\n\t\tthis.onEnd(status);\n\t\treturn status === 0;\n\t}\n\t/**\n\t* Called once before the first low-level inflate call.\n\t*\n\t* Override this handler to attach low-level inflate state, for example to read\n\t* gzip header metadata:\n\t*\n\t* ```javascript\n\t* import { Inflate, GZheader, zlibInflateGetHeader } from 'pako'\n\t*\n\t* const inflator = new Inflate()\n\t*\n\t* inflator.onStart = function (strm) {\n\t* this.header = new GZheader()\n\t* zlibInflateGetHeader(strm, this.header)\n\t* }\n\t*\n\t* inflator.push(data, true)\n\t* console.log(inflator.header.name)\n\t* ```\n\t*/\n\tonStart(strm) {}\n\t/**\n\t* By default, stores data blocks in the {@link Inflate.chunks} property and glues\n\t* them in {@link Inflate.onEnd}. Override this handler if you need another behaviour.\n\t*\n\t* @param chunk output data.\n\t*/\n\tonData(chunk) {\n\t\tthis.chunks.push(chunk);\n\t}\n\t/**\n\t* Called after you tell inflate that the input stream is\n\t* complete ({@link Z_FINISH}). By default, joins the collected {@link Inflate.chunks},\n\t* frees memory and fills the {@link Inflate.result} property.\n\t*\n\t* @param status inflate status. {@link Z_OK} on success, other if not.\n\t*/\n\tonEnd(status) {\n\t\tif (status === 0) this.result = flattenChunks(this.chunks);\n\t\tthis.chunks = [];\n\t}\n};\n/**\n* One-shot inflate decompress. Autodetects `gzip`/`zlib`\n* format via the wrapper header — so {@link ungzip} is just a convenience alias of\n* this function. See {@link InflateOptions} for zlib options. Set\n* `toText: true` to decode the result as UTF-8 text.\n*\n* @example\n* ```javascript\n* import { deflate, inflate } from 'pako'\n*\n* const input = deflate(new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9]))\n* let output\n*\n* try {\n* output = inflate(input)\n* } catch (err) {\n* console.log(err)\n* }\n* ```\n*/\nfunction inflate(input, options = {}) {\n\tconst inflator = new Inflate(options);\n\tinflator.push(input, true);\n\tif (inflator.err) throw new Error(inflator.msg);\n\tconst result = inflator.result;\n\treturn options.toText ? new TextDecoder().decode(result) : result;\n}\n/**\n* The same as {@link inflate}, but consumes raw data without a wrapper\n* (header and adler32 crc).\n*/\nfunction inflateRaw(input, options = {}) {\n\treturn inflate(input, {\n\t\t...options,\n\t\traw: true\n\t});\n}\n//#endregion\nexport { Deflate, GZheader, Inflate, ZStream, Z_BLOCK, Z_BUF_ERROR, Z_DATA_ERROR, Z_ERRNO, Z_FINISH, Z_FULL_FLUSH, Z_MEM_ERROR, Z_NEED_DICT, Z_NO_FLUSH, Z_OK, Z_PARTIAL_FLUSH, Z_STREAM_END, Z_STREAM_ERROR, Z_SYNC_FLUSH, Z_TREES, deflate, deflateRaw, gzip, inflate, inflate as ungzip, inflateRaw, deflate$1 as zlibDeflate, deflateEnd as zlibDeflateEnd, deflateInit as zlibDeflateInit, deflateInit2 as zlibDeflateInit2, deflateReset as zlibDeflateReset, deflateResetKeep as zlibDeflateResetKeep, deflateSetDictionary as zlibDeflateSetDictionary, deflateSetHeader as zlibDeflateSetHeader, inflate$1 as zlibInflate, inflateEnd as zlibInflateEnd, inflateGetHeader as zlibInflateGetHeader, inflateInit as zlibInflateInit, inflateInit2 as zlibInflateInit2, inflateReset as zlibInflateReset, inflateReset2 as zlibInflateReset2, inflateResetKeep as zlibInflateResetKeep, inflateSetDictionary as zlibInflateSetDictionary };\n\n//# sourceMappingURL=pako.mjs.map","// this code is modified from https://github.com/uuidjs/uuid\n\nimport { Uuid } from './brs/types';\n\n/*\nThe MIT License (MIT)\n\nCopyright (c) 2010-2020 Robert Kieffer and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\nconst hexTable: string[] = Array.from({ length: 256 }).map((_, i) =>\n (i + 0x100).toString(16).substr(1),\n);\n\n// stringify uuid\nexport function uuidStringify(arr: number[]): Uuid {\n return (\n hexTable[arr[0]] +\n hexTable[arr[1]] +\n hexTable[arr[2]] +\n hexTable[arr[3]] +\n '-' +\n hexTable[arr[4]] +\n hexTable[arr[5]] +\n '-' +\n hexTable[arr[6]] +\n hexTable[arr[7]] +\n '-' +\n hexTable[arr[8]] +\n hexTable[arr[9]] +\n '-' +\n hexTable[arr[10]] +\n hexTable[arr[11]] +\n hexTable[arr[12]] +\n hexTable[arr[13]] +\n hexTable[arr[14]] +\n hexTable[arr[15]]\n ).toLowerCase();\n}\n\nexport function uuidParse(uuid: Uuid): Uint8Array {\n let v;\n const arr = new Uint8Array(16);\n\n // Parse ########-....-....-....-............\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = (v >>> 16) & 0xff;\n arr[2] = (v >>> 8) & 0xff;\n arr[3] = v & 0xff;\n\n // Parse ........-####-....-....-............\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff;\n\n // Parse ........-....-####-....-............\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff;\n\n // Parse ........-....-....-####-............\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff;\n\n // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n arr[10] = ((v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000) & 0xff;\n arr[11] = (v / 0x100000000) & 0xff;\n arr[12] = (v >>> 24) & 0xff;\n arr[13] = (v >>> 16) & 0xff;\n arr[14] = (v >>> 8) & 0xff;\n arr[15] = v & 0xff;\n\n return arr;\n}\n","import { deflate, inflate } from 'pako';\nimport { MAX_INT } from './constants';\nimport {\n BRInventoryEntryPlan,\n BRSBytes,\n Bytes,\n IntVector,\n UnrealColor,\n UnrealFloat,\n UnrealType,\n Uuid,\n Vector3d,\n WireGraphVariant,\n} from './types';\nimport { uuidParse, uuidStringify } from '../uuid';\n\n/*\n Notes:\n - Everything is Little Endian by default because\n UE4 uses it.\n - I'd use Buffer.readUInt16LE if I was making this\n nodejs only. I don't want to require('Buffer/')\n\n */\n\n// Determine if a string is ascii-only\nfunction isASCII(text: string): boolean {\n return /^[\\x00-\\x7F]*$/.test(text);\n}\n\n// convert BGRA color to RGBA color\nexport const bgra = ([b, g, r, a]: number[]): [\n number,\n number,\n number,\n number,\n] => [r, g, b, a];\n\n// Compare equality of byte arrays\nexport function isEqual<T>(arrA: Array<T>, arrB: Array<T>): boolean {\n return arrA.length === arrB.length && arrA.every((a: T, i) => arrB[i] === a);\n}\n\nfunction isBRSBytes(data: Bytes): data is BRSBytes {\n return (data as BRSBytes).brsOffset !== undefined;\n}\n\n// read `len` bytes and return slice while updating offset\nexport function subarray(data: Bytes, len: number, isCopy = false): Uint8Array {\n if (!(data instanceof Uint8Array)) {\n throw new Error(`Invalid data type in bytes reader (${typeof data})`);\n }\n\n let bytes: BRSBytes;\n if (!isBRSBytes(data)) {\n bytes = data as BRSBytes;\n bytes.brsOffset = 0;\n } else {\n bytes = data;\n }\n\n const chunk = bytes[isCopy ? 'slice' : 'subarray'](\n bytes.brsOffset,\n bytes.brsOffset + len,\n );\n bytes.brsOffset += len;\n return chunk;\n}\n\n// break a byte array into chunks of a specified size\nexport function chunk(arr: Bytes, size: number): BRSBytes[] {\n // relative length based on the offset of the array's data view\n const length = arr.length - (isBRSBytes(arr) ? arr.brsOffset : 0);\n\n // out array of chunks pre-allocated\n const out = Array(Math.floor(length / size));\n\n for (let i = 0; i < length / size; i++) {\n out[i] = subarray(arr, size, true);\n }\n\n return out;\n}\n\n// Read a u16 from a byte array\nfunction read_u16(data: Bytes, littleEndian = true): number {\n const [a, b] = subarray(data, 2);\n\n return littleEndian ? (b << 8) | a : (a << 8) | b;\n}\n\n// Write a u16 into byte array\nfunction write_u16(num: number, littleEndian = true): Uint8Array {\n const data = [num & 255, (num >> 8) & 255];\n return new Uint8Array(!littleEndian ? data.reverse() : data);\n}\n\n// Read an i32 from a byte array\nfunction read_i32(data: Bytes, littleEndian = true): number {\n const [a, b, c, d] = subarray(data, 4);\n return littleEndian\n ? (d << 24) | (c << 16) | (b << 8) | a\n : (a << 24) | (b << 16) | (c << 8) | d;\n}\n\n// Write an i32 from a byte array\nfunction write_i32(num: number, littleEndian = true): Uint8Array {\n const data = new Uint8Array([\n num & 255,\n (num >> 8) & 255,\n (num >> 16) & 255,\n (num >> 24) & 255,\n ]);\n\n return !littleEndian ? data.reverse() : data;\n}\n\n// Decompress a byte array of compressed data\nfunction read_compressed(data: Bytes): Bytes {\n const uncompressedSize = read_i32(data);\n const compressedSize = read_i32(data);\n\n // Throw error for weird compression/uncompression sizes\n if (\n compressedSize < 0 ||\n uncompressedSize < 0 ||\n compressedSize >= uncompressedSize\n ) {\n throw new Error(\n `Invalid compressed section size (comp: ${compressedSize}, uncomp: ${uncompressedSize})`,\n );\n }\n\n // No compressed data? Return those bytes\n if (compressedSize === 0) {\n return subarray(data, uncompressedSize);\n } else {\n // Decompress the data otherwise\n const compressed = subarray(data, compressedSize);\n return inflate(compressed);\n }\n}\n\n// Compress a byte array into fewer bytes\nfunction write_uncompressed(...args: Uint8Array[]): Uint8Array {\n // Concat the args to one massive array\n const data = concat(...args);\n\n // Build the output\n return concat(write_i32(data.length), write_i32(0), data);\n}\n\n// Compress a byte array into fewer bytes\nfunction write_compressed(...args: Uint8Array[]): Uint8Array {\n // Concat the args to one massive array\n const data = concat(...args);\n\n // Do the compression\n const compressed = deflate(data);\n const uncompressedSize = data.length;\n const compressedSize = compressed.length;\n\n if (uncompressedSize > MAX_INT) {\n throw new Error(`uncompressedSize (${uncompressedSize}) out of range`);\n }\n\n if (compressedSize > MAX_INT) {\n throw new Error(`compressedSize (${compressedSize}) out of range`);\n }\n\n // Determine if compression increases size\n const badCompress = compressedSize >= uncompressedSize;\n\n // Build the output\n return concat(\n write_i32(uncompressedSize),\n write_i32(badCompress ? 0 : compressedSize),\n badCompress ? data : compressed,\n );\n}\n\n// Read a string from a byte array\nfunction read_string(data: Bytes): string {\n const raw_size = read_i32(data);\n const is_ucs2 = raw_size < 0;\n const size = is_ucs2 ? -raw_size * 2 : raw_size;\n\n // Determine if we are using UCS-2\n if (is_ucs2) {\n if (size % 2 !== 0) {\n throw new Error('Invalid UCS-2 data size');\n }\n\n // Create ucs2 encoded string\n return String.fromCodePoint(\n // Read the data in 2 byte windows\n ...chunk(subarray(data, size), 2).map(arr => read_u16(arr)), // Convert the two bytes into u16\n );\n } else {\n // Read the data, remove the \\u0000 at the end :)\n const strData = subarray(data, size).subarray(0, -1);\n\n // Convert into ascii\n // console.debug('[debug] strdata', strData);\n return String.fromCharCode.apply(null, strData);\n }\n}\n\n// Write a string to bytes\nfunction write_string(str: string): Uint8Array {\n if (isASCII(str)) {\n return concat(\n write_i32(str.length + 1), // Write string length (+ null term)\n new Uint8Array(str.split('').map(s => s.charCodeAt(0))), // Write string as bytes\n new Uint8Array([0]), // Null terminator\n );\n } else {\n // ucs2 strings denoted by negative length\n const len = -str.length;\n return concat(\n write_i32(len), // write length\n // convert string to little endian ucs2\n new Uint8Array(\n str\n .split('')\n .flatMap(s => [s.charCodeAt(0) & 0xff, s.charCodeAt(0) >> 8]),\n ),\n // new Uint8Array([0]) // Null terminator\n );\n }\n}\n\n// Read uuid from 4 LE ints\nfunction read_uuid(data: Bytes): string {\n return uuidStringify(\n // each chunk is LE\n chunk(subarray(data, 16), 4).flatMap(([a, b, c, d]) => [d, c, b, a]),\n );\n}\n\n// parse a uuid into 4 LE ints\nfunction write_uuid(uuid: Uuid) {\n return concat(\n ...chunk(uuidParse(uuid), 4).map(\n ([a, b, c, d]) => new Uint8Array([d, c, b, a]),\n ),\n );\n}\n\n// Read an array of things given a fn\nfunction read_array<T>(data: Bytes, fn: (_: Bytes) => T): T[] {\n const length = read_i32(data);\n const arr = Array(length);\n for (let i = 0; i < length; i++) {\n arr[i] = fn(data);\n }\n return arr;\n}\n\n// iterate an array of things given a fn\nfunction read_each(data: Bytes, fn: (_: Bytes) => void) {\n const length = read_i32(data);\n for (let i = 0; i < length; i++) {\n fn(data);\n }\n}\n\n// Write an array of things to bytes\nfunction write_array<T>(arr: T[], fn: (_: T) => Uint8Array) {\n return concat(write_i32(arr.length), ...arr.map(o => fn(o)));\n}\n\n// Tool for reading byte arrays 1 bit at a time\nexport class BitReader {\n buffer: Uint8Array;\n pos: number = 0;\n\n constructor(data: Uint8Array) {\n this.buffer = data;\n }\n\n empty(): boolean {\n return this.pos >= this.buffer.length * 8;\n }\n\n // Read one bit as a boolean\n bit(): boolean {\n const bit = (this.buffer[this.pos >> 3] & (1 << (this.pos & 0b111))) !== 0;\n this.pos++;\n return bit;\n }\n\n // Align the pos to the nearest byte\n align() {\n this.pos = (this.pos + 7) & ~7;\n }\n\n // read an int up to max\n int(max: number): number {\n let value = 0;\n let mask = 1;\n\n while (value + mask < max && mask !== 0) {\n if (this.bit()) {\n value |= mask;\n }\n mask <<= 1;\n }\n\n return value;\n }\n\n // read a packet in from bits\n uint_packed(): number {\n let value = 0;\n for (let i = 0; i < 5; i++) {\n const next = this.bit();\n\n let part = 0;\n for (let shift = 0; shift < 7; shift++) {\n part |= (this.bit() ? 1 : 0) << shift;\n }\n value |= part << (7 * i);\n if (!next) {\n break;\n }\n }\n\n return value;\n }\n\n // an item in a read_positive_int_vector array\n int_packed(): number {\n const value = this.uint_packed();\n return (value >> 1) * ((value & 1) !== 0 ? 1 : -1);\n }\n\n // read some bits\n bits(num: number): number[] {\n const arr: number[] = [];\n for (let bit = 0; bit < num; bit++) {\n const shift = bit & 7;\n arr[bit >> 3] =\n (arr[bit >> 3] & ~(1 << shift)) | ((this.bit() ? 1 : 0) << shift);\n }\n return arr;\n }\n\n // Read some bytes\n bytes(num: number): Uint8Array {\n return new Uint8Array(this.bytesArr(num));\n }\n\n // read some bytes but not as a Uint8Array\n bytesArr(num: number): number[] {\n return this.bits(num * 8);\n }\n\n // read an array\n array<T>(fn: (_: BitReader) => T): T[] {\n const length = read_i32(this.bytes(4));\n const arr = Array(length);\n for (let i = 0; i < length; i++) {\n arr[i] = fn(this);\n }\n return arr;\n }\n\n // for each\n each(fn: (data: BitReader) => void) {\n const length = read_i32(this.bytes(4));\n for (let i = 0; i < length; i++) {\n fn(this);\n }\n }\n\n // read a string\n string(): string {\n const lenBytes = this.bytesArr(4);\n let len = read_i32(new Uint8Array(lenBytes));\n if (len < 0) len = -len * 2;\n return read_string(new Uint8Array(lenBytes.concat(this.bytesArr(len))));\n }\n\n // read a 32-bit float\n float(): number {\n const view = new DataView(new ArrayBuffer(4));\n\n // Write the ints to it\n view.setUint16(2, read_u16(this.bytes(2)));\n view.setUint16(0, read_u16(this.bytes(2)));\n\n // Read the bits as a float; note that by doing this, we're implicitly\n // converting it from a 32-bit float into JavaScript's native 64-bit double\n return view.getFloat32(0);\n }\n\n integer(): number {\n const view = new DataView(new ArrayBuffer(4));\n view.setUint16(2, read_u16(this.bytes(2)));\n view.setUint16(0, read_u16(this.bytes(2)));\n\n // Read the bits as a signed 32-bit integer\n return view.getInt32(0);\n }\n\n int64(): number {\n const view = new DataView(new ArrayBuffer(8));\n\n // Read it 2 bytes at a time\n view.setUint16(6, read_u16(this.bytes(2)));\n view.setUint16(4, read_u16(this.bytes(2)));\n view.setUint16(2, read_u16(this.bytes(2)));\n view.setUint16(0, read_u16(this.bytes(2)));\n\n // Read the bits as a signed 64-bit integer\n const num = view.getBigInt64(0);\n if (num <= 1n << 64n) {\n return Number(num);\n }\n throw new Error(\n `Cannot read 64-bit integer ${num} as a JavaScript number...`,\n );\n }\n\n // read a 64-bit double\n double(): number {\n const view = new DataView(new ArrayBuffer(8));\n\n // Read it 2 bytes at a time\n view.setUint16(6, read_u16(this.bytes(2)));\n view.setUint16(4, read_u16(this.bytes(2)));\n view.setUint16(2, read_u16(this.bytes(2)));\n view.setUint16(0, read_u16(this.bytes(2)));\n\n // Read the bits as a double\n return view.getFloat64(0);\n }\n\n wireGraphVariant(): WireGraphVariant {\n const type = this.bytes(1)[0];\n switch (type) {\n case 0: // number\n return { number: this.double() };\n case 1: // integer\n return { integer: this.int64() };\n case 2: // bool\n return { bool: this.bytes(1)[0] !== 0 };\n case 3: // exec\n return { exec: true };\n case 4: // object\n return { object: true };\n default:\n throw new Error(`Unknown wire graph variant type ${type}`);\n }\n }\n\n // read unreal types\n unreal(type: string): UnrealType {\n switch (type) {\n case 'String':\n case 'Class':\n case 'Object':\n return this.string();\n case 'Boolean':\n return !!read_i32(this.bytes(4));\n case 'Integer':\n return this.integer();\n case 'Integer64':\n return this.int64();\n case 'Float':\n return this.float();\n case 'Double':\n return this.double();\n case 'Color':\n return bgra(this.bytesArr(4)) as UnrealColor;\n case 'Byte':\n return this.bytes(1)[0];\n case 'Rotator':\n case 'Rotator3d':\n return [this.float(), this.float(), this.float()];\n case 'Vector3d':\n return [this.float(), this.float(), this.float()] as Vector3d;\n case 'IntVector':\n return [this.integer(), this.integer(), this.integer()] as IntVector;\n case 'BRInventoryEntryPlan':\n return this.string() as BRInventoryEntryPlan;\n case 'WireGraphVariant':\n return this.wireGraphVariant();\n case 'WireGraphPrimMathVariant':\n return this.wireGraphVariant();\n }\n throw new Error('Unknown unreal type ' + type);\n }\n}\n\nexport class BitWriter {\n buffer: number[] = [];\n cur: number = 0;\n bitNum: number = 0;\n\n // Write a boolean as a bit\n bit(val: boolean) {\n this.cur |= (val ? 1 : 0) << this.bitNum;\n this.bitNum++;\n if (this.bitNum >= 8) {\n this.align();\n }\n }\n\n // Write `len` bits from `src` bytes\n bits(src: number[] | Uint8Array, len: number) {\n for (let bit = 0; bit < len; bit++) {\n this.bit((src[bit >> 3] & (1 << (bit & 7))) !== 0);\n }\n }\n\n // Write multiple bytes\n bytes(src: number[] | Uint8Array) {\n this.bits(src, 8 * src.length);\n }\n\n // Push the current bit into the buffer\n align() {\n if (this.bitNum > 0) {\n this.buffer.push(this.cur);\n this.cur = 0;\n this.bitNum = 0;\n }\n }\n\n // Write an int up to the potential max size\n int(value: number, max: number) {\n if (max < 2) {\n throw new Error(\n `Invalid input (BitWriter) -- max (${max}) must be at least 2`,\n );\n }\n\n if (value >= max) {\n throw new Error(\n `Invalid input (BitWriter) -- value (${value}) is larger than max (${max})`,\n );\n }\n\n let new_val = 0;\n let mask = 1;\n\n while (new_val + mask < max && mask !== 0) {\n this.bit((value & mask) !== 0);\n if ((value & mask) !== 0) {\n new_val |= mask;\n }\n\n mask <<= 1;\n }\n }\n\n // Write a packed unsigned int\n uint_packed(value: number) {\n do {\n const src = value & 0b1111111;\n value >>= 7;\n this.bit(value !== 0);\n this.bits([src], 7);\n } while (value !== 0);\n }\n\n // Write a packed integer\n int_packed(value: number) {\n this.uint_packed((Math.abs(value) << 1) | (value >= 0 ? 1 : 0));\n }\n\n // Return built buffer\n finish(): Uint8Array {\n this.align();\n return new Uint8Array(this.buffer);\n }\n\n // Return built buffer (and include length)\n finishSection() {\n this.align();\n return concat(write_i32(this.buffer.length), new Uint8Array(this.buffer));\n }\n\n // write a string\n string(str: string) {\n this.bytes(write_string(str));\n }\n\n float(num: UnrealFloat) {\n // create a float array\n const floatArr = new Float32Array(1);\n // assign the number\n floatArr[0] = num;\n // convert it into a byte array\n const bytes = new Int8Array(floatArr.buffer);\n this.bytes([bytes[0], bytes[1], bytes[2], bytes[3]]);\n }\n\n integer(num: number) {\n // create an int array\n const intArr = new Int32Array(1);\n // assign the number\n intArr[0] = num;\n // convert it into a byte array\n const bytes = new Int8Array(intArr.buffer);\n this.bytes([bytes[0], bytes[1], bytes[2], bytes[3]]);\n }\n\n int64(num: number | bigint | string) {\n // write this as a 64-bit integer using a dataview\n const view = new DataView(new ArrayBuffer(8));\n view.setBigInt64(0, typeof num === 'bigint' ? num : BigInt(num), true);\n this.bytes(new Uint8Array(view.buffer));\n }\n\n double(num: number) {\n // create a double array\n const doubleArr = new Float64Array(1);\n // assign the number\n doubleArr[0] = num;\n // convert it into a byte array\n const bytes = new Int8Array(doubleArr.buffer);\n this.bytes([\n bytes[0],\n bytes[1],\n bytes[2],\n bytes[3],\n bytes[4],\n bytes[5],\n bytes[6],\n bytes[7],\n ]);\n }\n\n wireGraphVariant(variant: WireGraphVariant) {\n if ('number' in variant) {\n this.bytes([0]); // type 0\n this.double(variant.number);\n } else if ('integer' in variant) {\n this.bytes([1]); // type 1\n this.int64(variant.integer);\n } else if ('bool' in variant) {\n this.bytes([2, variant.bool ? 1 : 0]); // type 2\n } else if ('exec' in variant) {\n this.bytes([3]); // type 3\n // no data for exec\n } else if ('object' in variant) {\n this.bytes([4]); // type 4\n // no data for object\n } else {\n throw new Error(\n `Unknown wire graph variant type ${JSON.stringify(variant)}`,\n );\n }\n }\n\n // run a function with `this` as a BitReader\n self(fn: (this: BitWriter) => void) {\n fn.bind(this)();\n return this;\n }\n\n // write an array\n array<T>(arr: T[], fn: (this: BitWriter, item: T, index: number) => void) {\n this.bytes(write_i32(arr.length));\n arr.forEach(fn.bind(this));\n return this;\n }\n\n // write things from an array\n each<T>(arr: T[], fn: (this: BitWriter, item: T, index: number) => void) {\n arr.forEach(fn.bind(this));\n return this;\n }\n\n // write unreal types\n unreal(type: string, value: UnrealType) {\n switch (type) {\n case 'Class':\n if (typeof value !== 'string') {\n throw new Error(\n `writing unreal type Class, did not receive string (${value})`,\n );\n }\n this.string(value);\n return;\n case 'String':\n if (typeof value !== 'string') {\n throw new Error(\n `writing unreal type String, did not receive string (${value})`,\n );\n }\n this.string(value);\n return;\n case 'Object':\n if (typeof value !== 'string') {\n throw new Error(\n `writing unreal type Object, did not receive string (${value})`,\n );\n }\n this.string(value);\n return;\n case 'Boolean':\n if (typeof value !== 'boolean') {\n throw new Error(\n `writing unreal type Boolean, did not receive boolean (${value})`,\n );\n }\n this.bytes(write_i32(value ? 1 : 0));\n return;\n case 'Float':\n if (typeof value !== 'number') {\n throw new Error(\n `writing unreal type Float, did not receive float (${value})`,\n );\n }\n this.float(value);\n return;\n case 'Byte':\n if (typeof value !== 'number') {\n throw new Error(\n `writing unreal type Byte, did not receive Byte (${value})`,\n );\n }\n this.bytes([value & 255]);\n return;\n case 'Color':\n if (!Array.isArray(value) || value.length !== 4) {\n throw new Error(\n `writing unreal type Color, did not receive Array (${value})`,\n );\n }\n this.bytes(bgra(value));\n return;\n case 'Rotator':\n case 'Rotator3d':\n if (!Array.isArray(value) || value.length !== 3) {\n throw new Error(\n `writing unreal type Rotator, did not receive Array (${value})`,\n );\n }\n\n this.float(value[0]);\n this.float(value[1]);\n this.float(value[2]);\n return;\n case 'Vector3d':\n if (!Array.isArray(value) || value.length !== 3) {\n throw new Error(\n `writing unreal type Vector3d, did not receive Array (${value})`,\n );\n }\n\n this.float(value[0]);\n this.float(value[1]);\n this.float(value[2]);\n return;\n case 'IntVector':\n if (!Array.isArray(value) || value.length !== 3) {\n throw new Error(\n `writing unreal type IntVector, did not receive Array (${value})`,\n );\n }\n this.integer(value[0]);\n this.integer(value[1]);\n this.integer(value[2]);\n return;\n case 'Integer':\n if (typeof value !== 'number') {\n throw new Error(\n `writing unreal type Integer, did not receive integer (${value})`,\n );\n }\n this.integer(value);\n return;\n case 'Integer64':\n if (typeof value !== 'number') {\n throw new Error(\n `writing unreal type Integer64, did not receive integer (${value})`,\n );\n }\n this.int64(value);\n return;\n case 'Double':\n if (typeof value !== 'number') {\n throw new Error(\n `writing unreal type Double, did not receive double (${value})`,\n );\n }\n this.double(value);\n return;\n case 'WireGraphVariant':\n if (typeof value !== 'object') {\n throw new Error(\n `writing unreal type WireGraphVariant, did not receive object (${value})`,\n );\n }\n this.wireGraphVariant(value as WireGraphVariant);\n return;\n case 'WireGraphPrimMathVariant':\n if (typeof value !== 'object') {\n throw new Error(\n `writing unreal type WireGraphPrimMathVariant, did not receive object (${value})`,\n );\n }\n this.wireGraphVariant(value as WireGraphVariant);\n return;\n case 'BRInventoryEntryPlan':\n if (typeof value !== 'string') {\n throw new Error(\n `writing unreal type BRInventoryEntryPlan, did not receive string (${value})`,\n );\n }\n this.string(value);\n return;\n }\n throw new Error('Unknown unreal type ' + type);\n }\n}\n\n// concat uint8arrays together\nexport function concat(...arrays: Uint8Array[]): Uint8Array {\n const buffLen = arrays.reduce((sum, value) => sum + value.length, 0);\n const buff = new Uint8Array(buffLen);\n\n // for each array - copy it over buff\n // next array is copied right after the previous one\n let length = 0;\n for (const array of arrays) {\n buff.set(array, length);\n length += array.length;\n }\n\n return buff;\n}\n\nexport const read = {\n bytes: subarray,\n u16: read_u16,\n i32: read_i32,\n compressed: read_compressed,\n string: read_string,\n uuid: read_uuid,\n array: read_array,\n each: read_each,\n bits: (data: Bytes) => new BitReader(data),\n};\n\nexport const write = {\n u16: write_u16,\n i32: write_i32,\n compressed: write_compressed,\n uncompressed: write_uncompressed,\n string: write_string,\n uuid: write_uuid,\n array: write_array,\n bits: () => new BitWriter(),\n};\n","import {\n BrickV1,\n BRSBytes,\n BrsV1,\n ReadOptions,\n UnrealColor,\n Vector,\n} from './types';\nimport { bgra, read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrsV1(\n brsData: BRSBytes,\n options: ReadOptions = {}\n): BrsV1 {\n // Read in Headers\n const header1Data = read.compressed(brsData);\n const header2Data = read.compressed(brsData);\n\n const map = read.string(header1Data);\n const author_name = read.string(header1Data);\n const description = read.string(header1Data);\n\n const author_id = read.uuid(header1Data);\n\n const brick_count = read.i32(header1Data);\n\n const mods = read.array(header2Data, read.string);\n const brick_assets = read.array(header2Data, read.string);\n const colors = read.array(\n header2Data,\n data => bgra(Array.from(read.bytes(data, 4))) as UnrealColor\n );\n\n // Read in bricks\n let bricks: BrickV1[] = [];\n\n const numAssets = Math.max(brick_assets.length, 2);\n\n if (options.bricks) {\n bricks = Array(brick_count);\n const brickData = read.compressed(brsData);\n const brickBits = read.bits(brickData);\n\n // Brick reader\n for (let i = 0; !brickBits.empty() && i < brick_count; i++) {\n brickBits.align();\n const asset_name_index = brickBits.int(numAssets);\n const size: Vector = brickBits.bit()\n ? [\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n ]\n : [0, 0, 0];\n const position: Vector = [\n brickBits.int_packed(),\n brickBits.int_packed(),\n brickBits.int_packed(),\n ];\n\n const orientation = brickBits.int(24);\n const direction = (orientation >> 2) % 6;\n const rotation = orientation & 3;\n const collision = brickBits.bit();\n const visibility = brickBits.bit();\n\n const color = brickBits.bit()\n ? bgra(brickBits.bytesArr(4) as [number, number, number, number])\n : brickBits.int(colors.length);\n\n bricks[i] = {\n asset_name_index,\n size,\n collision,\n position,\n direction,\n rotation,\n visibility,\n color,\n };\n }\n }\n\n return {\n version: 1,\n map,\n description,\n author: {\n id: author_id,\n name: author_name,\n },\n mods,\n brick_assets,\n colors,\n bricks,\n brick_count,\n };\n}\n","import {\n AppliedComponent,\n BrickV10,\n BRSBytes,\n BrsV10,\n Collision,\n ReadOptions,\n UnrealColor,\n User,\n Vector,\n} from './types';\nimport { bgra, read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrsV10(\n brsData: BRSBytes,\n options: ReadOptions = {}\n): BrsV10 {\n // game version is included in saves >= v8\n const game_version = read.i32(brsData);\n\n // Read in Headers\n const header1Data = read.compressed(brsData);\n const header2Data = read.compressed(brsData);\n\n const map = read.string(header1Data);\n const author_name = read.string(header1Data);\n const description = read.string(header1Data);\n const author_id = read.uuid(header1Data);\n const host: User = {\n name: read.string(header1Data),\n id: read.uuid(header1Data),\n };\n const save_time = read.bytes(header1Data, 8);\n\n const brick_count = read.i32(header1Data);\n\n const mods = read.array(header2Data, read.string);\n const brick_assets = read.array(header2Data, read.string);\n const colors = read.array(\n header2Data,\n data => bgra(Array.from(read.bytes(data, 4))) as UnrealColor\n );\n const materials = read.array(header2Data, read.string);\n\n const brick_owners = read.array(header2Data, data => ({\n id: read.uuid(data),\n name: read.string(data),\n bricks: read.i32(data),\n }));\n\n const physical_materials = read.array(header2Data, read.string);\n\n // check for preview byte\n let preview = null;\n if (read.bytes(brsData, 1)[0]) {\n const len = read.i32(brsData);\n if (options.preview) {\n preview = read.bytes(brsData, len);\n } else {\n brsData.brsOffset += len;\n }\n }\n\n // Read in bricks\n let bricks: BrickV10[] = [];\n const components: BrsV10['components'] = {};\n\n const numPhysMats = Math.max(physical_materials.length, 2);\n const numMats = Math.max(materials.length, 2);\n const numAssets = Math.max(brick_assets.length, 2);\n\n if (options.bricks) {\n bricks = Array(brick_count);\n const brickData = read.compressed(brsData);\n const brickBits = read.bits(brickData);\n\n // Brick reader\n for (let i = 0; !brickBits.empty() && i < brick_count; i++) {\n brickBits.align();\n const asset_name_index = brickBits.int(numAssets);\n const size: Vector = brickBits.bit()\n ? [\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n ]\n : [0, 0, 0];\n const position: Vector = [\n brickBits.int_packed(),\n brickBits.int_packed(),\n brickBits.int_packed(),\n ];\n\n const orientation = brickBits.int(24);\n const direction = (orientation >> 2) % 6;\n const rotation = orientation & 3;\n const collision: Collision = {\n player: brickBits.bit(),\n weapon: brickBits.bit(),\n interaction: brickBits.bit(),\n tool: brickBits.bit(),\n physics: false, // v10 does not have physics collision\n };\n const visibility = brickBits.bit();\n const material_index = brickBits.int(numMats);\n const physical_index = brickBits.int(numPhysMats);\n const material_intensity = brickBits.int(11);\n const color = brickBits.bit()\n ? (brickBits.bytesArr(3) as [number, number, number])\n : brickBits.int(colors.length);\n\n const owner_index = brickBits.uint_packed();\n\n bricks[i] = {\n asset_name_index,\n size,\n position,\n direction,\n rotation,\n collision: collision as Collision,\n visibility,\n material_index,\n physical_index,\n material_intensity,\n color,\n owner_index,\n components: {},\n };\n }\n\n const componentData = read.compressed(brsData);\n const numBricks = Math.max(bricks.length, 2);\n\n read.each(componentData, data => {\n // read component name\n const name = read.string(data);\n\n // read component body\n const bits = read.bits(read.bytes(data, read.i32(data)));\n\n const version = read.i32(bits.bytes(4));\n // list of bricks\n const brick_indices = bits.array(() => bits.int(numBricks));\n\n // list of name, type properties\n const properties = bits.array(() => [bits.string(), bits.string()]);\n\n // read components for each brick\n for (const i of brick_indices) {\n const props: AppliedComponent = {};\n for (const [name, type] of properties) props[name] = bits.unreal(type);\n bricks[i].components[name] = props;\n }\n\n components[name] = {\n version,\n brick_indices,\n properties: Object.fromEntries(properties),\n };\n });\n }\n\n return {\n version: 10,\n game_version,\n map,\n description,\n author: {\n id: author_id,\n name: author_name,\n },\n host,\n mods,\n brick_assets,\n colors,\n materials,\n brick_owners,\n physical_materials,\n preview,\n bricks,\n brick_count,\n save_time,\n components,\n };\n}\n","import {\n AppliedComponent,\n BrickV10,\n BRSBytes,\n BrsV14,\n Collision,\n ReadOptions,\n UnrealColor,\n User,\n Vector,\n Wire,\n} from './types';\nimport { bgra, read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrsV14(\n brsData: BRSBytes,\n options: ReadOptions = {}\n): BrsV14 {\n // game version is included in saves >= v8\n const game_version = read.i32(brsData);\n\n // Read in Headers\n const header1Data = read.compressed(brsData);\n const header2Data = read.compressed(brsData);\n\n const map = read.string(header1Data);\n const author_name = read.string(header1Data);\n const description = read.string(header1Data);\n const author_id = read.uuid(header1Data);\n const host: User = {\n name: read.string(header1Data),\n id: read.uuid(header1Data),\n };\n const save_time = read.bytes(header1Data, 8);\n\n const brick_count = read.i32(header1Data);\n\n const mods = read.array(header2Data, read.string);\n const brick_assets = read.array(header2Data, read.string);\n const colors = read.array(\n header2Data,\n data => bgra(Array.from(read.bytes(data, 4))) as UnrealColor\n );\n const materials = read.array(header2Data, read.string);\n\n const brick_owners = read.array(header2Data, data => ({\n id: read.uuid(data),\n name: read.string(data),\n display_name: read.string(data),\n bricks: read.i32(data),\n }));\n\n const physical_materials = read.array(header2Data, read.string);\n\n // check for preview byte\n let preview = null;\n if (read.bytes(brsData, 1)[0]) {\n const len = read.i32(brsData);\n if (options.preview) {\n preview = read.bytes(brsData, len);\n } else {\n brsData.brsOffset += len;\n }\n }\n\n // Read in bricks\n let bricks: BrickV10[] = [];\n const components: BrsV14['components'] = {};\n const wires: Wire[] = [];\n\n const numPhysMats = Math.max(physical_materials.length, 2);\n const numMats = Math.max(materials.length, 2);\n const numAssets = Math.max(brick_assets.length, 2);\n\n if (options.bricks) {\n bricks = Array(brick_count);\n const brickData = read.compressed(brsData);\n const brickBits = read.bits(brickData);\n\n // Brick reader\n for (let i = 0; !brickBits.empty() && i < brick_count; i++) {\n brickBits.align();\n const asset_name_index = brickBits.int(numAssets);\n const size: Vector = brickBits.bit()\n ? [\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n ]\n : [0, 0, 0];\n const position: Vector = [\n brickBits.int_packed(),\n brickBits.int_packed(),\n brickBits.int_packed(),\n ];\n\n const orientation = brickBits.int(24);\n const direction = (orientation >> 2) % 6;\n const rotation = orientation & 3;\n const collision: Collision = {\n player: brickBits.bit(),\n weapon: brickBits.bit(),\n interaction: brickBits.bit(),\n tool: brickBits.bit(),\n physics: brickBits.bit(),\n };\n const visibility = brickBits.bit();\n const material_index = brickBits.int(numMats);\n const physical_index = brickBits.int(numPhysMats);\n const material_intensity = brickBits.int(11);\n const color = brickBits.bit()\n ? (brickBits.bytesArr(3) as [number, number, number])\n : brickBits.int(colors.length);\n\n const owner_index = brickBits.uint_packed();\n\n bricks[i] = {\n asset_name_index,\n size,\n position,\n direction,\n rotation,\n collision: collision as Collision,\n visibility,\n material_index,\n physical_index,\n material_intensity,\n color,\n owner_index,\n components: {},\n };\n }\n\n const componentData = read.compressed(brsData);\n const wiresData = read.compressed(brsData);\n const numBricks = Math.max(bricks.length, 2);\n const componentIndex: string[] = [];\n\n read.each(componentData, data => {\n // read component name\n const name = read.string(data);\n\n // read component body\n const bits = read.bits(read.bytes(data, read.i32(data)));\n\n const version = read.i32(bits.bytes(4));\n\n // list of bricks\n const brick_indices = bits.array(() => bits.int(numBricks));\n\n // list of name, type properties\n const properties = bits.array(() => [bits.string(), bits.string()]);\n\n // read components for each brick\n for (const i of brick_indices) {\n const props: AppliedComponent = {};\n for (const [name, type] of properties) props[name] = bits.unreal(type);\n bricks[i].components[name] = props;\n }\n\n if (!(name in components)) {\n componentIndex.push(name);\n }\n components[name] = {\n version,\n brick_indices,\n properties: Object.fromEntries(properties),\n };\n });\n\n const numComponents = Math.max(componentIndex.length, 2);\n\n {\n const bits = read.bits(wiresData);\n\n const numWires = bits.int(4294967295); // u32 max\n for (let i = 0; i < numWires; i++) {\n const srcBrick = bits.int(numBricks);\n const srcComponentIndex = bits.int(numComponents);\n const srcPort = bits.string();\n\n const dstBrick = bits.int(numBricks);\n const dstComponentIndex = bits.int(numComponents);\n const dstPort = bits.string();\n\n bits.bit(); // \"skip prev bit that was in use lmao\"\n bits.align();\n\n wires.push({\n source: {\n brick_index: srcBrick,\n component: componentIndex[srcComponentIndex],\n port: srcPort,\n },\n target: {\n brick_index: dstBrick,\n component: componentIndex[dstComponentIndex],\n port: dstPort,\n },\n });\n }\n }\n }\n\n return {\n version: 14,\n game_version,\n map,\n description,\n author: {\n id: author_id,\n name: author_name,\n },\n host,\n mods,\n brick_assets,\n colors,\n materials,\n brick_owners,\n physical_materials,\n preview,\n bricks,\n brick_count,\n save_time,\n components,\n wires,\n };\n}\n","import {\n BrickV2,\n BRSBytes,\n BrsV2,\n ReadOptions,\n UnrealColor,\n Vector,\n} from './types';\nimport { bgra, read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrsV2(\n brsData: BRSBytes,\n options: ReadOptions = {}\n): BrsV2 {\n // Read in Headers\n const header1Data = read.compressed(brsData);\n const header2Data = read.compressed(brsData);\n\n const map = read.string(header1Data);\n const author_name = read.string(header1Data);\n const description = read.string(header1Data);\n const author_id = read.uuid(header1Data);\n\n const brick_count = read.i32(header1Data);\n\n const mods = read.array(header2Data, read.string);\n const brick_assets = read.array(header2Data, read.string);\n const colors = read.array(\n header2Data,\n data => bgra(Array.from(read.bytes(data, 4))) as UnrealColor\n );\n const materials = read.array(header2Data, read.string);\n\n // Read in bricks\n let bricks: BrickV2[] = [];\n\n const numAssets = Math.max(brick_assets.length, 2);\n\n if (options.bricks) {\n bricks = Array(brick_count);\n const brickData = read.compressed(brsData);\n const brickBits = read.bits(brickData);\n\n // Brick reader\n for (let i = 0; !brickBits.empty() && i < brick_count; i++) {\n brickBits.align();\n const asset_name_index = brickBits.int(numAssets);\n const size: Vector = brickBits.bit()\n ? [\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n ]\n : [0, 0, 0];\n const position: Vector = [\n brickBits.int_packed(),\n brickBits.int_packed(),\n brickBits.int_packed(),\n ];\n\n const orientation = brickBits.int(24);\n const direction = (orientation >> 2) % 6;\n const rotation = orientation & 3;\n const collision = brickBits.bit();\n const visibility = brickBits.bit();\n const material_index = brickBits.bit() ? brickBits.uint_packed() : 1;\n\n const color = brickBits.bit()\n ? bgra(brickBits.bytesArr(4) as [number, number, number, number])\n : brickBits.int(colors.length);\n\n bricks[i] = {\n asset_name_index,\n size,\n position,\n direction,\n rotation,\n collision,\n visibility,\n material_index,\n color,\n };\n }\n }\n\n return {\n version: 2,\n map,\n description,\n author: {\n id: author_id,\n name: author_name,\n },\n mods,\n brick_assets,\n colors,\n materials,\n bricks,\n brick_count,\n };\n}\n","import {\n BrickV3,\n BRSBytes,\n BrsV3,\n ReadOptions,\n UnrealColor,\n User,\n Vector,\n} from './types';\nimport { bgra, read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrsV3(\n brsData: BRSBytes,\n options: ReadOptions = {}\n): BrsV3 {\n // Read in Headers\n const header1Data = read.compressed(brsData);\n const header2Data = read.compressed(brsData);\n\n const map = read.string(header1Data);\n const author_name = read.string(header1Data);\n const description = read.string(header1Data);\n const author_id = read.uuid(header1Data);\n\n const brick_count = read.i32(header1Data);\n\n const mods = read.array(header2Data, read.string);\n const brick_assets = read.array(header2Data, read.string);\n const colors = read.array(\n header2Data,\n data => bgra(Array.from(read.bytes(data, 4))) as UnrealColor\n );\n const materials = read.array(header2Data, read.string);\n const brick_owners: User[] = read.array(header2Data, data => ({\n id: read.uuid(data),\n name: read.string(data),\n }));\n\n // Read in bricks\n let bricks: BrickV3[] = [];\n\n const numAssets = Math.max(brick_assets.length, 2);\n\n if (options.bricks) {\n bricks = Array(brick_count);\n const brickData = read.compressed(brsData);\n const brickBits = read.bits(brickData);\n\n // Brick reader\n for (let i = 0; !brickBits.empty() && i < brick_count; i++) {\n brickBits.align();\n const asset_name_index = brickBits.int(numAssets);\n const size: Vector = brickBits.bit()\n ? [\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n ]\n : [0, 0, 0];\n const position: Vector = [\n brickBits.int_packed(),\n brickBits.int_packed(),\n brickBits.int_packed(),\n ];\n\n const orientation = brickBits.int(24);\n const direction = (orientation >> 2) % 6;\n const rotation = orientation & 3;\n const collision = brickBits.bit();\n const visibility = brickBits.bit();\n const material_index = brickBits.bit() ? brickBits.uint_packed() : 1;\n\n const color = brickBits.bit()\n ? bgra(brickBits.bytesArr(4) as [number, number, number, number])\n : brickBits.int(colors.length);\n\n const owner_index = brickBits.uint_packed();\n\n bricks[i] = {\n asset_name_index,\n size,\n position,\n direction,\n rotation,\n collision,\n visibility,\n material_index,\n color,\n owner_index,\n };\n }\n }\n\n return {\n version: 3,\n map,\n description,\n author: {\n id: author_id,\n name: author_name,\n },\n mods,\n brick_assets,\n colors,\n materials,\n brick_owners,\n bricks,\n brick_count,\n };\n}\n","import {\n BrickV3,\n BRSBytes,\n BrsV4,\n ReadOptions,\n UnrealColor,\n Vector,\n} from './types';\nimport { bgra, read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrsV4(\n brsData: BRSBytes,\n options: ReadOptions = {}\n): BrsV4 {\n // Read in Headers\n const header1Data = read.compressed(brsData);\n const header2Data = read.compressed(brsData);\n\n const map = read.string(header1Data);\n const author_name = read.string(header1Data);\n const description = read.string(header1Data);\n const author_id = read.uuid(header1Data);\n const save_time = read.bytes(header1Data, 8);\n\n const brick_count = read.i32(header1Data);\n\n const mods = read.array(header2Data, read.string);\n const brick_assets = read.array(header2Data, read.string);\n const colors = read.array(\n header2Data,\n data => bgra(Array.from(read.bytes(data, 4))) as UnrealColor\n );\n const materials = read.array(header2Data, read.string);\n const brick_owners = read.array(header2Data, data => ({\n id: read.uuid(data),\n name: read.string(data),\n }));\n\n // Read in bricks\n let bricks: BrickV3[] = [];\n\n const numAssets = Math.max(brick_assets.length, 2);\n\n if (options.bricks) {\n bricks = Array(brick_count);\n const brickData = read.compressed(brsData);\n const brickBits = read.bits(brickData);\n\n // Brick reader\n for (let i = 0; !brickBits.empty() && i < brick_count; i++) {\n brickBits.align();\n const asset_name_index = brickBits.int(numAssets);\n const size: Vector = brickBits.bit()\n ? [\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n ]\n : [0, 0, 0];\n const position: Vector = [\n brickBits.int_packed(),\n brickBits.int_packed(),\n brickBits.int_packed(),\n ];\n\n const orientation = brickBits.int(24);\n const direction = (orientation >> 2) % 6;\n const rotation = orientation & 3;\n const collision = brickBits.bit();\n const visibility = brickBits.bit();\n const material_index = brickBits.bit() ? brickBits.uint_packed() : 1;\n\n const color = brickBits.bit()\n ? bgra(brickBits.bytesArr(4) as [number, number, number, number])\n : brickBits.int(colors.length);\n\n const owner_index = brickBits.uint_packed();\n\n bricks[i] = {\n asset_name_index,\n size,\n position,\n direction,\n rotation,\n collision,\n visibility,\n material_index,\n color,\n owner_index,\n };\n }\n }\n\n return {\n version: 4,\n map,\n description,\n author: {\n id: author_id,\n name: author_name,\n },\n mods,\n brick_assets,\n colors,\n materials,\n brick_owners,\n bricks,\n brick_count,\n save_time,\n };\n}\n","import {\n AppliedComponent,\n BrickV8,\n BRSBytes,\n BrsV8,\n ReadOptions,\n UnrealColor,\n User,\n Vector,\n} from './types';\nimport { bgra, read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrsV8(\n brsData: BRSBytes,\n options: ReadOptions = {}\n): BrsV8 {\n // game version is included in saves >= v8\n const game_version = read.i32(brsData);\n\n // Read in Headers\n const header1Data = read.compressed(brsData);\n const header2Data = read.compressed(brsData);\n\n const map = read.string(header1Data);\n const author_name = read.string(header1Data);\n const description = read.string(header1Data);\n const author_id = read.uuid(header1Data);\n\n const host: User = {\n name: read.string(header1Data),\n id: read.uuid(header1Data),\n };\n const save_time = read.bytes(header1Data, 8);\n\n const brick_count = read.i32(header1Data);\n\n const mods = read.array(header2Data, read.string);\n const brick_assets = read.array(header2Data, read.string);\n const colors = read.array(\n header2Data,\n data => bgra(Array.from(read.bytes(data, 4))) as UnrealColor\n );\n const materials = read.array(header2Data, read.string);\n const brick_owners = read.array(header2Data, data => ({\n id: read.uuid(data),\n name: read.string(data),\n bricks: read.i32(data),\n }));\n\n // check for preview byte\n let preview = null;\n if (read.bytes(brsData, 1)[0]) {\n const len = read.i32(brsData);\n if (options.preview) {\n preview = read.bytes(brsData, len);\n } else {\n brsData.brsOffset += len;\n }\n }\n\n // Read in bricks\n let bricks: BrickV8[] = [];\n const components: BrsV8['components'] = {};\n\n const numMats = Math.max(materials.length, 2);\n const numAssets = Math.max(brick_assets.length, 2);\n\n if (options.bricks) {\n bricks = Array(brick_count);\n const brickData = read.compressed(brsData);\n const brickBits = read.bits(brickData);\n\n // Brick reader\n for (let i = 0; !brickBits.empty() && i < brick_count; i++) {\n brickBits.align();\n const asset_name_index = brickBits.int(numAssets);\n const size: Vector = brickBits.bit()\n ? [\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n ]\n : [0, 0, 0];\n const position: Vector = [\n brickBits.int_packed(),\n brickBits.int_packed(),\n brickBits.int_packed(),\n ];\n\n const orientation = brickBits.int(24);\n const direction = (orientation >> 2) % 6;\n const rotation = orientation & 3;\n const collision = brickBits.bit();\n const visibility = brickBits.bit();\n const material_index = brickBits.int(numMats);\n\n const color = brickBits.bit()\n ? bgra(brickBits.bytesArr(4) as [number, number, number, number])\n : brickBits.int(colors.length);\n\n const owner_index = brickBits.uint_packed();\n\n bricks[i] = {\n asset_name_index,\n size,\n position,\n direction,\n rotation,\n collision,\n visibility,\n material_index,\n color,\n owner_index,\n components: {},\n };\n }\n\n const componentData = read.compressed(brsData);\n const numBricks = Math.max(bricks.length, 2);\n\n read.each(componentData, data => {\n // read component name\n const name = read.string(data);\n\n // read component body\n const bits = read.bits(read.bytes(data, read.i32(data)));\n\n const version = read.i32(bits.bytes(4));\n // list of bricks\n const brick_indices = bits.array(() => bits.int(numBricks));\n\n // list of name, type properties\n const properties = bits.array(() => [bits.string(), bits.string()]);\n\n // read components for each brick\n for (const i of brick_indices) {\n const props: AppliedComponent = {};\n for (const [name, type] of properties) props[name] = bits.unreal(type);\n bricks[i].components[name] = props;\n }\n\n components[name] = {\n version,\n brick_indices,\n properties: Object.fromEntries(properties),\n };\n });\n }\n\n return {\n version: 8,\n game_version,\n map,\n description,\n author: {\n id: author_id,\n name: author_name,\n },\n host,\n mods,\n brick_assets,\n colors,\n materials,\n brick_owners,\n preview,\n bricks,\n brick_count,\n save_time,\n components,\n };\n}\n","import {\n AppliedComponent,\n BrickV9,\n BRSBytes,\n BrsV9,\n ColorRgb,\n ReadOptions,\n UnrealColor,\n User,\n Vector,\n} from './types';\nimport { bgra, read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrsV9(\n brsData: BRSBytes,\n options: ReadOptions = {}\n): BrsV9 {\n // game version is included in saves >= v8\n const game_version = read.i32(brsData);\n\n // Read in Headers\n const header1Data = read.compressed(brsData);\n const header2Data = read.compressed(brsData);\n\n const map = read.string(header1Data);\n const author_name = read.string(header1Data);\n const description = read.string(header1Data);\n const author_id = read.uuid(header1Data);\n\n const host: User = {\n name: read.string(header1Data),\n id: read.uuid(header1Data),\n };\n const save_time = read.bytes(header1Data, 8);\n\n const brick_count = read.i32(header1Data);\n\n const mods = read.array(header2Data, read.string);\n const brick_assets = read.array(header2Data, read.string);\n const colors = read.array(\n header2Data,\n data => bgra(Array.from(read.bytes(data, 4))) as UnrealColor\n );\n const materials = read.array(header2Data, read.string);\n const brick_owners = read.array(header2Data, data => ({\n id: read.uuid(data),\n name: read.string(data),\n bricks: read.i32(data),\n }));\n\n const physical_materials = read.array(header2Data, read.string);\n\n // check for preview byte\n let preview = null;\n if (read.bytes(brsData, 1)[0]) {\n const len = read.i32(brsData);\n if (options.preview) {\n preview = read.bytes(brsData, len);\n } else {\n brsData.brsOffset += len;\n }\n }\n\n // Read in bricks\n let bricks: BrickV9[] = [];\n const components: BrsV9['components'] = {};\n\n const numPhysMats = Math.max(physical_materials.length, 2);\n const numMats = Math.max(materials.length, 2);\n const numAssets = Math.max(brick_assets.length, 2);\n\n if (options.bricks) {\n bricks = Array(brick_count);\n const brickData = read.compressed(brsData);\n const brickBits = read.bits(brickData);\n\n // Brick reader\n for (let i = 0; !brickBits.empty() && i < brick_count; i++) {\n brickBits.align();\n const asset_name_index = brickBits.int(numAssets);\n const size: Vector = brickBits.bit()\n ? [\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n brickBits.uint_packed(),\n ]\n : [0, 0, 0];\n const position: Vector = [\n brickBits.int_packed(),\n brickBits.int_packed(),\n brickBits.int_packed(),\n ];\n\n const orientation = brickBits.int(24);\n const direction = (orientation >> 2) % 6;\n const rotation = orientation & 3;\n const collision = brickBits.bit();\n const visibility = brickBits.bit();\n const material_index = brickBits.int(numMats);\n const physical_index = brickBits.int(numPhysMats);\n const material_intensity = brickBits.int(11);\n\n const color = brickBits.bit()\n ? (brickBits.bytesArr(3) as [number, number, number])\n : brickBits.int(colors.length);\n\n const owner_index = brickBits.uint_packed();\n\n bricks[i] = {\n asset_name_index,\n size,\n position,\n direction,\n rotation,\n collision,\n visibility,\n material_index,\n physical_index,\n material_intensity,\n color: color as ColorRgb | number,\n owner_index,\n components: {},\n };\n }\n\n const componentData = read.compressed(brsData);\n const numBricks = Math.max(bricks.length, 2);\n\n read.each(componentData, data => {\n // read component name\n const name = read.string(data);\n\n // read component body\n const bits = read.bits(read.bytes(data, read.i32(data)));\n\n const version = read.i32(bits.bytes(4));\n // list of bricks\n const brick_indices = bits.array(() => bits.int(numBricks));\n\n // list of name, type properties\n const properties = bits.array(() => [bits.string(), bits.string()]);\n\n // read components for each brick\n for (const i of brick_indices) {\n const props: AppliedComponent = {};\n for (const [name, type] of properties) props[name] = bits.unreal(type);\n bricks[i].components[name] = props;\n }\n\n components[name] = {\n version,\n brick_indices,\n properties: Object.fromEntries(properties),\n };\n });\n }\n\n return {\n version: 9,\n game_version,\n map,\n description,\n author: {\n id: author_id,\n name: author_name,\n },\n host,\n mods,\n brick_assets,\n colors,\n materials,\n brick_owners,\n physical_materials,\n preview,\n bricks,\n brick_count,\n save_time,\n components,\n };\n}\n","import { MAGIC } from './constants';\nimport readBrsV1 from './read.v1';\nimport readBrsV10 from './read.v10';\nimport readBrsV14 from './read.v14';\nimport readBrsV2 from './read.v2';\nimport readBrsV3 from './read.v3';\nimport readBrsV4 from './read.v4';\nimport readBrsV8 from './read.v8';\nimport readBrsV9 from './read.v9';\nimport { BRSBytes, ReadOptions, ReadSaveObject } from './types';\nimport { read } from './utils';\n\n// Reads in a byte array to build a brs object\nexport default function readBrs(\n rawBytes: Uint8Array,\n options: ReadOptions = {}\n): ReadSaveObject {\n if (typeof options !== 'object') throw new Error('Invalid options');\n\n // default enable brick reading\n if (typeof options.bricks !== 'boolean') options.bricks = true;\n\n // default disable preview (a5 only)\n if (typeof options.preview !== 'boolean') options.preview = false;\n\n // Determine if the first 3 bytes are equal to the Brickadia save magic bytes\n if (\n rawBytes[0] !== MAGIC[0] ||\n rawBytes[1] !== MAGIC[1] ||\n rawBytes[2] !== MAGIC[2]\n ) {\n throw new Error('Invalid starting bytes');\n }\n\n const brsData = rawBytes as BRSBytes;\n brsData.brsOffset = 3;\n\n // Determine if the file version supported\n const version = read.u16(brsData);\n switch (version) {\n case 1:\n return readBrsV1(brsData, options);\n case 2:\n return readBrsV2(brsData, options);\n case 3:\n return readBrsV3(brsData, options);\n case 4:\n return readBrsV4(brsData, options);\n case 8:\n return readBrsV8(brsData, options);\n case 9:\n return readBrsV9(brsData, options);\n case 10:\n return readBrsV10(brsData, options);\n case 14:\n return readBrsV14(brsData, options);\n default:\n throw new Error('Unsupported version ' + version);\n }\n}\n","import { DEFAULT_UUID, LATEST_VERSION, MAGIC, MAX_INT } from './constants';\nimport {\n Brick,\n DefinedComponents,\n Owner,\n WriteOptions,\n WriteSaveObject,\n} from './types';\nimport { concat, isEqual, write } from './utils';\n\nconst EMPTY_ARR = new Uint8Array([]);\n\nexport const DEFAULT_COMPONENTS: DefinedComponents = {\n BCD_SpotLight: {\n version: 1,\n properties: {\n Rotation: 'Rotator',\n InnerConeAngle: 'Float',\n OuterConeAngle: 'Float',\n Brightness: 'Float',\n Radius: 'Float',\n Color: 'Color',\n bUseBrickColor: 'Boolean',\n bCastShadows: 'Boolean',\n },\n },\n BCD_PointLight: {\n version: 1,\n properties: {\n bMatchBrickShape: 'Boolean',\n Brightness: 'Float',\n Radius: 'Float',\n Color: 'Color',\n bUseBrickColor: 'Boolean',\n bCastShadows: 'Boolean',\n },\n },\n BCD_ItemSpawn: {\n version: 1,\n properties: {\n PickupClass: 'Class',\n bPickupEnabled: 'Boolean',\n bPickupRespawnOnMinigameReset: 'Boolean',\n PickupMinigameResetRespawnDelay: 'Float',\n bPickupAutoDisableOnPickup: 'Boolean',\n PickupRespawnTime: 'Float',\n PickupOffsetDirection: 'Byte',\n PickupOffsetDistance: 'Float',\n PickupRotation: 'Rotator',\n PickupScale: 'Float',\n bPickupAnimationEnabled: 'Boolean',\n PickupAnimationAxis: 'Byte',\n bPickupAnimationAxisLocal: 'Boolean',\n PickupSpinSpeed: 'Float',\n PickupBobSpeed: 'Float',\n PickupBobHeight: 'Float',\n PickupAnimationPhase: 'Float',\n },\n },\n BCD_Interact: {\n version: 1,\n properties: {\n bPlayInteractSound: 'Boolean',\n Message: 'String',\n ConsoleTag: 'String',\n },\n },\n BCD_AudioEmitter: {\n version: 1,\n properties: {\n AudioDescriptor: 'Object',\n VolumeMultiplier: 'Float',\n PitchMultiplier: 'Float',\n InnerRadius: 'Float',\n MaxDistance: 'Float',\n bSpatialization: 'Boolean',\n },\n },\n Component_Internal_Rerouter: {\n version: 1,\n properties: {},\n },\n BrickComponentType_Internal_ReadBrickGrid: {\n version: 1,\n properties: {},\n },\n BrickComponentType_WireGraphPseudo_BufferSeconds: {\n version: 1,\n properties: {\n SecondsToWait: 'Float',\n ZeroSecondsToWait: 'Float',\n CurrentTime: 'Float',\n Input: 'WireGraphVariant',\n Output: 'WireGraphVariant',\n Buffered: 'WireGraphVariant',\n Queued: 'WireGraphVariant',\n bHasQueued: 'Boolean',\n },\n },\n BrickComponentType_WireGraphPseudo_BufferTicks: {\n version: 1,\n properties: {\n TicksToWait: 'Integer',\n ZeroTicksToWait: 'Integer',\n CurrentTicks: 'Integer',\n Input: 'WireGraphVariant',\n Output: 'WireGraphVariant',\n Buffered: 'WireGraphVariant',\n Queued: 'WireGraphVariant',\n bHasQueued: 'Boolean',\n },\n },\n BrickComponentType_WireGraphPseudo_Const: {\n version: 1,\n properties: {\n Value: 'WireGraphVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_BitwiseAND: {\n version: 1,\n properties: {\n InputA: 'Integer64',\n InputB: 'Integer64',\n },\n },\n BrickComponentType_WireGraph_Expr_BitwiseNAND: {\n version: 1,\n properties: {\n InputA: 'Integer64',\n InputB: 'Integer64',\n },\n },\n BrickComponentType_WireGraph_Expr_BitwiseNOR: {\n version: 1,\n properties: {\n InputA: 'Integer64',\n InputB: 'Integer64',\n },\n },\n BrickComponentType_WireGraph_Expr_BitwiseNOT: {\n version: 1,\n properties: {\n Input: 'Integer64',\n },\n },\n BrickComponentType_WireGraph_Expr_BitwiseOR: {\n version: 1,\n properties: {\n InputA: 'Integer64',\n InputB: 'Integer64',\n },\n },\n BrickComponentType_WireGraph_Expr_BitwiseShiftLeft: {\n version: 1,\n properties: {\n InputA: 'Integer64',\n InputB: 'Integer64',\n },\n },\n BrickComponentType_WireGraph_Expr_BitwiseShiftRight: {\n version: 1,\n properties: {\n InputA: 'Integer64',\n InputB: 'Integer64',\n },\n },\n BrickComponentType_WireGraph_Expr_BitwiseXOR: {\n version: 1,\n properties: {\n InputA: 'Integer64',\n InputB: 'Integer64',\n },\n },\n BrickComponentType_WireGraph_Expr_Ceil: {\n version: 1,\n properties: {\n Input: 'Double',\n },\n },\n BrickComponentType_WireGraph_Expr_CompareEqual: {\n version: 1,\n properties: {\n InputA: 'WireGraphVariant',\n InputB: 'WireGraphVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_CompareGreater: {\n version: 1,\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_CompareGreaterOrEqual: {\n version: 1,\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_CompareLess: {\n version: 1,\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_CompareLessOrEqual: {\n version: 1,\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_CompareNotEqual: {\n version: 1,\n properties: {\n InputA: 'WireGraphVariant',\n InputB: 'WireGraphVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_Floor: {\n version: 1,\n properties: {\n Input: 'Double',\n },\n },\n BrickComponentType_WireGraph_Expr_LogicalAND: {\n version: 1,\n properties: {\n bInputA: 'Boolean',\n bInputB: 'Boolean',\n },\n },\n BrickComponentType_WireGraph_Expr_LogicalNAND: {\n version: 1,\n properties: {\n bInputA: 'Boolean',\n bInputB: 'Boolean',\n },\n },\n BrickComponentType_WireGraph_Expr_LogicalNOR: {\n version: 1,\n properties: {\n bInputA: 'Boolean',\n bInputB: 'Boolean',\n },\n },\n BrickComponentType_WireGraph_Expr_LogicalNOT: {\n version: 1,\n properties: {\n bInput: 'Boolean',\n },\n },\n BrickComponentType_WireGraph_Expr_LogicalOR: {\n version: 1,\n properties: {\n bInputA: 'Boolean',\n bInputB: 'Boolean',\n },\n },\n BrickComponentType_WireGraph_Expr_LogicalXOR: {\n version: 1,\n properties: {\n bInputA: 'Boolean',\n bInputB: 'Boolean',\n },\n },\n BrickComponentType_WireGraph_Expr_MathAdd: {\n version: 1,\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_MathBlend: {\n version: 1,\n\n properties: {\n Blend: 'Double',\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_MathDivide: {\n version: 1,\n\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_MathModulo: {\n version: 1,\n\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_MathModuloFloored: {\n version: 1,\n\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_MathMultiply: {\n version: 1,\n\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponentType_WireGraph_Expr_MathSubtract: {\n version: 1,\n properties: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n },\n BrickComponent_WireGraph_Expr_EdgeDetector: {\n version: 1,\n properties: {\n Input: 'Double',\n bPulseOnRisingEdge: 'Boolean',\n bPulseOnFallingEdge: 'Boolean',\n },\n },\n};\n\nexport default function writeBrs(\n save: WriteSaveObject,\n options: WriteOptions = {}\n) {\n if (typeof save !== 'object') {\n throw new Error('Expected save to be an object');\n }\n\n if (!Array.isArray(save.bricks) || save.bricks.length === 0) {\n throw new Error('Expected save to have bricks field');\n }\n\n if (save.bricks.length > MAX_INT) {\n throw new Error('Brick count out of range');\n }\n\n // compression is disabled by default\n const compress = options.compress ? write.compressed : write.uncompressed;\n\n // Convert from BGRA to RGBA\n const rgba = ([r, g, b, a]: number[]) => new Uint8Array([b, g, r, a]);\n\n // stored brick indices from components on the bricks\n const componentBrickOwnership: { [component_name: string]: number[] } = {};\n\n const numColors = Math.max(save.colors?.length ?? 0, 2);\n const numAssets = Math.max(save.brick_assets?.length ?? 0, 2);\n const numMats = Math.max(save.materials?.length ?? 0, 2);\n const numPhysMats = Math.max(save.physical_materials?.length ?? 0, 2);\n\n if (save.preview && !Array.isArray(save.preview))\n throw new Error('Expected preview to be an array');\n\n let componentMap: Record<string, number> = {};\n let componentCount = 0;\n\n const buff = concat(\n // Write magic bytes\n MAGIC,\n write.u16(LATEST_VERSION),\n write.i32(save.game_version ?? 0),\n\n // Header 1\n compress(\n write.string(save.map ?? 'Unknown'),\n write.string(save.author?.name ?? 'Unknown'),\n write.string(save.description ?? ''),\n write.uuid(save.author?.id ?? DEFAULT_UUID),\n concat(\n write.string(save.host?.name ?? 'Unknown'),\n write.uuid(save.host?.id ?? DEFAULT_UUID)\n ),\n new Uint8Array(\n save.save_time &&\n (Array.isArray(save.save_time) ||\n save.save_time instanceof Uint8Array) &&\n save.save_time.length === 8\n ? save.save_time\n : [0, 0, 0, 0, 0, 0, 0, 0]\n ),\n write.i32(save.bricks.length)\n ),\n\n // Header 2\n compress(\n write.array(save.mods ?? [], write.string),\n write.array(save.brick_assets ?? ['PB_DefaultBrick'], write.string),\n write.array(save.colors ?? [], rgba),\n write.array(save.materials ?? ['BMC_Plastic'], write.string),\n write.array(\n save.brick_owners ?? [],\n ({\n id = DEFAULT_UUID,\n name = 'Unknown',\n display_name = 'Unknown',\n bricks = 0,\n }: Partial<Owner>) =>\n concat(\n write.uuid(id),\n write.string(name),\n write.string(display_name),\n write.i32(bricks)\n )\n ),\n write.array(save.physical_materials ?? ['BPMC_Default'], write.string)\n ),\n\n // write the save preview if it exists\n concat(\n new Uint8Array([save.preview ? 1 : 0]),\n save.preview ? write.i32(save.preview.length) : EMPTY_ARR, // <- Sorry @Uxie https://i.imgur.com/hSRxdbf.png\n save.preview ?? EMPTY_ARR\n ),\n\n // Bricks\n compress(\n write\n .bits()\n .each(save.bricks, function (brick: Brick, i) {\n if (typeof brick !== 'object')\n throw new Error(`Expected save.bricks[${i}] to be an object`);\n\n if (!Array.isArray(brick.size) || brick.size.length !== 3)\n throw new Error(\n `Expected save.bricks[${i}].size to be an array of length 3`\n );\n\n if (!Array.isArray(brick.position) || brick.position.length !== 3)\n throw new Error(\n `Expected save.bricks[${i}].position to be an array of length 3`\n );\n\n this.align();\n this.int(brick.asset_name_index ?? 0, numAssets);\n\n const isNonProcedural =\n brick.size === null || isEqual(brick.size, [0, 0, 0]);\n this.bit(!isNonProcedural);\n if (!isNonProcedural) {\n brick.size.map(s => this.uint_packed(s >= 0 ? s : 1));\n }\n brick.position.map(s => this.int_packed(s));\n this.int(((brick.direction ?? 4) << 2) | (brick.rotation ?? 0), 24);\n\n if (typeof brick.collision === 'boolean') {\n this.bit(brick.collision);\n this.bit(brick.collision);\n this.bit(brick.collision);\n this.bit(true);\n this.bit(brick.collision);\n } else {\n this.bit(brick.collision?.player ?? true);\n this.bit(brick.collision?.weapon ?? true);\n this.bit(brick.collision?.interaction ?? true);\n this.bit(brick.collision?.tool ?? true);\n this.bit(brick.collision?.physics ?? true);\n }\n\n this.bit(brick.visibility ?? true);\n this.int(brick.material_index ?? 0, numMats);\n this.int(brick.physical_index ?? 0, numPhysMats);\n this.int(brick.material_intensity ?? 5, 11);\n\n if (typeof brick.color === 'number') {\n this.bit(false);\n this.int(brick.color, numColors);\n } else {\n this.bit(true);\n if (\n brick.color &&\n (!Array.isArray(brick.color) || brick.color.length < 3)\n )\n throw new Error(\n `Expected save.bricks[${i}].color to be an array of at least length 3`\n );\n this.bytes(\n new Uint8Array(brick.color?.slice(0, 3) ?? [255, 255, 255])\n );\n }\n\n this.uint_packed(brick.owner_index >= 0 ? brick.owner_index : 0);\n\n // add all the brick indices to the components list\n for (const key in brick.components ?? {}) {\n componentBrickOwnership[key] ??= [];\n componentBrickOwnership[key].push(i);\n }\n })\n .finish()\n ),\n\n // write components section\n compress(\n write.array(\n Object.keys(save.components ?? DEFAULT_COMPONENTS).filter(\n name => componentBrickOwnership[name]\n ),\n name =>\n concat(\n write.string(name),\n write\n .bits()\n .self(function () {\n const component =\n save.components?.[name] ?? DEFAULT_COMPONENTS[name];\n const brick_indices = componentBrickOwnership[name];\n const properties = Object.entries(component.properties);\n\n if (!(name in componentMap)) {\n componentMap[name] = componentCount;\n componentCount++;\n }\n\n // write version\n this.bytes(write.i32(component.version));\n\n // write bricks;\n this.array(brick_indices, i => {\n this.int(i, Math.max(save.bricks.length, 2));\n });\n\n // write properties\n this.array(properties, ([name, type]) => {\n this.string(name);\n this.string(type);\n });\n\n // read brick indices\n for (const i of brick_indices) {\n for (const [prop, type] of properties) {\n if (!(prop in (save.bricks[i].components?.[name] ?? {}))) {\n throw new Error(\n `Expected save.bricks[${i}].components[${name}] to have property '${prop}' of type '${type}'`\n );\n }\n this.unreal(type, save.bricks[i].components[name][prop]);\n }\n }\n this.align();\n })\n .finishSection()\n )\n )\n ),\n\n compress(\n write\n .bits()\n .self(function () {\n const intMax = 4294967295;\n if (\n !save.wires ||\n !Array.isArray(save.wires) ||\n save.wires.length === 0\n ) {\n // if no wires, write\n this.int(0, intMax); // u32 max\n return;\n }\n\n this.int(save.wires.length, intMax);\n for (const wire of save.wires) {\n if (typeof wire !== 'object')\n throw new Error('Expected save.wires to be an array of objects');\n\n if (\n !(\n wire.source &&\n typeof wire.source === 'object' &&\n typeof wire.source.brick_index === 'number' &&\n typeof wire.source.component === 'string' &&\n typeof wire.source.port === 'string'\n )\n ) {\n throw new Error(\n 'Expected save.wires[i].source to be an object with brick_index, component, and port properties'\n );\n }\n\n if (\n !(\n wire.target &&\n typeof wire.target === 'object' &&\n typeof wire.target.brick_index === 'number' &&\n typeof wire.target.component === 'string' &&\n typeof wire.target.port === 'string'\n )\n ) {\n throw new Error(\n 'Expected save.wires[i].target to be an object with brick_index, component, and port properties'\n );\n }\n\n if (!(wire.source.component in componentMap))\n throw new Error(\n `Unknown component '${wire.source.component}' in wire source`\n );\n if (!(wire.target.component in componentMap))\n throw new Error(\n `Unknown component '${wire.target.component}' in wire target`\n );\n\n this.int(wire.source.brick_index, save.bricks.length);\n this.int(componentMap[wire.source.component], componentCount);\n this.string(wire.source.port);\n\n this.int(wire.target.brick_index, save.bricks.length);\n this.int(componentMap[wire.target.component], componentCount);\n this.string(wire.target.port);\n\n this.bit(false); // \"skip prev bit that was in use lmao\"\n this.align();\n }\n })\n .finish()\n )\n );\n return buff;\n}\n","export interface BRSBytes extends Uint8Array {\n brsOffset: number;\n}\n\ntype Modify<T, R> = Omit<T, keyof R> & R;\n\nexport type Bytes = Uint8Array | BRSBytes;\nexport type Uuid = string;\n\nexport type UnrealClass = string;\nexport type UnrealObject = string;\nexport type UnrealBoolean = boolean;\nexport type UnrealFloat = number;\nexport type UnrealInteger = number;\nexport type UnrealInteger64 = number;\nexport type UnrealColor = [number, number, number, number];\nexport type UnrealByte = number;\nexport type UnrealRotator = [number, number, number];\nexport type Vector3d = Vector;\nexport type IntVector = Vector;\nexport type UnrealString = string;\nexport type WireGraphVariant =\n | { number: number }\n | { integer: number }\n | { bool: boolean }\n | { exec: true }\n | { object: true };\nexport type BRInventoryEntryPlan = string;\nexport type UnrealType =\n | UnrealClass\n | UnrealObject\n | UnrealBoolean\n | UnrealFloat\n | UnrealColor\n | UnrealByte\n | UnrealRotator\n | UnrealString\n | WireGraphVariant\n | UnrealInteger64\n | Vector3d\n | IntVector\n | BRInventoryEntryPlan;\n\ntype UnrealTypeFromString<T> = T extends 'Class'\n ? UnrealClass\n : T extends 'Object'\n ? UnrealObject\n : T extends 'Boolean'\n ? UnrealBoolean\n : T extends 'Float'\n ? UnrealFloat\n : T extends 'Color'\n ? UnrealColor\n : T extends 'Byte'\n ? UnrealByte\n : T extends 'Rotator'\n ? UnrealRotator\n : T extends 'Rotator3d'\n ? UnrealRotator\n : T extends 'Vector3d'\n ? Vector3d\n : T extends 'IntVector'\n ? IntVector\n : T extends 'String'\n ? UnrealString\n : T extends 'BRInventoryEntryPlan'\n ? BRInventoryEntryPlan\n : T extends 'WireGraphVariant'\n ? WireGraphVariant\n : T extends 'WireGraphPrimMathVariant'\n ? WireGraphVariant\n : T extends 'Integer'\n ? UnrealInteger\n : T extends 'Integer64'\n ? UnrealInteger64\n : UnrealType;\n\nexport interface User {\n id: Uuid;\n name: string;\n}\n\nexport interface LegacyOwner extends User {\n bricks: number;\n}\n\nexport interface Owner extends LegacyOwner {\n display_name: string;\n}\n\nexport enum Direction {\n XPositive,\n XNegative,\n YPositive,\n YNegative,\n ZPositive,\n ZNegative,\n}\n\nexport enum Rotation {\n Deg0,\n Deg90,\n Deg180,\n Deg270,\n}\n\nexport type ColorRgb = [number, number, number];\n\nexport interface Collision {\n player: boolean;\n weapon: boolean;\n interaction: boolean;\n tool: boolean;\n physics: boolean;\n}\n\nexport interface AppliedComponent {\n [property: string]: UnrealType;\n}\n\nexport interface UnknownComponents {\n [component_name: string]: {\n version: number;\n brick_indices?: number[];\n properties: { [property: string]: string };\n };\n}\n\nexport type KnownComponents = {\n BCD_SpotLight: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Rotation: 'Rotator';\n InnerConeAngle: 'Float';\n OuterConeAngle: 'Float';\n Brightness: 'Float';\n Radius: 'Float';\n Color: 'Color';\n bUseBrickColor: 'Boolean';\n bCastShadows: 'Boolean';\n };\n };\n BCD_PointLight: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bMatchBrickShape: 'Boolean';\n Brightness: 'Float';\n Radius: 'Float';\n Color: 'Color';\n bUseBrickColor: 'Boolean';\n bCastShadows: 'Boolean';\n };\n };\n BCD_ItemSpawn: {\n version: 1;\n brick_indices?: number[];\n properties: {\n PickupClass: 'Class';\n bPickupEnabled: 'Boolean';\n bPickupRespawnOnMinigameReset: 'Boolean';\n PickupMinigameResetRespawnDelay: 'Float';\n bPickupAutoDisableOnPickup: 'Boolean';\n PickupRespawnTime: 'Float';\n PickupOffsetDirection: 'Byte';\n PickupOffsetDistance: 'Float';\n PickupRotation: 'Rotator';\n PickupScale: 'Float';\n bPickupAnimationEnabled: 'Boolean';\n PickupAnimationAxis: 'Byte';\n bPickupAnimationAxisLocal: 'Boolean';\n PickupSpinSpeed: 'Float';\n PickupBobSpeed: 'Float';\n PickupBobHeight: 'Float';\n PickupAnimationPhase: 'Float';\n };\n };\n BCD_Interact: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bPlayInteractSound: 'Boolean';\n Message: 'String';\n ConsoleTag: 'String';\n };\n };\n BCD_AudioEmitter: {\n version: 1;\n brick_indices?: number[];\n properties: {\n AudioDescriptor: 'Object';\n VolumeMultiplier: 'Float';\n PitchMultiplier: 'Float';\n InnerRadius: 'Float';\n MaxDistance: 'Float';\n bSpatialization: 'Boolean';\n };\n };\n Component_AudioEmitter: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bEnabled: 'Boolean';\n AudioDescriptor: 'Object';\n VolumeMultiplier: 'Float';\n PitchMultiplier: 'Float';\n InnerRadius: 'Float';\n MaxDistance: 'Float';\n bSpatialization: 'Boolean';\n FocusAzimuth: 'Float';\n NonFocusAzimuth: 'Float';\n NonFocusVolumeAttenuation: 'Float';\n };\n };\n Component_BotSpawn: {\n version: 1;\n brick_indices?: number[];\n properties: {\n RespawnTime: 'Float';\n CorpseTimeout: 'Float';\n GunSkill: 'Float';\n Agression: 'Float';\n ReactionTime: 'Float';\n MovementRandomness: 'Float';\n Jumpyness: 'Float';\n MovementAmount: 'Float';\n AttackMovementAmount: 'Float';\n AggroRange: 'Float';\n bCanJump: 'Boolean';\n bBackVision: 'Boolean';\n bVisionRaycasting: 'Boolean';\n bCanTargetPlayers: 'Boolean';\n bCanTargetBots: 'Boolean';\n MoveTarget: 'Vector3d';\n BotWeapon: 'Class';\n };\n };\n Component_CheckPoint: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bRotatePlayerGravityOnSpawn: 'Boolean';\n };\n };\n Component_Damage: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Message: 'String';\n ConsoleTag: 'String';\n };\n };\n Component_GoalPoint: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n Component_InputSplitter: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n Component_OneShotAudioEmitter: {\n version: 1;\n brick_indices?: number[];\n properties: {\n AudioDescriptor: 'Object';\n VolumeMultiplier: 'Float';\n PitchMultiplier: 'Float';\n InnerRadius: 'Float';\n MaxDistance: 'Float';\n bSpatialization: 'Boolean';\n bEnableRepeat: 'Boolean';\n RepeatTime: 'Float';\n RepeatVariance: 'Float';\n };\n };\n Component_SpawnPoint: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bRotatePlayerGravityOnSpawn: 'Boolean';\n bEnable: 'Boolean';\n };\n };\n Component_Target: {\n version: 1;\n brick_indices?: number[];\n properties: {\n OnTime: 'Float';\n };\n };\n Component_Internal_AnimatedButton: {\n version: 1;\n brick_indices?: number[];\n properties: {\n PressSound: 'Object';\n ReleaseSound: 'Object';\n bAllowNearbyInteraction: 'Boolean';\n bHiddenInteraction: 'Boolean';\n PromptCustomLabel: 'String';\n };\n };\n Component_Internal_AnimatedSwitch: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bEnabled: 'Boolean';\n InteractSound: 'Object';\n bAllowNearbyInteraction: 'Boolean';\n bHiddenInteraction: 'Boolean';\n PromptCustomLabel: 'String';\n };\n };\n Component_Internal_AttachedZone: {\n version: 1;\n brick_indices?: number[];\n properties: {\n ZoneStartDistance: 'Integer';\n ZoneEndDistance: 'Integer';\n bIsBuildingZone: 'Boolean';\n bIsLooseZone: 'Boolean';\n bIsShareZone: 'Boolean';\n };\n };\n Component_Internal_Bearing: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bLimitAngle: 'Boolean';\n LimitAngle: 'Float';\n Damping: 'Float';\n };\n };\n Component_Internal_Joint_Wheel: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bEnabled: 'Boolean';\n DriveSpeed: 'Float';\n DrivePower: 'Float';\n bSteerEnabled: 'Boolean';\n Steer: 'Float';\n SteerLimitDegree: 'Float';\n SteerPower: 'Float';\n bSuspensionEnabled: 'Boolean';\n SuspensionStiffness: 'Float';\n SuspensionDamping: 'Float';\n JointDistance: 'Integer';\n bDriveWhenNotAttachedToEngine: 'Boolean';\n bCanBrake: 'Boolean';\n bAllowEngineSteerCorrect: 'Boolean';\n Damping: 'Float';\n };\n };\n Component_Internal_Motor: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bEnabled: 'Boolean';\n Speed: 'Float';\n Power: 'Float';\n bLimitAngle: 'Boolean';\n LimitAngle: 'Float';\n Damping: 'Float';\n };\n };\n Component_Internal_MotorSlider: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bEnabled: 'Boolean';\n Speed: 'Float';\n Power: 'Float';\n bPositionsArePercentages: 'Boolean';\n Damping: 'Float';\n };\n };\n Component_Internal_Rerouter: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n Component_Internal_Seat: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bIsOccupied: 'Boolean';\n ExitOffset: 'IntVector';\n bAllowNearbyInteraction: 'Boolean';\n bHiddenInteraction: 'Boolean';\n PromptCustomLabel: 'String';\n };\n };\n Component_Internal_Servo: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bEnabled: 'Boolean';\n TargetAngle: 'Float';\n Power: 'Float';\n ActiveDamping: 'Float';\n ForceLimit: 'Float';\n bLimitAngle: 'Boolean';\n LimitAngle: 'Float';\n Damping: 'Float';\n };\n };\n Component_Internal_ServoSlider: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bEnabled: 'Boolean';\n TargetPosition: 'Float';\n Power: 'Float';\n TopSpeed: 'Float';\n Exponent: 'Float';\n bPositionsArePercentages: 'Boolean';\n Damping: 'Float';\n };\n };\n Component_Internal_Slider: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bPositionsArePercentages: 'Boolean';\n Damping: 'Float';\n };\n };\n Component_Internal_Socket: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n Component_Internal_WeightBrick: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Mass: 'Float';\n MassSize: 'IntVector';\n MassOffset: 'IntVector';\n };\n };\n Component_Internal_WheelEngine: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bEnabled: 'Boolean';\n bEnableManualControl: 'Boolean';\n ManualInput_Drive: 'Float';\n ManualInput_Steer: 'Float';\n bManualInput_Brake: 'Boolean';\n CustomMass: 'Float';\n CustomMassVerticalOffset: 'Float';\n DriveInterpSpeed: 'Float';\n DriveSpeed: 'Float';\n DriveAcceleratingPowerMultiplier: 'Float';\n DriveBrakingPowerMultiplier: 'Float';\n DriveDampingMultiplier: 'Float';\n SteerPowerMultiplier: 'Float';\n SteerInterpSpeed: 'Float';\n SteerLimitDegree: 'Float';\n CenterOfSteering: 'Float';\n bTankSteering: 'Boolean';\n TankSteerSpeedMultiplier: 'Float';\n WaterDriveForce: 'Float';\n WaterSteeringForce: 'Float';\n AudioDescriptor: 'Object';\n };\n };\n Component_WireGraph_PlayAudioAt: {\n version: 1;\n brick_indices?: number[];\n properties: {\n AudioDescriptor: 'Object';\n VolumeMultiplier: 'Float';\n PitchMultiplier: 'Float';\n InnerRadius: 'Float';\n MaxDistance: 'Float';\n bSpatialization: 'Boolean';\n };\n };\n Component_WireGraph_SetInventoryEntry: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Slot: 'Integer';\n EntryPlan: 'BRInventoryEntryPlan';\n };\n };\n BrickComponentType_Internal_CharacterZoneEvent_Entered: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_Internal_CharacterZoneEvent_Left: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_Internal_ReadBrickGrid: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_Internal_TeleportDestination: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_Internal_ZoneEvent_BrickChanged: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_Internal_ZoneEvent_BrickRemoved: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_WireGraphPseudo_BufferSeconds: {\n version: 1;\n brick_indices?: number[];\n properties: {\n SecondsToWait: 'Float';\n ZeroSecondsToWait: 'Float';\n CurrentTime: 'Float';\n Input: 'WireGraphVariant';\n Output: 'WireGraphVariant';\n Buffered: 'WireGraphVariant';\n Queued: 'WireGraphVariant';\n bHasQueued: 'Boolean';\n };\n };\n BrickComponentType_WireGraphPseudo_BufferTicks: {\n version: 1;\n brick_indices?: number[];\n properties: {\n TicksToWait: 'Integer';\n ZeroTicksToWait: 'Integer';\n CurrentTicks: 'Integer';\n Input: 'WireGraphVariant';\n Output: 'WireGraphVariant';\n Buffered: 'WireGraphVariant';\n Queued: 'WireGraphVariant';\n bHasQueued: 'Boolean';\n };\n };\n BrickComponentType_WireGraphPseudo_Var: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Value: 'WireGraphVariant';\n };\n };\n BrickComponentType_WireGraph_Exec_Branch: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_WireGraph_Exec_Character_SetTempPermission: {\n version: 1;\n brick_indices?: number[];\n properties: {\n PermissionTagStr: 'String';\n bPermissionEnable: 'Boolean';\n };\n };\n BrickComponentType_WireGraph_Exec_Character_ShowHint: {\n version: 1;\n brick_indices?: number[];\n properties: {\n HintTitle: 'String';\n HintText: 'String';\n };\n };\n BrickComponentType_WireGraph_Exec_Entity_AddLocationRotation: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Vector: 'Vector3d';\n Rotation: 'Rotator3d';\n };\n };\n BrickComponentType_WireGraph_Exec_Entity_AddVelocity: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Vector: 'Vector3d';\n Rotation: 'Vector3d';\n };\n };\n BrickComponentType_WireGraph_Exec_Entity_RelativeTeleport: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_WireGraph_Exec_Entity_SetGravityDirection: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Rotation: 'Rotator3d';\n };\n };\n BrickComponentType_WireGraph_Exec_Entity_SetLocation: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Vector: 'Vector3d';\n };\n };\n BrickComponentType_WireGraph_Exec_Entity_SetLocationRotation: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Vector: 'Vector3d';\n Rotation: 'Rotator3d';\n };\n };\n BrickComponentType_WireGraph_Exec_Entity_SetRotation: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Rotation: 'Rotator3d';\n };\n };\n BrickComponentType_WireGraph_Exec_Entity_SetVelocity: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Vector: 'Vector3d';\n Rotation: 'Vector3d';\n };\n };\n BrickComponentType_WireGraph_Exec_Entity_Teleport: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_WireGraph_Exec_Union: {\n version: 1;\n brick_indices?: number[];\n properties: {};\n };\n BrickComponentType_WireGraph_Exec_Var_Get: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Value: 'WireGraphVariant';\n };\n };\n BrickComponentType_WireGraph_Exec_Var_Increment: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Value: 'WireGraphVariant';\n };\n };\n BrickComponentType_WireGraph_Exec_Var_Set: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Value: 'WireGraphVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_BitwiseAND: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'Integer64';\n InputB: 'Integer64';\n };\n };\n BrickComponentType_WireGraph_Expr_BitwiseNAND: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'Integer64';\n InputB: 'Integer64';\n };\n };\n BrickComponentType_WireGraph_Expr_BitwiseNOR: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'Integer64';\n InputB: 'Integer64';\n };\n };\n BrickComponentType_WireGraph_Expr_BitwiseNOT: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Input: 'Integer64';\n };\n };\n BrickComponentType_WireGraph_Expr_BitwiseOR: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'Integer64';\n InputB: 'Integer64';\n };\n };\n BrickComponentType_WireGraph_Expr_BitwiseShiftLeft: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'Integer64';\n InputB: 'Integer64';\n };\n };\n BrickComponentType_WireGraph_Expr_BitwiseShiftRight: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'Integer64';\n InputB: 'Integer64';\n };\n };\n BrickComponentType_WireGraph_Expr_BitwiseXOR: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'Integer64';\n InputB: 'Integer64';\n };\n };\n BrickComponentType_WireGraph_Expr_Ceil: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Input: 'Double';\n };\n };\n BrickComponentType_WireGraph_Expr_CompareEqual: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphVariant';\n InputB: 'WireGraphVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_CompareGreater: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_CompareGreaterOrEqual: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_CompareLess: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_CompareLessOrEqual: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_CompareNotEqual: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphVariant';\n InputB: 'WireGraphVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_Floor: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Input: 'Double';\n };\n };\n BrickComponentType_WireGraph_Expr_LogicalAND: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bInputA: 'Boolean';\n bInputB: 'Boolean';\n };\n };\n BrickComponentType_WireGraph_Expr_LogicalNAND: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bInputA: 'Boolean';\n bInputB: 'Boolean';\n };\n };\n BrickComponentType_WireGraph_Expr_LogicalNOR: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bInputA: 'Boolean';\n bInputB: 'Boolean';\n };\n };\n BrickComponentType_WireGraph_Expr_LogicalNOT: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bInput: 'Boolean';\n };\n };\n BrickComponentType_WireGraph_Expr_LogicalOR: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bInputA: 'Boolean';\n bInputB: 'Boolean';\n };\n };\n BrickComponentType_WireGraph_Expr_LogicalXOR: {\n version: 1;\n brick_indices?: number[];\n properties: {\n bInputA: 'Boolean';\n bInputB: 'Boolean';\n };\n };\n BrickComponentType_WireGraph_Expr_MathAdd: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_MathBlend: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Blend: 'Double';\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_MathDivide: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_MathModulo: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_MathModuloFloored: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_MathMultiply: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Expr_MathSubtract: {\n version: 1;\n brick_indices?: number[];\n properties: {\n InputA: 'WireGraphPrimMathVariant';\n InputB: 'WireGraphPrimMathVariant';\n };\n };\n BrickComponentType_WireGraph_Fake_Gamemode_RoundEndEvent: {\n version: 1;\n brick_indices?: number[];\n properties: {\n RoundNumber: 'Integer';\n };\n };\n BrickComponentType_WireGraph_Fake_Gamemode_RoundStartEvent: {\n version: 1;\n brick_indices?: number[];\n properties: {\n RoundNumber: 'Integer';\n };\n };\n BrickComponent_WireGraph_Expr_EdgeDetector: {\n version: 1;\n brick_indices?: number[];\n properties: {\n Input: 'Double';\n bPulseOnRisingEdge: 'Boolean';\n bPulseOnFallingEdge: 'Boolean';\n };\n };\n};\n\nexport interface DefinedComponents\n extends UnknownComponents,\n Partial<KnownComponents> {}\n\nexport type Components<C extends DefinedComponents> = {\n [T in keyof C]: {\n [V in keyof C[T]['properties']]: UnrealTypeFromString<\n C[T]['properties'][V]\n >;\n };\n} & { [component_name: string]: AppliedComponent };\n\nexport type Vector = [number, number, number];\n\nexport type WirePort = {\n brick_index: number;\n component: string;\n port: string;\n};\n\nexport type Wire = {\n source: WirePort;\n target: WirePort;\n};\n\nexport interface BrickV1 {\n asset_name_index: number;\n size: Vector;\n position: Vector;\n direction: Direction;\n rotation: Rotation;\n collision: boolean;\n visibility: boolean;\n color: UnrealColor | number;\n}\n\nexport interface BrickV2 extends BrickV1 {\n material_index: number;\n}\n\nexport interface BrickV3 extends BrickV2 {\n owner_index: number;\n}\n\nexport interface BrickV8 extends BrickV3 {\n components: Components<DefinedComponents>;\n}\n\nexport type BrickV9 = Modify<\n BrickV8,\n {\n physical_index: number;\n material_intensity: number;\n color: ColorRgb | number;\n }\n>;\n\nexport type BrickV10 = Modify<\n BrickV9,\n {\n collision: Collision;\n }\n>;\n\nexport interface BrsV1 {\n version: 1;\n map: string;\n author: User;\n description: string;\n brick_count: number;\n mods: string[];\n brick_assets: string[];\n colors: UnrealColor[];\n bricks: BrickV1[];\n}\n\nexport type BrsV2 = Modify<\n BrsV1,\n {\n version: 2;\n materials: string[];\n bricks: BrickV2[];\n }\n>;\n\nexport type BrsV3 = Modify<\n BrsV2,\n {\n version: 3;\n brick_owners: User[];\n bricks: BrickV3[];\n }\n>;\n\nexport type BrsV4 = Modify<\n BrsV3,\n {\n version: 4;\n save_time: Uint8Array;\n }\n>;\n\n// not sure what part of 8 makes up 5-7 but nobody should have any saves in those versions\n\nexport type BrsV8 = Modify<\n BrsV4,\n {\n version: 8;\n host: User;\n brick_owners: LegacyOwner[];\n preview?: Bytes;\n game_version: number;\n bricks: BrickV8[];\n components: DefinedComponents;\n }\n>;\n\nexport type BrsV9 = Modify<\n BrsV8,\n {\n version: 9;\n physical_materials: string[];\n bricks: BrickV9[];\n }\n>;\n\nexport type BrsV10 = Modify<\n BrsV9,\n {\n version: 10;\n bricks: BrickV10[];\n }\n>;\n\nexport type BrsV14 = Modify<\n BrsV10,\n {\n version: 14;\n wires: Wire[];\n }\n>;\n\n// a save read from a file\nexport type ReadSaveObject =\n | BrsV1\n | BrsV2\n | BrsV3\n | BrsV4\n | BrsV8\n | BrsV9\n | BrsV10\n | BrsV14;\n\n// a brick a user provides\nexport interface Brick {\n asset_name_index?: number;\n size: Vector;\n position: Vector;\n direction?: Direction;\n rotation?: Rotation;\n collision?: boolean | Partial<Collision>;\n visibility?: boolean;\n material_index?: number;\n physical_index?: number;\n material_intensity?: number;\n color?: ColorRgb | number | UnrealColor | number[];\n owner_index?: number;\n components?: Components<DefinedComponents>;\n}\n\n// save a user can write\nexport interface WriteSaveObject {\n game_version?: number;\n map?: string;\n description?: string;\n author?: Partial<User>;\n host?: Partial<User>;\n mods?: string[];\n brick_assets?: string[];\n colors?: UnrealColor[];\n materials?: string[];\n brick_owners?: Partial<Owner>[];\n physical_materials?: string[];\n preview?: Bytes;\n bricks: Brick[];\n save_time?: ArrayLike<number>;\n components?: DefinedComponents;\n wires?: Wire[];\n}\n\nexport interface ReadOptions {\n bricks?: boolean;\n preview?: boolean;\n}\n\nexport interface WriteOptions {\n compress?: boolean;\n}\n","// SoA bit-flag helpers. Boolean columns in chunk SoAs are packed as\n// { Flags: byte[] } with bit i stored at byte i >> 3, bit position i & 7.\n// Exposed so consumers can build their own SoA readers and writers.\nimport type { BrdbValue } from './schema';\n\n/** Read bit i of a packed { Flags } column. Bytes past the end read as 0. */\nexport const bit = (flags: { Flags: number[] }, i: number): boolean =>\n (((flags.Flags[i >> 3] ?? 0) >> (i & 7)) & 1) === 1;\n\n/** Accumulate booleans into a packed { Flags } column. */\nexport class BitFlags {\n bytes: number[] = [];\n private bits = 0;\n push(v: boolean) {\n if (this.bits >= this.bytes.length * 8) this.bytes.push(0);\n if (v) this.bytes[this.bits >> 3] |= 1 << (this.bits & 7);\n this.bits += 1;\n }\n toValue(): BrdbValue {\n return { Flags: this.bytes };\n }\n}\n","/**\n * Checks if something is Uint8Array. Be careful: nodejs Buffer will return true.\n * @param a - value to test\n * @returns `true` when the value is a Uint8Array-compatible view.\n * @example\n * Check whether a value is a Uint8Array-compatible view.\n * ```ts\n * isBytes(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function isBytes(a) {\n // Plain `instanceof Uint8Array` is too strict for some Buffer / proxy / cross-realm cases.\n // The fallback still requires a real ArrayBuffer view, so plain\n // JSON-deserialized `{ constructor: ... }` spoofing is rejected, and\n // `BYTES_PER_ELEMENT === 1` keeps the fallback on byte-oriented views.\n return (a instanceof Uint8Array ||\n (ArrayBuffer.isView(a) &&\n a.constructor.name === 'Uint8Array' &&\n 'BYTES_PER_ELEMENT' in a &&\n a.BYTES_PER_ELEMENT === 1));\n}\n/**\n * Asserts something is a non-negative integer.\n * @param n - number to validate\n * @param title - label included in thrown errors\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validate a non-negative integer option.\n * ```ts\n * anumber(32, 'length');\n * ```\n */\nexport function anumber(n, title = '') {\n if (typeof n !== 'number') {\n const prefix = title && `\"${title}\" `;\n throw new TypeError(`${prefix}expected number, got ${typeof n}`);\n }\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix = title && `\"${title}\" `;\n throw new RangeError(`${prefix}expected integer >= 0, got ${n}`);\n }\n}\n/**\n * Asserts something is Uint8Array.\n * @param value - value to validate\n * @param length - optional exact length constraint\n * @param title - label included in thrown errors\n * @returns The validated byte array.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validate that a value is a byte array.\n * ```ts\n * abytes(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function abytes(value, length, title = '') {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n const message = prefix + 'expected Uint8Array' + ofLen + ', got ' + got;\n if (!bytes)\n throw new TypeError(message);\n throw new RangeError(message);\n }\n return value;\n}\n/**\n * Copies bytes into a fresh Uint8Array.\n * Buffer-style slices can alias the same backing store, so callers that need ownership should copy.\n * @param bytes - source bytes to clone\n * @returns Freshly allocated copy of `bytes`.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Clone a byte array before mutating it.\n * ```ts\n * const copy = copyBytes(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function copyBytes(bytes) {\n // `Uint8Array.from(...)` would also accept arrays / other typed arrays. Keep this helper strict\n // because callers use it at byte-validation boundaries before mutating the detached copy.\n return Uint8Array.from(abytes(bytes));\n}\n/**\n * Asserts something is a wrapped hash constructor.\n * @param h - hash constructor to validate\n * @throws On wrong argument types or invalid hash wrapper shape. {@link TypeError}\n * @throws On invalid hash metadata ranges or values. {@link RangeError}\n * @throws If the hash metadata allows empty outputs or block sizes. {@link Error}\n * @example\n * Validate a callable hash wrapper.\n * ```ts\n * import { ahash } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * ahash(sha256);\n * ```\n */\nexport function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new TypeError('Hash must wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n // HMAC and KDF callers treat these as real byte lengths; allowing zero lets fake wrappers pass\n // validation and can produce empty outputs instead of failing fast.\n if (h.outputLen < 1)\n throw new Error('\"outputLen\" must be >= 1');\n if (h.blockLen < 1)\n throw new Error('\"blockLen\" must be >= 1');\n}\n/**\n * Asserts a hash instance has not been destroyed or finished.\n * @param instance - hash instance to validate\n * @param checkFinished - whether to reject finalized instances\n * @throws If the hash instance has already been destroyed or finalized. {@link Error}\n * @example\n * Validate that a hash instance is still usable.\n * ```ts\n * import { aexists } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const hash = sha256.create();\n * aexists(hash);\n * ```\n */\nexport function aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/**\n * Asserts output is a sufficiently-sized byte array.\n * @param out - destination buffer\n * @param instance - hash instance providing output length\n * Oversized buffers are allowed; downstream code only promises to fill the first `outputLen` bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validate a caller-provided digest buffer.\n * ```ts\n * import { aoutput } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const hash = sha256.create();\n * aoutput(new Uint8Array(hash.outputLen), hash);\n * ```\n */\nexport function aoutput(out, instance) {\n abytes(out, undefined, 'digestInto() output');\n const min = instance.outputLen;\n if (out.length < min) {\n throw new RangeError('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\n/**\n * Casts a typed array view to Uint8Array.\n * @param arr - source typed array\n * @returns Uint8Array view over the same buffer.\n * @example\n * Reinterpret a typed array as bytes.\n * ```ts\n * u8(new Uint32Array([1, 2]));\n * ```\n */\nexport function u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/**\n * Casts a typed array view to Uint32Array.\n * `arr.byteOffset` must already be 4-byte aligned or the platform\n * Uint32Array constructor will throw.\n * @param arr - source typed array\n * @returns Uint32Array view over the same buffer.\n * @example\n * Reinterpret a byte array as 32-bit words.\n * ```ts\n * u32(new Uint8Array(8));\n * ```\n */\nexport function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/**\n * Zeroizes typed arrays in place. Warning: JS provides no guarantees.\n * @param arrays - arrays to overwrite with zeros\n * @example\n * Zeroize sensitive buffers in place.\n * ```ts\n * clean(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/**\n * Creates a DataView for byte-level manipulation.\n * @param arr - source typed array\n * @returns DataView over the same buffer region.\n * @example\n * Create a DataView over an existing buffer.\n * ```ts\n * createView(new Uint8Array(4));\n * ```\n */\nexport function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/**\n * Rotate-right operation for uint32 values.\n * @param word - source word\n * @param shift - shift amount in bits\n * @returns Rotated word.\n * @example\n * Rotate a 32-bit word to the right.\n * ```ts\n * rotr(0x12345678, 8);\n * ```\n */\nexport function rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/**\n * Rotate-left operation for uint32 values.\n * @param word - source word\n * @param shift - shift amount in bits\n * @returns Rotated word.\n * @example\n * Rotate a 32-bit word to the left.\n * ```ts\n * rotl(0x12345678, 8);\n * ```\n */\nexport function rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Whether the current platform is little-endian. */\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/**\n * Byte-swap operation for uint32 values.\n * @param word - source word\n * @returns Word with reversed byte order.\n * @example\n * Reverse the byte order of a 32-bit word.\n * ```ts\n * byteSwap(0x11223344);\n * ```\n */\nexport function byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/**\n * Conditionally byte-swaps one 32-bit word on big-endian platforms.\n * @param n - source word\n * @returns Original or byte-swapped word depending on platform endianness.\n * @example\n * Normalize a 32-bit word for host endianness.\n * ```ts\n * swap8IfBE(0x11223344);\n * ```\n */\nexport const swap8IfBE = isLE\n ? (n) => n\n : (n) => byteSwap(n) >>> 0;\n/**\n * Byte-swaps every word of a Uint32Array in place.\n * @param arr - array to mutate\n * @returns The same array after mutation; callers pass live state arrays here.\n * @example\n * Reverse the byte order of every word in place.\n * ```ts\n * byteSwap32(new Uint32Array([0x11223344]));\n * ```\n */\nexport function byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n/**\n * Conditionally byte-swaps a Uint32Array on big-endian platforms.\n * @param u - array to normalize for host endianness\n * @returns Original or byte-swapped array depending on platform endianness.\n * On big-endian runtimes this mutates `u` in place via `byteSwap32(...)`.\n * @example\n * Normalize a word array for host endianness.\n * ```ts\n * swap32IfBE(new Uint32Array([0x11223344]));\n * ```\n */\nexport const swap32IfBE = isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string.\n * Uses the built-in function when available and assumes it matches the tested\n * fallback semantics.\n * @param bytes - bytes to encode\n * @returns Lowercase hexadecimal string.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Convert bytes to lowercase hexadecimal.\n * ```ts\n * bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])); // 'cafe0123'\n * ```\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @param hex - hexadecimal string to decode\n * @returns Decoded bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Decode lowercase hexadecimal into bytes.\n * ```ts\n * hexToBytes('cafe0123'); // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n * ```\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new TypeError('hex string expected, got ' + typeof hex);\n if (hasHexBuiltin) {\n try {\n return Uint8Array.fromHex(hex);\n }\n catch (error) {\n if (error instanceof SyntaxError)\n throw new RangeError(error.message);\n throw error;\n }\n }\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new RangeError('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new RangeError('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * This yields to the Promise/microtask scheduler queue, not to timers or the\n * full macrotask event loop.\n * @example\n * Yield to the next scheduler tick.\n * ```ts\n * await nextTick();\n * ```\n */\nexport const nextTick = async () => { };\n/**\n * Returns control to the Promise/microtask scheduler every `tick`\n * milliseconds to avoid blocking long loops.\n * @param iters - number of loop iterations to run\n * @param tick - maximum time slice in milliseconds\n * @param cb - callback executed on each iteration\n * @example\n * Run a loop that periodically yields back to the event loop.\n * ```ts\n * await asyncLoop(2, 0, () => {});\n * ```\n */\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * Non-ASCII details are delegated to the platform `TextEncoder`.\n * @param str - string to encode\n * @returns UTF-8 encoded bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Encode a string as UTF-8 bytes.\n * ```ts\n * utf8ToBytes('abc'); // Uint8Array.from([97, 98, 99])\n * ```\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new TypeError('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Helper for KDFs: consumes Uint8Array or string.\n * String inputs are UTF-8 encoded; byte-array inputs stay aliased to the caller buffer.\n * @param data - user-provided KDF input\n * @param errorTitle - label included in thrown errors\n * @returns Byte representation of the input.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Normalize KDF input to bytes.\n * ```ts\n * kdfInputToBytes('password');\n * ```\n */\nexport function kdfInputToBytes(data, errorTitle = '') {\n if (typeof data === 'string')\n return utf8ToBytes(data);\n return abytes(data, undefined, errorTitle);\n}\n/**\n * Copies several Uint8Arrays into one.\n * @param arrays - arrays to concatenate\n * @returns Concatenated byte array.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Concatenate multiple byte arrays.\n * ```ts\n * concatBytes(new Uint8Array([1]), new Uint8Array([2]));\n * ```\n */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n/**\n * Merges default options and passed options.\n * @param defaults - base option object\n * @param opts - user overrides\n * @returns Merged option object. The merge mutates `defaults` in place.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Merge user overrides onto default options.\n * ```ts\n * checkOpts({ dkLen: 32 }, { asyncTick: 10 });\n * ```\n */\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new TypeError('options must be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/**\n * Creates a callable hash function from a stateful class constructor.\n * @param hashCons - hash constructor or factory\n * @param info - optional metadata such as DER OID\n * @returns Frozen callable hash wrapper with `.create()`.\n * Wrapper construction eagerly calls `hashCons(undefined)` once to read\n * `outputLen` / `blockLen`, so constructor side effects happen at module\n * init time.\n * @example\n * Wrap a stateful hash constructor into a callable helper.\n * ```ts\n * import { createHasher } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const wrapped = createHasher(sha256.create, { oid: sha256.oid });\n * wrapped(new Uint8Array([1]));\n * ```\n */\nexport function createHasher(hashCons, info = {}) {\n const hashC = (msg, opts) => hashCons(opts)\n .update(msg)\n .digest();\n const tmp = hashCons(undefined);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.canXOF = tmp.canXOF;\n hashC.create = (opts) => hashCons(opts);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\n/**\n * Cryptographically secure PRNG backed by `crypto.getRandomValues`.\n * @param bytesLength - number of random bytes to generate\n * @returns Random bytes.\n * The platform `getRandomValues()` implementation still defines any\n * single-call length cap, and this helper rejects oversize requests\n * with a stable library `RangeError` instead of host-specific errors.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @throws If the current runtime does not provide `crypto.getRandomValues`. {@link Error}\n * @example\n * Generate a fresh random key or nonce.\n * ```ts\n * const key = randomBytes(16);\n * ```\n */\nexport function randomBytes(bytesLength = 32) {\n // Match the repo's other length-taking helpers instead of relying on Uint8Array coercion.\n anumber(bytesLength, 'bytesLength');\n const cr = typeof globalThis === 'object' ? globalThis.crypto : null;\n if (typeof cr?.getRandomValues !== 'function')\n throw new Error('crypto.getRandomValues must be defined');\n // Web Cryptography API Level 2 §10.1.1:\n // if `byteLength > 65536`, throw `QuotaExceededError`.\n // Keep the guard explicit so callers can see the quota in code\n // instead of discovering it by reading the spec or host errors.\n // This wrapper surfaces the same quota as a stable library RangeError.\n if (bytesLength > 65536)\n throw new RangeError(`\"bytesLength\" expected <= 65536, got ${bytesLength}`);\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n/**\n * Creates OID metadata for NIST hashes with prefix `06 09 60 86 48 01 65 03 04 02`.\n * @param suffix - final OID byte for the selected hash.\n * The helper accepts any byte even though only the documented NIST hash\n * suffixes are meaningful downstream.\n * @returns Object containing the DER-encoded OID.\n * @example\n * Build OID metadata for a NIST hash.\n * ```ts\n * oidNist(0x01);\n * ```\n */\nexport const oidNist = (suffix) => ({\n // Current NIST hashAlgs suffixes used here fit in one DER subidentifier octet.\n // Larger suffix values would need base-128 OID encoding and a different length byte.\n oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n//# sourceMappingURL=utils.js.map","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { abytes, aexists, aoutput, clean, createView, } from \"./utils.js\";\n/**\n * Shared 32-bit conditional boolean primitive reused by SHA-256, SHA-1, and MD5 `F`.\n * Returns bits from `b` when `a` is set, otherwise from `c`.\n * The XOR form is equivalent to MD5's `F(X,Y,Z) = XY v not(X)Z` because the masked terms never\n * set the same bit.\n * @param a - selector word\n * @param b - word chosen when selector bit is set\n * @param c - word chosen when selector bit is clear\n * @returns Mixed 32-bit word.\n * @example\n * Combine three words with the shared 32-bit choice primitive.\n * ```ts\n * Chi(0xffffffff, 0x12345678, 0x87654321);\n * ```\n */\nexport function Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/**\n * Shared 32-bit majority primitive reused by SHA-256 and SHA-1.\n * Returns bits shared by at least two inputs.\n * @param a - first input word\n * @param b - second input word\n * @param c - third input word\n * @returns Mixed 32-bit word.\n * @example\n * Combine three words with the shared 32-bit majority primitive.\n * ```ts\n * Maj(0xffffffff, 0x12345678, 0x87654321);\n * ```\n */\nexport function Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n * Accepts only byte-aligned `Uint8Array` input, even when the underlying spec describes bit\n * strings with partial-byte tails.\n * @param blockLen - internal block size in bytes\n * @param outputLen - digest size in bytes\n * @param padOffset - trailing length field size in bytes\n * @param isLE - whether length and state words are encoded in little-endian\n * @example\n * Use a concrete subclass to get the shared Merkle-Damgard update/digest flow.\n * ```ts\n * import { _SHA1 } from '@noble/hashes/legacy.js';\n * const hash = new _SHA1();\n * hash.update(new Uint8Array([97, 98, 99]));\n * hash.digest();\n * ```\n */\nexport class HashMD {\n blockLen;\n outputLen;\n canXOF = false;\n padOffset;\n isLE;\n // For partial updates less than block size\n buffer;\n view;\n finished = false;\n length = 0;\n pos = 0;\n destroyed = false;\n constructor(blockLen, outputLen, padOffset, isLE) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n aexists(this);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path only when there is no buffered partial block: `take === blockLen` implies\n // `this.pos === 0`, so we can process full blocks directly from the input view.\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // `padOffset` reserves the whole length field. For SHA-384/512 the high 64 bits stay zero from\n // the padding fill above, and JS will overflow before user input can make that half non-zero.\n // So we only need to write the low 64 bits here.\n view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which must be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen must be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n // Copy before destroy(): subclasses wipe `buffer` during cleanup, but `digest()` must return\n // fresh bytes to the caller.\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to ||= new this.constructor();\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n // Only partial-block bytes need copying: when `length % blockLen === 0`, `pos === 0` and\n // later `update()` / `digestInto()` overwrite `to.buffer` from the start before reading it.\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state from RFC 6234 §6.1: the first 32 bits of the fractional parts of the\n * square roots of the first eight prime numbers. Exported as a shared table; callers must treat\n * it as read-only because constructors copy words from it by index. */\nexport const SHA256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state `H(0)` from RFC 6234 §6.1. Exported as a shared table; callers must\n * treat it as read-only because constructors copy words from it by index. */\nexport const SHA224_IV = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state from RFC 6234 §6.3: eight RFC 64-bit `H(0)` words stored as sixteen\n * big-endian 32-bit halves. Derived from the fractional parts of the square roots of the ninth\n * through sixteenth prime numbers. Exported as a shared table; callers must treat it as read-only\n * because constructors copy halves from it by index. */\nexport const SHA384_IV = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state from RFC 6234 §6.3: eight RFC 64-bit `H(0)` words stored as sixteen\n * big-endian 32-bit halves. Derived from the fractional parts of the square roots of the first\n * eight prime numbers. Exported as a shared table; callers must treat it as read-only because\n * constructors copy halves from it by index. */\nexport const SHA512_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n//# sourceMappingURL=_md.js.map","const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n// Split bigint into two 32-bit halves. With `le=true`, returned fields become `{ h: low, l: high\n// }` to match little-endian word order rather than the property names.\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n// Split bigint list into `[highWords, lowWords]` when `le=false`; with `le=true`, the first array\n// holds the low halves because `fromBig(...)` swaps the semantic meaning of `h` and `l`.\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\n// Combine explicit `(high, low)` 32-bit halves into a bigint; `>>> 0` normalizes signed JS\n// bitwise results back to uint32 first, and little-endian callers must swap.\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// High 32-bit half of a 64-bit logical right shift for `s` in `0..31`.\nconst shrSH = (h, _l, s) => h >>> s;\n// Low 32-bit half of a 64-bit logical right shift, valid for `s` in `1..31`.\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// High 32-bit half of a 64-bit right rotate, valid for `s` in `1..31`.\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\n// Low 32-bit half of a 64-bit right rotate, valid for `s` in `1..31`.\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// High 32-bit half of a 64-bit right rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\n// Low 32-bit half of a 64-bit right rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// High 32-bit half of a 64-bit right rotate for `s === 32`; this is just the swapped low half.\nconst rotr32H = (_h, l) => l;\n// Low 32-bit half of a 64-bit right rotate for `s === 32`; this is just the swapped high half.\nconst rotr32L = (h, _l) => h;\n// High 32-bit half of a 64-bit left rotate, valid for `s` in `1..31`.\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\n// Low 32-bit half of a 64-bit left rotate, valid for `s` in `1..31`.\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// High 32-bit half of a 64-bit left rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\n// Low 32-bit half of a 64-bit left rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// Add two split 64-bit words and return the split `{ h, l }` sum.\n// JS uses 32-bit signed integers for bitwise operations, so we cannot simply shift the carry out\n// of the low sum and instead use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\n// Unmasked low-word accumulator for 3-way addition; pass the raw result into `add3H(...)`.\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\n// High-word finalize step for 3-way addition; `low` must be the untruncated output of `add3L(...)`.\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\n// Unmasked low-word accumulator for 4-way addition; pass the raw result into `add4H(...)`.\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\n// High-word finalize step for 4-way addition; `low` must be the untruncated output of `add4L(...)`.\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\n// Unmasked low-word accumulator for 5-way addition; pass the raw result into `add5H(...)`.\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\n// High-word finalize step for 5-way addition; `low` must be the untruncated output of `add5L(...)`.\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig };\n// Canonical grouped namespace for callers that prefer one object.\n// Named exports stay for direct imports.\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\n// Default export mirrors named `u64` for compatibility with object-style imports.\nexport default u64;\n//# sourceMappingURL=_u64.js.map","/**\n * Internal helpers for blake hash.\n * @module\n */\nimport { rotr } from \"./utils.js\";\n/**\n * Internal blake permutation table.\n * Rows `0..9` serve BLAKE2s, rows `0..11` serve BLAKE2b with `10..11 = 0..1`, and Blake1 also\n * reuses the later rows shown below. Blake1 expands rounds `10..15` as `SIGMA[i % 10]`, so rows\n * `10..15` intentionally repeat rows `0..5` for the 14-round (256) and 16-round (512) variants.\n */\n// prettier-ignore\nexport const BSIGMA = /* @__PURE__ */ Uint8Array.from([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\n 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,\n 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,\n 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,\n 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n // Blake1, unused in others\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\n]);\n// 32-bit / BLAKE2s first half of G, with the fixed `(16, 12)` rotation pair.\n// Parameter `x` is the RFC 7693 first-half message word, or Blake1's pre-mixed\n// `m[sigma[r][2i]] ^ u[sigma[r][2i+1]]` addend in the 32-bit path.\nexport function G1s(a, b, c, d, x) {\n a = (a + b + x) | 0;\n d = rotr(d ^ a, 16);\n c = (c + d) | 0;\n b = rotr(b ^ c, 12);\n return { a, b, c, d };\n}\n// 32-bit / BLAKE2s second half of G.\n// Parameter `x` is the RFC 7693 second-half (`y`) message word, or Blake1's pre-mixed\n// `m[sigma[r][2i + 1]] ^ u[sigma[r][2i]]` addend in the 32-bit path.\nexport function G2s(a, b, c, d, x) {\n a = (a + b + x) | 0;\n d = rotr(d ^ a, 8);\n c = (c + d) | 0;\n b = rotr(b ^ c, 7);\n return { a, b, c, d };\n}\n//# sourceMappingURL=_blake.js.map","/**\n * blake2b (64-bit) & blake2s (8 to 32-bit) hash functions.\n * b could have been faster, but there is no fast u64 in js, so s is 1.5x faster.\n * @module\n */\nimport { BSIGMA, G1s, G2s } from \"./_blake.js\";\nimport { SHA256_IV } from \"./_md.js\";\nimport * as u64 from \"./_u64.js\";\n// prettier-ignore\nimport { abytes, aexists, anumber, aoutput, clean, createHasher, swap32IfBE, swap8IfBE, u32 } from \"./utils.js\";\n// Same IV words as `SHA512_IV`, but endian-swapped into LE u32 low/high halves\n// for the BLAKE2b u64 helpers below.\nconst B2B_IV = /* @__PURE__ */ Uint32Array.from([\n 0xf3bcc908, 0x6a09e667, 0x84caa73b, 0xbb67ae85, 0xfe94f82b, 0x3c6ef372, 0x5f1d36f1, 0xa54ff53a,\n 0xade682d1, 0x510e527f, 0x2b3e6c1f, 0x9b05688c, 0xfb41bd6b, 0x1f83d9ab, 0x137e2179, 0x5be0cd19,\n]);\n// Shared synchronous BLAKE2b work vector as LE u32 low/high halves.\nconst BBUF = /* @__PURE__ */ new Uint32Array(32);\n// BLAKE2b G mix split into two half-rounds over LE u32 low/high limbs.\nfunction G1b(a, b, c, d, msg, x) {\n // NOTE: V is LE here\n const Xl = msg[x], Xh = msg[x + 1]; // prettier-ignore\n let Al = BBUF[2 * a], Ah = BBUF[2 * a + 1]; // prettier-ignore\n let Bl = BBUF[2 * b], Bh = BBUF[2 * b + 1]; // prettier-ignore\n let Cl = BBUF[2 * c], Ch = BBUF[2 * c + 1]; // prettier-ignore\n let Dl = BBUF[2 * d], Dh = BBUF[2 * d + 1]; // prettier-ignore\n // v[a] = (v[a] + v[b] + x) | 0;\n let ll = u64.add3L(Al, Bl, Xl);\n Ah = u64.add3H(ll, Ah, Bh, Xh);\n Al = ll | 0;\n // v[d] = rotr(v[d] ^ v[a], 32)\n ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });\n ({ Dh, Dl } = { Dh: u64.rotr32H(Dh, Dl), Dl: u64.rotr32L(Dh, Dl) });\n // v[c] = (v[c] + v[d]) | 0;\n ({ h: Ch, l: Cl } = u64.add(Ch, Cl, Dh, Dl));\n // v[b] = rotr(v[b] ^ v[c], 24)\n ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });\n ({ Bh, Bl } = { Bh: u64.rotrSH(Bh, Bl, 24), Bl: u64.rotrSL(Bh, Bl, 24) });\n ((BBUF[2 * a] = Al), (BBUF[2 * a + 1] = Ah));\n ((BBUF[2 * b] = Bl), (BBUF[2 * b + 1] = Bh));\n ((BBUF[2 * c] = Cl), (BBUF[2 * c + 1] = Ch));\n ((BBUF[2 * d] = Dl), (BBUF[2 * d + 1] = Dh));\n}\n// Second half-round of the same LE-limb BLAKE2b G mix; `x` is the message word offset.\nfunction G2b(a, b, c, d, msg, x) {\n // NOTE: V is LE here\n const Xl = msg[x], Xh = msg[x + 1]; // prettier-ignore\n let Al = BBUF[2 * a], Ah = BBUF[2 * a + 1]; // prettier-ignore\n let Bl = BBUF[2 * b], Bh = BBUF[2 * b + 1]; // prettier-ignore\n let Cl = BBUF[2 * c], Ch = BBUF[2 * c + 1]; // prettier-ignore\n let Dl = BBUF[2 * d], Dh = BBUF[2 * d + 1]; // prettier-ignore\n // v[a] = (v[a] + v[b] + x) | 0;\n let ll = u64.add3L(Al, Bl, Xl);\n Ah = u64.add3H(ll, Ah, Bh, Xh);\n Al = ll | 0;\n // v[d] = rotr(v[d] ^ v[a], 16)\n ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });\n ({ Dh, Dl } = { Dh: u64.rotrSH(Dh, Dl, 16), Dl: u64.rotrSL(Dh, Dl, 16) });\n // v[c] = (v[c] + v[d]) | 0;\n ({ h: Ch, l: Cl } = u64.add(Ch, Cl, Dh, Dl));\n // v[b] = rotr(v[b] ^ v[c], 63)\n ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });\n ({ Bh, Bl } = { Bh: u64.rotrBH(Bh, Bl, 63), Bl: u64.rotrBL(Bh, Bl, 63) });\n ((BBUF[2 * a] = Al), (BBUF[2 * a + 1] = Ah));\n ((BBUF[2 * b] = Bl), (BBUF[2 * b + 1] = Bh));\n ((BBUF[2 * c] = Cl), (BBUF[2 * c + 1] = Ch));\n ((BBUF[2 * d] = Dl), (BBUF[2 * d + 1] = Dh));\n}\nfunction checkBlake2Opts(outputLen, opts = {}, keyLen, saltLen, persLen) {\n anumber(keyLen);\n // RFC 7693 §2.1 requires digest length nn in 1..keyLen.\n if (outputLen <= 0 || outputLen > keyLen)\n throw new Error('outputLen bigger than keyLen');\n const { key, salt, personalization } = opts;\n // This API uses `undefined` for the RFC 7693 `kk = 0` case, so a provided key must be non-empty.\n if (key !== undefined && (key.length < 1 || key.length > keyLen))\n throw new Error('\"key\" expected to be undefined or of length=1..' + keyLen);\n if (salt !== undefined)\n abytes(salt, saltLen, 'salt');\n if (personalization !== undefined)\n abytes(personalization, persLen, 'personalization');\n}\n/** Internal base class for BLAKE2. */\nexport class _BLAKE2 {\n buffer;\n buffer32;\n finished = false;\n destroyed = false;\n length = 0;\n pos = 0;\n blockLen;\n outputLen;\n canXOF = false;\n constructor(blockLen, outputLen) {\n anumber(blockLen);\n anumber(outputLen);\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.buffer = new Uint8Array(blockLen);\n this.buffer32 = u32(this.buffer);\n }\n update(data) {\n aexists(this);\n abytes(data);\n // Main difference with other hashes: there is flag for last block,\n // so we cannot process current block before we know that there\n // is the next one. This significantly complicates logic and reduces ability\n // to do zero-copy processing\n const { blockLen, buffer, buffer32 } = this;\n const len = data.length;\n const offset = data.byteOffset;\n const buf = data.buffer;\n for (let pos = 0; pos < len;) {\n // If buffer is full and we still have input (don't process last block, same as blake2s)\n if (this.pos === blockLen) {\n swap32IfBE(buffer32);\n this.compress(buffer32, 0, false);\n swap32IfBE(buffer32);\n this.pos = 0;\n }\n const take = Math.min(blockLen - this.pos, len - pos);\n const dataOffset = offset + pos;\n // Zero-copy only for full, 4-byte-aligned, non-final blocks.\n if (take === blockLen && !(dataOffset % 4) && pos + take < len) {\n const data32 = new Uint32Array(buf, dataOffset, Math.floor((len - pos) / 4));\n swap32IfBE(data32);\n for (let pos32 = 0; pos + blockLen < len; pos32 += buffer32.length, pos += blockLen) {\n this.length += blockLen;\n this.compress(data32, pos32, false);\n }\n swap32IfBE(data32);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n this.length += take;\n pos += take;\n }\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n const { pos, buffer32 } = this;\n this.finished = true;\n // Padding\n clean(this.buffer.subarray(pos));\n swap32IfBE(buffer32);\n this.compress(buffer32, 0, true);\n swap32IfBE(buffer32);\n // Reject unaligned views explicitly instead of hiding them behind a full scratch copy.\n if (out.byteOffset & 3)\n throw new RangeError('\"digestInto() output\" expected 4-byte aligned byteOffset, got ' + out.byteOffset);\n const state = this.get();\n const out32 = u32(out);\n const full = Math.floor(this.outputLen / 4);\n for (let i = 0; i < full; i++)\n out32[i] = swap8IfBE(state[i]);\n const tail = this.outputLen % 4;\n if (!tail)\n return;\n const off = full * 4;\n const word = state[full];\n for (let i = 0; i < tail; i++)\n out[off + i] = word >>> (8 * i);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n // Return a copy so callers do not alias the instance scratch buffer used during finalization.\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n const { buffer, length, finished, destroyed, outputLen, pos } = this;\n // Recreate only `dkLen`; key/salt/personalization are already absorbed into the copied state.\n to ||= new this.constructor({ dkLen: outputLen });\n to.set(...this.get());\n to.buffer.set(buffer);\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n // @ts-ignore\n to.outputLen = outputLen;\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\n/** Internal blake2b hash class with state stored as LE u32 low/high halves. */\nexport class _BLAKE2b extends _BLAKE2 {\n // Same IV words as SHA-512 / BLAKE2b, encoded as LE u32 low/high halves.\n v0l = B2B_IV[0] | 0;\n v0h = B2B_IV[1] | 0;\n v1l = B2B_IV[2] | 0;\n v1h = B2B_IV[3] | 0;\n v2l = B2B_IV[4] | 0;\n v2h = B2B_IV[5] | 0;\n v3l = B2B_IV[6] | 0;\n v3h = B2B_IV[7] | 0;\n v4l = B2B_IV[8] | 0;\n v4h = B2B_IV[9] | 0;\n v5l = B2B_IV[10] | 0;\n v5h = B2B_IV[11] | 0;\n v6l = B2B_IV[12] | 0;\n v6h = B2B_IV[13] | 0;\n v7l = B2B_IV[14] | 0;\n v7h = B2B_IV[15] | 0;\n constructor(opts = {}) {\n const olen = opts.dkLen === undefined ? 64 : opts.dkLen;\n super(128, olen);\n checkBlake2Opts(olen, opts, 64, 16, 16);\n let { key, personalization, salt } = opts;\n let keyLength = 0;\n if (key !== undefined) {\n abytes(key, undefined, 'key');\n keyLength = key.length;\n }\n // RFC 7693 §2.5: xor `p[0] = 0x0101kknn` into the low 32 bits of `h[0]`;\n // the high 32 bits stay at `IV[0]`.\n this.v0l ^= this.outputLen | (keyLength << 8) | (0x01 << 16) | (0x01 << 24);\n if (salt !== undefined) {\n abytes(salt, undefined, 'salt');\n const slt = u32(salt);\n this.v4l ^= swap8IfBE(slt[0]);\n this.v4h ^= swap8IfBE(slt[1]);\n this.v5l ^= swap8IfBE(slt[2]);\n this.v5h ^= swap8IfBE(slt[3]);\n }\n if (personalization !== undefined) {\n abytes(personalization, undefined, 'personalization');\n const pers = u32(personalization);\n this.v6l ^= swap8IfBE(pers[0]);\n this.v6h ^= swap8IfBE(pers[1]);\n this.v7l ^= swap8IfBE(pers[2]);\n this.v7h ^= swap8IfBE(pers[3]);\n }\n if (key !== undefined) {\n // Pad to blockLen and update\n const tmp = new Uint8Array(this.blockLen);\n tmp.set(key);\n this.update(tmp);\n }\n }\n // prettier-ignore\n get() {\n let { v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h } = this;\n return [v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h];\n }\n // prettier-ignore\n set(v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h) {\n this.v0l = v0l | 0;\n this.v0h = v0h | 0;\n this.v1l = v1l | 0;\n this.v1h = v1h | 0;\n this.v2l = v2l | 0;\n this.v2h = v2h | 0;\n this.v3l = v3l | 0;\n this.v3h = v3h | 0;\n this.v4l = v4l | 0;\n this.v4h = v4h | 0;\n this.v5l = v5l | 0;\n this.v5h = v5h | 0;\n this.v6l = v6l | 0;\n this.v6h = v6h | 0;\n this.v7l = v7l | 0;\n this.v7h = v7h | 0;\n }\n compress(msg, offset, isLast) {\n this.get().forEach((v, i) => (BBUF[i] = v)); // First half from state.\n BBUF.set(B2B_IV, 16); // Second half from IV.\n let { h, l } = u64.fromBig(BigInt(this.length));\n BBUF[24] = B2B_IV[8] ^ l; // Low word of the offset.\n BBUF[25] = B2B_IV[9] ^ h; // High word.\n // Invert all bits for last block\n if (isLast) {\n BBUF[28] = ~BBUF[28];\n BBUF[29] = ~BBUF[29];\n }\n let j = 0;\n const s = BSIGMA;\n // SIGMA selects 64-bit message words; multiply by 2 because `msg` stores\n // each word as [low32, high32].\n for (let i = 0; i < 12; i++) {\n G1b(0, 4, 8, 12, msg, offset + 2 * s[j++]);\n G2b(0, 4, 8, 12, msg, offset + 2 * s[j++]);\n G1b(1, 5, 9, 13, msg, offset + 2 * s[j++]);\n G2b(1, 5, 9, 13, msg, offset + 2 * s[j++]);\n G1b(2, 6, 10, 14, msg, offset + 2 * s[j++]);\n G2b(2, 6, 10, 14, msg, offset + 2 * s[j++]);\n G1b(3, 7, 11, 15, msg, offset + 2 * s[j++]);\n G2b(3, 7, 11, 15, msg, offset + 2 * s[j++]);\n G1b(0, 5, 10, 15, msg, offset + 2 * s[j++]);\n G2b(0, 5, 10, 15, msg, offset + 2 * s[j++]);\n G1b(1, 6, 11, 12, msg, offset + 2 * s[j++]);\n G2b(1, 6, 11, 12, msg, offset + 2 * s[j++]);\n G1b(2, 7, 8, 13, msg, offset + 2 * s[j++]);\n G2b(2, 7, 8, 13, msg, offset + 2 * s[j++]);\n G1b(3, 4, 9, 14, msg, offset + 2 * s[j++]);\n G2b(3, 4, 9, 14, msg, offset + 2 * s[j++]);\n }\n this.v0l ^= BBUF[0] ^ BBUF[16];\n this.v0h ^= BBUF[1] ^ BBUF[17];\n this.v1l ^= BBUF[2] ^ BBUF[18];\n this.v1h ^= BBUF[3] ^ BBUF[19];\n this.v2l ^= BBUF[4] ^ BBUF[20];\n this.v2h ^= BBUF[5] ^ BBUF[21];\n this.v3l ^= BBUF[6] ^ BBUF[22];\n this.v3h ^= BBUF[7] ^ BBUF[23];\n this.v4l ^= BBUF[8] ^ BBUF[24];\n this.v4h ^= BBUF[9] ^ BBUF[25];\n this.v5l ^= BBUF[10] ^ BBUF[26];\n this.v5h ^= BBUF[11] ^ BBUF[27];\n this.v6l ^= BBUF[12] ^ BBUF[28];\n this.v6h ^= BBUF[13] ^ BBUF[29];\n this.v7l ^= BBUF[14] ^ BBUF[30];\n this.v7h ^= BBUF[15] ^ BBUF[31];\n clean(BBUF);\n }\n destroy() {\n this.destroyed = true;\n clean(this.buffer32);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n/**\n * Blake2b hash function. 64-bit. 1.5x slower than blake2s in JS.\n * @param msg - message that would be hashed\n * @param opts - Optional output, MAC, salt, and personalization settings.\n * `dkLen` must be 1..64 bytes; `salt` and `personalization`, if present,\n * must be 16 bytes each. See {@link Blake2Opts}.\n * @returns Digest bytes.\n * @example\n * Hash a message with Blake2b.\n * ```ts\n * blake2b(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const blake2b = /* @__PURE__ */ createHasher((opts) => new _BLAKE2b(opts));\n/**\n * BLAKE2-compress core method.\n * Runs only the round function over a caller-supplied local vector; callers initialize `v0..v15`\n * and apply the final `h[i] ^= v[i] ^ v[i + 8]` fold themselves.\n * @param s - flattened sigma schedule bytes\n * @param offset - starting word offset inside `msg`, not a byte offset\n * @param msg - message words\n * @param rounds - round count to execute\n * @param v0 - state word 0\n * @param v1 - state word 1\n * @param v2 - state word 2\n * @param v3 - state word 3\n * @param v4 - state word 4\n * @param v5 - state word 5\n * @param v6 - state word 6\n * @param v7 - state word 7\n * @param v8 - state word 8\n * @param v9 - state word 9\n * @param v10 - state word 10\n * @param v11 - state word 11\n * @param v12 - state word 12\n * @param v13 - state word 13\n * @param v14 - state word 14\n * @param v15 - state word 15\n * @returns Updated compression state words.\n * @example\n * Run the BLAKE2 compression core on zeroed state and message words.\n * ```ts\n * import { compress } from '@noble/hashes/blake2.js';\n * const state = compress(\n * new Uint8Array(16),\n * 0,\n * new Uint32Array(16),\n * 1,\n * 0, 0, 0, 0, 0, 0, 0, 0,\n * 0, 0, 0, 0, 0, 0, 0, 0\n * );\n * state.v0;\n * ```\n */\n// prettier-ignore\nexport function compress(s, offset, msg, rounds, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) {\n let j = 0;\n for (let i = 0; i < rounds; i++) {\n ({ a: v0, b: v4, c: v8, d: v12 } = G1s(v0, v4, v8, v12, msg[offset + s[j++]]));\n ({ a: v0, b: v4, c: v8, d: v12 } = G2s(v0, v4, v8, v12, msg[offset + s[j++]]));\n ({ a: v1, b: v5, c: v9, d: v13 } = G1s(v1, v5, v9, v13, msg[offset + s[j++]]));\n ({ a: v1, b: v5, c: v9, d: v13 } = G2s(v1, v5, v9, v13, msg[offset + s[j++]]));\n ({ a: v2, b: v6, c: v10, d: v14 } = G1s(v2, v6, v10, v14, msg[offset + s[j++]]));\n ({ a: v2, b: v6, c: v10, d: v14 } = G2s(v2, v6, v10, v14, msg[offset + s[j++]]));\n ({ a: v3, b: v7, c: v11, d: v15 } = G1s(v3, v7, v11, v15, msg[offset + s[j++]]));\n ({ a: v3, b: v7, c: v11, d: v15 } = G2s(v3, v7, v11, v15, msg[offset + s[j++]]));\n ({ a: v0, b: v5, c: v10, d: v15 } = G1s(v0, v5, v10, v15, msg[offset + s[j++]]));\n ({ a: v0, b: v5, c: v10, d: v15 } = G2s(v0, v5, v10, v15, msg[offset + s[j++]]));\n ({ a: v1, b: v6, c: v11, d: v12 } = G1s(v1, v6, v11, v12, msg[offset + s[j++]]));\n ({ a: v1, b: v6, c: v11, d: v12 } = G2s(v1, v6, v11, v12, msg[offset + s[j++]]));\n ({ a: v2, b: v7, c: v8, d: v13 } = G1s(v2, v7, v8, v13, msg[offset + s[j++]]));\n ({ a: v2, b: v7, c: v8, d: v13 } = G2s(v2, v7, v8, v13, msg[offset + s[j++]]));\n ({ a: v3, b: v4, c: v9, d: v14 } = G1s(v3, v4, v9, v14, msg[offset + s[j++]]));\n ({ a: v3, b: v4, c: v9, d: v14 } = G2s(v3, v4, v9, v14, msg[offset + s[j++]]));\n }\n return { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 };\n}\n// Blake2s reuses the SHA-256 IV words as-is.\nconst B2S_IV = /* @__PURE__ */ SHA256_IV.slice();\n/** Internal blake2s hash class. */\nexport class _BLAKE2s extends _BLAKE2 {\n // Internal state, same as SHA-256\n v0 = B2S_IV[0] | 0;\n v1 = B2S_IV[1] | 0;\n v2 = B2S_IV[2] | 0;\n v3 = B2S_IV[3] | 0;\n v4 = B2S_IV[4] | 0;\n v5 = B2S_IV[5] | 0;\n v6 = B2S_IV[6] | 0;\n v7 = B2S_IV[7] | 0;\n constructor(opts = {}) {\n const olen = opts.dkLen === undefined ? 32 : opts.dkLen;\n super(64, olen);\n checkBlake2Opts(olen, opts, 32, 8, 8);\n let { key, personalization, salt } = opts;\n let keyLength = 0;\n if (key !== undefined) {\n abytes(key, undefined, 'key');\n keyLength = key.length;\n }\n // RFC 7693 §2.5: xor `p[0] = 0x0101kknn` directly into `h[0]`, since\n // BLAKE2s stores each state word as one `u32`.\n this.v0 ^= this.outputLen | (keyLength << 8) | (0x01 << 16) | (0x01 << 24);\n if (salt !== undefined) {\n abytes(salt, undefined, 'salt');\n const slt = u32(salt);\n this.v4 ^= swap8IfBE(slt[0]);\n this.v5 ^= swap8IfBE(slt[1]);\n }\n if (personalization !== undefined) {\n abytes(personalization, undefined, 'personalization');\n const pers = u32(personalization);\n this.v6 ^= swap8IfBE(pers[0]);\n this.v7 ^= swap8IfBE(pers[1]);\n }\n if (key !== undefined) {\n // Pad to blockLen and update\n const tmp = new Uint8Array(this.blockLen);\n tmp.set(key);\n this.update(tmp);\n }\n }\n get() {\n const { v0, v1, v2, v3, v4, v5, v6, v7 } = this;\n return [v0, v1, v2, v3, v4, v5, v6, v7];\n }\n // prettier-ignore\n set(v0, v1, v2, v3, v4, v5, v6, v7) {\n this.v0 = v0 | 0;\n this.v1 = v1 | 0;\n this.v2 = v2 | 0;\n this.v3 = v3 | 0;\n this.v4 = v4 | 0;\n this.v5 = v5 | 0;\n this.v6 = v6 | 0;\n this.v7 = v7 | 0;\n }\n compress(msg, offset, isLast) {\n const { h, l } = u64.fromBig(BigInt(this.length));\n // Seed v8..v15 from the IV, xor the low/high 32-bit byte counter into\n // v12/v13, and invert v14 on the final block.\n // prettier-ignore\n const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } = compress(BSIGMA, offset, msg, 10, this.v0, this.v1, this.v2, this.v3, this.v4, this.v5, this.v6, this.v7, B2S_IV[0], B2S_IV[1], B2S_IV[2], B2S_IV[3], l ^ B2S_IV[4], h ^ B2S_IV[5], isLast ? ~B2S_IV[6] : B2S_IV[6], B2S_IV[7]);\n this.v0 ^= v0 ^ v8;\n this.v1 ^= v1 ^ v9;\n this.v2 ^= v2 ^ v10;\n this.v3 ^= v3 ^ v11;\n this.v4 ^= v4 ^ v12;\n this.v5 ^= v5 ^ v13;\n this.v6 ^= v6 ^ v14;\n this.v7 ^= v7 ^ v15;\n }\n destroy() {\n this.destroyed = true;\n clean(this.buffer32);\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n/**\n * Blake2s hash function. Focuses on 8-bit to 32-bit platforms. 1.5x faster than blake2b in JS.\n * @param msg - message that would be hashed\n * @param opts - Optional output, MAC, salt, and personalization settings.\n * `dkLen` must be 1..32 bytes; `salt` and `personalization`, if present,\n * must be 8 bytes each. See {@link Blake2Opts}.\n * @returns Digest bytes.\n * @example\n * Hash a message with Blake2s.\n * ```ts\n * blake2s(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const blake2s = /* @__PURE__ */ createHasher((opts) => new _BLAKE2s(opts));\n//# sourceMappingURL=blake2.js.map","/**\n * Blake3 fast hash is Blake2 with reduced security (round count). Can also be used as MAC & KDF.\n *\n * It is advertised as \"the fastest cryptographic hash\". However, it isn't true in JS.\n * Why is this so slow? While it must be 6x faster than blake2b, perf diff is only 20%:\n *\n * * There is only 30% reduction in number of rounds from blake2s\n * * Speed-up comes from tree structure, which is parallelized using SIMD & threading.\n * These features are not present in JS, so we only get overhead from trees.\n * * Parallelization only happens on 1024-byte chunks: there is no benefit for small inputs.\n * * It is still possible to make it faster using: a) loop unrolling b) web workers c) wasm\n * @module\n */\nimport { SHA256_IV } from \"./_md.js\";\nimport { fromBig } from \"./_u64.js\";\nimport { _BLAKE2, compress } from \"./blake2.js\";\n// prettier-ignore\nimport { abytes, aexists, anumber, aoutput, clean, copyBytes, createHasher, swap32IfBE, u32, u8 } from \"./utils.js\";\n// Constructor-time mode flags (`KEYED_HASH`, `DERIVE_*`) plus per-node tree\n// flags (`CHUNK_*`, `PARENT`, `ROOT`).\nconst B3_Flags = {\n CHUNK_START: 0b1,\n CHUNK_END: 0b10,\n PARENT: 0b100,\n ROOT: 0b1000,\n KEYED_HASH: 0b10000,\n DERIVE_KEY_CONTEXT: 0b100000,\n DERIVE_KEY_MATERIAL: 0b1000000,\n};\n// Default BLAKE3 IV, cloned from the shared BLAKE2s / SHA-256 IV basis.\nconst B3_IV = /* @__PURE__ */ SHA256_IV.slice();\n// Seven 16-word rounds of BLAKE3 message schedule, generated by repeatedly\n// permuting the identity row.\nconst B3_SIGMA = /* @__PURE__ */ (() => {\n const Id = Array.from({ length: 16 }, (_, i) => i);\n const permute = (arr) => [2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8].map((i) => arr[i]);\n const res = [];\n for (let i = 0, v = Id; i < 7; i++, v = permute(v))\n res.push(...v);\n return Uint8Array.from(res);\n})();\n/** Blake3 hash. Can be used as MAC and KDF with caller-encoded context bytes. */\nexport class _BLAKE3 extends _BLAKE2 {\n canXOF = true;\n chunkPos = 0; // Position of current block in chunk\n // How many chunks we already have; exact while this stays within\n // JS's safe-integer range.\n chunksDone = 0;\n flags = 0 | 0;\n IV;\n state;\n stack = [];\n // Output\n posOut = 0;\n bufferOut32 = new Uint32Array(16);\n bufferOut;\n // Index of output chunk; exact while this stays within JS's\n // safe-integer range.\n chunkOut = 0;\n enableXOF = true;\n constructor(opts = {}, flags = 0) {\n super(64, opts.dkLen === undefined ? 32 : opts.dkLen);\n const { key, context } = opts;\n const hasContext = context !== undefined;\n if (key !== undefined) {\n if (hasContext)\n throw new Error('Only \"key\" or \"context\" can be specified at same time');\n abytes(key, 32, 'key');\n const k = copyBytes(key);\n this.IV = u32(k);\n swap32IfBE(this.IV);\n this.flags = flags | B3_Flags.KEYED_HASH;\n }\n else if (hasContext) {\n abytes(context, undefined, 'context');\n const ctx = context;\n const contextKey = new _BLAKE3({ dkLen: 32 }, B3_Flags.DERIVE_KEY_CONTEXT)\n .update(ctx)\n .digest();\n this.IV = u32(contextKey);\n swap32IfBE(this.IV);\n this.flags = flags | B3_Flags.DERIVE_KEY_MATERIAL;\n }\n else {\n this.IV = B3_IV.slice();\n this.flags = flags;\n }\n this.state = this.IV.slice();\n this.bufferOut = u8(this.bufferOut32);\n }\n // _BLAKE2's scalar-state hooks are unused here: BLAKE3 keeps its tree/XOF state in arrays and\n // copies it directly in _cloneInto().\n get() {\n return [];\n }\n set() { }\n // Truncated chunk/parent compression: seed v8..v15 as IV[0..3], t0, t1,\n // block length, and flags, then keep only the first 8 output words.\n b2Compress(counter, flags, buf, bufPos = 0) {\n const { state: s, pos } = this;\n const { h, l } = fromBig(BigInt(counter), true);\n // prettier-ignore\n const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } = compress(B3_SIGMA, bufPos, buf, 7, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], B3_IV[0], B3_IV[1], B3_IV[2], B3_IV[3], h, l, pos, flags);\n s[0] = v0 ^ v8;\n s[1] = v1 ^ v9;\n s[2] = v2 ^ v10;\n s[3] = v3 ^ v11;\n s[4] = v4 ^ v12;\n s[5] = v5 ^ v13;\n s[6] = v6 ^ v14;\n s[7] = v7 ^ v15;\n }\n compress(buf, bufPos = 0, isLast = false) {\n // Compress last block\n let flags = this.flags;\n if (!this.chunkPos)\n flags |= B3_Flags.CHUNK_START;\n if (this.chunkPos === 15 || isLast)\n flags |= B3_Flags.CHUNK_END;\n if (!isLast)\n this.pos = this.blockLen;\n this.b2Compress(this.chunksDone, flags, buf, bufPos);\n this.chunkPos += 1;\n // If current block is last in chunk (16 blocks), then compress chunks\n if (this.chunkPos === 16 || isLast) {\n let chunk = this.state;\n this.state = this.IV.slice();\n // If not the last one, compress only when there are trailing zeros in chunk counter\n // Chunks are used as a binary tree where the current stack is the path.\n // Zero means the current leaf is finished and can be compressed.\n // 1 (001) - leaf not finished (just push current chunk to stack)\n // 2 (010) - leaf finished at depth=1 (merge with last elm on stack and push back)\n // 3 (011) - last leaf not finished\n // 4 (100) - leafs finished at depth=1 and depth=2\n for (let last, chunks = this.chunksDone + 1; isLast || !(chunks & 1); chunks >>= 1) {\n if (!(last = this.stack.pop()))\n break;\n this.buffer32.set(last, 0);\n this.buffer32.set(chunk, 8);\n this.pos = this.blockLen;\n this.b2Compress(0, this.flags | B3_Flags.PARENT, this.buffer32, 0);\n chunk = this.state;\n this.state = this.IV.slice();\n }\n this.chunksDone++;\n this.chunkPos = 0;\n this.stack.push(chunk);\n }\n this.pos = 0;\n }\n _cloneInto(to) {\n to = super._cloneInto(to);\n const { IV, flags, state, chunkPos, posOut, chunkOut, stack, chunksDone } = this;\n to.state.set(state.slice());\n // Clone each CV stack entry by value so extending or destroying the clone\n // cannot alias the source tree state.\n to.stack = stack.map((i) => Uint32Array.from(i));\n to.IV.set(IV);\n to.flags = flags;\n to.chunkPos = chunkPos;\n to.chunksDone = chunksDone;\n to.posOut = posOut;\n to.chunkOut = chunkOut;\n to.enableXOF = this.enableXOF;\n to.bufferOut32.set(this.bufferOut32);\n return to;\n }\n destroy() {\n this.destroyed = true;\n clean(this.state, this.buffer32, this.IV, this.bufferOut32);\n clean(...this.stack);\n }\n // Root/XOF compression: rerun the same ROOT inputs with incrementing output\n // counter `t` and materialize all 16 output words.\n // Same as b2Compress, but doesn't modify state and returns 16 u32 array (instead of 8)\n b2CompressOut() {\n const { state: s, pos, flags, buffer32, bufferOut32: out32 } = this;\n const { h, l } = fromBig(BigInt(this.chunkOut++));\n swap32IfBE(buffer32);\n // prettier-ignore\n const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } = compress(B3_SIGMA, 0, buffer32, 7, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], B3_IV[0], B3_IV[1], B3_IV[2], B3_IV[3], l, h, pos, flags);\n out32[0] = v0 ^ v8;\n out32[1] = v1 ^ v9;\n out32[2] = v2 ^ v10;\n out32[3] = v3 ^ v11;\n out32[4] = v4 ^ v12;\n out32[5] = v5 ^ v13;\n out32[6] = v6 ^ v14;\n out32[7] = v7 ^ v15;\n out32[8] = s[0] ^ v8;\n out32[9] = s[1] ^ v9;\n out32[10] = s[2] ^ v10;\n out32[11] = s[3] ^ v11;\n out32[12] = s[4] ^ v12;\n out32[13] = s[5] ^ v13;\n out32[14] = s[6] ^ v14;\n out32[15] = s[7] ^ v15;\n swap32IfBE(buffer32);\n swap32IfBE(out32);\n this.posOut = 0;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n // Padding\n clean(this.buffer.subarray(this.pos));\n // Process last chunk\n let flags = this.flags | B3_Flags.ROOT;\n if (this.stack.length) {\n // Finalize the current chunk first, then rerun the last parent\n // compression as ROOT with t = 0 and b = 64.\n flags |= B3_Flags.PARENT;\n swap32IfBE(this.buffer32);\n this.compress(this.buffer32, 0, true);\n swap32IfBE(this.buffer32);\n this.chunksDone = 0;\n this.pos = this.blockLen;\n }\n else {\n flags |= (!this.chunkPos ? B3_Flags.CHUNK_START : 0) | B3_Flags.CHUNK_END;\n }\n this.flags = flags;\n this.b2CompressOut();\n }\n writeInto(out) {\n aexists(this, false);\n abytes(out);\n this.finish();\n const { blockLen, bufferOut } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.b2CompressOut();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n if (!this.enableXOF)\n throw new Error('XOF is not possible after digest call');\n return this.writeInto(out);\n }\n xof(bytes) {\n anumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n aoutput(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.enableXOF = false;\n // `aoutput(...)` allows oversized buffers; digestInto() must fill only the configured digest.\n this.writeInto(out.subarray(0, this.outputLen));\n this.destroy();\n }\n digest() {\n const out = new Uint8Array(this.outputLen);\n this.digestInto(out);\n return out;\n }\n}\n/**\n * BLAKE3 hash function. Can be used as MAC and KDF.\n * @param msg - message that would be hashed\n * @param opts - Optional output, MAC, or KDF configuration. `key` must be\n * exactly 32 bytes, `context` is caller-encoded bytes, and `dkLen` can be\n * 0..2^64-1 via the XOF-backed output path. See {@link Blake3Opts}.\n * @returns Digest bytes.\n * @example\n * Hash, MAC, or derive key material with BLAKE3.\n * ```ts\n * import { blake3 } from '@noble/hashes/blake3.js';\n * import { utf8ToBytes } from '@noble/hashes/utils.js';\n * const data = new Uint8Array(32);\n * const hash = blake3(data);\n * const mac = blake3(data, { key: new Uint8Array(32) });\n * const kdf = blake3(data, { context: utf8ToBytes('application name') });\n * ```\n */\nexport const blake3 = /* @__PURE__ */ createHasher((opts = {}) => new _BLAKE3(opts));\n//# sourceMappingURL=blake3.js.map","// Some numerical data is initialized as -1 even when it doesn't need initialization to help the JIT infer types\n// aliases for shorter compressed code (most minifers don't do this)\nvar ab = ArrayBuffer, u8 = Uint8Array, u16 = Uint16Array, i16 = Int16Array, u32 = Uint32Array, i32 = Int32Array;\nvar slc = function (v, s, e) {\n if (u8.prototype.slice)\n return u8.prototype.slice.call(v, s, e);\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new u8(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar fill = function (v, n, s, e) {\n if (u8.prototype.fill)\n return u8.prototype.fill.call(v, n, s, e);\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n for (; s < e; ++s)\n v[s] = n;\n return v;\n};\nvar cpw = function (v, t, s, e) {\n if (u8.prototype.copyWithin)\n return u8.prototype.copyWithin.call(v, t, s, e);\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n while (s < e) {\n v[t++] = v[s++];\n }\n};\n/**\n * Codes for errors generated within this library\n */\nexport var ZstdErrorCode = {\n InvalidData: 0,\n WindowSizeTooLarge: 1,\n InvalidBlockType: 2,\n FSEAccuracyTooHigh: 3,\n DistanceTooFarBack: 4,\n UnexpectedEOF: 5\n};\n// error codes\nvar ec = [\n 'invalid zstd data',\n 'window size too large (>2046MB)',\n 'invalid block type',\n 'FSE accuracy too high',\n 'match distance too far back',\n 'unexpected EOF'\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};\nvar rb = function (d, b, n) {\n var i = 0, o = 0;\n for (; i < n; ++i)\n o |= d[b++] << (i << 3);\n return o;\n};\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\n// read Zstandard frame header\nvar rzfh = function (dat, w) {\n var n3 = dat[0] | (dat[1] << 8) | (dat[2] << 16);\n if (n3 == 0x2FB528 && dat[3] == 253) {\n // Zstandard\n var flg = dat[4];\n // single segment checksum dict flag frame content flag\n var ss = (flg >> 5) & 1, cc = (flg >> 2) & 1, df = flg & 3, fcf = flg >> 6;\n if (flg & 8)\n err(0);\n // byte\n var bt = 6 - ss;\n // dict bytes\n var db = df == 3 ? 4 : df;\n // dictionary id\n var di = rb(dat, bt, db);\n bt += db;\n // frame size bytes\n var fsb = fcf ? (1 << fcf) : ss;\n // frame source size\n var fss = rb(dat, bt, fsb) + ((fcf == 1) && 256);\n // window size\n var ws = fss;\n if (!ss) {\n // window descriptor\n var wb = 1 << (10 + (dat[5] >> 3));\n ws = wb + (wb >> 3) * (dat[5] & 7);\n }\n if (ws > 2145386496)\n err(1);\n var buf = new u8((w == 1 ? (fss || ws) : w ? 0 : ws) + 12);\n buf[0] = 1, buf[4] = 4, buf[8] = 8;\n return {\n b: bt + fsb,\n y: 0,\n l: 0,\n d: di,\n w: (w && w != 1) ? w : buf.subarray(12),\n e: ws,\n o: new i32(buf.buffer, 0, 3),\n u: fss,\n c: cc,\n m: Math.min(131072, ws)\n };\n }\n else if (((n3 >> 4) | (dat[3] << 20)) == 0x184D2A5) {\n // skippable\n return b4(dat, 4) + 8;\n }\n err(0);\n};\n// most significant bit for nonzero\nvar msb = function (val) {\n var bits = 0;\n for (; (1 << bits) <= val; ++bits)\n ;\n return bits - 1;\n};\n// read finite state entropy\nvar rfse = function (dat, bt, mal) {\n // table pos\n var tpos = (bt << 3) + 4;\n // accuracy log\n var al = (dat[bt] & 15) + 5;\n if (al > mal)\n err(3);\n // size\n var sz = 1 << al;\n // probabilities symbols repeat index high threshold\n var probs = sz, sym = -1, re = -1, i = -1, ht = sz;\n // optimization: single allocation is much faster\n var buf = new ab(512 + (sz << 2));\n var freq = new i16(buf, 0, 256);\n // same view as freq\n var dstate = new u16(buf, 0, 256);\n var nstate = new u16(buf, 512, sz);\n var bb1 = 512 + (sz << 1);\n var syms = new u8(buf, bb1, sz);\n var nbits = new u8(buf, bb1 + sz);\n while (sym < 255 && probs > 0) {\n var bits = msb(probs + 1);\n var cbt = tpos >> 3;\n // mask\n var msk = (1 << (bits + 1)) - 1;\n var val = ((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (tpos & 7)) & msk;\n // mask (1 fewer bit)\n var msk1fb = (1 << bits) - 1;\n // max small value\n var msv = msk - probs - 1;\n // small value\n var sval = val & msk1fb;\n if (sval < msv)\n tpos += bits, val = sval;\n else {\n tpos += bits + 1;\n if (val > msk1fb)\n val -= msv;\n }\n freq[++sym] = --val;\n if (val == -1) {\n probs += val;\n syms[--ht] = sym;\n }\n else\n probs -= val;\n if (!val) {\n do {\n // repeat byte\n var rbt = tpos >> 3;\n re = ((dat[rbt] | (dat[rbt + 1] << 8)) >> (tpos & 7)) & 3;\n tpos += 2;\n sym += re;\n } while (re == 3);\n }\n }\n if (sym > 255 || probs)\n err(0);\n var sympos = 0;\n // sym step (coprime with sz - formula from zstd source)\n var sstep = (sz >> 1) + (sz >> 3) + 3;\n // sym mask\n var smask = sz - 1;\n for (var s = 0; s <= sym; ++s) {\n var sf = freq[s];\n if (sf < 1) {\n dstate[s] = -sf;\n continue;\n }\n // This is split into two loops in zstd to avoid branching, but as JS is higher-level that is unnecessary\n for (i = 0; i < sf; ++i) {\n syms[sympos] = s;\n do {\n sympos = (sympos + sstep) & smask;\n } while (sympos >= ht);\n }\n }\n // After spreading symbols, should be zero again\n if (sympos)\n err(0);\n for (i = 0; i < sz; ++i) {\n // next state\n var ns = dstate[syms[i]]++;\n // num bits\n var nb = nbits[i] = al - msb(ns);\n nstate[i] = (ns << nb) - sz;\n }\n return [(tpos + 7) >> 3, {\n b: al,\n s: syms,\n n: nbits,\n t: nstate\n }];\n};\n// read huffman\nvar rhu = function (dat, bt) {\n // index weight count\n var i = 0, wc = -1;\n // buffer header byte\n var buf = new u8(292), hb = dat[bt];\n // huffman weights\n var hw = buf.subarray(0, 256);\n // rank count\n var rc = buf.subarray(256, 268);\n // rank index\n var ri = new u16(buf.buffer, 268);\n // NOTE: at this point bt is 1 less than expected\n if (hb < 128) {\n // end byte, fse decode table\n var _a = rfse(dat, bt + 1, 6), ebt = _a[0], fdt = _a[1];\n bt += hb;\n var epos = ebt << 3;\n // last byte\n var lb = dat[bt];\n if (!lb)\n err(0);\n // state1 state2 state1 bits state2 bits\n var st1 = 0, st2 = 0, btr1 = fdt.b, btr2 = btr1;\n // fse pos\n // pre-increment to account for original deficit of 1\n var fpos = (++bt << 3) - 8 + msb(lb);\n for (;;) {\n fpos -= btr1;\n if (fpos < epos)\n break;\n var cbt = fpos >> 3;\n st1 += ((dat[cbt] | (dat[cbt + 1] << 8)) >> (fpos & 7)) & ((1 << btr1) - 1);\n hw[++wc] = fdt.s[st1];\n fpos -= btr2;\n if (fpos < epos)\n break;\n cbt = fpos >> 3;\n st2 += ((dat[cbt] | (dat[cbt + 1] << 8)) >> (fpos & 7)) & ((1 << btr2) - 1);\n hw[++wc] = fdt.s[st2];\n btr1 = fdt.n[st1];\n st1 = fdt.t[st1];\n btr2 = fdt.n[st2];\n st2 = fdt.t[st2];\n }\n if (++wc > 255)\n err(0);\n }\n else {\n wc = hb - 127;\n for (; i < wc; i += 2) {\n var byte = dat[++bt];\n hw[i] = byte >> 4;\n hw[i + 1] = byte & 15;\n }\n ++bt;\n }\n // weight exponential sum\n var wes = 0;\n for (i = 0; i < wc; ++i) {\n var wt = hw[i];\n // bits must be at most 11, same as weight\n if (wt > 11)\n err(0);\n wes += wt && (1 << (wt - 1));\n }\n // max bits\n var mb = msb(wes) + 1;\n // table size\n var ts = 1 << mb;\n // remaining sum\n var rem = ts - wes;\n // must be power of 2\n if (rem & (rem - 1))\n err(0);\n hw[wc++] = msb(rem) + 1;\n for (i = 0; i < wc; ++i) {\n var wt = hw[i];\n ++rc[hw[i] = wt && (mb + 1 - wt)];\n }\n // huf buf\n var hbuf = new u8(ts << 1);\n // symbols num bits\n var syms = hbuf.subarray(0, ts), nb = hbuf.subarray(ts);\n ri[mb] = 0;\n for (i = mb; i > 0; --i) {\n var pv = ri[i];\n fill(nb, i, pv, ri[i - 1] = pv + rc[i] * (1 << (mb - i)));\n }\n if (ri[0] != ts)\n err(0);\n for (i = 0; i < wc; ++i) {\n var bits = hw[i];\n if (bits) {\n var code = ri[bits];\n fill(syms, i, code, ri[bits] = code + (1 << (mb - bits)));\n }\n }\n return [bt, {\n n: nb,\n b: mb,\n s: syms\n }];\n};\n// Tables generated using this:\n// https://gist.github.com/101arrowz/a979452d4355992cbf8f257cbffc9edd\n// default literal length table\nvar dllt = /*#__PURE__*/ rfse(/*#__PURE__*/ new u8([\n 81, 16, 99, 140, 49, 198, 24, 99, 12, 33, 196, 24, 99, 102, 102, 134, 70, 146, 4\n]), 0, 6)[1];\n// default match length table\nvar dmlt = /*#__PURE__*/ rfse(/*#__PURE__*/ new u8([\n 33, 20, 196, 24, 99, 140, 33, 132, 16, 66, 8, 33, 132, 16, 66, 8, 33, 68, 68, 68, 68, 68, 68, 68, 68, 36, 9\n]), 0, 6)[1];\n// default offset code table\nvar doct = /*#__PURE__ */ rfse(/*#__PURE__*/ new u8([\n 32, 132, 16, 66, 102, 70, 68, 68, 68, 68, 36, 73, 2\n]), 0, 5)[1];\n// bits to baseline\nvar b2bl = function (b, s) {\n var len = b.length, bl = new i32(len);\n for (var i = 0; i < len; ++i) {\n bl[i] = s;\n s += 1 << b[i];\n }\n return bl;\n};\n// literal length bits\nvar llb = /*#__PURE__ */ new u8(( /*#__PURE__ */new i32([\n 0, 0, 0, 0, 16843009, 50528770, 134678020, 202050057, 269422093\n])).buffer, 0, 36);\n// literal length baseline\nvar llbl = /*#__PURE__ */ b2bl(llb, 0);\n// match length bits\nvar mlb = /*#__PURE__ */ new u8(( /*#__PURE__ */new i32([\n 0, 0, 0, 0, 0, 0, 0, 0, 16843009, 50528770, 117769220, 185207048, 252579084, 16\n])).buffer, 0, 53);\n// match length baseline\nvar mlbl = /*#__PURE__ */ b2bl(mlb, 3);\n// decode huffman stream\nvar dhu = function (dat, out, hu) {\n var len = dat.length, ss = out.length, lb = dat[len - 1], msk = (1 << hu.b) - 1, eb = -hu.b;\n if (!lb)\n err(0);\n var st = 0, btr = hu.b, pos = (len << 3) - 8 + msb(lb) - btr, i = -1;\n for (; pos > eb && i < ss;) {\n var cbt = pos >> 3;\n var val = (dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (pos & 7);\n st = ((st << btr) | val) & msk;\n out[++i] = hu.s[st];\n pos -= (btr = hu.n[st]);\n }\n if (pos != eb || i + 1 != ss)\n err(0);\n};\n// decode huffman stream 4x\n// TODO: use workers to parallelize\nvar dhu4 = function (dat, out, hu) {\n var bt = 6;\n var ss = out.length, sz1 = (ss + 3) >> 2, sz2 = sz1 << 1, sz3 = sz1 + sz2;\n dhu(dat.subarray(bt, bt += dat[0] | (dat[1] << 8)), out.subarray(0, sz1), hu);\n dhu(dat.subarray(bt, bt += dat[2] | (dat[3] << 8)), out.subarray(sz1, sz2), hu);\n dhu(dat.subarray(bt, bt += dat[4] | (dat[5] << 8)), out.subarray(sz2, sz3), hu);\n dhu(dat.subarray(bt), out.subarray(sz3), hu);\n};\n// read Zstandard block\nvar rzb = function (dat, st, out) {\n var _a;\n var bt = st.b;\n // byte 0 block type\n var b0 = dat[bt], btype = (b0 >> 1) & 3;\n st.l = b0 & 1;\n var sz = (b0 >> 3) | (dat[bt + 1] << 5) | (dat[bt + 2] << 13);\n // end byte for block\n var ebt = (bt += 3) + sz;\n if (btype == 1) {\n if (bt >= dat.length)\n return;\n st.b = bt + 1;\n if (out) {\n fill(out, dat[bt], st.y, st.y += sz);\n return out;\n }\n return fill(new u8(sz), dat[bt]);\n }\n if (ebt > dat.length)\n return;\n if (btype == 0) {\n st.b = ebt;\n if (out) {\n out.set(dat.subarray(bt, ebt), st.y);\n st.y += sz;\n return out;\n }\n return slc(dat, bt, ebt);\n }\n if (btype == 2) {\n // byte 3 lit btype size format\n var b3 = dat[bt], lbt = b3 & 3, sf = (b3 >> 2) & 3;\n // lit src size lit cmp sz 4 streams\n var lss = b3 >> 4, lcs = 0, s4 = 0;\n if (lbt < 2) {\n if (sf & 1)\n lss |= (dat[++bt] << 4) | ((sf & 2) && (dat[++bt] << 12));\n else\n lss = b3 >> 3;\n }\n else {\n s4 = sf;\n if (sf < 2)\n lss |= ((dat[++bt] & 63) << 4), lcs = (dat[bt] >> 6) | (dat[++bt] << 2);\n else if (sf == 2)\n lss |= (dat[++bt] << 4) | ((dat[++bt] & 3) << 12), lcs = (dat[bt] >> 2) | (dat[++bt] << 6);\n else\n lss |= (dat[++bt] << 4) | ((dat[++bt] & 63) << 12), lcs = (dat[bt] >> 6) | (dat[++bt] << 2) | (dat[++bt] << 10);\n }\n ++bt;\n // add literals to end - can never overlap with backreferences because unused literals always appended\n var buf = out ? out.subarray(st.y, st.y + st.m) : new u8(st.m);\n // starting point for literals\n var spl = buf.length - lss;\n if (lbt == 0)\n buf.set(dat.subarray(bt, bt += lss), spl);\n else if (lbt == 1)\n fill(buf, dat[bt++], spl);\n else {\n // huffman table\n var hu = st.h;\n if (lbt == 2) {\n var hud = rhu(dat, bt);\n // subtract description length\n lcs += bt - (bt = hud[0]);\n st.h = hu = hud[1];\n }\n else if (!hu)\n err(0);\n (s4 ? dhu4 : dhu)(dat.subarray(bt, bt += lcs), buf.subarray(spl), hu);\n }\n // num sequences\n var ns = dat[bt++];\n if (ns) {\n if (ns == 255)\n ns = (dat[bt++] | (dat[bt++] << 8)) + 0x7F00;\n else if (ns > 127)\n ns = ((ns - 128) << 8) | dat[bt++];\n // symbol compression modes\n var scm = dat[bt++];\n if (scm & 3)\n err(0);\n var dts = [dmlt, doct, dllt];\n for (var i = 2; i > -1; --i) {\n var md = (scm >> ((i << 1) + 2)) & 3;\n if (md == 1) {\n // rle buf\n var rbuf = new u8([0, 0, dat[bt++]]);\n dts[i] = {\n s: rbuf.subarray(2, 3),\n n: rbuf.subarray(0, 1),\n t: new u16(rbuf.buffer, 0, 1),\n b: 0\n };\n }\n else if (md == 2) {\n // accuracy log 8 for offsets, 9 for others\n _a = rfse(dat, bt, 9 - (i & 1)), bt = _a[0], dts[i] = _a[1];\n }\n else if (md == 3) {\n if (!st.t)\n err(0);\n dts[i] = st.t[i];\n }\n }\n var _b = st.t = dts, mlt = _b[0], oct = _b[1], llt = _b[2];\n var lb = dat[ebt - 1];\n if (!lb)\n err(0);\n var spos = (ebt << 3) - 8 + msb(lb) - llt.b, cbt = spos >> 3, oubt = 0;\n var lst = ((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << llt.b) - 1);\n cbt = (spos -= oct.b) >> 3;\n var ost = ((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << oct.b) - 1);\n cbt = (spos -= mlt.b) >> 3;\n var mst = ((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << mlt.b) - 1);\n for (++ns; --ns;) {\n var llc = llt.s[lst];\n var lbtr = llt.n[lst];\n var mlc = mlt.s[mst];\n var mbtr = mlt.n[mst];\n var ofc = oct.s[ost];\n var obtr = oct.n[ost];\n cbt = (spos -= ofc) >> 3;\n var ofp = 1 << ofc;\n var off = ofp + (((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16) | (dat[cbt + 3] << 24)) >>> (spos & 7)) & (ofp - 1));\n cbt = (spos -= mlb[mlc]) >> 3;\n var ml = mlbl[mlc] + (((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (spos & 7)) & ((1 << mlb[mlc]) - 1));\n cbt = (spos -= llb[llc]) >> 3;\n var ll = llbl[llc] + (((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (spos & 7)) & ((1 << llb[llc]) - 1));\n cbt = (spos -= lbtr) >> 3;\n lst = llt.t[lst] + (((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << lbtr) - 1));\n cbt = (spos -= mbtr) >> 3;\n mst = mlt.t[mst] + (((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << mbtr) - 1));\n cbt = (spos -= obtr) >> 3;\n ost = oct.t[ost] + (((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << obtr) - 1));\n if (off > 3) {\n st.o[2] = st.o[1];\n st.o[1] = st.o[0];\n st.o[0] = off -= 3;\n }\n else {\n var idx = off - (ll != 0);\n if (idx) {\n off = idx == 3 ? st.o[0] - 1 : st.o[idx];\n if (idx > 1)\n st.o[2] = st.o[1];\n st.o[1] = st.o[0];\n st.o[0] = off;\n }\n else\n off = st.o[0];\n }\n for (var i = 0; i < ll; ++i) {\n buf[oubt + i] = buf[spl + i];\n }\n oubt += ll, spl += ll;\n var stin = oubt - off;\n if (stin < 0) {\n var len = -stin;\n var bs = st.e + stin;\n if (len > ml)\n len = ml;\n for (var i = 0; i < len; ++i) {\n buf[oubt + i] = st.w[bs + i];\n }\n oubt += len, ml -= len, stin = 0;\n }\n for (var i = 0; i < ml; ++i) {\n buf[oubt + i] = buf[stin + i];\n }\n oubt += ml;\n }\n if (oubt != spl) {\n while (spl < buf.length) {\n buf[oubt++] = buf[spl++];\n }\n }\n else\n oubt = buf.length;\n if (out)\n st.y += oubt;\n else\n buf = slc(buf, 0, oubt);\n }\n else if (out) {\n st.y += lss;\n if (spl) {\n for (var i = 0; i < lss; ++i) {\n buf[i] = buf[spl + i];\n }\n }\n }\n else if (spl)\n buf = slc(buf, spl);\n st.b = ebt;\n return buf;\n }\n err(2);\n};\n// concat\nvar cct = function (bufs, ol) {\n if (bufs.length == 1)\n return bufs[0];\n var buf = new u8(ol);\n for (var i = 0, b = 0; i < bufs.length; ++i) {\n var chk = bufs[i];\n buf.set(chk, b);\n b += chk.length;\n }\n return buf;\n};\n/**\n * Decompresses Zstandard data\n * @param dat The input data\n * @param buf The output buffer. If unspecified, the function will allocate\n * exactly enough memory to fit the decompressed data. If your\n * data has multiple frames and you know the output size, specifying\n * it will yield better performance.\n * @returns The decompressed data\n */\nexport function decompress(dat, buf) {\n var bufs = [], nb = +!buf;\n var bt = 0, ol = 0;\n for (; dat.length;) {\n var st = rzfh(dat, nb || buf);\n if (typeof st == 'object') {\n if (nb) {\n buf = null;\n if (st.w.length == st.u) {\n bufs.push(buf = st.w);\n ol += st.u;\n }\n }\n else {\n bufs.push(buf);\n st.e = 0;\n }\n for (; !st.l;) {\n var blk = rzb(dat, st, buf);\n if (!blk)\n err(5);\n if (buf)\n st.e = st.y;\n else {\n bufs.push(blk);\n ol += blk.length;\n cpw(st.w, 0, blk.length);\n st.w.set(blk, st.w.length - blk.length);\n }\n }\n bt = st.b + (st.c * 4);\n }\n else\n bt = st;\n dat = dat.subarray(bt);\n }\n return cct(bufs, ol);\n}\n/**\n * Decompressor for Zstandard streamed data\n */\nvar Decompress = /*#__PURE__*/ (function () {\n /**\n * Creates a Zstandard decompressor\n * @param ondata The handler for stream data\n */\n function Decompress(ondata) {\n this.ondata = ondata;\n this.c = [];\n this.l = 0;\n this.z = 0;\n }\n /**\n * Pushes data to be decompressed\n * @param chunk The chunk of data to push\n * @param final Whether or not this is the last chunk in the stream\n */\n Decompress.prototype.push = function (chunk, final) {\n if (typeof this.s == 'number') {\n var sub = Math.min(chunk.length, this.s);\n chunk = chunk.subarray(sub);\n this.s -= sub;\n }\n var sl = chunk.length;\n var ncs = sl + this.l;\n if (!this.s) {\n if (final) {\n if (!ncs) {\n this.ondata(new u8(0), true);\n return;\n }\n // min for frame + one block\n if (ncs < 5)\n err(5);\n }\n else if (ncs < 18) {\n this.c.push(chunk);\n this.l = ncs;\n return;\n }\n if (this.l) {\n this.c.push(chunk);\n chunk = cct(this.c, ncs);\n this.c = [];\n this.l = 0;\n }\n if (typeof (this.s = rzfh(chunk)) == 'number')\n return this.push(chunk, final);\n }\n if (typeof this.s != 'number') {\n if (ncs < (this.z || 3)) {\n if (final)\n err(5);\n this.c.push(chunk);\n this.l = ncs;\n return;\n }\n if (this.l) {\n this.c.push(chunk);\n chunk = cct(this.c, ncs);\n this.c = [];\n this.l = 0;\n }\n if (!this.z && ncs < (this.z = (chunk[this.s.b] & 2) ? 4 : 3 + ((chunk[this.s.b] >> 3) | (chunk[this.s.b + 1] << 5) | (chunk[this.s.b + 2] << 13)))) {\n if (final)\n err(5);\n this.c.push(chunk);\n this.l = ncs;\n return;\n }\n else\n this.z = 0;\n for (;;) {\n var blk = rzb(chunk, this.s);\n if (!blk) {\n if (final)\n err(5);\n var adc = chunk.subarray(this.s.b);\n this.s.b = 0;\n this.c.push(adc), this.l += adc.length;\n return;\n }\n else {\n this.ondata(blk, false);\n cpw(this.s.w, 0, blk.length);\n this.s.w.set(blk, this.s.w.length - blk.length);\n }\n if (this.s.l) {\n var rest = chunk.subarray(this.s.b);\n this.s = this.s.c * 4;\n this.push(rest, final);\n return;\n }\n }\n }\n else if (final)\n err(5);\n };\n return Decompress;\n}());\nexport { Decompress };\n","// Growable little/big-endian byte buffer primitives for the brdb codecs.\n// msgpack multi-byte values are big-endian; brdb flat arrays are little-endian.\n\nexport class ByteWriter {\n private buf = new Uint8Array(256);\n private view = new DataView(this.buf.buffer);\n private len = 0;\n\n private ensure(n: number) {\n if (this.len + n <= this.buf.length) return;\n let size = this.buf.length * 2;\n while (size < this.len + n) size *= 2;\n const next = new Uint8Array(size);\n next.set(this.buf.subarray(0, this.len));\n this.buf = next;\n this.view = new DataView(next.buffer);\n }\n\n get length(): number {\n return this.len;\n }\n\n u8(v: number) {\n this.ensure(1);\n this.buf[this.len++] = v & 0xff;\n }\n\n i8(v: number) {\n this.ensure(1);\n this.view.setInt8(this.len, v);\n this.len += 1;\n }\n\n bytes(v: Uint8Array | number[]) {\n const arr = v instanceof Uint8Array ? v : Uint8Array.from(v);\n this.ensure(arr.length);\n this.buf.set(arr, this.len);\n this.len += arr.length;\n }\n\n u16be(v: number) {\n this.ensure(2);\n this.view.setUint16(this.len, v, false);\n this.len += 2;\n }\n u32be(v: number) {\n this.ensure(4);\n this.view.setUint32(this.len, v, false);\n this.len += 4;\n }\n u64be(v: bigint) {\n this.ensure(8);\n this.view.setBigUint64(this.len, v, false);\n this.len += 8;\n }\n i16be(v: number) {\n this.ensure(2);\n this.view.setInt16(this.len, v, false);\n this.len += 2;\n }\n i32be(v: number) {\n this.ensure(4);\n this.view.setInt32(this.len, v, false);\n this.len += 4;\n }\n i64be(v: bigint) {\n this.ensure(8);\n this.view.setBigInt64(this.len, v, false);\n this.len += 8;\n }\n f32be(v: number) {\n this.ensure(4);\n this.view.setFloat32(this.len, v, false);\n this.len += 4;\n }\n f64be(v: number) {\n this.ensure(8);\n this.view.setFloat64(this.len, v, false);\n this.len += 8;\n }\n\n u16le(v: number) {\n this.ensure(2);\n this.view.setUint16(this.len, v, true);\n this.len += 2;\n }\n u32le(v: number) {\n this.ensure(4);\n this.view.setUint32(this.len, v, true);\n this.len += 4;\n }\n u64le(v: bigint) {\n this.ensure(8);\n this.view.setBigUint64(this.len, v, true);\n this.len += 8;\n }\n i16le(v: number) {\n this.ensure(2);\n this.view.setInt16(this.len, v, true);\n this.len += 2;\n }\n i32le(v: number) {\n this.ensure(4);\n this.view.setInt32(this.len, v, true);\n this.len += 4;\n }\n i64le(v: bigint) {\n this.ensure(8);\n this.view.setBigInt64(this.len, v, true);\n this.len += 8;\n }\n f32le(v: number) {\n this.ensure(4);\n this.view.setFloat32(this.len, v, true);\n this.len += 4;\n }\n f64le(v: number) {\n this.ensure(8);\n this.view.setFloat64(this.len, v, true);\n this.len += 8;\n }\n\n toBytes(): Uint8Array {\n return this.buf.slice(0, this.len);\n }\n}\n\nexport class ByteReader {\n private view: DataView;\n offset: number;\n\n constructor(public data: Uint8Array, offset = 0) {\n this.view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n this.offset = offset;\n }\n\n get remaining(): number {\n return this.data.length - this.offset;\n }\n\n private need(n: number) {\n if (this.offset + n > this.data.length)\n throw new RangeError(\n `brdb: unexpected end of data (need ${n} bytes at offset ${this.offset} of ${this.data.length})`\n );\n }\n\n peek(): number {\n this.need(1);\n return this.data[this.offset];\n }\n\n u8(): number {\n this.need(1);\n return this.data[this.offset++];\n }\n i8(): number {\n this.need(1);\n return this.view.getInt8(this.offset++);\n }\n\n bytes(n: number): Uint8Array {\n this.need(n);\n const out = this.data.subarray(this.offset, this.offset + n);\n this.offset += n;\n return out;\n }\n\n u16be(): number {\n this.need(2);\n const v = this.view.getUint16(this.offset, false);\n this.offset += 2;\n return v;\n }\n u32be(): number {\n this.need(4);\n const v = this.view.getUint32(this.offset, false);\n this.offset += 4;\n return v;\n }\n u64be(): bigint {\n this.need(8);\n const v = this.view.getBigUint64(this.offset, false);\n this.offset += 8;\n return v;\n }\n i16be(): number {\n this.need(2);\n const v = this.view.getInt16(this.offset, false);\n this.offset += 2;\n return v;\n }\n i32be(): number {\n this.need(4);\n const v = this.view.getInt32(this.offset, false);\n this.offset += 4;\n return v;\n }\n i64be(): bigint {\n this.need(8);\n const v = this.view.getBigInt64(this.offset, false);\n this.offset += 8;\n return v;\n }\n f32be(): number {\n this.need(4);\n const v = this.view.getFloat32(this.offset, false);\n this.offset += 4;\n return v;\n }\n f64be(): number {\n this.need(8);\n const v = this.view.getFloat64(this.offset, false);\n this.offset += 8;\n return v;\n }\n\n u16le(): number {\n this.need(2);\n const v = this.view.getUint16(this.offset, true);\n this.offset += 2;\n return v;\n }\n u32le(): number {\n this.need(4);\n const v = this.view.getUint32(this.offset, true);\n this.offset += 4;\n return v;\n }\n u64le(): bigint {\n this.need(8);\n const v = this.view.getBigUint64(this.offset, true);\n this.offset += 8;\n return v;\n }\n i16le(): number {\n this.need(2);\n const v = this.view.getInt16(this.offset, true);\n this.offset += 2;\n return v;\n }\n i32le(): number {\n this.need(4);\n const v = this.view.getInt32(this.offset, true);\n this.offset += 4;\n return v;\n }\n i64le(): bigint {\n this.need(8);\n const v = this.view.getBigInt64(this.offset, true);\n this.offset += 8;\n return v;\n }\n f32le(): number {\n this.need(4);\n const v = this.view.getFloat32(this.offset, true);\n this.offset += 4;\n return v;\n }\n f64le(): number {\n this.need(8);\n const v = this.view.getFloat64(this.offset, true);\n this.offset += 8;\n return v;\n }\n}\n","// .brz container serializer/deserializer, byte-compatible with the game's\n// archive format.\nimport { blake3 } from '@noble/hashes/blake3.js';\nimport { bytesToHex } from '@noble/hashes/utils.js';\nimport { decompress as zstdDecompress } from 'fzstd';\nimport { ByteReader, ByteWriter } from './bytes';\nimport type { FoundFile, WorldFs } from './fs';\nimport { PendingEntry, PendingNode } from './pending';\n\nexport type Compressor = (data: Uint8Array) => Uint8Array | null;\n\nexport interface BrzContainerOptions {\n /** zstd compressor (e.g. node:zlib zstdCompressSync); return null to skip.\n * Omitted -> every blob stored raw (still a valid archive, and what the\n * byte-parity gates compare against). */\n compress?: Compressor;\n}\n\nexport function writeBrzContainer(\n root: PendingEntry[],\n options: BrzContainerOptions = {}\n): Uint8Array {\n interface QueueItem {\n parentId: number;\n name: string;\n node: PendingNode;\n }\n // BFS; ids are assigned when an entry is dequeued\n const queue: QueueItem[] = root.map(([name, node]) => ({\n parentId: -1,\n name,\n node,\n }));\n\n const folderParentIds: number[] = [];\n const folderNames: string[] = [];\n const fileParentIds: number[] = [];\n const fileContentIds: number[] = [];\n const fileNames: string[] = [];\n const methods: number[] = [];\n const sizesUncompressed: number[] = [];\n const sizesCompressed: number[] = [];\n const blobHashes: Uint8Array[] = [];\n const blobChunks: Uint8Array[] = [];\n const hashToBlobId = new Map<string, number>();\n\n for (let head = 0; head < queue.length; head++) {\n const { parentId, name, node } = queue[head];\n if (node.type === 'folder') {\n const folderId = folderParentIds.length;\n folderParentIds.push(parentId);\n folderNames.push(name);\n for (const [childName, child] of node.children)\n queue.push({ parentId: folderId, name: childName, node: child });\n } else {\n fileParentIds.push(parentId);\n fileNames.push(name);\n const content = node.content;\n let contentId: number;\n if (content.length === 0) {\n contentId = -1; // empty file: no blob\n } else {\n const hash = blake3(content);\n const hex = bytesToHex(hash);\n const existing = hashToBlobId.get(hex);\n if (existing !== undefined) {\n contentId = existing; // dedup by hash of uncompressed content\n } else {\n contentId = blobHashes.length;\n hashToBlobId.set(hex, contentId);\n blobHashes.push(hash);\n sizesUncompressed.push(content.length);\n const compressed = options.compress\n ? options.compress(content)\n : null;\n if (compressed && compressed.length < content.length) {\n methods.push(1); // GenericZstd, only when strictly smaller\n sizesCompressed.push(compressed.length);\n blobChunks.push(compressed);\n } else {\n methods.push(0);\n sizesCompressed.push(content.length);\n blobChunks.push(content);\n }\n }\n }\n fileContentIds.push(contentId);\n }\n }\n\n const utf8 = new TextEncoder();\n const iw = new ByteWriter();\n iw.i32le(folderNames.length);\n iw.i32le(fileNames.length);\n iw.i32le(blobHashes.length);\n for (const id of folderParentIds) iw.i32le(id);\n const folderNameBytes = folderNames.map(n => utf8.encode(n));\n for (const n of folderNameBytes) iw.u16le(n.length);\n for (const n of folderNameBytes) iw.bytes(n);\n for (const id of fileParentIds) iw.i32le(id);\n for (const id of fileContentIds) iw.i32le(id);\n const fileNameBytes = fileNames.map(n => utf8.encode(n));\n for (const n of fileNameBytes) iw.u16le(n.length);\n for (const n of fileNameBytes) iw.bytes(n);\n for (const m of methods) iw.u8(m);\n for (const s of sizesUncompressed) iw.i32le(s);\n for (const s of sizesCompressed) iw.i32le(s);\n for (const h of blobHashes) iw.bytes(h);\n const index = iw.toBytes();\n\n const out = new ByteWriter();\n out.bytes([0x42, 0x52, 0x5a]); // \"BRZ\"\n out.u8(0); // version: Initial\n // The index is always stored uncompressed — the format's reference writer\n // never compresses it, and byte parity requires matching that. Readers\n // still accept a compressed index.\n out.u8(0); // index_method: None\n out.i32le(index.length);\n out.i32le(index.length); // compressed size mirrors uncompressed when raw\n out.bytes(blake3(index)); // BLAKE3 of the uncompressed index\n out.bytes(index);\n for (const chunk of blobChunks) out.bytes(chunk);\n return out.toBytes();\n}\n\ninterface BlobInfo {\n method: number;\n sizeUncompressed: number;\n sizeCompressed: number;\n hash: Uint8Array;\n start: number;\n end: number;\n}\n\nexport class BrzReader implements WorldFs {\n private folderLut = new Map<string, number>();\n private fileLut = new Map<string, number>();\n private pathCache: string[] | null = null;\n\n private constructor(\n readonly folderParentIds: number[],\n readonly folderNames: string[],\n readonly fileParentIds: number[],\n readonly fileContentIds: number[],\n readonly fileNames: string[],\n private blobs: BlobInfo[],\n private blobData: Uint8Array\n ) {\n for (let i = 0; i < folderNames.length; i++)\n this.folderLut.set(`${folderParentIds[i]} ${folderNames[i]}`, i);\n for (let i = 0; i < fileNames.length; i++)\n this.fileLut.set(`${fileParentIds[i]} ${fileNames[i]}`, i);\n }\n\n static from(data: Uint8Array): BrzReader {\n const r = new ByteReader(data);\n const magic = r.bytes(3);\n if (magic[0] !== 0x42 || magic[1] !== 0x52 || magic[2] !== 0x5a)\n throw new Error('brdb: invalid .brz magic');\n const version = r.u8();\n if (version !== 0)\n throw new Error(`brdb: unsupported .brz version ${version}`);\n const method = r.u8();\n if (method !== 0 && method !== 1)\n throw new Error(`brdb: invalid index compression method ${method}`);\n const sizeUncompressed = r.i32le();\n const sizeCompressed = r.i32le();\n if (sizeUncompressed < 0 || sizeCompressed < 0)\n throw new Error('brdb: negative index size');\n const headerHash = r.bytes(32);\n let index: Uint8Array;\n if (method === 0) {\n index = r.bytes(sizeUncompressed);\n } else {\n index = zstdDecompress(\n r.bytes(sizeCompressed),\n new Uint8Array(sizeUncompressed)\n );\n if (index.length !== sizeUncompressed)\n throw new Error('brdb: index decompressed to the wrong size');\n }\n if (bytesToHex(blake3(index)) !== bytesToHex(headerHash))\n throw new Error('brdb: index hash mismatch');\n const blobData = r.bytes(r.remaining);\n\n const ir = new ByteReader(index);\n const numFolders = ir.i32le();\n const numFiles = ir.i32le();\n const numBlobs = ir.i32le();\n if (numFolders < 0 || numFiles < 0 || numBlobs < 0)\n throw new Error('brdb: negative index count');\n const readArray = <T>(n: number, fn: () => T): T[] =>\n Array.from({ length: n }, fn);\n const folderParentIds = readArray(numFolders, () => ir.i32le());\n const folderNameLens = readArray(numFolders, () => ir.u16le());\n const utf8 = new TextDecoder('utf-8', { fatal: true });\n const folderNames = folderNameLens.map(len => utf8.decode(ir.bytes(len)));\n const fileParentIds = readArray(numFiles, () => ir.i32le());\n const fileContentIds = readArray(numFiles, () => ir.i32le());\n const fileNameLens = readArray(numFiles, () => ir.u16le());\n const fileNames = fileNameLens.map(len => utf8.decode(ir.bytes(len)));\n const methods = readArray(numBlobs, () => ir.u8());\n const sizesUncompressed = readArray(numBlobs, () => ir.i32le());\n const sizesCompressed = readArray(numBlobs, () => ir.i32le());\n const hashes = readArray(numBlobs, () => ir.bytes(32).slice());\n if (ir.remaining !== 0) throw new Error('brdb: trailing bytes in index');\n\n // blob byte ranges are not stored: reconstruct by accumulating on-disk sizes\n const blobs: BlobInfo[] = [];\n let offset = 0;\n for (let i = 0; i < numBlobs; i++) {\n if (sizesUncompressed[i] < 0 || sizesCompressed[i] < 0)\n throw new Error('brdb: negative blob size');\n const length =\n methods[i] === 0 ? sizesUncompressed[i] : sizesCompressed[i];\n blobs.push({\n method: methods[i],\n sizeUncompressed: sizesUncompressed[i],\n sizeCompressed: sizesCompressed[i],\n hash: hashes[i],\n start: offset,\n end: offset + length,\n });\n offset += length;\n }\n return new BrzReader(\n folderParentIds,\n folderNames,\n fileParentIds,\n fileContentIds,\n fileNames,\n blobs,\n blobData\n );\n }\n\n /** parentId -1 = root */\n findFolder(parentId: number, name: string): number | null {\n return this.folderLut.get(`${parentId} ${name}`) ?? null;\n }\n\n findFile(parentId: number, name: string): { contentId: number } | null {\n const i = this.fileLut.get(`${parentId} ${name}`);\n return i === undefined ? null : { contentId: this.fileContentIds[i] };\n }\n\n private folderIdOf(path: string): number | null {\n if (path === '') return -1;\n let id = -1;\n for (const part of path.split('/')) {\n const next = this.findFolder(id, part);\n if (next === null) return null;\n id = next;\n }\n return id;\n }\n\n /** Names of the subfolders of a folder path ('' = root), in id order.\n * A missing path yields []. */\n childFolders(path: string): string[] {\n const parent = this.folderIdOf(path);\n if (parent === null) return [];\n const out: string[] = [];\n for (let i = 0; i < this.folderNames.length; i++)\n if (this.folderParentIds[i] === parent) out.push(this.folderNames[i]);\n return out;\n }\n\n /** Names of the files directly inside a folder path ('' = root), in id\n * order. A missing path yields []. */\n childFiles(path: string): string[] {\n const parent = this.folderIdOf(path);\n if (parent === null) return [];\n const out: string[] = [];\n for (let i = 0; i < this.fileNames.length; i++)\n if (this.fileParentIds[i] === parent) out.push(this.fileNames[i]);\n return out;\n }\n\n blobMethod(contentId: number): number {\n return this.blob(contentId).method;\n }\n\n private blob(contentId: number): BlobInfo {\n if (contentId < 0 || contentId >= this.blobs.length)\n throw new Error(`brdb: blob ${contentId} not found`);\n return this.blobs[contentId];\n }\n\n /** Decompress (if needed) and verify size + BLAKE3. */\n readBlob(contentId: number): Uint8Array {\n const blob = this.blob(contentId);\n const raw = this.blobData.subarray(blob.start, blob.end);\n let content: Uint8Array;\n if (blob.method === 0) {\n content = raw;\n } else {\n if (raw.length !== blob.sizeCompressed)\n throw new Error('brdb: blob compressed size mismatch');\n content = zstdDecompress(raw, new Uint8Array(blob.sizeUncompressed));\n }\n if (content.length !== blob.sizeUncompressed)\n throw new Error('brdb: blob uncompressed size mismatch');\n if (bytesToHex(blake3(content)) !== bytesToHex(blob.hash))\n throw new Error('brdb: blob hash mismatch');\n return content;\n }\n\n /** '/'-separated path from the root. An empty file (contentId -1) returns\n * an empty buffer (the reference reader treats empty files as unfindable\n * — deliberate, documented deviation for usability). */\n readFile(path: string): Uint8Array {\n if (path.startsWith('/'))\n throw new Error('brdb: absolute paths not allowed');\n const parts = path.split('/');\n let parentId = -1;\n for (let i = 0; i < parts.length - 1; i++) {\n const next = this.findFolder(parentId, parts[i]);\n if (next === null)\n throw new Error(`brdb: folder not found: ${parts[i]} in ${path}`);\n parentId = next;\n }\n const found = this.findFile(parentId, parts[parts.length - 1]);\n if (!found) throw new Error(`brdb: file not found: ${path}`);\n return found.contentId === -1\n ? new Uint8Array(0)\n : this.readBlob(found.contentId);\n }\n\n /** Path lookup returning the WorldFs FoundFile shape. createdAt is always\n * 0: a .brz archive holds exactly one revision. */\n findFileByPath(path: string): FoundFile | null {\n if (path.startsWith('/'))\n throw new Error('brdb: absolute paths not allowed');\n const slash = path.lastIndexOf('/');\n const parentId = this.folderIdOf(slash === -1 ? '' : path.slice(0, slash));\n if (parentId === null) return null;\n const found = this.findFile(parentId, path.slice(slash + 1));\n return found === null ? null : { contentId: found.contentId, createdAt: 0 };\n }\n\n findFileByPathAtRevision(path: string, _date: number): FoundFile | null {\n return this.findFileByPath(path);\n }\n\n /** All file paths in file-id (BFS) order. */\n listPaths(): string[] {\n if (this.pathCache) return this.pathCache;\n const folderPaths: string[] = [];\n for (let i = 0; i < this.folderNames.length; i++) {\n const parent = this.folderParentIds[i];\n // parents always precede children in BFS id order\n folderPaths.push(\n parent === -1\n ? this.folderNames[i]\n : `${folderPaths[parent]}/${this.folderNames[i]}`\n );\n }\n this.pathCache = this.fileNames.map((name, i) => {\n const parent = this.fileParentIds[i];\n return parent === -1 ? name : `${folderPaths[parent]}/${name}`;\n });\n return this.pathCache;\n }\n}\n","// GENERATED by scripts/syncBrdbData.mjs — do not edit by hand.\n// Regenerate with: just sync-brdb-data\n\nexport const BASIC_BRICK_ASSETS: readonly string[] = [\n 'B_1x1_Reroute_Node',\n 'B_1x1_Gate_AND',\n 'B_1x1_Gate_OR',\n 'B_1x1_Gate_XOR',\n 'B_1x1_Gate_NAND',\n 'B_1x1_Gate_NOR',\n 'B_1x1_NOT_Gate',\n 'B_1x1_Gate_AND_Bitwise',\n 'B_1x1_Gate_OR_Bitwise',\n 'B_1x1_Gate_XOR_Bitwise',\n 'B_1x1_Gate_NAND_Bitwise',\n 'B_1x1_Gate_NOR_Bitwise',\n 'B_1x1_Gate_NOT_Bitwise',\n 'B_1x1_Gate_ShiftLeft_Bitwise',\n 'B_1x1_Gate_ShiftRight_Bitwise',\n 'B_1x1_Gate_Add',\n 'B_1x1_Gate_Subtract',\n 'B_1x1_Gate_Multiply',\n 'B_1x1_Gate_ModFloored',\n 'B_1x1_Gate_Mod',\n 'B_1x1_Gate_Divide',\n 'B_1x1_Gate_Equal',\n 'B_1x1_Gate_NotEqual',\n 'B_1x1_Gate_LessThan',\n 'B_1x1_Gate_LessThanEqual',\n 'B_1x1_Gate_GreaterThan',\n 'B_1x1_Gate_GreaterThanEqual',\n 'B_1x1_Gate_Ceiling',\n 'B_1x1_Gate_Floor',\n 'B_1x1_Gate_Constant',\n 'B_1x1_Gate_Blend',\n 'B_1x1_Gate_EdgeDetector',\n 'B_1x1_Gate_Timer',\n 'B_1x1_Gate_Timer_Tick',\n 'B_1x1_Microchip',\n 'B_1x1_Gate_MicrochipInput',\n 'B_1x1_Gate_MicrochipOutput',\n 'B_2x2_Overhang',\n 'B_1x4_Brick_Side',\n 'B_1x2_Overhang',\n 'B_1x1_Brick_Side_Lip',\n 'B_1x1_Brick_Side',\n 'B_Jar',\n 'B_Chalice',\n 'B_Cauldron',\n 'B_Small_Flower',\n 'B_Pine_Tree',\n 'B_Leaf_Bush',\n 'B_Hedge_1x4',\n 'B_Hedge_1x2',\n 'B_Hedge_1x1_Corner',\n 'B_Hedge_1x1',\n 'B_Flower',\n 'B_Fern',\n 'B_Branch',\n 'B_2x4_Door_Frame',\n 'B_Turkey_Leg',\n 'B_Turkey_Body',\n 'B_Swirl_Plate',\n 'B_Sausage',\n 'B_Pumpkin_Carved',\n 'B_Pumpkin',\n 'B_Ladder',\n 'B_Inverted_Cone',\n 'B_Handle',\n 'B_Gravestone',\n 'B_Frog_Small',\n 'B_Frog',\n 'B_Flame',\n 'B_Coffin_Lid',\n 'B_Coffin',\n 'B_BoneStraight',\n 'B_Bone',\n 'B_1x1_Coin_Diagonal',\n 'B_1x1_Coin',\n 'B_Spoon',\n 'B_Fork',\n 'B_2x2_Corner',\n 'B_2x2f_Plate_Center_Inv',\n 'B_2x2f_Plate_Center',\n 'B_1x2f_Plate_Center_Inv',\n 'B_4x4_Round',\n 'B_2x2_Round',\n 'B_2x2F_Round',\n 'B_2x_Octo_T_Inv',\n 'B_2x_Octo_T',\n 'B_2x2F_Octo_Converter_Inv',\n 'B_2x2F_Octo_Converter',\n 'B_2x2F_Octo',\n 'B_8x8_Lattice_Plate',\n 'B_1x2_MetalIngot',\n 'B_1x1f_Tile_Corner',\n 'B_1x1f_Inverse_Tile_Corner',\n 'B_Rook',\n 'B_Queen',\n 'B_Pawn',\n 'B_Knight',\n 'B_King',\n 'B_Bishop',\n 'B_1x2f_Plate_Center',\n 'B_2x2_Cone',\n 'B_1x1_Round',\n 'B_1x1_Cone',\n 'B_1x1F_Round',\n 'B_2x_Octo_Cone',\n 'B_2x_Octo_90Deg_Inv',\n 'B_2x_Octo_90Deg',\n 'B_2x_Octo',\n 'B_1x_Octo_T_Inv',\n 'B_1x_Octo_T',\n 'B_1x_Octo_90Deg_Inv',\n 'B_1x_Octo_90Deg',\n 'B_1x_Octo',\n 'B_1x1F_Octo',\n 'B_2x2_Slipper',\n 'B_2x1_Slipper',\n 'B_Joint_Wheel_Micro',\n 'B_Joint_Wheel',\n 'B_Joint_Socket_Micro',\n 'B_Joint_Servo_Micro',\n 'B_Joint_Servo',\n 'B_Joint_Motor_Micro',\n 'B_Joint_Motor',\n 'B_Joint_Coupler',\n 'B_Joint_Bearing_Micro',\n 'B_Joint_Bearing',\n 'B_1x1_SoundEmitter',\n 'B_1x1_Gate_Teleport',\n 'B_1x1_Gate_RelativeTeleport',\n 'B_1x1_EntityGate_SetVelocity',\n 'B_1x1_EntityGate_SetLocationAndRotation',\n 'B_1x1_EntityGate_SetLocation',\n 'B_1x1_EntityGate_ReadBrickGrid',\n 'B_1x1_EntityGate_PlayAudioAt',\n 'B_1x1_EntityGate_AddVelocity',\n 'B_1x1_EntityGate_AddLocationAndRotation',\n 'B_1x1_CharacterGate_SetGravityDirection',\n 'B_Vehicle_Engine',\n 'B_Switch_Test',\n 'B_SpawnPoint',\n 'B_Seat',\n 'B_GoalPoint',\n 'B_DestinationPoint',\n 'B_CheckPoint',\n 'B_Button_Square',\n 'B_Button',\n 'B_Bot_Spawn_Point',\n 'B_2x2F_Target',\n 'B_2x2F_Speaker',\n 'B_1x1_Gate_WheelEngineSlim',\n 'B_1x1F_Speaker',\n 'B_1x1_Gate_AudioReference',\n 'B_1x1_Gate_Clock',\n 'B_1x1_Gate_DeltaTime',\n 'B_1x1_Gate_Exec_ArrayVar_Append',\n 'B_1x1_Gate_Exec_ArrayVar_Average',\n 'B_1x1_Gate_Exec_ArrayVar_Clear',\n 'B_1x1_Gate_Exec_ArrayVar_CopyFrom',\n 'B_1x1_Gate_Exec_ArrayVar_Fill',\n 'B_1x1_Gate_Exec_ArrayVar_Find',\n 'B_1x1_Gate_Exec_ArrayVar_Get',\n 'B_1x1_Gate_Exec_ArrayVar_GetLength',\n 'B_1x1_Gate_Exec_ArrayVar_Insert',\n 'B_1x1_Gate_Exec_ArrayVar_Max',\n 'B_1x1_Gate_Exec_ArrayVar_Min',\n 'B_1x1_Gate_Exec_ArrayVar_Pop',\n 'B_1x1_Gate_Exec_ArrayVar_Push',\n 'B_1x1_Gate_Exec_ArrayVar_RemoveAtIndex',\n 'B_1x1_Gate_Exec_ArrayVar_Resize',\n 'B_1x1_Gate_Exec_ArrayVar_Reverse',\n 'B_1x1_Gate_Exec_ArrayVar_SetAtIndex',\n 'B_1x1_Gate_Exec_ArrayVar_Shuffle',\n 'B_1x1_Gate_Exec_ArrayVar_Slice',\n 'B_1x1_Gate_Exec_ArrayVar_Sort',\n 'B_1x1_Gate_Exec_ArrayVar_Sum',\n 'B_1x1_Gate_Exec_ArrayVar_Swap',\n 'B_1x1_Gate_Exec_Branch',\n 'B_1x1_Gate_Exec_Character_GetAim',\n 'B_1x1_Gate_Exec_Character_GetDamage',\n 'B_1x1_Gate_Exec_Character_GetFromController',\n 'B_1x1_Gate_Exec_Character_IncDamage',\n 'B_1x1_Gate_Exec_Character_SetDamage',\n 'B_1x1_Gate_Exec_Character_SetInventoryEntry',\n 'B_1x1_Gate_Exec_Character_SetTempPermission',\n 'B_1x1_Gate_Exec_Character_ShowHint',\n 'B_1x1_Gate_Exec_ChatCommand',\n 'B_1x1_Gate_Exec_Controller_DisplayText',\n 'B_1x1_Gate_Exec_Controller_GetDisplayName',\n 'B_1x1_Gate_Exec_Controller_GetFromEntity',\n 'B_1x1_Gate_Exec_Controller_GetUserId',\n 'B_1x1_Gate_Exec_Controller_GetUserName',\n 'B_1x1_Gate_Exec_Controller_HasPermission',\n 'B_1x1_Gate_Exec_Controller_IsTrustedByBrickOwner',\n 'B_1x1_Gate_Exec_Controller_SetCanRespawn',\n 'B_1x1_Gate_Exec_Controller_ShowStatusMessage',\n 'B_1x1_Gate_Exec_Entity_AddLocationRotation',\n 'B_1x1_Gate_Exec_Entity_AddVelocity',\n 'B_1x1_Gate_Exec_Entity_GetAngularVelocity',\n 'B_1x1_Gate_Exec_Entity_GetLinearVelocity',\n 'B_1x1_Gate_Exec_Entity_GetLocation',\n 'B_1x1_Gate_Exec_Entity_GetLocationRotation',\n 'B_1x1_Gate_Exec_Entity_GetRotation',\n 'B_1x1_Gate_Exec_Entity_GetVelocity',\n 'B_1x1_Gate_Exec_Entity_PlayAudioAt',\n 'B_1x1_Gate_Exec_Entity_RelativeTeleport',\n 'B_1x1_Gate_Exec_Entity_SetAngularVelocity',\n 'B_1x1_Gate_Exec_Entity_SetFrozen',\n 'B_1x1_Gate_Exec_Entity_SetGravityDirection',\n 'B_1x1_Gate_Exec_Entity_SetLinearVelocity',\n 'B_1x1_Gate_Exec_Entity_SetLocation',\n 'B_1x1_Gate_Exec_Entity_SetLocationRotation',\n 'B_1x1_Gate_Exec_Entity_SetRotation',\n 'B_1x1_Gate_Exec_Entity_SetVelocity',\n 'B_1x1_Gate_Exec_Entity_Teleport',\n 'B_1x1_Gate_Exec_Gamemode_FillArrayFromPlayers',\n 'B_1x1_Gate_Exec_Gamemode_FillArrayFromTeamMembers',\n 'B_1x1_Gate_Exec_Gamemode_GetCurrentRound',\n 'B_1x1_Gate_Exec_Gamemode_GetLeaderboardValue',\n 'B_1x1_Gate_Exec_Gamemode_GetTeam',\n 'B_1x1_Gate_Exec_Gamemode_GetTeamByName',\n 'B_1x1_Gate_Exec_Gamemode_GetTeamLeaderboardValue',\n 'B_1x1_Gate_Exec_Gamemode_GetTeamName',\n 'B_1x1_Gate_Exec_Gamemode_IncrementLeaderboardValue',\n 'B_1x1_Gate_Exec_Gamemode_IncrementTeamLeaderboardValue',\n 'B_1x1_Gate_Exec_Gamemode_PlayerWins',\n 'B_1x1_Gate_Exec_Gamemode_SetLeaderboardValue',\n 'B_1x1_Gate_Exec_Gamemode_SetTeam',\n 'B_1x1_Gate_Exec_Gamemode_SetTeamLeaderboardValue',\n 'B_1x1_Gate_Exec_Gamemode_SetTeamPinned',\n 'B_1x1_Gate_Exec_Gamemode_TeamWins',\n 'B_1x1_Gate_Exec_PlayGlobalAudio',\n 'B_1x1_Gate_Exec_PrefabSpawner',\n 'B_1x1_Gate_Exec_PrintToConsole',\n 'B_1x1_Gate_Exec_Random',\n 'B_1x1_Gate_Exec_Sweep',\n 'B_1x1_Gate_Exec_Union',\n 'B_1x1_Gate_Exec_Var_Get',\n 'B_1x1_Gate_Exec_Var_Increment',\n 'B_1x1_Gate_Exec_Var_Set',\n 'B_1x1_Gate_Expr_BitwiseAND',\n 'B_1x1_Gate_Expr_BitwiseBitCount',\n 'B_1x1_Gate_Expr_BitwiseNAND',\n 'B_1x1_Gate_Expr_BitwiseNOR',\n 'B_1x1_Gate_Expr_BitwiseNOT',\n 'B_1x1_Gate_Expr_BitwiseOR',\n 'B_1x1_Gate_Expr_BitwiseShiftLeft',\n 'B_1x1_Gate_Expr_BitwiseShiftRight',\n 'B_1x1_Gate_Expr_BitwiseXOR',\n 'B_1x1_Gate_Expr_Ceil',\n 'B_1x1_Gate_Expr_CompareEqual',\n 'B_1x1_Gate_Expr_CompareGreater',\n 'B_1x1_Gate_Expr_CompareGreaterOrEqual',\n 'B_1x1_Gate_Expr_CompareLess',\n 'B_1x1_Gate_Expr_CompareLessOrEqual',\n 'B_1x1_Gate_Expr_CompareNotEqual',\n 'B_1x1_Gate_Expr_EdgeDetector',\n 'B_1x1_Gate_Expr_Floor',\n 'B_1x1_Gate_Expr_LogicalAND',\n 'B_1x1_Gate_Expr_LogicalNAND',\n 'B_1x1_Gate_Expr_LogicalNOR',\n 'B_1x1_Gate_Expr_LogicalNOT',\n 'B_1x1_Gate_Expr_LogicalOR',\n 'B_1x1_Gate_Expr_LogicalXOR',\n 'B_1x1_Gate_Expr_MakeColor',\n 'B_1x1_Gate_Expr_MakeVector',\n 'B_1x1_Gate_Expr_MathAbs',\n 'B_1x1_Gate_Expr_MathAcos',\n 'B_1x1_Gate_Expr_MathAcosh',\n 'B_1x1_Gate_Expr_MathAdd',\n 'B_1x1_Gate_Expr_MathAsin',\n 'B_1x1_Gate_Expr_MathAsinh',\n 'B_1x1_Gate_Expr_MathAtan',\n 'B_1x1_Gate_Expr_MathAtan2',\n 'B_1x1_Gate_Expr_MathAtanh',\n 'B_1x1_Gate_Expr_MathBlend',\n 'B_1x1_Gate_Expr_MathClamp',\n 'B_1x1_Gate_Expr_MathCos',\n 'B_1x1_Gate_Expr_MathCosh',\n 'B_1x1_Gate_Expr_MathDegreesToRadians',\n 'B_1x1_Gate_Expr_MathDivide',\n 'B_1x1_Gate_Expr_MathEasing',\n 'B_1x1_Gate_Expr_MathExp',\n 'B_1x1_Gate_Expr_MathLn',\n 'B_1x1_Gate_Expr_MathLogBase',\n 'B_1x1_Gate_Expr_MathMax',\n 'B_1x1_Gate_Expr_MathMin',\n 'B_1x1_Gate_Expr_MathModulo',\n 'B_1x1_Gate_Expr_MathModuloFloored',\n 'B_1x1_Gate_Expr_MathMultiply',\n 'B_1x1_Gate_Expr_MathNegate',\n 'B_1x1_Gate_Expr_MathPow',\n 'B_1x1_Gate_Expr_MathRadiansToDegrees',\n 'B_1x1_Gate_Expr_MathSign',\n 'B_1x1_Gate_Expr_MathSin',\n 'B_1x1_Gate_Expr_MathSinh',\n 'B_1x1_Gate_Expr_MathSqrt',\n 'B_1x1_Gate_Expr_MathSubtract',\n 'B_1x1_Gate_Expr_MathTan',\n 'B_1x1_Gate_Expr_MathTanh',\n 'B_1x1_Gate_Expr_NearlyEqual',\n 'B_1x1_Gate_Expr_Round',\n 'B_1x1_Gate_Expr_Select',\n 'B_1x1_Gate_Expr_SplitColor',\n 'B_1x1_Gate_Expr_SplitVector',\n 'B_1x1_Gate_Expr_String_Concatenate',\n 'B_1x1_Gate_Expr_String_Contains',\n 'B_1x1_Gate_Expr_String_EndsWith',\n 'B_1x1_Gate_Expr_String_Find',\n 'B_1x1_Gate_Expr_String_FormatText',\n 'B_1x1_Gate_Expr_String_Length',\n 'B_1x1_Gate_Expr_String_ParseInt',\n 'B_1x1_Gate_Expr_String_ParseNumber',\n 'B_1x1_Gate_Expr_String_Replace',\n 'B_1x1_Gate_Expr_String_Split',\n 'B_1x1_Gate_Expr_String_StartsWith',\n 'B_1x1_Gate_Expr_String_Substring',\n 'B_1x1_Gate_Expr_String_ToLower',\n 'B_1x1_Gate_Expr_String_ToUpper',\n 'B_1x1_Gate_Expr_String_Trim',\n 'B_1x1_Gate_Expr_Swap',\n 'B_1x1_Gate_Expr_VecCrossProduct',\n 'B_1x1_Gate_Expr_VecDistance',\n 'B_1x1_Gate_Expr_VecDistanceSquared',\n 'B_1x1_Gate_Expr_VecDotProduct',\n 'B_1x1_Gate_Expr_VecMagnitude',\n 'B_1x1_Gate_Expr_VecMagnitudeSquared',\n 'B_1x1_Gate_Expr_VecNormalize',\n 'B_1x1_Gate_Expr_VecRotationToDirection',\n 'B_1x1_Gate_Expr_VecScale',\n 'B_1x1_Gate_Fake_Gamemode_CharacterDiedEvent',\n 'B_1x1_Gate_Fake_Gamemode_CharacterSpawnedEvent',\n 'B_1x1_Gate_Fake_Gamemode_ControllerJoinedEvent',\n 'B_1x1_Gate_Fake_Gamemode_ControllerLeftEvent',\n 'B_1x1_Gate_Fake_Gamemode_RoundEndEvent',\n 'B_1x1_Gate_Fake_Gamemode_RoundStartEvent',\n 'B_1x1_Gate_FontReference',\n 'B_1x1_Gate_Internal_CharacterZoneEvent_Entered',\n 'B_1x1_Gate_Internal_CharacterZoneEvent_Left',\n 'B_1x1_Gate_Internal_ReadBrickGrid',\n 'B_1x1_Gate_Internal_ZoneEvent_BrickChanged',\n 'B_1x1_Gate_Internal_ZoneEvent_BrickRemoved',\n 'B_1x1_Gate_ItemReference',\n 'B_1x1_Gate_OneShotAudioReference',\n 'B_1x1_Gate_ParticleReference',\n 'B_1x1_Gate_PickupReference',\n 'B_1x1_Gate_ProjectileReference',\n 'B_1x1_Gate_Pseudo_BufferSeconds',\n 'B_1x1_Gate_Pseudo_BufferTicks',\n 'B_1x1_Gate_Pseudo_Dampen',\n 'B_1x1_Gate_Pseudo_QueueSeconds',\n 'B_1x1_Gate_Pseudo_QueueTicks',\n 'B_1x1_Gate_Pseudo_Timer',\n 'B_1x1_Gate_Pseudo_Tween',\n 'B_1x1_Gate_SeatControlSplitter',\n 'B_1x1_Gate_ServerUptime',\n 'B_1x1_Gate_Variable',\n 'B_1x1_Gate_Variable_Array',\n 'B_1x1_Gate_WeightBrick',\n 'B_1x1_Gate_WheelEngineAudioReference',\n 'B_2x2_Thruster',\n 'B_Button_Pressed',\n 'B_Button_Square_Pressed',\n 'B_Joint_Fixed',\n 'B_Joint_Socket',\n 'B_Joint_Wheel_Micro_Suspension',\n 'B_Joint_Wheel_Suspension',\n 'B_Switch_Flipped',\n];\n\nexport const PROCEDURAL_BRICK_ASSETS: readonly string[] = [\n 'PB_DefaultBrick',\n 'PB_DefaultStudded',\n 'PB_DefaultRampInnerCornerInverted',\n 'PB_DefaultRampCrestEnd',\n 'PB_DefaultRampCrestCorner',\n 'PB_DefaultRampCrest',\n 'PB_DefaultRamp',\n 'PB_PicketFence',\n 'BP_LatticeThin',\n 'PB_DefaultWedge',\n 'PB_DefaultTile',\n 'PB_DefaultSmoothTile',\n 'PB_DefaultSideWedge',\n 'PB_DefaultRampInverted',\n 'PB_DefaultRampInnerCorner',\n 'PB_DefaultRampCornerInverted',\n 'PB_DefaultRampCorner',\n 'PB_DefaultPole',\n 'PB_DefaultMicroWedgeTriangleCorner',\n 'PB_DefaultMicroWedgeOuterCorner',\n 'PB_DefaultMicroWedgeInnerCorner',\n 'PB_DefaultMicroWedgeHalfOuterCorner',\n 'PB_DefaultMicroWedgeHalfInnerCornerInverted',\n 'PB_DefaultMicroWedgeHalfInnerCorner',\n 'PB_DefaultMicroWedgeCorner',\n 'PB_DefaultMicroWedge',\n 'PB_DefaultMicroRamp',\n 'PB_DefaultMicroBrick',\n 'PB_DefaultArch',\n 'BP_SquarePlate',\n 'BP_SpikePlate',\n 'PB_Spike',\n 'PB_SliderJoint',\n 'PB_ServoSliderJoint',\n 'PB_MotorSliderJoint',\n 'BP_RoundPlate',\n 'PB_RoundedCap',\n 'PB_Baguette',\n];\n\n/** Every known brick asset name (basic + procedural), self-keyed for\n * typo-safe references with editor completion, e.g.\n * `BRICK_ASSETS.B_1x1_Gate_MicrochipInput`. */\nexport const BRICK_ASSETS = {\n BP_LatticeThin: 'BP_LatticeThin',\n BP_RoundPlate: 'BP_RoundPlate',\n BP_SpikePlate: 'BP_SpikePlate',\n BP_SquarePlate: 'BP_SquarePlate',\n B_1x1F_Octo: 'B_1x1F_Octo',\n B_1x1F_Round: 'B_1x1F_Round',\n B_1x1F_Speaker: 'B_1x1F_Speaker',\n B_1x1_Brick_Side: 'B_1x1_Brick_Side',\n B_1x1_Brick_Side_Lip: 'B_1x1_Brick_Side_Lip',\n B_1x1_CharacterGate_SetGravityDirection:\n 'B_1x1_CharacterGate_SetGravityDirection',\n B_1x1_Coin: 'B_1x1_Coin',\n B_1x1_Coin_Diagonal: 'B_1x1_Coin_Diagonal',\n B_1x1_Cone: 'B_1x1_Cone',\n B_1x1_EntityGate_AddLocationAndRotation:\n 'B_1x1_EntityGate_AddLocationAndRotation',\n B_1x1_EntityGate_AddVelocity: 'B_1x1_EntityGate_AddVelocity',\n B_1x1_EntityGate_PlayAudioAt: 'B_1x1_EntityGate_PlayAudioAt',\n B_1x1_EntityGate_ReadBrickGrid: 'B_1x1_EntityGate_ReadBrickGrid',\n B_1x1_EntityGate_SetLocation: 'B_1x1_EntityGate_SetLocation',\n B_1x1_EntityGate_SetLocationAndRotation:\n 'B_1x1_EntityGate_SetLocationAndRotation',\n B_1x1_EntityGate_SetVelocity: 'B_1x1_EntityGate_SetVelocity',\n B_1x1_Gate_AND: 'B_1x1_Gate_AND',\n B_1x1_Gate_AND_Bitwise: 'B_1x1_Gate_AND_Bitwise',\n B_1x1_Gate_Add: 'B_1x1_Gate_Add',\n B_1x1_Gate_AudioReference: 'B_1x1_Gate_AudioReference',\n B_1x1_Gate_Blend: 'B_1x1_Gate_Blend',\n B_1x1_Gate_Ceiling: 'B_1x1_Gate_Ceiling',\n B_1x1_Gate_Clock: 'B_1x1_Gate_Clock',\n B_1x1_Gate_Constant: 'B_1x1_Gate_Constant',\n B_1x1_Gate_DeltaTime: 'B_1x1_Gate_DeltaTime',\n B_1x1_Gate_Divide: 'B_1x1_Gate_Divide',\n B_1x1_Gate_EdgeDetector: 'B_1x1_Gate_EdgeDetector',\n B_1x1_Gate_Equal: 'B_1x1_Gate_Equal',\n B_1x1_Gate_Exec_ArrayVar_Append: 'B_1x1_Gate_Exec_ArrayVar_Append',\n B_1x1_Gate_Exec_ArrayVar_Average: 'B_1x1_Gate_Exec_ArrayVar_Average',\n B_1x1_Gate_Exec_ArrayVar_Clear: 'B_1x1_Gate_Exec_ArrayVar_Clear',\n B_1x1_Gate_Exec_ArrayVar_CopyFrom: 'B_1x1_Gate_Exec_ArrayVar_CopyFrom',\n B_1x1_Gate_Exec_ArrayVar_Fill: 'B_1x1_Gate_Exec_ArrayVar_Fill',\n B_1x1_Gate_Exec_ArrayVar_Find: 'B_1x1_Gate_Exec_ArrayVar_Find',\n B_1x1_Gate_Exec_ArrayVar_Get: 'B_1x1_Gate_Exec_ArrayVar_Get',\n B_1x1_Gate_Exec_ArrayVar_GetLength: 'B_1x1_Gate_Exec_ArrayVar_GetLength',\n B_1x1_Gate_Exec_ArrayVar_Insert: 'B_1x1_Gate_Exec_ArrayVar_Insert',\n B_1x1_Gate_Exec_ArrayVar_Max: 'B_1x1_Gate_Exec_ArrayVar_Max',\n B_1x1_Gate_Exec_ArrayVar_Min: 'B_1x1_Gate_Exec_ArrayVar_Min',\n B_1x1_Gate_Exec_ArrayVar_Pop: 'B_1x1_Gate_Exec_ArrayVar_Pop',\n B_1x1_Gate_Exec_ArrayVar_Push: 'B_1x1_Gate_Exec_ArrayVar_Push',\n B_1x1_Gate_Exec_ArrayVar_RemoveAtIndex:\n 'B_1x1_Gate_Exec_ArrayVar_RemoveAtIndex',\n B_1x1_Gate_Exec_ArrayVar_Resize: 'B_1x1_Gate_Exec_ArrayVar_Resize',\n B_1x1_Gate_Exec_ArrayVar_Reverse: 'B_1x1_Gate_Exec_ArrayVar_Reverse',\n B_1x1_Gate_Exec_ArrayVar_SetAtIndex: 'B_1x1_Gate_Exec_ArrayVar_SetAtIndex',\n B_1x1_Gate_Exec_ArrayVar_Shuffle: 'B_1x1_Gate_Exec_ArrayVar_Shuffle',\n B_1x1_Gate_Exec_ArrayVar_Slice: 'B_1x1_Gate_Exec_ArrayVar_Slice',\n B_1x1_Gate_Exec_ArrayVar_Sort: 'B_1x1_Gate_Exec_ArrayVar_Sort',\n B_1x1_Gate_Exec_ArrayVar_Sum: 'B_1x1_Gate_Exec_ArrayVar_Sum',\n B_1x1_Gate_Exec_ArrayVar_Swap: 'B_1x1_Gate_Exec_ArrayVar_Swap',\n B_1x1_Gate_Exec_Branch: 'B_1x1_Gate_Exec_Branch',\n B_1x1_Gate_Exec_Character_GetAim: 'B_1x1_Gate_Exec_Character_GetAim',\n B_1x1_Gate_Exec_Character_GetDamage: 'B_1x1_Gate_Exec_Character_GetDamage',\n B_1x1_Gate_Exec_Character_GetFromController:\n 'B_1x1_Gate_Exec_Character_GetFromController',\n B_1x1_Gate_Exec_Character_IncDamage: 'B_1x1_Gate_Exec_Character_IncDamage',\n B_1x1_Gate_Exec_Character_SetDamage: 'B_1x1_Gate_Exec_Character_SetDamage',\n B_1x1_Gate_Exec_Character_SetInventoryEntry:\n 'B_1x1_Gate_Exec_Character_SetInventoryEntry',\n B_1x1_Gate_Exec_Character_SetTempPermission:\n 'B_1x1_Gate_Exec_Character_SetTempPermission',\n B_1x1_Gate_Exec_Character_ShowHint: 'B_1x1_Gate_Exec_Character_ShowHint',\n B_1x1_Gate_Exec_ChatCommand: 'B_1x1_Gate_Exec_ChatCommand',\n B_1x1_Gate_Exec_Controller_DisplayText:\n 'B_1x1_Gate_Exec_Controller_DisplayText',\n B_1x1_Gate_Exec_Controller_GetDisplayName:\n 'B_1x1_Gate_Exec_Controller_GetDisplayName',\n B_1x1_Gate_Exec_Controller_GetFromEntity:\n 'B_1x1_Gate_Exec_Controller_GetFromEntity',\n B_1x1_Gate_Exec_Controller_GetUserId: 'B_1x1_Gate_Exec_Controller_GetUserId',\n B_1x1_Gate_Exec_Controller_GetUserName:\n 'B_1x1_Gate_Exec_Controller_GetUserName',\n B_1x1_Gate_Exec_Controller_HasPermission:\n 'B_1x1_Gate_Exec_Controller_HasPermission',\n B_1x1_Gate_Exec_Controller_IsTrustedByBrickOwner:\n 'B_1x1_Gate_Exec_Controller_IsTrustedByBrickOwner',\n B_1x1_Gate_Exec_Controller_SetCanRespawn:\n 'B_1x1_Gate_Exec_Controller_SetCanRespawn',\n B_1x1_Gate_Exec_Controller_ShowStatusMessage:\n 'B_1x1_Gate_Exec_Controller_ShowStatusMessage',\n B_1x1_Gate_Exec_Entity_AddLocationRotation:\n 'B_1x1_Gate_Exec_Entity_AddLocationRotation',\n B_1x1_Gate_Exec_Entity_AddVelocity: 'B_1x1_Gate_Exec_Entity_AddVelocity',\n B_1x1_Gate_Exec_Entity_GetAngularVelocity:\n 'B_1x1_Gate_Exec_Entity_GetAngularVelocity',\n B_1x1_Gate_Exec_Entity_GetLinearVelocity:\n 'B_1x1_Gate_Exec_Entity_GetLinearVelocity',\n B_1x1_Gate_Exec_Entity_GetLocation: 'B_1x1_Gate_Exec_Entity_GetLocation',\n B_1x1_Gate_Exec_Entity_GetLocationRotation:\n 'B_1x1_Gate_Exec_Entity_GetLocationRotation',\n B_1x1_Gate_Exec_Entity_GetRotation: 'B_1x1_Gate_Exec_Entity_GetRotation',\n B_1x1_Gate_Exec_Entity_GetVelocity: 'B_1x1_Gate_Exec_Entity_GetVelocity',\n B_1x1_Gate_Exec_Entity_PlayAudioAt: 'B_1x1_Gate_Exec_Entity_PlayAudioAt',\n B_1x1_Gate_Exec_Entity_RelativeTeleport:\n 'B_1x1_Gate_Exec_Entity_RelativeTeleport',\n B_1x1_Gate_Exec_Entity_SetAngularVelocity:\n 'B_1x1_Gate_Exec_Entity_SetAngularVelocity',\n B_1x1_Gate_Exec_Entity_SetFrozen: 'B_1x1_Gate_Exec_Entity_SetFrozen',\n B_1x1_Gate_Exec_Entity_SetGravityDirection:\n 'B_1x1_Gate_Exec_Entity_SetGravityDirection',\n B_1x1_Gate_Exec_Entity_SetLinearVelocity:\n 'B_1x1_Gate_Exec_Entity_SetLinearVelocity',\n B_1x1_Gate_Exec_Entity_SetLocation: 'B_1x1_Gate_Exec_Entity_SetLocation',\n B_1x1_Gate_Exec_Entity_SetLocationRotation:\n 'B_1x1_Gate_Exec_Entity_SetLocationRotation',\n B_1x1_Gate_Exec_Entity_SetRotation: 'B_1x1_Gate_Exec_Entity_SetRotation',\n B_1x1_Gate_Exec_Entity_SetVelocity: 'B_1x1_Gate_Exec_Entity_SetVelocity',\n B_1x1_Gate_Exec_Entity_Teleport: 'B_1x1_Gate_Exec_Entity_Teleport',\n B_1x1_Gate_Exec_Gamemode_FillArrayFromPlayers:\n 'B_1x1_Gate_Exec_Gamemode_FillArrayFromPlayers',\n B_1x1_Gate_Exec_Gamemode_FillArrayFromTeamMembers:\n 'B_1x1_Gate_Exec_Gamemode_FillArrayFromTeamMembers',\n B_1x1_Gate_Exec_Gamemode_GetCurrentRound:\n 'B_1x1_Gate_Exec_Gamemode_GetCurrentRound',\n B_1x1_Gate_Exec_Gamemode_GetLeaderboardValue:\n 'B_1x1_Gate_Exec_Gamemode_GetLeaderboardValue',\n B_1x1_Gate_Exec_Gamemode_GetTeam: 'B_1x1_Gate_Exec_Gamemode_GetTeam',\n B_1x1_Gate_Exec_Gamemode_GetTeamByName:\n 'B_1x1_Gate_Exec_Gamemode_GetTeamByName',\n B_1x1_Gate_Exec_Gamemode_GetTeamLeaderboardValue:\n 'B_1x1_Gate_Exec_Gamemode_GetTeamLeaderboardValue',\n B_1x1_Gate_Exec_Gamemode_GetTeamName: 'B_1x1_Gate_Exec_Gamemode_GetTeamName',\n B_1x1_Gate_Exec_Gamemode_IncrementLeaderboardValue:\n 'B_1x1_Gate_Exec_Gamemode_IncrementLeaderboardValue',\n B_1x1_Gate_Exec_Gamemode_IncrementTeamLeaderboardValue:\n 'B_1x1_Gate_Exec_Gamemode_IncrementTeamLeaderboardValue',\n B_1x1_Gate_Exec_Gamemode_PlayerWins: 'B_1x1_Gate_Exec_Gamemode_PlayerWins',\n B_1x1_Gate_Exec_Gamemode_SetLeaderboardValue:\n 'B_1x1_Gate_Exec_Gamemode_SetLeaderboardValue',\n B_1x1_Gate_Exec_Gamemode_SetTeam: 'B_1x1_Gate_Exec_Gamemode_SetTeam',\n B_1x1_Gate_Exec_Gamemode_SetTeamLeaderboardValue:\n 'B_1x1_Gate_Exec_Gamemode_SetTeamLeaderboardValue',\n B_1x1_Gate_Exec_Gamemode_SetTeamPinned:\n 'B_1x1_Gate_Exec_Gamemode_SetTeamPinned',\n B_1x1_Gate_Exec_Gamemode_TeamWins: 'B_1x1_Gate_Exec_Gamemode_TeamWins',\n B_1x1_Gate_Exec_PlayGlobalAudio: 'B_1x1_Gate_Exec_PlayGlobalAudio',\n B_1x1_Gate_Exec_PrefabSpawner: 'B_1x1_Gate_Exec_PrefabSpawner',\n B_1x1_Gate_Exec_PrintToConsole: 'B_1x1_Gate_Exec_PrintToConsole',\n B_1x1_Gate_Exec_Random: 'B_1x1_Gate_Exec_Random',\n B_1x1_Gate_Exec_Sweep: 'B_1x1_Gate_Exec_Sweep',\n B_1x1_Gate_Exec_Union: 'B_1x1_Gate_Exec_Union',\n B_1x1_Gate_Exec_Var_Get: 'B_1x1_Gate_Exec_Var_Get',\n B_1x1_Gate_Exec_Var_Increment: 'B_1x1_Gate_Exec_Var_Increment',\n B_1x1_Gate_Exec_Var_Set: 'B_1x1_Gate_Exec_Var_Set',\n B_1x1_Gate_Expr_BitwiseAND: 'B_1x1_Gate_Expr_BitwiseAND',\n B_1x1_Gate_Expr_BitwiseBitCount: 'B_1x1_Gate_Expr_BitwiseBitCount',\n B_1x1_Gate_Expr_BitwiseNAND: 'B_1x1_Gate_Expr_BitwiseNAND',\n B_1x1_Gate_Expr_BitwiseNOR: 'B_1x1_Gate_Expr_BitwiseNOR',\n B_1x1_Gate_Expr_BitwiseNOT: 'B_1x1_Gate_Expr_BitwiseNOT',\n B_1x1_Gate_Expr_BitwiseOR: 'B_1x1_Gate_Expr_BitwiseOR',\n B_1x1_Gate_Expr_BitwiseShiftLeft: 'B_1x1_Gate_Expr_BitwiseShiftLeft',\n B_1x1_Gate_Expr_BitwiseShiftRight: 'B_1x1_Gate_Expr_BitwiseShiftRight',\n B_1x1_Gate_Expr_BitwiseXOR: 'B_1x1_Gate_Expr_BitwiseXOR',\n B_1x1_Gate_Expr_Ceil: 'B_1x1_Gate_Expr_Ceil',\n B_1x1_Gate_Expr_CompareEqual: 'B_1x1_Gate_Expr_CompareEqual',\n B_1x1_Gate_Expr_CompareGreater: 'B_1x1_Gate_Expr_CompareGreater',\n B_1x1_Gate_Expr_CompareGreaterOrEqual:\n 'B_1x1_Gate_Expr_CompareGreaterOrEqual',\n B_1x1_Gate_Expr_CompareLess: 'B_1x1_Gate_Expr_CompareLess',\n B_1x1_Gate_Expr_CompareLessOrEqual: 'B_1x1_Gate_Expr_CompareLessOrEqual',\n B_1x1_Gate_Expr_CompareNotEqual: 'B_1x1_Gate_Expr_CompareNotEqual',\n B_1x1_Gate_Expr_EdgeDetector: 'B_1x1_Gate_Expr_EdgeDetector',\n B_1x1_Gate_Expr_Floor: 'B_1x1_Gate_Expr_Floor',\n B_1x1_Gate_Expr_LogicalAND: 'B_1x1_Gate_Expr_LogicalAND',\n B_1x1_Gate_Expr_LogicalNAND: 'B_1x1_Gate_Expr_LogicalNAND',\n B_1x1_Gate_Expr_LogicalNOR: 'B_1x1_Gate_Expr_LogicalNOR',\n B_1x1_Gate_Expr_LogicalNOT: 'B_1x1_Gate_Expr_LogicalNOT',\n B_1x1_Gate_Expr_LogicalOR: 'B_1x1_Gate_Expr_LogicalOR',\n B_1x1_Gate_Expr_LogicalXOR: 'B_1x1_Gate_Expr_LogicalXOR',\n B_1x1_Gate_Expr_MakeColor: 'B_1x1_Gate_Expr_MakeColor',\n B_1x1_Gate_Expr_MakeVector: 'B_1x1_Gate_Expr_MakeVector',\n B_1x1_Gate_Expr_MathAbs: 'B_1x1_Gate_Expr_MathAbs',\n B_1x1_Gate_Expr_MathAcos: 'B_1x1_Gate_Expr_MathAcos',\n B_1x1_Gate_Expr_MathAcosh: 'B_1x1_Gate_Expr_MathAcosh',\n B_1x1_Gate_Expr_MathAdd: 'B_1x1_Gate_Expr_MathAdd',\n B_1x1_Gate_Expr_MathAsin: 'B_1x1_Gate_Expr_MathAsin',\n B_1x1_Gate_Expr_MathAsinh: 'B_1x1_Gate_Expr_MathAsinh',\n B_1x1_Gate_Expr_MathAtan: 'B_1x1_Gate_Expr_MathAtan',\n B_1x1_Gate_Expr_MathAtan2: 'B_1x1_Gate_Expr_MathAtan2',\n B_1x1_Gate_Expr_MathAtanh: 'B_1x1_Gate_Expr_MathAtanh',\n B_1x1_Gate_Expr_MathBlend: 'B_1x1_Gate_Expr_MathBlend',\n B_1x1_Gate_Expr_MathClamp: 'B_1x1_Gate_Expr_MathClamp',\n B_1x1_Gate_Expr_MathCos: 'B_1x1_Gate_Expr_MathCos',\n B_1x1_Gate_Expr_MathCosh: 'B_1x1_Gate_Expr_MathCosh',\n B_1x1_Gate_Expr_MathDegreesToRadians: 'B_1x1_Gate_Expr_MathDegreesToRadians',\n B_1x1_Gate_Expr_MathDivide: 'B_1x1_Gate_Expr_MathDivide',\n B_1x1_Gate_Expr_MathEasing: 'B_1x1_Gate_Expr_MathEasing',\n B_1x1_Gate_Expr_MathExp: 'B_1x1_Gate_Expr_MathExp',\n B_1x1_Gate_Expr_MathLn: 'B_1x1_Gate_Expr_MathLn',\n B_1x1_Gate_Expr_MathLogBase: 'B_1x1_Gate_Expr_MathLogBase',\n B_1x1_Gate_Expr_MathMax: 'B_1x1_Gate_Expr_MathMax',\n B_1x1_Gate_Expr_MathMin: 'B_1x1_Gate_Expr_MathMin',\n B_1x1_Gate_Expr_MathModulo: 'B_1x1_Gate_Expr_MathModulo',\n B_1x1_Gate_Expr_MathModuloFloored: 'B_1x1_Gate_Expr_MathModuloFloored',\n B_1x1_Gate_Expr_MathMultiply: 'B_1x1_Gate_Expr_MathMultiply',\n B_1x1_Gate_Expr_MathNegate: 'B_1x1_Gate_Expr_MathNegate',\n B_1x1_Gate_Expr_MathPow: 'B_1x1_Gate_Expr_MathPow',\n B_1x1_Gate_Expr_MathRadiansToDegrees: 'B_1x1_Gate_Expr_MathRadiansToDegrees',\n B_1x1_Gate_Expr_MathSign: 'B_1x1_Gate_Expr_MathSign',\n B_1x1_Gate_Expr_MathSin: 'B_1x1_Gate_Expr_MathSin',\n B_1x1_Gate_Expr_MathSinh: 'B_1x1_Gate_Expr_MathSinh',\n B_1x1_Gate_Expr_MathSqrt: 'B_1x1_Gate_Expr_MathSqrt',\n B_1x1_Gate_Expr_MathSubtract: 'B_1x1_Gate_Expr_MathSubtract',\n B_1x1_Gate_Expr_MathTan: 'B_1x1_Gate_Expr_MathTan',\n B_1x1_Gate_Expr_MathTanh: 'B_1x1_Gate_Expr_MathTanh',\n B_1x1_Gate_Expr_NearlyEqual: 'B_1x1_Gate_Expr_NearlyEqual',\n B_1x1_Gate_Expr_Round: 'B_1x1_Gate_Expr_Round',\n B_1x1_Gate_Expr_Select: 'B_1x1_Gate_Expr_Select',\n B_1x1_Gate_Expr_SplitColor: 'B_1x1_Gate_Expr_SplitColor',\n B_1x1_Gate_Expr_SplitVector: 'B_1x1_Gate_Expr_SplitVector',\n B_1x1_Gate_Expr_String_Concatenate: 'B_1x1_Gate_Expr_String_Concatenate',\n B_1x1_Gate_Expr_String_Contains: 'B_1x1_Gate_Expr_String_Contains',\n B_1x1_Gate_Expr_String_EndsWith: 'B_1x1_Gate_Expr_String_EndsWith',\n B_1x1_Gate_Expr_String_Find: 'B_1x1_Gate_Expr_String_Find',\n B_1x1_Gate_Expr_String_FormatText: 'B_1x1_Gate_Expr_String_FormatText',\n B_1x1_Gate_Expr_String_Length: 'B_1x1_Gate_Expr_String_Length',\n B_1x1_Gate_Expr_String_ParseInt: 'B_1x1_Gate_Expr_String_ParseInt',\n B_1x1_Gate_Expr_String_ParseNumber: 'B_1x1_Gate_Expr_String_ParseNumber',\n B_1x1_Gate_Expr_String_Replace: 'B_1x1_Gate_Expr_String_Replace',\n B_1x1_Gate_Expr_String_Split: 'B_1x1_Gate_Expr_String_Split',\n B_1x1_Gate_Expr_String_StartsWith: 'B_1x1_Gate_Expr_String_StartsWith',\n B_1x1_Gate_Expr_String_Substring: 'B_1x1_Gate_Expr_String_Substring',\n B_1x1_Gate_Expr_String_ToLower: 'B_1x1_Gate_Expr_String_ToLower',\n B_1x1_Gate_Expr_String_ToUpper: 'B_1x1_Gate_Expr_String_ToUpper',\n B_1x1_Gate_Expr_String_Trim: 'B_1x1_Gate_Expr_String_Trim',\n B_1x1_Gate_Expr_Swap: 'B_1x1_Gate_Expr_Swap',\n B_1x1_Gate_Expr_VecCrossProduct: 'B_1x1_Gate_Expr_VecCrossProduct',\n B_1x1_Gate_Expr_VecDistance: 'B_1x1_Gate_Expr_VecDistance',\n B_1x1_Gate_Expr_VecDistanceSquared: 'B_1x1_Gate_Expr_VecDistanceSquared',\n B_1x1_Gate_Expr_VecDotProduct: 'B_1x1_Gate_Expr_VecDotProduct',\n B_1x1_Gate_Expr_VecMagnitude: 'B_1x1_Gate_Expr_VecMagnitude',\n B_1x1_Gate_Expr_VecMagnitudeSquared: 'B_1x1_Gate_Expr_VecMagnitudeSquared',\n B_1x1_Gate_Expr_VecNormalize: 'B_1x1_Gate_Expr_VecNormalize',\n B_1x1_Gate_Expr_VecRotationToDirection:\n 'B_1x1_Gate_Expr_VecRotationToDirection',\n B_1x1_Gate_Expr_VecScale: 'B_1x1_Gate_Expr_VecScale',\n B_1x1_Gate_Fake_Gamemode_CharacterDiedEvent:\n 'B_1x1_Gate_Fake_Gamemode_CharacterDiedEvent',\n B_1x1_Gate_Fake_Gamemode_CharacterSpawnedEvent:\n 'B_1x1_Gate_Fake_Gamemode_CharacterSpawnedEvent',\n B_1x1_Gate_Fake_Gamemode_ControllerJoinedEvent:\n 'B_1x1_Gate_Fake_Gamemode_ControllerJoinedEvent',\n B_1x1_Gate_Fake_Gamemode_ControllerLeftEvent:\n 'B_1x1_Gate_Fake_Gamemode_ControllerLeftEvent',\n B_1x1_Gate_Fake_Gamemode_RoundEndEvent:\n 'B_1x1_Gate_Fake_Gamemode_RoundEndEvent',\n B_1x1_Gate_Fake_Gamemode_RoundStartEvent:\n 'B_1x1_Gate_Fake_Gamemode_RoundStartEvent',\n B_1x1_Gate_Floor: 'B_1x1_Gate_Floor',\n B_1x1_Gate_FontReference: 'B_1x1_Gate_FontReference',\n B_1x1_Gate_GreaterThan: 'B_1x1_Gate_GreaterThan',\n B_1x1_Gate_GreaterThanEqual: 'B_1x1_Gate_GreaterThanEqual',\n B_1x1_Gate_Internal_CharacterZoneEvent_Entered:\n 'B_1x1_Gate_Internal_CharacterZoneEvent_Entered',\n B_1x1_Gate_Internal_CharacterZoneEvent_Left:\n 'B_1x1_Gate_Internal_CharacterZoneEvent_Left',\n B_1x1_Gate_Internal_ReadBrickGrid: 'B_1x1_Gate_Internal_ReadBrickGrid',\n B_1x1_Gate_Internal_ZoneEvent_BrickChanged:\n 'B_1x1_Gate_Internal_ZoneEvent_BrickChanged',\n B_1x1_Gate_Internal_ZoneEvent_BrickRemoved:\n 'B_1x1_Gate_Internal_ZoneEvent_BrickRemoved',\n B_1x1_Gate_ItemReference: 'B_1x1_Gate_ItemReference',\n B_1x1_Gate_LessThan: 'B_1x1_Gate_LessThan',\n B_1x1_Gate_LessThanEqual: 'B_1x1_Gate_LessThanEqual',\n B_1x1_Gate_MicrochipInput: 'B_1x1_Gate_MicrochipInput',\n B_1x1_Gate_MicrochipOutput: 'B_1x1_Gate_MicrochipOutput',\n B_1x1_Gate_Mod: 'B_1x1_Gate_Mod',\n B_1x1_Gate_ModFloored: 'B_1x1_Gate_ModFloored',\n B_1x1_Gate_Multiply: 'B_1x1_Gate_Multiply',\n B_1x1_Gate_NAND: 'B_1x1_Gate_NAND',\n B_1x1_Gate_NAND_Bitwise: 'B_1x1_Gate_NAND_Bitwise',\n B_1x1_Gate_NOR: 'B_1x1_Gate_NOR',\n B_1x1_Gate_NOR_Bitwise: 'B_1x1_Gate_NOR_Bitwise',\n B_1x1_Gate_NOT_Bitwise: 'B_1x1_Gate_NOT_Bitwise',\n B_1x1_Gate_NotEqual: 'B_1x1_Gate_NotEqual',\n B_1x1_Gate_OR: 'B_1x1_Gate_OR',\n B_1x1_Gate_OR_Bitwise: 'B_1x1_Gate_OR_Bitwise',\n B_1x1_Gate_OneShotAudioReference: 'B_1x1_Gate_OneShotAudioReference',\n B_1x1_Gate_ParticleReference: 'B_1x1_Gate_ParticleReference',\n B_1x1_Gate_PickupReference: 'B_1x1_Gate_PickupReference',\n B_1x1_Gate_ProjectileReference: 'B_1x1_Gate_ProjectileReference',\n B_1x1_Gate_Pseudo_BufferSeconds: 'B_1x1_Gate_Pseudo_BufferSeconds',\n B_1x1_Gate_Pseudo_BufferTicks: 'B_1x1_Gate_Pseudo_BufferTicks',\n B_1x1_Gate_Pseudo_Dampen: 'B_1x1_Gate_Pseudo_Dampen',\n B_1x1_Gate_Pseudo_QueueSeconds: 'B_1x1_Gate_Pseudo_QueueSeconds',\n B_1x1_Gate_Pseudo_QueueTicks: 'B_1x1_Gate_Pseudo_QueueTicks',\n B_1x1_Gate_Pseudo_Timer: 'B_1x1_Gate_Pseudo_Timer',\n B_1x1_Gate_Pseudo_Tween: 'B_1x1_Gate_Pseudo_Tween',\n B_1x1_Gate_RelativeTeleport: 'B_1x1_Gate_RelativeTeleport',\n B_1x1_Gate_SeatControlSplitter: 'B_1x1_Gate_SeatControlSplitter',\n B_1x1_Gate_ServerUptime: 'B_1x1_Gate_ServerUptime',\n B_1x1_Gate_ShiftLeft_Bitwise: 'B_1x1_Gate_ShiftLeft_Bitwise',\n B_1x1_Gate_ShiftRight_Bitwise: 'B_1x1_Gate_ShiftRight_Bitwise',\n B_1x1_Gate_Subtract: 'B_1x1_Gate_Subtract',\n B_1x1_Gate_Teleport: 'B_1x1_Gate_Teleport',\n B_1x1_Gate_Timer: 'B_1x1_Gate_Timer',\n B_1x1_Gate_Timer_Tick: 'B_1x1_Gate_Timer_Tick',\n B_1x1_Gate_Variable: 'B_1x1_Gate_Variable',\n B_1x1_Gate_Variable_Array: 'B_1x1_Gate_Variable_Array',\n B_1x1_Gate_WeightBrick: 'B_1x1_Gate_WeightBrick',\n B_1x1_Gate_WheelEngineAudioReference: 'B_1x1_Gate_WheelEngineAudioReference',\n B_1x1_Gate_WheelEngineSlim: 'B_1x1_Gate_WheelEngineSlim',\n B_1x1_Gate_XOR: 'B_1x1_Gate_XOR',\n B_1x1_Gate_XOR_Bitwise: 'B_1x1_Gate_XOR_Bitwise',\n B_1x1_Microchip: 'B_1x1_Microchip',\n B_1x1_NOT_Gate: 'B_1x1_NOT_Gate',\n B_1x1_Reroute_Node: 'B_1x1_Reroute_Node',\n B_1x1_Round: 'B_1x1_Round',\n B_1x1_SoundEmitter: 'B_1x1_SoundEmitter',\n B_1x1f_Inverse_Tile_Corner: 'B_1x1f_Inverse_Tile_Corner',\n B_1x1f_Tile_Corner: 'B_1x1f_Tile_Corner',\n B_1x2_MetalIngot: 'B_1x2_MetalIngot',\n B_1x2_Overhang: 'B_1x2_Overhang',\n B_1x2f_Plate_Center: 'B_1x2f_Plate_Center',\n B_1x2f_Plate_Center_Inv: 'B_1x2f_Plate_Center_Inv',\n B_1x4_Brick_Side: 'B_1x4_Brick_Side',\n B_1x_Octo: 'B_1x_Octo',\n B_1x_Octo_90Deg: 'B_1x_Octo_90Deg',\n B_1x_Octo_90Deg_Inv: 'B_1x_Octo_90Deg_Inv',\n B_1x_Octo_T: 'B_1x_Octo_T',\n B_1x_Octo_T_Inv: 'B_1x_Octo_T_Inv',\n B_2x1_Slipper: 'B_2x1_Slipper',\n B_2x2F_Octo: 'B_2x2F_Octo',\n B_2x2F_Octo_Converter: 'B_2x2F_Octo_Converter',\n B_2x2F_Octo_Converter_Inv: 'B_2x2F_Octo_Converter_Inv',\n B_2x2F_Round: 'B_2x2F_Round',\n B_2x2F_Speaker: 'B_2x2F_Speaker',\n B_2x2F_Target: 'B_2x2F_Target',\n B_2x2_Cone: 'B_2x2_Cone',\n B_2x2_Corner: 'B_2x2_Corner',\n B_2x2_Overhang: 'B_2x2_Overhang',\n B_2x2_Round: 'B_2x2_Round',\n B_2x2_Slipper: 'B_2x2_Slipper',\n B_2x2_Thruster: 'B_2x2_Thruster',\n B_2x2f_Plate_Center: 'B_2x2f_Plate_Center',\n B_2x2f_Plate_Center_Inv: 'B_2x2f_Plate_Center_Inv',\n B_2x4_Door_Frame: 'B_2x4_Door_Frame',\n B_2x_Octo: 'B_2x_Octo',\n B_2x_Octo_90Deg: 'B_2x_Octo_90Deg',\n B_2x_Octo_90Deg_Inv: 'B_2x_Octo_90Deg_Inv',\n B_2x_Octo_Cone: 'B_2x_Octo_Cone',\n B_2x_Octo_T: 'B_2x_Octo_T',\n B_2x_Octo_T_Inv: 'B_2x_Octo_T_Inv',\n B_4x4_Round: 'B_4x4_Round',\n B_8x8_Lattice_Plate: 'B_8x8_Lattice_Plate',\n B_Bishop: 'B_Bishop',\n B_Bone: 'B_Bone',\n B_BoneStraight: 'B_BoneStraight',\n B_Bot_Spawn_Point: 'B_Bot_Spawn_Point',\n B_Branch: 'B_Branch',\n B_Button: 'B_Button',\n B_Button_Pressed: 'B_Button_Pressed',\n B_Button_Square: 'B_Button_Square',\n B_Button_Square_Pressed: 'B_Button_Square_Pressed',\n B_Cauldron: 'B_Cauldron',\n B_Chalice: 'B_Chalice',\n B_CheckPoint: 'B_CheckPoint',\n B_Coffin: 'B_Coffin',\n B_Coffin_Lid: 'B_Coffin_Lid',\n B_DestinationPoint: 'B_DestinationPoint',\n B_Fern: 'B_Fern',\n B_Flame: 'B_Flame',\n B_Flower: 'B_Flower',\n B_Fork: 'B_Fork',\n B_Frog: 'B_Frog',\n B_Frog_Small: 'B_Frog_Small',\n B_GoalPoint: 'B_GoalPoint',\n B_Gravestone: 'B_Gravestone',\n B_Handle: 'B_Handle',\n B_Hedge_1x1: 'B_Hedge_1x1',\n B_Hedge_1x1_Corner: 'B_Hedge_1x1_Corner',\n B_Hedge_1x2: 'B_Hedge_1x2',\n B_Hedge_1x4: 'B_Hedge_1x4',\n B_Inverted_Cone: 'B_Inverted_Cone',\n B_Jar: 'B_Jar',\n B_Joint_Bearing: 'B_Joint_Bearing',\n B_Joint_Bearing_Micro: 'B_Joint_Bearing_Micro',\n B_Joint_Coupler: 'B_Joint_Coupler',\n B_Joint_Fixed: 'B_Joint_Fixed',\n B_Joint_Motor: 'B_Joint_Motor',\n B_Joint_Motor_Micro: 'B_Joint_Motor_Micro',\n B_Joint_Servo: 'B_Joint_Servo',\n B_Joint_Servo_Micro: 'B_Joint_Servo_Micro',\n B_Joint_Socket: 'B_Joint_Socket',\n B_Joint_Socket_Micro: 'B_Joint_Socket_Micro',\n B_Joint_Wheel: 'B_Joint_Wheel',\n B_Joint_Wheel_Micro: 'B_Joint_Wheel_Micro',\n B_Joint_Wheel_Micro_Suspension: 'B_Joint_Wheel_Micro_Suspension',\n B_Joint_Wheel_Suspension: 'B_Joint_Wheel_Suspension',\n B_King: 'B_King',\n B_Knight: 'B_Knight',\n B_Ladder: 'B_Ladder',\n B_Leaf_Bush: 'B_Leaf_Bush',\n B_Pawn: 'B_Pawn',\n B_Pine_Tree: 'B_Pine_Tree',\n B_Pumpkin: 'B_Pumpkin',\n B_Pumpkin_Carved: 'B_Pumpkin_Carved',\n B_Queen: 'B_Queen',\n B_Rook: 'B_Rook',\n B_Sausage: 'B_Sausage',\n B_Seat: 'B_Seat',\n B_Small_Flower: 'B_Small_Flower',\n B_SpawnPoint: 'B_SpawnPoint',\n B_Spoon: 'B_Spoon',\n B_Swirl_Plate: 'B_Swirl_Plate',\n B_Switch_Flipped: 'B_Switch_Flipped',\n B_Switch_Test: 'B_Switch_Test',\n B_Turkey_Body: 'B_Turkey_Body',\n B_Turkey_Leg: 'B_Turkey_Leg',\n B_Vehicle_Engine: 'B_Vehicle_Engine',\n PB_Baguette: 'PB_Baguette',\n PB_DefaultArch: 'PB_DefaultArch',\n PB_DefaultBrick: 'PB_DefaultBrick',\n PB_DefaultMicroBrick: 'PB_DefaultMicroBrick',\n PB_DefaultMicroRamp: 'PB_DefaultMicroRamp',\n PB_DefaultMicroWedge: 'PB_DefaultMicroWedge',\n PB_DefaultMicroWedgeCorner: 'PB_DefaultMicroWedgeCorner',\n PB_DefaultMicroWedgeHalfInnerCorner: 'PB_DefaultMicroWedgeHalfInnerCorner',\n PB_DefaultMicroWedgeHalfInnerCornerInverted:\n 'PB_DefaultMicroWedgeHalfInnerCornerInverted',\n PB_DefaultMicroWedgeHalfOuterCorner: 'PB_DefaultMicroWedgeHalfOuterCorner',\n PB_DefaultMicroWedgeInnerCorner: 'PB_DefaultMicroWedgeInnerCorner',\n PB_DefaultMicroWedgeOuterCorner: 'PB_DefaultMicroWedgeOuterCorner',\n PB_DefaultMicroWedgeTriangleCorner: 'PB_DefaultMicroWedgeTriangleCorner',\n PB_DefaultPole: 'PB_DefaultPole',\n PB_DefaultRamp: 'PB_DefaultRamp',\n PB_DefaultRampCorner: 'PB_DefaultRampCorner',\n PB_DefaultRampCornerInverted: 'PB_DefaultRampCornerInverted',\n PB_DefaultRampCrest: 'PB_DefaultRampCrest',\n PB_DefaultRampCrestCorner: 'PB_DefaultRampCrestCorner',\n PB_DefaultRampCrestEnd: 'PB_DefaultRampCrestEnd',\n PB_DefaultRampInnerCorner: 'PB_DefaultRampInnerCorner',\n PB_DefaultRampInnerCornerInverted: 'PB_DefaultRampInnerCornerInverted',\n PB_DefaultRampInverted: 'PB_DefaultRampInverted',\n PB_DefaultSideWedge: 'PB_DefaultSideWedge',\n PB_DefaultSmoothTile: 'PB_DefaultSmoothTile',\n PB_DefaultStudded: 'PB_DefaultStudded',\n PB_DefaultTile: 'PB_DefaultTile',\n PB_DefaultWedge: 'PB_DefaultWedge',\n PB_MotorSliderJoint: 'PB_MotorSliderJoint',\n PB_PicketFence: 'PB_PicketFence',\n PB_RoundedCap: 'PB_RoundedCap',\n PB_ServoSliderJoint: 'PB_ServoSliderJoint',\n PB_SliderJoint: 'PB_SliderJoint',\n PB_Spike: 'PB_Spike',\n} as const;\n\nconst BASIC = new Set(BASIC_BRICK_ASSETS);\nconst PROCEDURAL = new Set(PROCEDURAL_BRICK_ASSETS);\n\n/** Classify a brick asset as procedural (parametric, carries a size) or basic. */\nexport function isProceduralAsset(name: string): boolean {\n if (PROCEDURAL.has(name)) return true;\n if (BASIC.has(name)) return false;\n // Fallback for assets not in the catalog: PB_*/BP_* families are procedural.\n return name.startsWith('PB_') || name.startsWith('BP_');\n}\n","// GENERATED by scripts/syncBrdbData.mjs — do not edit by hand.\n// Regenerate with: just sync-brdb-data\n\nimport type { BrdbValue } from './schema';\n\n/** Component type name -> data struct name (\"None\" = no data struct). */\nexport const COMPONENT_TYPE_STRUCTS: ReadonlyMap<string, string> = new Map([\n [\n 'BrickComponentType_Internal_CharacterZoneEvent_Entered',\n 'BrickComponentData_Internal_CharacterZoneEvent',\n ],\n [\n 'BrickComponentType_Internal_CharacterZoneEvent_Left',\n 'BrickComponentData_Internal_CharacterZoneEvent',\n ],\n [\n 'BrickComponentType_Internal_EntityZoneEvent_Entered',\n 'BrickComponentData_Internal_EntityZoneEvent',\n ],\n [\n 'BrickComponentType_Internal_EntityZoneEvent_Left',\n 'BrickComponentData_Internal_EntityZoneEvent',\n ],\n [\n 'BrickComponentType_Internal_MicrochipInput',\n 'BrickComponentData_Internal_MicrochipInput',\n ],\n [\n 'BrickComponentType_Internal_MicrochipOutput',\n 'BrickComponentData_Internal_MicrochipOutput',\n ],\n [\n 'BrickComponentType_Internal_ProjectileZoneEvent_Entered',\n 'BrickComponentData_Internal_ProjectileZoneEvent',\n ],\n [\n 'BrickComponentType_Internal_ProjectileZoneEvent_Left',\n 'BrickComponentData_Internal_ProjectileZoneEvent',\n ],\n [\n 'BrickComponentType_Internal_ReadBrickGrid',\n 'BrickComponentData_Internal_ReadBrickGrid',\n ],\n [\n 'BrickComponentType_Internal_TeleportDestination',\n 'BrickComponentData_TeleportDestination',\n ],\n [\n 'BrickComponentType_Internal_ZoneEvent_BrickChanged',\n 'BrickComponentData_Internal_ZoneEvent',\n ],\n [\n 'BrickComponentType_Internal_ZoneEvent_BrickRemoved',\n 'BrickComponentData_Internal_ZoneEvent',\n ],\n ['BrickComponentType_PrefabSpawn', 'BrickComponentData_PrefabSpawn'],\n [\n 'BrickComponentType_WireGraphPseudo_ArrayVar',\n 'BrickComponentData_WireGraphPseudo_ArrayVar',\n ],\n [\n 'BrickComponentType_WireGraphPseudo_BufferSeconds',\n 'BrickComponentData_WireGraphPseudo_BufferSeconds',\n ],\n [\n 'BrickComponentType_WireGraphPseudo_BufferTicks',\n 'BrickComponentData_WireGraphPseudo_BufferTicks',\n ],\n [\n 'BrickComponentType_WireGraphPseudo_Dampen',\n 'BrickComponentData_WireGraphPseudo_Dampen',\n ],\n [\n 'BrickComponentType_WireGraphPseudo_QueueSeconds',\n 'BrickComponentData_WireGraphPseudo_QueueSeconds',\n ],\n [\n 'BrickComponentType_WireGraphPseudo_QueueTicks',\n 'BrickComponentData_WireGraphPseudo_QueueTicks',\n ],\n [\n 'BrickComponentType_WireGraphPseudo_Timer',\n 'BrickComponentData_WireGraphPseudo_Timer',\n ],\n [\n 'BrickComponentType_WireGraphPseudo_Tween',\n 'BrickComponentData_WireGraphPseudo_Tween',\n ],\n [\n 'BrickComponentType_WireGraphPseudo_Var',\n 'BrickComponentData_WireGraphPseudo_Var',\n ],\n [\n 'BrickComponentType_WireGraph_AudioReference',\n 'BrickComponentData_WireGraph_AudioReference',\n ],\n [\n 'BrickComponentType_WireGraph_BrickAssetReference',\n 'BrickComponentData_WireGraph_BrickAssetReference',\n ],\n [\n 'BrickComponentType_WireGraph_DeltaTime',\n 'BrickComponentData_WireGraph_DeltaTime',\n ],\n [\n 'BrickComponentType_WireGraph_EntityTypeReference',\n 'BrickComponentData_WireGraph_EntityTypeReference',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Append',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_DualRef',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Average',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Average',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Clear',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Base',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_CopyFrom',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_DualRef',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Fill',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Push',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Find',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Find',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Get',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Get',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_GetLength',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_GetLength',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Insert',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Insert',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Max',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_MinMax',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Min',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_MinMax',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Pop',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Pop',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Push',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Push',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_RemoveAtIndex',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_RemoveAtIndex',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Resize',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Resize',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Reverse',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Base',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_SetAtIndex',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_ElementOp',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Shuffle',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Base',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Slice',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Slice',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Sort',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Sort',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Sum',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Sum',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ArrayVar_Swap',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Swap',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Branch',\n 'BrickComponentData_WireGraph_ExecBranch',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_AddInventoryBrick',\n 'BrickComponentData_WireGraph_Exec_Character_AddInventoryBrick',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_AddInventoryEntity',\n 'BrickComponentData_WireGraph_Exec_Character_AddInventoryEntity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_AddInventoryEntry',\n 'BrickComponentData_WireGraph_Exec_Character_AddInventoryEntry',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_AddInventoryItem',\n 'BrickComponentData_WireGraph_Exec_Character_AddInventoryItem',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_GetAim',\n 'BrickComponentData_WireGraph_Exec_Character_GetAim',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_GetDamage',\n 'BrickComponentData_WireGraph_Exec_Character_GetDamage',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_GetFromController',\n 'BrickComponentData_WireGraph_Exec_Character_GetFromController',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_IncDamage',\n 'BrickComponentData_WireGraph_Exec_Character_IncDamage',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_SetDamage',\n 'BrickComponentData_WireGraph_Exec_Character_SetDamage',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_SetInventoryBrick',\n 'BrickComponentData_WireGraph_Exec_Character_SetInventoryBrick',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_SetInventoryEntity',\n 'BrickComponentData_WireGraph_Exec_Character_SetInventoryEntity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_SetInventoryEntry',\n 'BrickComponentData_WireGraph_Exec_Character_SetInventoryEntry',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_SetInventoryItem',\n 'BrickComponentData_WireGraph_Exec_Character_SetInventoryItem',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_SetTempPermission',\n 'BrickComponentData_WireGraph_Exec_Character_SetTempPermission',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Character_ShowHint',\n 'BrickComponentData_WireGraph_Exec_Character_ShowHint',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_ChatCommand',\n 'BrickComponentData_WireGraph_Exec_ChatCommand',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_DisplayText',\n 'BrickComponentData_WireGraph_Exec_Controller_DisplayText',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_GetDisplayName',\n 'BrickComponentData_WireGraph_Exec_Controller_GetDisplayName',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_GetFromEntity',\n 'BrickComponentData_WireGraph_Exec_Controller_GetFromEntity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_GetUserId',\n 'BrickComponentData_WireGraph_Exec_Controller_GetUserId',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_GetUserName',\n 'BrickComponentData_WireGraph_Exec_Controller_GetUserName',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_HasPermission',\n 'BrickComponentData_WireGraph_Exec_Controller_HasPermission',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_HasRole',\n 'BrickComponentData_WireGraph_Exec_Controller_HasRole',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_IsTrustedByBrickOwner',\n 'BrickComponentData_WireGraph_Exec_Controller_IsTrustedByBrickOwner',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_SetCanRespawn',\n 'BrickComponentData_WireGraph_Exec_Controller_SetCanRespawn',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_ShowChatMessage',\n 'BrickComponentData_WireGraph_Exec_Controller_ShowChatMessage',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Controller_ShowStatusMessage',\n 'BrickComponentData_WireGraph_Exec_Controller_ShowStatusMessage',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Cycle',\n 'BrickComponentData_WireGraph_Exec_Cycle',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_AddLocationRotation',\n 'BrickComponentData_WireGraph_Exec_Entity_AddLocationRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_AddVelocity',\n 'BrickComponentData_WireGraph_Exec_Entity_AddVelocity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_GetAngularVelocity',\n 'BrickComponentData_WireGraph_Exec_Entity_GetAngularVelocity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_GetLinearVelocity',\n 'BrickComponentData_WireGraph_Exec_Entity_GetLinearVelocity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_GetLocation',\n 'BrickComponentData_WireGraph_Exec_Entity_GetLocation',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_GetLocationRotation',\n 'BrickComponentData_WireGraph_Exec_Entity_GetLocationRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_GetRotation',\n 'BrickComponentData_WireGraph_Exec_Entity_GetRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_GetTag',\n 'BrickComponentData_WireGraph_Exec_Entity_GetTag',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_GetVelocity',\n 'BrickComponentData_WireGraph_Exec_Entity_GetVelocity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_RelativeTeleport',\n 'BrickComponentData_WireGraph_Exec_Entity_RelativeTeleport',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetAngularVelocity',\n 'BrickComponentData_WireGraph_Exec_Entity_SetAngularVelocity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetFrozen',\n 'BrickComponentData_WireGraph_Exec_Entity_SetFrozen',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetGravityDirection',\n 'BrickComponentData_WireGraph_Exec_Entity_SetGravityDirection',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetLinearVelocity',\n 'BrickComponentData_WireGraph_Exec_Entity_SetLinearVelocity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetLocation',\n 'BrickComponentData_WireGraph_Exec_Entity_SetLocation',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetLocationRotation',\n 'BrickComponentData_WireGraph_Exec_Entity_SetLocationRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetRotation',\n 'BrickComponentData_WireGraph_Exec_Entity_SetRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetTag',\n 'BrickComponentData_WireGraph_Exec_Entity_SetTag',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_SetVelocity',\n 'BrickComponentData_WireGraph_Exec_Entity_SetVelocity',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Entity_Teleport',\n 'BrickComponentData_WireGraph_Exec_Entity_Teleport',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_BroadcastChatMessage',\n 'BrickComponentData_WireGraph_Exec_Gamemode_BroadcastChatMessage',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_BroadcastStatusMessage',\n 'BrickComponentData_WireGraph_Exec_Gamemode_BroadcastStatusMessage',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_FillArrayFromPlayers',\n 'BrickComponentData_WireGraph_Exec_ArrayVar_Base',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_FillArrayFromTeamMembers',\n 'BrickComponentData_WireGraph_Exec_Gamemode_FillArrayFromTeamMembers',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_GetCurrentRound',\n 'BrickComponentData_WireGraph_Exec_Gamemode_GetCurrentRound',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_GetLeaderboardValue',\n 'BrickComponentData_WireGraph_Exec_Gamemode_GetLeaderboardValue',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_GetTeam',\n 'BrickComponentData_WireGraph_Exec_Gamemode_GetTeam',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_GetTeamByName',\n 'BrickComponentData_WireGraph_Exec_Gamemode_GetTeamByName',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_GetTeamLeaderboardValue',\n 'BrickComponentData_WireGraph_Exec_Gamemode_GetTeamLeaderboardValue',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_GetTeamName',\n 'BrickComponentData_WireGraph_Exec_Gamemode_GetTeamName',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_IncrementLeaderboardValue',\n 'BrickComponentData_WireGraph_Exec_Gamemode_LeaderboardValue',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_IncrementTeamLeaderboardValue',\n 'BrickComponentData_WireGraph_Exec_Gamemode_TeamLeaderboardValue',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_PlayerWins',\n 'BrickComponentData_WireGraph_Exec_Gamemode_PlayerWins',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_SetLeaderboardValue',\n 'BrickComponentData_WireGraph_Exec_Gamemode_LeaderboardValue',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_SetTeam',\n 'BrickComponentData_WireGraph_Exec_Gamemode_SetTeam',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_SetTeamLeaderboardValue',\n 'BrickComponentData_WireGraph_Exec_Gamemode_TeamLeaderboardValue',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_SetTeamPinned',\n 'BrickComponentData_WireGraph_Exec_Gamemode_SetTeamPinned',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Gamemode_TeamWins',\n 'BrickComponentData_WireGraph_Exec_Gamemode_TeamWins',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_PlayGlobalAudio',\n 'BrickComponentData_WireGraph_Exec_PlayGlobalAudio',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_PrefabSpawner',\n 'BrickComponentData_WireGraph_Exec_PrefabSpawner',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_PrintToConsole',\n 'BrickComponentData_WireGraph_Exec_PrintToConsole',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Random',\n 'BrickComponentData_WireGraph_Exec_Random',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Sweep',\n 'BrickComponentData_WireGraph_Exec_Sweep',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Toggle',\n 'BrickComponentData_WireGraph_Exec_Toggle',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Union',\n 'BrickComponentData_WireGraph_ExecUnion',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Var_Get',\n 'BrickComponentData_WireGraph_Exec_Var_Get',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Var_Increment',\n 'BrickComponentData_WireGraph_Exec_Var_EditOrGet',\n ],\n [\n 'BrickComponentType_WireGraph_Exec_Var_Set',\n 'BrickComponentData_WireGraph_Exec_Var_EditOrGet',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseAND',\n 'BrickComponentData_WireGraph_Expr_IntInt_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseBitCount',\n 'BrickComponentData_WireGraph_Expr_Int_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseNAND',\n 'BrickComponentData_WireGraph_Expr_IntInt_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseNOR',\n 'BrickComponentData_WireGraph_Expr_IntInt_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseNOT',\n 'BrickComponentData_WireGraph_Expr_Int_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseOR',\n 'BrickComponentData_WireGraph_Expr_IntInt_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseShiftLeft',\n 'BrickComponentData_WireGraph_Expr_IntInt_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseShiftRight',\n 'BrickComponentData_WireGraph_Expr_IntInt_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_BitwiseXOR',\n 'BrickComponentData_WireGraph_Expr_IntInt_Int',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_Ceil',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_ColorBlend',\n 'BrickComponentData_WireGraph_Expr_ColorBlend',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_ColorConvert',\n 'BrickComponentData_WireGraph_Expr_ColorConvert',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_ColorToHex',\n 'BrickComponentData_WireGraph_Expr_ColorToHex',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_CompareEqual',\n 'BrickComponentData_WireGraph_Expr_Compare',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_CompareGreater',\n 'BrickComponentData_WireGraph_Expr_MathCompare',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_CompareGreaterOrEqual',\n 'BrickComponentData_WireGraph_Expr_MathCompare',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_CompareLess',\n 'BrickComponentData_WireGraph_Expr_MathCompare',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_CompareLessOrEqual',\n 'BrickComponentData_WireGraph_Expr_MathCompare',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_CompareNotEqual',\n 'BrickComponentData_WireGraph_Expr_Compare',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_Convert',\n 'BrickComponentData_WireGraph_Expr_Convert',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_DirectionToRotation',\n 'BrickComponentData_WireGraph_Expr_DirectionToRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_EdgeDetector',\n 'BrickComponentData_WireGraph_Expr_EdgeDetector',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_Floor',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_InvertRotation',\n 'BrickComponentData_WireGraph_Expr_InvertRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_LogicalAND',\n 'BrickComponentData_WireGraph_Expr_BoolBool_Bool',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_LogicalNAND',\n 'BrickComponentData_WireGraph_Expr_BoolBool_Bool',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_LogicalNOR',\n 'BrickComponentData_WireGraph_Expr_BoolBool_Bool',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_LogicalNOT',\n 'BrickComponentData_WireGraph_Expr_Bool_Bool',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_LogicalOR',\n 'BrickComponentData_WireGraph_Expr_BoolBool_Bool',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_LogicalXOR',\n 'BrickComponentData_WireGraph_Expr_BoolBool_Bool',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MakeColor',\n 'BrickComponentData_WireGraph_Expr_MakeColor',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MakeColorHex',\n 'BrickComponentData_WireGraph_Expr_MakeColorHex',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MakeColorSRGB',\n 'BrickComponentData_WireGraph_Expr_MakeColorSRGB',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MakeQuaternion',\n 'BrickComponentData_WireGraph_Expr_MakeQuaternion',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MakeRotation',\n 'BrickComponentData_WireGraph_Expr_MakeRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MakeVector',\n 'BrickComponentData_WireGraph_Expr_MakeVector',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAbs',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAcos',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAcosh',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAdd',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAsin',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAsinh',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAtan',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAtan2',\n 'BrickComponentData_WireGraph_Expr_MathAtan2',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathAtanh',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathBlend',\n 'BrickComponentData_WireGraph_Expr_MathBlend',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathClamp',\n 'BrickComponentData_WireGraph_Expr_MathClamp',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathCos',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathCosh',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathDegreesToRadians',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathDivide',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathEasing',\n 'BrickComponentData_WireGraph_Expr_MathEasing',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathExp',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathLn',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathLogBase',\n 'BrickComponentData_WireGraph_Expr_MathLogBase',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathMax',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathMin',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathModulo',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathModuloFloored',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathMultiply',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathNegate',\n 'BrickComponentData_WireGraph_Expr_Variant_Variant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathPow',\n 'BrickComponentData_WireGraph_Expr_MathPow',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathRadiansToDegrees',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathSign',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathSin',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathSinh',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathSqrt',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathSubtract',\n 'BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathTan',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_MathTanh',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_NearlyEqual',\n 'BrickComponentData_WireGraph_Expr_NearlyEqual',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_QuatAngleBetween',\n 'BrickComponentData_WireGraph_Expr_QuatAngleBetween',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_QuatBetween',\n 'BrickComponentData_WireGraph_Expr_QuatBetween',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_QuatDotProduct',\n 'BrickComponentData_WireGraph_Expr_QuatDotProduct',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_QuatFromAxisAngle',\n 'BrickComponentData_WireGraph_Expr_QuatFromAxisAngle',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_QuatSlerp',\n 'BrickComponentData_WireGraph_Expr_QuatSlerp',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_QuatToAxisAngle',\n 'BrickComponentData_WireGraph_Expr_QuatToAxisAngle',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_RotateVector',\n 'BrickComponentData_WireGraph_Expr_RotateVector',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_RotationToDirection',\n 'BrickComponentData_WireGraph_Expr_RotationToDirection',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_Round',\n 'BrickComponentData_WireGraph_Expr_Float_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_Select',\n 'BrickComponentData_WireGraph_Expr_Select',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_SplitColor',\n 'BrickComponentData_WireGraph_Expr_SplitColor',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_SplitColorSRGB',\n 'BrickComponentData_WireGraph_Expr_SplitColorSRGB',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_SplitQuaternion',\n 'BrickComponentData_WireGraph_Expr_SplitQuaternion',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_SplitRotation',\n 'BrickComponentData_WireGraph_Expr_SplitRotation',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_SplitVector',\n 'BrickComponentData_WireGraph_Expr_SplitVector',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_Concatenate',\n 'BrickComponentData_WireGraph_Expr_String_Concatenate',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_Contains',\n 'BrickComponentData_WireGraph_Expr_String_Contains',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_EndsWith',\n 'BrickComponentData_WireGraph_Expr_String_EndsWith',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_Find',\n 'BrickComponentData_WireGraph_Expr_String_Find',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_FormatText',\n 'BrickComponentData_WireGraph_Expr_String_FormatText',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_Length',\n 'BrickComponentData_WireGraph_Expr_String_Length',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_ParseInt',\n 'BrickComponentData_WireGraph_Expr_String_ParseInt',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_ParseNumber',\n 'BrickComponentData_WireGraph_Expr_String_ParseNumber',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_Replace',\n 'BrickComponentData_WireGraph_Expr_String_Replace',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_Split',\n 'BrickComponentData_WireGraph_Expr_String_Split',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_StartsWith',\n 'BrickComponentData_WireGraph_Expr_String_StartsWith',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_Substring',\n 'BrickComponentData_WireGraph_Expr_String_Substring',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_ToLower',\n 'BrickComponentData_WireGraph_Expr_String_ToLower',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_ToUpper',\n 'BrickComponentData_WireGraph_Expr_String_ToUpper',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_String_Trim',\n 'BrickComponentData_WireGraph_Expr_String_Trim',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_Swap',\n 'BrickComponentData_WireGraph_Expr_Swap',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_VecCrossProduct',\n 'BrickComponentData_WireGraph_Expr_VecVec_Vec',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_VecDistance',\n 'BrickComponentData_WireGraph_Expr_VecVec_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_VecDistanceSquared',\n 'BrickComponentData_WireGraph_Expr_VecVec_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_VecDotProduct',\n 'BrickComponentData_WireGraph_Expr_VecVec_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_VecMagnitude',\n 'BrickComponentData_WireGraph_Expr_Vec_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_VecMagnitudeSquared',\n 'BrickComponentData_WireGraph_Expr_Vec_Float',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_VecNormalize',\n 'BrickComponentData_WireGraph_Expr_Vec_Vec',\n ],\n [\n 'BrickComponentType_WireGraph_Expr_VecScale',\n 'BrickComponentData_WireGraph_Expr_VecFloat_Vec',\n ],\n [\n 'BrickComponentType_WireGraph_Fake_Gamemode_CharacterDamagedEvent',\n 'BrickComponentData_WireGraph_Fake_CharacterDamageEvent',\n ],\n [\n 'BrickComponentType_WireGraph_Fake_Gamemode_CharacterDiedEvent',\n 'BrickComponentData_WireGraph_Fake_CharacterDeathEvent',\n ],\n [\n 'BrickComponentType_WireGraph_Fake_Gamemode_CharacterSpawnedEvent',\n 'BrickComponentData_WireGraph_Fake_CharacterEvent',\n ],\n [\n 'BrickComponentType_WireGraph_Fake_Gamemode_ControllerJoinedEvent',\n 'BrickComponentData_WireGraph_Fake_ControllerEvent',\n ],\n [\n 'BrickComponentType_WireGraph_Fake_Gamemode_ControllerLeftEvent',\n 'BrickComponentData_WireGraph_Fake_ControllerEvent',\n ],\n [\n 'BrickComponentType_WireGraph_Fake_Gamemode_RoundEndEvent',\n 'BrickComponentData_WireGraph_Fake_RoundEvent',\n ],\n [\n 'BrickComponentType_WireGraph_Fake_Gamemode_RoundStartEvent',\n 'BrickComponentData_WireGraph_Fake_RoundEvent',\n ],\n [\n 'BrickComponentType_WireGraph_FindPlayer',\n 'BrickComponentData_WireGraph_FindPlayer',\n ],\n [\n 'BrickComponentType_WireGraph_FontReference',\n 'BrickComponentData_WireGraph_FontReference',\n ],\n [\n 'BrickComponentType_WireGraph_ItemReference',\n 'BrickComponentData_WireGraph_ItemReference',\n ],\n [\n 'BrickComponentType_WireGraph_OneShotAudioReference',\n 'BrickComponentData_WireGraph_OneShotAudioReference',\n ],\n [\n 'BrickComponentType_WireGraph_ParticleReference',\n 'BrickComponentData_WireGraph_ParticleReference',\n ],\n [\n 'BrickComponentType_WireGraph_PickupReference',\n 'BrickComponentData_WireGraph_PickupReference',\n ],\n [\n 'BrickComponentType_WireGraph_ProjectileReference',\n 'BrickComponentData_WireGraph_ProjectileReference',\n ],\n [\n 'BrickComponentType_WireGraph_ServerUptime',\n 'BrickComponentData_WireGraph_ServerUptime',\n ],\n [\n 'BrickComponentType_WireGraph_WheelEngineAudioReference',\n 'BrickComponentData_WireGraph_WheelEngineAudioReference',\n ],\n ['Component_AudioEmitter', 'BrickComponentData_AudioEmitter'],\n ['Component_BotSpawn', 'BrickComponentData_BotSpawn'],\n ['Component_BrickPropertyChanger', 'BrickComponentData_BrickPropertyChanger'],\n ['Component_Button', 'BrickComponentData_Button'],\n ['Component_CheckPoint', 'BrickComponentData_CheckPoint'],\n ['Component_Damage', 'BrickComponentData_Damage'],\n ['Component_Interact', 'BrickComponentData_Interact'],\n ['Component_Internal_AnimatedButton', 'BrickComponentData_Button'],\n ['Component_Internal_AnimatedPressurePlate', 'BrickComponentData_Touch'],\n ['Component_Internal_AnimatedSwitch', 'BrickComponentData_Switch'],\n [\n 'Component_Internal_AttachedZone',\n 'BrickComponentData_Internal_AttachedZone',\n ],\n ['Component_Internal_Bearing', 'BrickComponentData_Bearing'],\n ['Component_Internal_Gyroscope', 'BrickComponentData_Gyroscope'],\n [\n 'Component_Internal_InputSplitter',\n 'BrickComponentData_Internal_InputSplitter_V2',\n ],\n ['Component_Internal_Joint_Wheel', 'BrickComponentData_Joint_Wheel'],\n [\n 'Component_Internal_Joint_Wheel_Suspension',\n 'BrickComponentData_Joint_Wheel_Suspension',\n ],\n ['Component_Internal_Microchip', 'BrickComponentData_Internal_Microchip'],\n ['Component_Internal_Motor', 'BrickComponentData_Motor'],\n ['Component_Internal_MotorSlider', 'BrickComponentData_MotorSlider'],\n [\n 'Component_Internal_ProjectileSpawner_Cannon',\n 'BrickComponentData_ProjectileSpawner',\n ],\n ['Component_Internal_Rerouter', 'BrickComponentData_Rerouter'],\n ['Component_Internal_RigidBearing', 'BrickComponentData_RigidBearing'],\n ['Component_Internal_RigidSlider', 'BrickComponentData_RigidSlider'],\n ['Component_Internal_Seat', 'BrickComponentData_Seat_V2'],\n ['Component_Internal_Servo', 'BrickComponentData_Servo'],\n ['Component_Internal_ServoSlider', 'BrickComponentData_ServoSlider'],\n ['Component_Internal_Slider', 'BrickComponentData_Slider'],\n ['Component_Internal_Thruster', 'BrickComponentData_Thruster'],\n ['Component_Internal_WeightBrick', 'BrickComponentData_WeightBrick'],\n ['Component_Internal_WheelEngine', 'BrickComponentData_WheelEngine_V2'],\n ['Component_ItemSpawn', 'BrickComponentData_ItemSpawn'],\n ['Component_OneShotAudioEmitter', 'BrickComponentData_OneShotAudioEmitter'],\n ['Component_PointLight', 'BrickComponentData_PointLight'],\n ['Component_ProjectileSpawner', 'BrickComponentData_ProjectileSpawner'],\n ['Component_SpawnPoint', 'BrickComponentData_SpawnPoint'],\n ['Component_SpotLight', 'BrickComponentData_SpotLight'],\n ['Component_Switch', 'BrickComponentData_Switch'],\n ['Component_Target', 'BrickComponentData_Target'],\n ['Component_TextDisplay', 'BrickComponentData_TextDisplay'],\n ['Component_Touch', 'BrickComponentData_Touch'],\n [\n 'Component_WireGraph_PlayAudioAt',\n 'BrickComponentData_WireGraph_Exec_Entity_PlayAudioAt',\n ],\n]);\n\n/** Component data struct name -> the game's default field values (the\n * reference crate's STRUCT_DEFAULTS). The writer fills omitted component\n * fields from here; fields with no default zero-fill. */\nexport const COMPONENT_STRUCT_DEFAULTS: ReadonlyMap<\n string,\n Readonly<Record<string, BrdbValue>>\n> = new Map(\n Object.entries({\n BrickComponentData_AudioEmitter: {\n bEnabled: true,\n VolumeMultiplier: 1,\n PitchMultiplier: 1,\n InnerRadius: 15,\n MaxDistance: 400,\n bSpatialization: true,\n FocusAzimuth: 360,\n NonFocusAzimuth: 360,\n NonFocusVolumeAttenuation: 1,\n },\n BrickComponentData_Bearing: {\n bLimitAngle: false,\n LimitAngle: 0,\n bAnglesArePercentages: false,\n bReversed: false,\n Damping: 1,\n },\n BrickComponentData_BotSpawn: {\n RespawnTime: 2,\n CorpseTimeout: 5,\n GunSkill: 0.4,\n Agression: 0.7,\n ReactionTime: 0.4,\n MovementRandomness: 50,\n RunSpeed: 1,\n HealthMultiplier: 1,\n Jumpyness: 0.7,\n MovementAmount: 0.2,\n AttackMovementAmount: 0.7,\n AggroRange: 1000,\n AttackDamageMultiplier: 1,\n bCanJump: true,\n bBackVision: false,\n bVisionRaycasting: true,\n bCanTargetPlayers: true,\n bCanTargetBots: true,\n bActiveBot: true,\n bSpawnEnable: true,\n bDeleteBot: false,\n BotName: '',\n bColorsAreLinear: true,\n TeamCollisionChannel: 0,\n bTeamCollision: true,\n bTeamCollision1: true,\n bTeamCollision2: true,\n bTeamCollision3: true,\n },\n BrickComponentData_BrickPropertyChanger: {\n bVisibility: true,\n bCollisionEnabled: true,\n bCollisionEnabled_Player: true,\n bCollisionEnabled_Player1: true,\n bCollisionEnabled_Player2: true,\n bCollisionEnabled_Player3: true,\n bCollisionEnabled_Weapon: true,\n bCollisionEnabled_Interaction: true,\n bCollisionEnabled_Physics: true,\n Color: {\n B: 200,\n G: 200,\n R: 200,\n A: 255,\n },\n MaterialAlpha: 255,\n Material: 0,\n },\n BrickComponentData_Button: {\n bAllowNearbyInteraction: true,\n bHiddenInteraction: false,\n PromptCustomLabel: '',\n },\n BrickComponentData_CheckPoint: {\n bRotatePlayerGravityOnSpawn: true,\n },\n BrickComponentData_Damage: {\n Damage: 100,\n RepeatDelay: 0,\n Message: '',\n ConsoleTag: '',\n },\n BrickComponentData_Gyroscope: {\n bEnabled: true,\n Strength: 25,\n Damping: 1,\n MaxForce: 0,\n },\n BrickComponentData_Interact: {\n Message: '',\n ConsoleTag: '',\n bAllowNearbyInteraction: true,\n bHiddenInteraction: false,\n PromptCustomLabel: '',\n },\n BrickComponentData_Internal_AttachedZone: {\n ZoneStartDistance: 0,\n ZoneEndDistance: 60,\n bIsBuildingZone: false,\n bIsLooseZone: false,\n bIsShareZone: false,\n bDetectPlayers: true,\n bDetectPlayers1: true,\n bDetectPlayers2: true,\n bDetectPlayers3: true,\n bDetectEntities: false,\n bDetectProjectiles: false,\n TagFilter: '',\n },\n BrickComponentData_Internal_CharacterZoneEvent: {\n bCollisionEnabled_Player: true,\n bCollisionEnabled_Player1: true,\n bCollisionEnabled_Player2: true,\n bCollisionEnabled_Player3: true,\n },\n BrickComponentData_Internal_MicrochipInput: {\n PortLabel: 'Input',\n },\n BrickComponentData_Internal_MicrochipOutput: {\n PortLabel: 'Output',\n },\n BrickComponentData_ItemSpawn: {\n bPickupEnabled: true,\n bPickupRespawnOnMinigameReset: true,\n PickupMinigameResetRespawnDelay: 0,\n bPickupAutoDisableOnPickup: true,\n PickupRespawnTime: 5,\n bRenderTranslucentWhenDisabled: true,\n DamageMultiplier: 1,\n WeaponSpeedMultiplier: 1,\n ItemNameOverride: '',\n PickupOffsetDirection: 0,\n PickupOffsetDistance: 5,\n PickupScale: 1,\n bOverridePickupColors: false,\n bPickupAnimationEnabled: true,\n PickupAnimationAxis: 0,\n bPickupAnimationAxisLocal: false,\n PickupSpinSpeed: 0.2,\n PickupBobSpeed: 0.1,\n PickupBobHeight: 4,\n PickupAnimationPhase: 0.14593951,\n },\n BrickComponentData_Joint_Wheel: {\n bEnabled: true,\n DriveSpeed: 100,\n DrivePower: 20,\n bSteerEnabled: true,\n Steer: 0,\n SteerLimitDegree: 90,\n SteerPower: 1000,\n bSuspensionEnabled: true,\n SuspensionStiffness: 500,\n SuspensionDamping: 50,\n JointDistance: 10,\n bDriveWhenNotAttachedToEngine: false,\n bCanBrake: true,\n bAllowEngineSteerCorrect: true,\n bReversed: false,\n Damping: 1,\n },\n BrickComponentData_Joint_Wheel_Suspension: {\n bEnabled: true,\n DriveSpeed: 100,\n DrivePower: 20,\n bSteerEnabled: true,\n Steer: 0,\n SteerLimitDegree: 90,\n SteerPower: 1000,\n bSuspensionEnabled: true,\n SuspensionStiffness: 500,\n SuspensionDamping: 50,\n SuspensionOffset: 0,\n SuspensionLength: 10,\n JointDistance: 10,\n bDriveWhenNotAttachedToEngine: false,\n bCanBrake: true,\n bAllowEngineSteerCorrect: true,\n bReversed: false,\n Damping: 1,\n },\n BrickComponentData_Motor: {\n bEnabled: true,\n Speed: 60,\n Power: 10,\n bLimitAngle: false,\n LimitAngle: 0,\n bAnglesArePercentages: false,\n bReversed: false,\n Damping: 1,\n },\n BrickComponentData_MotorSlider: {\n bEnabled: true,\n Speed: 60,\n Power: 10,\n bPositionsArePercentages: false,\n bReversed: false,\n Damping: 1,\n },\n BrickComponentData_OneShotAudioEmitter: {\n VolumeMultiplier: 1,\n PitchMultiplier: 1,\n InnerRadius: 15,\n MaxDistance: 400,\n bSpatialization: true,\n bEnableRepeat: false,\n RepeatTime: 1,\n RepeatVariance: 0,\n RepeatCount: 1,\n },\n BrickComponentData_PointLight: {\n bMatchBrickShape: true,\n bEnabled: true,\n Brightness: 20,\n Radius: 150,\n Color: {\n B: 255,\n G: 255,\n R: 255,\n A: 255,\n },\n bUseBrickColor: true,\n bCastShadows: false,\n },\n BrickComponentData_PrefabSpawn: {\n Prefab: '',\n bSpawnEnable: true,\n RespawnTime: 5,\n },\n BrickComponentData_ProjectileSpawner: {\n Direction: 0,\n SpawnLocation: 0,\n SpawnMargin: 5,\n bEnabled: false,\n NumberOfShots: 1,\n SpreadConeAngle: 0,\n bSpreadBiasedTowardsCenter: false,\n FireRate: 0,\n DamageMultiplier: 1,\n SpeedMultiplier: 1,\n ScaleMultiplier: 1,\n },\n BrickComponentData_RigidBearing: {\n TargetAngle: 0,\n bAnglesArePercentages: false,\n bReversed: false,\n InterpMode: 0,\n SmoothTime: 0.25,\n TopSpeed: 0,\n },\n BrickComponentData_RigidSlider: {\n TargetPosition: 0,\n bPositionsArePercentages: false,\n bReversed: false,\n InterpMode: 0,\n SmoothTime: 0.25,\n TopSpeed: 0,\n },\n BrickComponentData_Seat_V2: {\n bIsOccupied: false,\n bRollCameraInThirdPerson: false,\n bAllowNearbyInteraction: true,\n bHiddenInteraction: false,\n PromptCustomLabel: '',\n },\n BrickComponentData_Servo: {\n bEnabled: true,\n TargetAngle: 0,\n Power: 100,\n ActiveDamping: 30,\n ForceLimit: 0,\n bLimitAngle: false,\n LimitAngle: 0,\n bAnglesArePercentages: false,\n bReversed: false,\n Damping: 1,\n },\n BrickComponentData_ServoSlider: {\n bEnabled: true,\n TargetPosition: 0,\n Power: 100,\n TopSpeed: 0,\n Exponent: 2,\n bPositionsArePercentages: false,\n bReversed: false,\n Damping: 1,\n },\n BrickComponentData_Slider: {\n bPositionsArePercentages: false,\n bReversed: false,\n Damping: 1,\n },\n BrickComponentData_SpawnPoint: {\n bRotatePlayerGravityOnSpawn: true,\n bEnable: true,\n },\n BrickComponentData_SpotLight: {\n InnerConeAngle: 30,\n OuterConeAngle: 60,\n bEnabled: true,\n Brightness: 20,\n Radius: 150,\n Color: {\n B: 255,\n G: 255,\n R: 255,\n A: 255,\n },\n bUseBrickColor: true,\n bCastShadows: false,\n },\n BrickComponentData_Switch: {\n bEnabled: false,\n bAllowNearbyInteraction: true,\n bHiddenInteraction: false,\n PromptCustomLabel: '',\n },\n BrickComponentData_Target: {\n OnTime: 0.5,\n },\n BrickComponentData_TextDisplay: {\n Text: 'Hello World',\n Rotation: 0,\n Skew: 0,\n Kerning: 0,\n LineHeight: 10,\n LineOffset: 0,\n Color: {\n B: 255,\n G: 255,\n R: 255,\n A: 255,\n },\n MaterialSlider: 10,\n ShadingWidth: 2,\n OutlineColor: {\n B: 0,\n G: 0,\n R: 0,\n A: 255,\n },\n OutlineWidth: 2,\n ScuffWidth: 0,\n GraffitiDepthLimit: 5,\n GraffitiAngleLimit: 45,\n GraffitiLayer: 0,\n bEnabled: true,\n Face: 0,\n bAlignToWedge: false,\n bOverrideColor: true,\n Typeface: 0,\n Billboard: 0,\n Material: 0,\n Shading: 0,\n bFlipShading: false,\n Outline: 0,\n bSharpCorners: true,\n bSharpOutlines: true,\n bOverrideOutlineColor: true,\n bForeground: false,\n },\n BrickComponentData_Thruster: {\n bEnabled: true,\n Force: 1000,\n Throttle: 0,\n Pitch: 0,\n Yaw: 0,\n bSpawnLight: true,\n },\n BrickComponentData_Touch: {\n bCollisionEnabled_Player: true,\n bCollisionEnabled_Player1: true,\n bCollisionEnabled_Player2: true,\n bCollisionEnabled_Player3: true,\n },\n BrickComponentData_WeightBrick: {\n Mass: 1,\n },\n BrickComponentData_WheelEngine_V2: {\n bEnabled: true,\n bEnableManualControl: false,\n ManualInput_Drive: 0,\n ManualInput_Steer: 0,\n bManualInput_Brake: false,\n CustomMass: 500,\n CustomMassVerticalOffset: 0,\n DriveInterpSpeed: 1,\n DriveSpeed: 500,\n DriveAcceleratingPowerMultiplier: 0.5,\n DriveBrakingPowerMultiplier: 10,\n DriveDampingMultiplier: 1,\n SteerPowerMultiplier: 100,\n WheelFrictionMultiplier: 0.8,\n SteerInterpSpeed: 10,\n SteerLimitSpeedFalloff: 1,\n SteerLimitDegree: 32,\n CenterOfSteering: 0,\n bTankSteering: false,\n TankSteerSpeedMultiplier: 1,\n bAutoRight: true,\n WaterDriveForce: 200,\n WaterSteeringForce: 100,\n },\n BrickComponentData_WireGraphPseudo_BufferSeconds: {\n SecondsToWait: 1,\n ZeroSecondsToWait: -1,\n CurrentTime: 0,\n bHasQueued: false,\n bIsOffTimer: false,\n },\n BrickComponentData_WireGraphPseudo_BufferTicks: {\n TicksToWait: 0,\n ZeroTicksToWait: -1,\n CurrentTicks: 0,\n bHasQueued: false,\n bIsOffTimer: false,\n },\n BrickComponentData_WireGraphPseudo_Dampen: {\n SmoothTime: 0.3,\n },\n BrickComponentData_WireGraphPseudo_QueueSeconds: {\n SecondsToWait: 1,\n },\n BrickComponentData_WireGraphPseudo_QueueTicks: {\n TicksToWait: 1,\n },\n BrickComponentData_WireGraphPseudo_Timer: {\n Limit: 1,\n Time: 0,\n bRunning: false,\n },\n BrickComponentData_WireGraphPseudo_Tween: {\n Duration: 1,\n Elapsed: 0,\n Function: 0,\n Direction: 0,\n },\n BrickComponentData_WireGraph_ExecBranch: {\n bCond: false,\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_ElementOp: {\n Index: 0,\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Get: {\n Index: 0,\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Insert: {\n Index: 0,\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_RemoveAtIndex: {\n Index: 0,\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Resize: {\n Size: 0,\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Slice: {\n Start: 0,\n Count: 0,\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Sort: {\n bDescending: false,\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Swap: {\n IndexA: 0,\n IndexB: 0,\n },\n BrickComponentData_WireGraph_Exec_Character_IncDamage: {\n Amount: 0,\n },\n BrickComponentData_WireGraph_Exec_Character_SetDamage: {\n Damage: 0,\n },\n BrickComponentData_WireGraph_Exec_Character_SetInventoryBrick: {\n Slot: 0,\n },\n BrickComponentData_WireGraph_Exec_Character_SetInventoryEntity: {\n Slot: 0,\n },\n BrickComponentData_WireGraph_Exec_Character_SetInventoryEntry: {\n Slot: 0,\n },\n BrickComponentData_WireGraph_Exec_Character_SetInventoryItem: {\n Slot: 0,\n },\n BrickComponentData_WireGraph_Exec_Character_SetTempPermission: {\n PermissionTagStr: 'BR.Permission.Building',\n bPermissionEnable: false,\n },\n BrickComponentData_WireGraph_Exec_Character_ShowHint: {\n HintTitle: '',\n HintText: '',\n },\n BrickComponentData_WireGraph_Exec_ChatCommand: {\n CommandName: '',\n HelpText: '',\n },\n BrickComponentData_WireGraph_Exec_Controller_DisplayText: {\n Text: '',\n AnchorX: 0.5,\n AnchorY: 0.5,\n PositionX: 0,\n PositionY: 0,\n Angle: 0,\n ScaleX: 1,\n ScaleY: 1,\n FontSize: 16,\n FontColor: {\n B: 255,\n G: 255,\n R: 255,\n A: 255,\n },\n OutlineSize: 2,\n OutlineColor: {\n B: 37,\n G: 20,\n R: 24,\n A: 255,\n },\n Justification: 0,\n Transition: 0,\n Easing: 0,\n Lifetime: 5,\n TextId: 0,\n },\n BrickComponentData_WireGraph_Exec_Controller_HasPermission: {\n PermissionName: 'BR.Permission.AlwaysSave',\n },\n BrickComponentData_WireGraph_Exec_Controller_HasRole: {\n RoleName: '',\n },\n BrickComponentData_WireGraph_Exec_Controller_SetCanRespawn: {\n bCanRespawn: true,\n },\n BrickComponentData_WireGraph_Exec_Controller_ShowChatMessage: {\n Message: '',\n },\n BrickComponentData_WireGraph_Exec_Cycle: {\n Count: 3,\n Value: 0,\n },\n BrickComponentData_WireGraph_Exec_Entity_PlayAudioAt: {\n VolumeMultiplier: 1,\n PitchMultiplier: 1,\n InnerRadius: 0,\n MaxDistance: 10000,\n bSpatialization: true,\n },\n BrickComponentData_WireGraph_Exec_Entity_SetFrozen: {\n bFrozen: false,\n },\n BrickComponentData_WireGraph_Exec_Entity_SetTag: {\n Tag: '',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_BroadcastChatMessage: {\n Message: '',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_BroadcastStatusMessage: {\n Message: '',\n bFlashIfUnchanged: true,\n },\n BrickComponentData_WireGraph_Exec_Gamemode_GetLeaderboardValue: {\n Key: 'Score',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_GetTeamByName: {\n TeamName: '',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_GetTeamLeaderboardValue: {\n Key: 'Score',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_LeaderboardValue: {\n Key: 'Score',\n Value: 0,\n },\n BrickComponentData_WireGraph_Exec_Gamemode_PlayerWins: {\n bTeamWinsInstead: false,\n },\n BrickComponentData_WireGraph_Exec_Gamemode_SetTeam: {\n bPinPlayerToTeam: false,\n },\n BrickComponentData_WireGraph_Exec_Gamemode_SetTeamPinned: {\n bPinned: true,\n },\n BrickComponentData_WireGraph_Exec_Gamemode_TeamLeaderboardValue: {\n Key: 'Score',\n Value: 0,\n },\n BrickComponentData_WireGraph_Exec_PlayGlobalAudio: {\n VolumeMultiplier: 1,\n PitchMultiplier: 1,\n },\n BrickComponentData_WireGraph_Exec_PrefabSpawner: {\n Prefab: '',\n Lifetime: 5,\n Limit: 5,\n },\n BrickComponentData_WireGraph_Exec_PrintToConsole: {\n Text: '',\n },\n BrickComponentData_WireGraph_Exec_Sweep: {\n Distance: 1000,\n Radius: 0,\n bDetectBricks: true,\n bDetectPlayers1: true,\n bDetectPlayers2: true,\n bDetectPlayers3: true,\n bDetectPlayers4: true,\n bDetectPhysics: true,\n bDetectMap: true,\n bRelative: false,\n bIgnoreOwningGrid: true,\n },\n BrickComponentData_WireGraph_Exec_Toggle: {\n Value: false,\n },\n BrickComponentData_WireGraph_Expr_BoolBool_Bool: {\n bInputA: false,\n bInputB: false,\n },\n BrickComponentData_WireGraph_Expr_Bool_Bool: {\n bInput: false,\n },\n BrickComponentData_WireGraph_Expr_ColorBlend: {\n Alpha: 0.5,\n BlendSpace: 0,\n bClampAlpha: true,\n },\n BrickComponentData_WireGraph_Expr_ColorConvert: {\n FromSpace: 0,\n ToSpace: 0,\n },\n BrickComponentData_WireGraph_Expr_EdgeDetector: {\n Input: 0,\n bPulseOnRisingEdge: false,\n bPulseOnFallingEdge: false,\n },\n BrickComponentData_WireGraph_Expr_Float_Float: {\n Input: 0,\n },\n BrickComponentData_WireGraph_Expr_IntInt_Int: {\n InputA: 0,\n InputB: 0,\n },\n BrickComponentData_WireGraph_Expr_Int_Int: {\n Input: 0,\n },\n BrickComponentData_WireGraph_Expr_MakeColor: {\n R: 1,\n G: 1,\n B: 1,\n A: 1,\n },\n BrickComponentData_WireGraph_Expr_MakeColorHex: {\n Hex: '',\n },\n BrickComponentData_WireGraph_Expr_MakeColorSRGB: {\n R: 255,\n G: 255,\n B: 255,\n A: 255,\n },\n BrickComponentData_WireGraph_Expr_MakeQuaternion: {\n X: 0,\n Y: 0,\n Z: 0,\n W: 1,\n },\n BrickComponentData_WireGraph_Expr_MakeRotation: {\n Pitch: 0,\n Yaw: 0,\n Roll: 0,\n },\n BrickComponentData_WireGraph_Expr_MakeVector: {\n X: 0,\n Y: 0,\n Z: 0,\n },\n BrickComponentData_WireGraph_Expr_MathAtan2: {\n Y: 0,\n X: 0,\n },\n BrickComponentData_WireGraph_Expr_MathBlend: {\n Blend: 0,\n bClampAlpha: true,\n },\n BrickComponentData_WireGraph_Expr_MathEasing: {\n Blend: 0,\n Function: 0,\n Direction: 0,\n },\n BrickComponentData_WireGraph_Expr_MathLogBase: {\n Input: 0,\n Base: 10,\n },\n BrickComponentData_WireGraph_Expr_MathPow: {\n Input: 0,\n Exponent: 2,\n },\n BrickComponentData_WireGraph_Expr_NearlyEqual: {\n Tolerance: 0.00009999999747378752,\n },\n BrickComponentData_WireGraph_Expr_QuatFromAxisAngle: {\n Angle: 0,\n },\n BrickComponentData_WireGraph_Expr_QuatSlerp: {\n Alpha: 0,\n bShortestPath: true,\n bClampAlpha: true,\n },\n BrickComponentData_WireGraph_Expr_Select: {\n bSelectB: false,\n },\n BrickComponentData_WireGraph_Expr_String_Concatenate: {\n InputA: '',\n InputB: '',\n Separator: '',\n },\n BrickComponentData_WireGraph_Expr_String_Contains: {\n Input: '',\n Search: '',\n bCaseSensitive: true,\n },\n BrickComponentData_WireGraph_Expr_String_EndsWith: {\n Input: '',\n Suffix: '',\n bCaseSensitive: true,\n },\n BrickComponentData_WireGraph_Expr_String_Find: {\n Input: '',\n Search: '',\n bCaseSensitive: true,\n },\n BrickComponentData_WireGraph_Expr_String_FormatText: {\n FormatString: '',\n },\n BrickComponentData_WireGraph_Expr_String_Length: {\n Input: '',\n },\n BrickComponentData_WireGraph_Expr_String_ParseInt: {\n Input: '',\n },\n BrickComponentData_WireGraph_Expr_String_ParseNumber: {\n Input: '',\n },\n BrickComponentData_WireGraph_Expr_String_Replace: {\n Input: '',\n Search: '',\n Replacement: '',\n bCaseSensitive: true,\n },\n BrickComponentData_WireGraph_Expr_String_Split: {\n Input: '',\n Delimiter: '',\n bCaseSensitive: true,\n },\n BrickComponentData_WireGraph_Expr_String_StartsWith: {\n Input: '',\n Prefix: '',\n bCaseSensitive: true,\n },\n BrickComponentData_WireGraph_Expr_String_Substring: {\n Input: '',\n Start: 0,\n Length: 0,\n },\n BrickComponentData_WireGraph_Expr_String_ToLower: {\n Input: '',\n },\n BrickComponentData_WireGraph_Expr_String_ToUpper: {\n Input: '',\n },\n BrickComponentData_WireGraph_Expr_String_Trim: {\n Input: '',\n },\n BrickComponentData_WireGraph_Expr_Swap: {\n bSwap: false,\n },\n BrickComponentData_WireGraph_Expr_VecFloat_Vec: {\n Scalar: 0,\n },\n BrickComponentData_WireGraph_Fake_RoundEvent: {\n RoundNumber: 0,\n },\n BrickComponentData_WireGraph_FindPlayer: {\n Query: '',\n },\n })\n);\n\n/** Known wire port names (a save's port registry is built from the ports\n * its wires actually use, but names must come from this vocabulary). */\nexport const WIRE_PORT_NAMES: readonly string[] = [\n 'A',\n 'ActiveDamping',\n 'AdditionalIgnoredEntities',\n 'AggroRange',\n 'Agression',\n 'Alpha',\n 'Amount',\n 'Anchor',\n 'Anchor.X',\n 'Anchor.Y',\n 'AnchorX',\n 'AnchorY',\n 'Angle',\n 'AngularVelocity',\n 'AngularVelocity.X',\n 'AngularVelocity.Y',\n 'AngularVelocity.Z',\n 'Arguments',\n 'ArrayVarRef',\n 'Arrived',\n 'AttackDamageMultiplier',\n 'AttackMovementAmount',\n 'Attacker',\n 'AttackerWeapon',\n 'AttackerWeaponName',\n 'AudioDescriptor',\n 'Axis',\n 'Axis.X',\n 'Axis.Y',\n 'Axis.Z',\n 'B',\n 'Base',\n 'BeginTouchSound',\n 'Billboard',\n 'Blend',\n 'BotName',\n 'BotWeapon',\n 'BrickAsset',\n 'BrickGrid',\n 'Brightness',\n 'CenterOfSteering',\n 'Character',\n 'CharacterThatJustHit',\n 'Color',\n 'Color.A',\n 'Color.B',\n 'Color.G',\n 'Color.R',\n 'ColorA',\n 'ColorA.A',\n 'ColorA.B',\n 'ColorA.G',\n 'ColorA.R',\n 'ColorB',\n 'ColorB.A',\n 'ColorB.B',\n 'ColorB.G',\n 'ColorB.R',\n 'ConsoleTag',\n 'Control_DriveAndSteer',\n 'Controller',\n 'CorpseTimeout',\n 'Count',\n 'CurrentAngle',\n 'CurrentPosition',\n 'CustomMass',\n 'CustomMassVerticalOffset',\n 'Damage',\n 'DamageLimit',\n 'DamageMultiplier',\n 'Damping',\n 'DataIn1',\n 'DataIn2',\n 'DataIn3',\n 'DataIn4',\n 'DataIn5',\n 'DataIn6',\n 'DataIn7',\n 'DataIn8',\n 'DataOut1',\n 'DataOut2',\n 'DataOut3',\n 'DataOut4',\n 'DataOut5',\n 'DataOut6',\n 'DataOut7',\n 'DataOut8',\n 'Delimiter',\n 'DeltaTime',\n 'Destination',\n 'DestroyAll',\n 'Direction',\n 'Direction.X',\n 'Direction.Y',\n 'Direction.Z',\n 'DisplayName',\n 'Distance',\n 'DistanceToTarget',\n 'DriveAcceleratingPowerMultiplier',\n 'DriveBrakingPowerMultiplier',\n 'DriveDampingMultiplier',\n 'DriveInterpSpeed',\n 'DrivePower',\n 'DriveSpeed',\n 'Duration',\n 'EndTouchSound',\n 'Entity',\n 'EntityType',\n 'Exec',\n 'ExecA',\n 'ExecB',\n 'ExecDown',\n 'ExecIn',\n 'ExecOut',\n 'ExecOutA',\n 'ExecOutB',\n 'ExecOutDown',\n 'ExitOffset',\n 'ExitOffset.X',\n 'ExitOffset.Y',\n 'ExitOffset.Z',\n 'Expired',\n 'Exponent',\n 'Face',\n 'FireRate',\n 'FireSound',\n 'FocusAzimuth',\n 'FocusCharacter',\n 'Font',\n 'FontColor',\n 'FontColor.A',\n 'FontColor.B',\n 'FontColor.G',\n 'FontColor.R',\n 'Force',\n 'ForceLimit',\n 'FormatString',\n 'From',\n 'From.X',\n 'From.Y',\n 'From.Z',\n 'Function',\n 'G',\n 'GraffitiAngleLimit',\n 'GraffitiDepthLimit',\n 'GraffitiLayer',\n 'GunSkill',\n 'HealthMultiplier',\n 'Hex',\n 'Hit',\n 'HitDistance',\n 'HitEntity',\n 'HitLocation',\n 'HitNormal',\n 'IgnoreEntity',\n 'Index',\n 'IndexA',\n 'IndexB',\n 'InnerConeAngle',\n 'InnerRadius',\n 'Input',\n 'Input.A',\n 'Input.B',\n 'Input.G',\n 'Input.Pitch',\n 'Input.R',\n 'Input.Roll',\n 'Input.W',\n 'Input.X',\n 'Input.Y',\n 'Input.Yaw',\n 'Input.Z',\n 'InputA',\n 'InputA.W',\n 'InputA.X',\n 'InputA.Y',\n 'InputA.Z',\n 'InputB',\n 'InputB.W',\n 'InputB.X',\n 'InputB.Y',\n 'InputB.Z',\n 'InputC',\n 'InputD',\n 'InputE',\n 'InputF',\n 'InputForward',\n 'InputG',\n 'InputRight',\n 'Instigator',\n 'InteractSound',\n 'InterpMode',\n 'Item',\n 'ItemNameOverride',\n 'JointDistance',\n 'Jumpyness',\n 'Kerning',\n 'Key',\n 'Killer',\n 'KillerWeapon',\n 'KillerWeaponName',\n 'Left',\n 'Length',\n 'Lifetime',\n 'Limit',\n 'LimitAngle',\n 'LineHeight',\n 'LineOffset',\n 'LinearVelocity',\n 'LinearVelocity.X',\n 'LinearVelocity.Y',\n 'LinearVelocity.Z',\n 'ManualInput_Drive',\n 'ManualInput_Steer',\n 'Mass',\n 'MassOffset',\n 'MassOffset.X',\n 'MassOffset.Y',\n 'MassOffset.Z',\n 'MassSize',\n 'MassSize.X',\n 'MassSize.Y',\n 'MassSize.Z',\n 'Material',\n 'MaterialAlpha',\n 'MaterialSlider',\n 'Max',\n 'MaxDistance',\n 'MaxForce',\n 'Message',\n 'Min',\n 'Miss',\n 'MoveTarget',\n 'MoveTarget.X',\n 'MoveTarget.Y',\n 'MoveTarget.Z',\n 'MovementAmount',\n 'MovementGoalDummy',\n 'MovementRandomness',\n 'Name',\n 'NonFocusAzimuth',\n 'NonFocusVolumeAttenuation',\n 'NumberOfShots',\n 'OccupantCount',\n 'Offset',\n 'Offset.X',\n 'Offset.Y',\n 'Offset.Z',\n 'OnFired',\n 'OnTime',\n 'Origin',\n 'Origin.X',\n 'Origin.Y',\n 'Origin.Z',\n 'OuterConeAngle',\n 'Outline',\n 'OutlineColor',\n 'OutlineColor.A',\n 'OutlineColor.B',\n 'OutlineColor.G',\n 'OutlineColor.R',\n 'OutlineSize',\n 'OutlineWidth',\n 'Output',\n 'OutputB',\n 'Pause',\n 'PickupAnimationAxis',\n 'PickupAnimationPhase',\n 'PickupBobHeight',\n 'PickupBobSpeed',\n 'PickupClass',\n 'PickupMeshColors',\n 'PickupMinigameResetRespawnDelay',\n 'PickupOffsetDirection',\n 'PickupOffsetDistance',\n 'PickupRespawnTime',\n 'PickupRotation',\n 'PickupRotation.Pitch',\n 'PickupRotation.Roll',\n 'PickupRotation.Yaw',\n 'PickupScale',\n 'PickupSpinSpeed',\n 'Pitch',\n 'PitchMultiplier',\n 'Play',\n 'Player',\n 'PositionX',\n 'PositionY',\n 'Power',\n 'Prefab',\n 'Prefab.Path',\n 'Prefix',\n 'PressCount',\n 'PressSound',\n 'ProceduralSize',\n 'ProceduralSize.X',\n 'ProceduralSize.Y',\n 'ProceduralSize.Z',\n 'Projectile',\n 'ProjectileClass',\n 'ProjectileOverride',\n 'PromptCustomLabel',\n 'Query',\n 'R',\n 'RER_Input',\n 'RER_Output',\n 'Radius',\n 'ReactionTime',\n 'ReleaseSound',\n 'RepeatCount',\n 'RepeatDelay',\n 'RepeatTime',\n 'RepeatVariance',\n 'Replacement',\n 'RespawnTime',\n 'Restart',\n 'Resume',\n 'Right',\n 'Roll',\n 'Rotation',\n 'Rotation.Pitch',\n 'Rotation.Roll',\n 'Rotation.W',\n 'Rotation.X',\n 'Rotation.Y',\n 'Rotation.Yaw',\n 'Rotation.Z',\n 'RoundNumber',\n 'RunSpeed',\n 'Scalar',\n 'ScaleMultiplier',\n 'ScaleX',\n 'ScaleY',\n 'ScuffWidth',\n 'Search',\n 'SecondsToWait',\n 'Separator',\n 'Shading',\n 'ShadingWidth',\n 'SittingCharacter',\n 'Size',\n 'Skew',\n 'Skin',\n 'Skin.Parts',\n 'Slot',\n 'SmoothTime',\n 'Source',\n 'SourceRef',\n 'SpawnLocation',\n 'SpawnMargin',\n 'SpawnOffset',\n 'SpawnOffset.X',\n 'SpawnOffset.Y',\n 'SpawnOffset.Z',\n 'SpawnOffsetRotation',\n 'SpawnOffsetRotation.Pitch',\n 'SpawnOffsetRotation.Roll',\n 'SpawnOffsetRotation.Yaw',\n 'SpawnVelocity',\n 'SpawnVelocity.X',\n 'SpawnVelocity.Y',\n 'SpawnVelocity.Z',\n 'SpawnedCharacter',\n 'SpawnedEntity',\n 'Speed',\n 'SpeedMultiplier',\n 'SpreadConeAngle',\n 'Start',\n 'Steer',\n 'SteerInterpSpeed',\n 'SteerLimitDegree',\n 'SteerLimitSpeedFalloff',\n 'SteerPower',\n 'SteerPowerMultiplier',\n 'Stop',\n 'Strength',\n 'Suffix',\n 'SuspensionDamping',\n 'SuspensionLength',\n 'SuspensionOffset',\n 'SuspensionStiffness',\n 'Tag',\n 'TagFilter',\n 'TankSteerSpeedMultiplier',\n 'Target',\n 'TargetAngle',\n 'TargetAxis',\n 'TargetAxis.X',\n 'TargetAxis.Y',\n 'TargetAxis.Z',\n 'TargetPosition',\n 'Team',\n 'TeamCollisionChannel',\n 'TeamName',\n 'Text',\n 'TextId',\n 'TextIdOut',\n 'ThisDestination',\n 'Throttle',\n 'TicksToWait',\n 'Time',\n 'To',\n 'To.X',\n 'To.Y',\n 'To.Z',\n 'Tolerance',\n 'TopSpeed',\n 'TouchCount',\n 'Transition',\n 'Typeface',\n 'Uptime',\n 'UserId',\n 'UserName',\n 'Value',\n 'VarRef',\n 'Vector',\n 'Vector.X',\n 'Vector.Y',\n 'Vector.Z',\n 'VolumeMultiplier',\n 'W',\n 'WaterDriveForce',\n 'WaterSteeringForce',\n 'Weapon',\n 'WeaponName',\n 'WeaponNameThatJustHit',\n 'WeaponSpeedMultiplier',\n 'WeaponThatJustHit',\n 'WheelFrictionMultiplier',\n 'X',\n 'Y',\n 'Yaw',\n 'Z',\n 'ZeroSecondsToWait',\n 'ZeroTicksToWait',\n 'Zone',\n 'ZoneEndDistance',\n 'ZoneRef',\n 'ZoneStartDistance',\n 'bActiveBot',\n 'bAlignToWedge',\n 'bAllowEngineSteerCorrect',\n 'bAllowNearbyInteraction',\n 'bAnglesArePercentages',\n 'bAutoRight',\n 'bBackVision',\n 'bCanBrake',\n 'bCanJump',\n 'bCanRespawn',\n 'bCanTargetBots',\n 'bCanTargetPlayers',\n 'bCaseSensitive',\n 'bCastShadows',\n 'bCollisionEnabled',\n 'bCollisionEnabled_Interaction',\n 'bCollisionEnabled_Physics',\n 'bCollisionEnabled_Player',\n 'bCollisionEnabled_Player1',\n 'bCollisionEnabled_Player2',\n 'bCollisionEnabled_Player3',\n 'bCollisionEnabled_Weapon',\n 'bCond',\n 'bDeleteBot',\n 'bDescending',\n 'bDetectBricks',\n 'bDetectEntities',\n 'bDetectMap',\n 'bDetectPhysics',\n 'bDetectPlayers',\n 'bDetectPlayers1',\n 'bDetectPlayers2',\n 'bDetectPlayers3',\n 'bDetectPlayers4',\n 'bDetectProjectiles',\n 'bDriveWhenNotAttachedToEngine',\n 'bEnable',\n 'bEnableManualControl',\n 'bEnableRepeat',\n 'bEnabled',\n 'bFlashIfUnchanged',\n 'bFlipShading',\n 'bForeground',\n 'bFound',\n 'bFrozen',\n 'bHasPermission',\n 'bHasRole',\n 'bHeld',\n 'bHiddenInteraction',\n 'bIgnoreOwningGrid',\n 'bInput',\n 'bInputA',\n 'bInputB',\n 'bIsBuildingZone',\n 'bIsEmpty',\n 'bIsLooseZone',\n 'bIsOccupied',\n 'bIsShareZone',\n 'bIsTrusted',\n 'bJustHit',\n 'bLimitAngle',\n 'bManualInput_Brake',\n 'bMatchBrickShape',\n 'bOccupied',\n 'bOutOfBounds',\n 'bOutput',\n 'bOverrideColor',\n 'bOverrideOutlineColor',\n 'bOverridePickupColors',\n 'bPermissionEnable',\n 'bPickupAnimationAxisLocal',\n 'bPickupAnimationEnabled',\n 'bPickupAutoDisableOnPickup',\n 'bPickupEnabled',\n 'bPickupRespawnOnMinigameReset',\n 'bPinPlayerToTeam',\n 'bPinned',\n 'bPositionsArePercentages',\n 'bPressedJump',\n 'bPulseOnFallingEdge',\n 'bPulseOnRisingEdge',\n 'bRelative',\n 'bRenderTranslucentWhenDisabled',\n 'bReversed',\n 'bRollCameraInThirdPerson',\n 'bRotatePlayerGravityOnSpawn',\n 'bSelectB',\n 'bSharpCorners',\n 'bSharpOutlines',\n 'bShowPickupEnabled',\n 'bSpatialization',\n 'bSpawnEnable',\n 'bSpawnLight',\n 'bSpreadBiasedTowardsCenter',\n 'bSteerEnabled',\n 'bStopped',\n 'bSuccess',\n 'bSuspensionEnabled',\n 'bSwap',\n 'bTankSteering',\n 'bTeamCollision',\n 'bTeamCollision1',\n 'bTeamCollision2',\n 'bTeamCollision3',\n 'bTeamWinsInstead',\n 'bTouching',\n 'bUseBrickColor',\n 'bVisibility',\n 'bVisionRaycasting',\n 'bWelded',\n];\n\n/** Entity type name -> data class name. */\nexport const ENTITY_TYPE_STRUCTS: ReadonlyMap<string, string> = new Map([\n ['Entity_DynamicBrickGrid', 'BrickGridDynamicActor'],\n ['Entity_MicrochipDynamicBrickGrid', 'BP_MicrochipBrickGridDynamicActor_C'],\n]);\n\nexport interface ComponentPortInfo {\n /** brick assets this component lives on */\n readonly bricks: readonly string[];\n /** wire input port names */\n readonly inputs: readonly string[];\n /** wire output port names */\n readonly outputs: readonly string[];\n}\n\n/** Component type name -> host brick assets and wire port names, from a\n * live game dump (data/componentInventory.json). */\nexport const COMPONENT_WIRE_PORTS: ReadonlyMap<string, ComponentPortInfo> =\n new Map(\n Object.entries({\n BrickComponentType_Internal_CharacterZoneEvent_Entered: {\n bricks: ['B_1x1_Gate_Internal_CharacterZoneEvent_Entered'],\n inputs: [\n 'Zone',\n 'bCollisionEnabled_Player',\n 'bCollisionEnabled_Player1',\n 'bCollisionEnabled_Player2',\n 'bCollisionEnabled_Player3',\n ],\n outputs: ['Character', 'Exec'],\n },\n BrickComponentType_Internal_CharacterZoneEvent_Left: {\n bricks: ['B_1x1_Gate_Internal_CharacterZoneEvent_Left'],\n inputs: [\n 'Zone',\n 'bCollisionEnabled_Player',\n 'bCollisionEnabled_Player1',\n 'bCollisionEnabled_Player2',\n 'bCollisionEnabled_Player3',\n ],\n outputs: ['Character', 'Exec'],\n },\n BrickComponentType_Internal_MicrochipInput: {\n bricks: ['B_1x1_Gate_MicrochipInput'],\n inputs: ['RER_Input'],\n outputs: ['RER_Output'],\n },\n BrickComponentType_Internal_MicrochipOutput: {\n bricks: ['B_1x1_Gate_MicrochipOutput'],\n inputs: ['RER_Input'],\n outputs: ['RER_Output'],\n },\n BrickComponentType_Internal_ReadBrickGrid: {\n bricks: ['B_1x1_Gate_Internal_ReadBrickGrid'],\n inputs: [],\n outputs: ['BrickGrid'],\n },\n BrickComponentType_Internal_TeleportDestination: {\n bricks: ['B_DestinationPoint'],\n inputs: [],\n outputs: ['ThisDestination'],\n },\n BrickComponentType_Internal_ZoneEvent_BrickChanged: {\n bricks: ['B_1x1_Gate_Internal_ZoneEvent_BrickChanged'],\n inputs: ['Zone'],\n outputs: ['Exec'],\n },\n BrickComponentType_Internal_ZoneEvent_BrickRemoved: {\n bricks: ['B_1x1_Gate_Internal_ZoneEvent_BrickRemoved'],\n inputs: ['Zone'],\n outputs: ['Exec'],\n },\n BrickComponentType_PrefabSpawn: {\n bricks: ['B_1x1F_Round'],\n inputs: [\n 'Prefab',\n 'Prefab.Path',\n 'RespawnTime',\n 'SpawnOffset',\n 'SpawnOffset.X',\n 'SpawnOffset.Y',\n 'SpawnOffset.Z',\n 'SpawnOffsetRotation',\n 'SpawnOffsetRotation.Pitch',\n 'SpawnOffsetRotation.Roll',\n 'SpawnOffsetRotation.Yaw',\n 'bSpawnEnable',\n ],\n outputs: ['SpawnedEntity'],\n },\n BrickComponentType_WireGraph_AudioReference: {\n bricks: ['B_1x1_Gate_AudioReference'],\n inputs: [],\n outputs: ['Value'],\n },\n BrickComponentType_WireGraph_DeltaTime: {\n bricks: ['B_1x1_Gate_DeltaTime'],\n inputs: [],\n outputs: ['DeltaTime'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Append: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Append'],\n inputs: ['ArrayVarRef', 'Exec', 'SourceRef'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Average: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Average'],\n inputs: ['ArrayVarRef', 'Exec'],\n outputs: ['ExecOut', 'Value', 'bIsEmpty'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Clear: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Clear'],\n inputs: ['ArrayVarRef', 'Exec'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_CopyFrom: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_CopyFrom'],\n inputs: ['ArrayVarRef', 'Exec', 'SourceRef'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Fill: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Fill'],\n inputs: ['ArrayVarRef', 'Exec', 'Value'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Find: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Find'],\n inputs: ['ArrayVarRef', 'Exec', 'Value'],\n outputs: ['ExecOut', 'Index', 'bFound'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Get: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Get'],\n inputs: ['ArrayVarRef', 'Exec', 'Index'],\n outputs: ['ExecOut', 'Value', 'bOutOfBounds'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_GetLength: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_GetLength'],\n inputs: ['ArrayVarRef', 'Exec'],\n outputs: ['ExecOut', 'Length'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Insert: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Insert'],\n inputs: ['ArrayVarRef', 'Exec', 'Index', 'Value'],\n outputs: ['ExecOut', 'bOutOfBounds'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Max: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Max'],\n inputs: ['ArrayVarRef', 'Exec'],\n outputs: ['ExecOut', 'Value', 'bIsEmpty'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Min: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Min'],\n inputs: ['ArrayVarRef', 'Exec'],\n outputs: ['ExecOut', 'Value', 'bIsEmpty'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Pop: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Pop'],\n inputs: ['ArrayVarRef', 'Exec'],\n outputs: ['ExecOut', 'Value', 'bIsEmpty'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Push: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Push'],\n inputs: ['ArrayVarRef', 'Exec', 'Value'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_RemoveAtIndex: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_RemoveAtIndex'],\n inputs: ['ArrayVarRef', 'Exec', 'Index'],\n outputs: ['ExecOut', 'bOutOfBounds'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Resize: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Resize'],\n inputs: ['ArrayVarRef', 'Exec', 'Size', 'Value'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Reverse: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Reverse'],\n inputs: ['ArrayVarRef', 'Exec'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_SetAtIndex: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_SetAtIndex'],\n inputs: ['ArrayVarRef', 'Exec', 'Index', 'Value'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Shuffle: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Shuffle'],\n inputs: ['ArrayVarRef', 'Exec'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Slice: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Slice'],\n inputs: ['ArrayVarRef', 'Count', 'Exec', 'SourceRef', 'Start'],\n outputs: ['ExecOut', 'bOutOfBounds'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Sort: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Sort'],\n inputs: ['ArrayVarRef', 'Exec', 'bDescending'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Sum: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Sum'],\n inputs: ['ArrayVarRef', 'Exec'],\n outputs: ['ExecOut', 'Value'],\n },\n BrickComponentType_WireGraph_Exec_ArrayVar_Swap: {\n bricks: ['B_1x1_Gate_Exec_ArrayVar_Swap'],\n inputs: ['ArrayVarRef', 'Exec', 'IndexA', 'IndexB'],\n outputs: ['ExecOut', 'bOutOfBounds'],\n },\n BrickComponentType_WireGraph_Exec_Branch: {\n bricks: ['B_1x1_Gate_Exec_Branch'],\n inputs: ['Exec', 'bCond'],\n outputs: ['ExecOutA', 'ExecOutB'],\n },\n BrickComponentType_WireGraph_Exec_Character_GetAim: {\n bricks: ['B_1x1_Gate_Exec_Character_GetAim'],\n inputs: ['Character', 'Exec'],\n outputs: ['Direction', 'ExecOut', 'Origin'],\n },\n BrickComponentType_WireGraph_Exec_Character_GetDamage: {\n bricks: ['B_1x1_Gate_Exec_Character_GetDamage'],\n inputs: ['Character', 'Exec'],\n outputs: ['Damage', 'DamageLimit', 'ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Character_GetFromController: {\n bricks: ['B_1x1_Gate_Exec_Character_GetFromController'],\n inputs: ['Controller', 'Exec'],\n outputs: ['Character', 'ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Character_IncDamage: {\n bricks: ['B_1x1_Gate_Exec_Character_IncDamage'],\n inputs: ['Amount', 'Character', 'Exec'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Character_SetDamage: {\n bricks: ['B_1x1_Gate_Exec_Character_SetDamage'],\n inputs: ['Character', 'Damage', 'Exec'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Character_SetTempPermission: {\n bricks: ['B_1x1_Gate_Exec_Character_SetTempPermission'],\n inputs: ['Character', 'Exec', 'bPermissionEnable'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Character_ShowHint: {\n bricks: ['B_1x1_Gate_Exec_Character_ShowHint'],\n inputs: ['Character', 'Exec', 'HintText', 'HintTitle'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_ChatCommand: {\n bricks: ['B_1x1_Gate_Exec_ChatCommand'],\n inputs: [],\n outputs: ['Arguments', 'Controller', 'ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Controller_DisplayText: {\n bricks: ['B_1x1_Gate_Exec_Controller_DisplayText'],\n inputs: [\n 'AnchorX',\n 'AnchorY',\n 'Angle',\n 'Controller',\n 'Exec',\n 'FontColor',\n 'FontColor.A',\n 'FontColor.B',\n 'FontColor.G',\n 'FontColor.R',\n 'FontSize',\n 'Lifetime',\n 'OutlineColor',\n 'OutlineColor.A',\n 'OutlineColor.B',\n 'OutlineColor.G',\n 'OutlineColor.R',\n 'OutlineSize',\n 'PositionX',\n 'PositionY',\n 'ScaleX',\n 'ScaleY',\n 'Text',\n 'TextId',\n 'Transition',\n ],\n outputs: ['ExecOut', 'TextIdOut'],\n },\n BrickComponentType_WireGraph_Exec_Controller_GetDisplayName: {\n bricks: ['B_1x1_Gate_Exec_Controller_GetDisplayName'],\n inputs: ['Controller', 'Exec'],\n outputs: ['DisplayName', 'ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Controller_GetFromEntity: {\n bricks: ['B_1x1_Gate_Exec_Controller_GetFromEntity'],\n inputs: ['Entity', 'Exec'],\n outputs: ['Controller', 'ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Controller_GetUserId: {\n bricks: ['B_1x1_Gate_Exec_Controller_GetUserId'],\n inputs: ['Controller', 'Exec'],\n outputs: ['ExecOut', 'UserId'],\n },\n BrickComponentType_WireGraph_Exec_Controller_GetUserName: {\n bricks: ['B_1x1_Gate_Exec_Controller_GetUserName'],\n inputs: ['Controller', 'Exec'],\n outputs: ['ExecOut', 'UserName'],\n },\n BrickComponentType_WireGraph_Exec_Controller_HasPermission: {\n bricks: ['B_1x1_Gate_Exec_Controller_HasPermission'],\n inputs: ['Controller', 'Exec'],\n outputs: ['ExecOut', 'bHasPermission'],\n },\n BrickComponentType_WireGraph_Exec_Controller_IsTrustedByBrickOwner: {\n bricks: ['B_1x1_Gate_Exec_Controller_IsTrustedByBrickOwner'],\n inputs: ['Controller', 'Exec'],\n outputs: ['ExecOut', 'bIsTrusted'],\n },\n BrickComponentType_WireGraph_Exec_Controller_SetCanRespawn: {\n bricks: ['B_1x1_Gate_Exec_Controller_SetCanRespawn'],\n inputs: ['Controller', 'Exec', 'bCanRespawn'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Controller_ShowStatusMessage: {\n bricks: ['B_1x1_Gate_Exec_Controller_ShowStatusMessage'],\n inputs: ['Controller', 'Exec', 'Message'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Entity_AddLocationRotation: {\n bricks: ['B_1x1_Gate_Exec_Entity_AddLocationRotation'],\n inputs: [\n 'Entity',\n 'Exec',\n 'Rotation',\n 'Rotation.Pitch',\n 'Rotation.Roll',\n 'Rotation.Yaw',\n 'Vector',\n 'Vector.X',\n 'Vector.Y',\n 'Vector.Z',\n ],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Entity_AddVelocity: {\n bricks: ['B_1x1_Gate_Exec_Entity_AddVelocity'],\n inputs: [\n 'Entity',\n 'Exec',\n 'Rotation',\n 'Rotation.X',\n 'Rotation.Y',\n 'Rotation.Z',\n 'Vector',\n 'Vector.X',\n 'Vector.Y',\n 'Vector.Z',\n ],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Entity_GetAngularVelocity: {\n bricks: ['B_1x1_Gate_Exec_Entity_GetAngularVelocity'],\n inputs: ['Entity', 'Exec'],\n outputs: ['AngularVelocity', 'ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Entity_GetLinearVelocity: {\n bricks: ['B_1x1_Gate_Exec_Entity_GetLinearVelocity'],\n inputs: ['Entity', 'Exec'],\n outputs: ['ExecOut', 'LinearVelocity'],\n },\n BrickComponentType_WireGraph_Exec_Entity_GetLocation: {\n bricks: ['B_1x1_Gate_Exec_Entity_GetLocation'],\n inputs: ['Entity', 'Exec'],\n outputs: ['ExecOut', 'Vector'],\n },\n BrickComponentType_WireGraph_Exec_Entity_GetLocationRotation: {\n bricks: ['B_1x1_Gate_Exec_Entity_GetLocationRotation'],\n inputs: ['Entity', 'Exec'],\n outputs: ['ExecOut', 'Rotation', 'Vector'],\n },\n BrickComponentType_WireGraph_Exec_Entity_GetRotation: {\n bricks: ['B_1x1_Gate_Exec_Entity_GetRotation'],\n inputs: ['Entity', 'Exec'],\n outputs: ['ExecOut', 'Rotation'],\n },\n BrickComponentType_WireGraph_Exec_Entity_GetVelocity: {\n bricks: ['B_1x1_Gate_Exec_Entity_GetVelocity'],\n inputs: ['Entity', 'Exec'],\n outputs: ['ExecOut', 'Rotation', 'Vector'],\n },\n BrickComponentType_WireGraph_Exec_Entity_RelativeTeleport: {\n bricks: ['B_1x1_Gate_Exec_Entity_RelativeTeleport'],\n inputs: ['Destination', 'Entity', 'Exec', 'Source'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Entity_SetAngularVelocity: {\n bricks: ['B_1x1_Gate_Exec_Entity_SetAngularVelocity'],\n inputs: [\n 'AngularVelocity',\n 'AngularVelocity.X',\n 'AngularVelocity.Y',\n 'AngularVelocity.Z',\n 'Entity',\n 'Exec',\n ],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Entity_SetFrozen: {\n bricks: ['B_1x1_Gate_Exec_Entity_SetFrozen'],\n inputs: ['Entity', 'Exec', 'bFrozen'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Entity_SetGravityDirection: {\n bricks: ['B_1x1_Gate_Exec_Entity_SetGravityDirection'],\n inputs: [\n 'Entity',\n 'Exec',\n 'Rotation',\n 'Rotation.Pitch',\n 'Rotation.Roll',\n 'Rotation.Yaw',\n ],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Entity_SetLinearVelocity: {\n bricks: ['B_1x1_Gate_Exec_Entity_SetLinearVelocity'],\n inputs: [\n 'Entity',\n 'Exec',\n 'LinearVelocity',\n 'LinearVelocity.X',\n 'LinearVelocity.Y',\n 'LinearVelocity.Z',\n ],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Entity_SetLocation: {\n bricks: ['B_1x1_Gate_Exec_Entity_SetLocation'],\n inputs: [\n 'Entity',\n 'Exec',\n 'Vector',\n 'Vector.X',\n 'Vector.Y',\n 'Vector.Z',\n ],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Entity_SetLocationRotation: {\n bricks: ['B_1x1_Gate_Exec_Entity_SetLocationRotation'],\n inputs: [\n 'Entity',\n 'Exec',\n 'Rotation',\n 'Rotation.Pitch',\n 'Rotation.Roll',\n 'Rotation.Yaw',\n 'Vector',\n 'Vector.X',\n 'Vector.Y',\n 'Vector.Z',\n ],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Entity_SetRotation: {\n bricks: ['B_1x1_Gate_Exec_Entity_SetRotation'],\n inputs: [\n 'Entity',\n 'Exec',\n 'Rotation',\n 'Rotation.Pitch',\n 'Rotation.Roll',\n 'Rotation.Yaw',\n ],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Entity_SetVelocity: {\n bricks: ['B_1x1_Gate_Exec_Entity_SetVelocity'],\n inputs: [\n 'Entity',\n 'Exec',\n 'Rotation',\n 'Rotation.X',\n 'Rotation.Y',\n 'Rotation.Z',\n 'Vector',\n 'Vector.X',\n 'Vector.Y',\n 'Vector.Z',\n ],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Entity_Teleport: {\n bricks: ['B_1x1_Gate_Exec_Entity_Teleport'],\n inputs: ['Destination', 'Entity', 'Exec'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Gamemode_FillArrayFromPlayers: {\n bricks: ['B_1x1_Gate_Exec_Gamemode_FillArrayFromPlayers'],\n inputs: ['ArrayVarRef', 'Exec'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Gamemode_FillArrayFromTeamMembers: {\n bricks: ['B_1x1_Gate_Exec_Gamemode_FillArrayFromTeamMembers'],\n inputs: ['ArrayVarRef', 'Exec', 'Team'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Gamemode_GetCurrentRound: {\n bricks: ['B_1x1_Gate_Exec_Gamemode_GetCurrentRound'],\n inputs: ['Exec'],\n outputs: ['ExecOut', 'RoundNumber'],\n },\n BrickComponentType_WireGraph_Exec_Gamemode_GetLeaderboardValue: {\n bricks: ['B_1x1_Gate_Exec_Gamemode_GetLeaderboardValue'],\n inputs: ['Controller', 'Exec', 'Key'],\n outputs: ['ExecOut', 'Value'],\n },\n BrickComponentType_WireGraph_Exec_Gamemode_GetTeam: {\n bricks: ['B_1x1_Gate_Exec_Gamemode_GetTeam'],\n inputs: ['Character', 'Exec'],\n outputs: ['ExecOut', 'Team'],\n },\n BrickComponentType_WireGraph_Exec_Gamemode_GetTeamByName: {\n bricks: ['B_1x1_Gate_Exec_Gamemode_GetTeamByName'],\n inputs: ['Exec', 'TeamName'],\n outputs: ['ExecOut', 'Team'],\n },\n BrickComponentType_WireGraph_Exec_Gamemode_GetTeamLeaderboardValue: {\n bricks: ['B_1x1_Gate_Exec_Gamemode_GetTeamLeaderboardValue'],\n inputs: ['Exec', 'Key', 'Team'],\n outputs: ['ExecOut', 'Value'],\n },\n BrickComponentType_WireGraph_Exec_Gamemode_GetTeamName: {\n bricks: ['B_1x1_Gate_Exec_Gamemode_GetTeamName'],\n inputs: ['Exec', 'Team'],\n outputs: ['ExecOut', 'Name'],\n },\n BrickComponentType_WireGraph_Exec_Gamemode_IncrementLeaderboardValue: {\n bricks: ['B_1x1_Gate_Exec_Gamemode_IncrementLeaderboardValue'],\n inputs: ['Controller', 'Exec', 'Key', 'Value'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Gamemode_IncrementTeamLeaderboardValue:\n {\n bricks: ['B_1x1_Gate_Exec_Gamemode_IncrementTeamLeaderboardValue'],\n inputs: ['Exec', 'Key', 'Team', 'Value'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Gamemode_PlayerWins: {\n bricks: ['B_1x1_Gate_Exec_Gamemode_PlayerWins'],\n inputs: ['Exec', 'Player', 'bTeamWinsInstead'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Gamemode_SetLeaderboardValue: {\n bricks: ['B_1x1_Gate_Exec_Gamemode_SetLeaderboardValue'],\n inputs: ['Controller', 'Exec', 'Key', 'Value'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Gamemode_SetTeam: {\n bricks: ['B_1x1_Gate_Exec_Gamemode_SetTeam'],\n inputs: ['Controller', 'Exec', 'Team', 'bPinPlayerToTeam'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Gamemode_SetTeamLeaderboardValue: {\n bricks: ['B_1x1_Gate_Exec_Gamemode_SetTeamLeaderboardValue'],\n inputs: ['Exec', 'Key', 'Team', 'Value'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Gamemode_SetTeamPinned: {\n bricks: ['B_1x1_Gate_Exec_Gamemode_SetTeamPinned'],\n inputs: ['Controller', 'Exec', 'bPinned'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Gamemode_TeamWins: {\n bricks: ['B_1x1_Gate_Exec_Gamemode_TeamWins'],\n inputs: ['Exec', 'Team'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_PlayGlobalAudio: {\n bricks: ['B_1x1_Gate_Exec_PlayGlobalAudio'],\n inputs: ['Exec', 'PitchMultiplier', 'VolumeMultiplier'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_PrefabSpawner: {\n bricks: ['B_1x1_Gate_Exec_PrefabSpawner'],\n inputs: [\n 'Exec',\n 'Lifetime',\n 'Limit',\n 'SpawnOffset',\n 'SpawnOffset.X',\n 'SpawnOffset.Y',\n 'SpawnOffset.Z',\n 'SpawnOffsetRotation',\n 'SpawnOffsetRotation.Pitch',\n 'SpawnOffsetRotation.Roll',\n 'SpawnOffsetRotation.Yaw',\n ],\n outputs: ['Entity', 'ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_PrintToConsole: {\n bricks: ['B_1x1_Gate_Exec_PrintToConsole'],\n inputs: ['Exec', 'Text'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Random: {\n bricks: ['B_1x1_Gate_Exec_Random'],\n inputs: ['Exec', 'Max', 'Min'],\n outputs: ['ExecOut', 'Output'],\n },\n BrickComponentType_WireGraph_Exec_Sweep: {\n bricks: ['B_1x1_Gate_Exec_Sweep'],\n inputs: [\n 'Direction',\n 'Direction.X',\n 'Direction.Y',\n 'Direction.Z',\n 'Distance',\n 'Exec',\n 'IgnoreEntity',\n 'Origin',\n 'Origin.X',\n 'Origin.Y',\n 'Origin.Z',\n 'Radius',\n 'bRelative',\n ],\n outputs: [\n 'ExecOut',\n 'Hit',\n 'HitDistance',\n 'HitEntity',\n 'HitLocation',\n 'HitNormal',\n 'Miss',\n ],\n },\n BrickComponentType_WireGraph_Exec_Union: {\n bricks: ['B_1x1_Gate_Exec_Union'],\n inputs: ['ExecA', 'ExecB'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Var_Get: {\n bricks: ['B_1x1_Gate_Exec_Var_Get'],\n inputs: ['Exec', 'VarRef'],\n outputs: ['ExecOut', 'Value'],\n },\n BrickComponentType_WireGraph_Exec_Var_Increment: {\n bricks: ['B_1x1_Gate_Exec_Var_Increment'],\n inputs: ['Exec', 'Value', 'VarRef'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Exec_Var_Set: {\n bricks: ['B_1x1_Gate_Exec_Var_Set'],\n inputs: ['Exec', 'Value', 'VarRef'],\n outputs: ['ExecOut'],\n },\n BrickComponentType_WireGraph_Expr_BitwiseAND: {\n bricks: ['B_1x1_Gate_Expr_BitwiseAND'],\n inputs: ['InputA', 'InputB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_BitwiseBitCount: {\n bricks: ['B_1x1_Gate_Expr_BitwiseBitCount'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_BitwiseNAND: {\n bricks: ['B_1x1_Gate_Expr_BitwiseNAND'],\n inputs: ['InputA', 'InputB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_BitwiseNOR: {\n bricks: ['B_1x1_Gate_Expr_BitwiseNOR'],\n inputs: ['InputA', 'InputB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_BitwiseNOT: {\n bricks: ['B_1x1_Gate_Expr_BitwiseNOT'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_BitwiseOR: {\n bricks: ['B_1x1_Gate_Expr_BitwiseOR'],\n inputs: ['InputA', 'InputB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_BitwiseShiftLeft: {\n bricks: ['B_1x1_Gate_Expr_BitwiseShiftLeft'],\n inputs: ['InputA', 'InputB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_BitwiseShiftRight: {\n bricks: ['B_1x1_Gate_Expr_BitwiseShiftRight'],\n inputs: ['InputA', 'InputB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_BitwiseXOR: {\n bricks: ['B_1x1_Gate_Expr_BitwiseXOR'],\n inputs: ['InputA', 'InputB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_Ceil: {\n bricks: ['B_1x1_Gate_Expr_Ceil'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_CompareEqual: {\n bricks: ['B_1x1_Gate_Expr_CompareEqual'],\n inputs: ['InputA', 'InputB'],\n outputs: ['bOutput'],\n },\n BrickComponentType_WireGraph_Expr_CompareGreater: {\n bricks: ['B_1x1_Gate_Expr_CompareGreater'],\n inputs: ['InputA', 'InputB'],\n outputs: ['bOutput'],\n },\n BrickComponentType_WireGraph_Expr_CompareGreaterOrEqual: {\n bricks: ['B_1x1_Gate_Expr_CompareGreaterOrEqual'],\n inputs: ['InputA', 'InputB'],\n outputs: ['bOutput'],\n },\n BrickComponentType_WireGraph_Expr_CompareLess: {\n bricks: ['B_1x1_Gate_Expr_CompareLess'],\n inputs: ['InputA', 'InputB'],\n outputs: ['bOutput'],\n },\n BrickComponentType_WireGraph_Expr_CompareLessOrEqual: {\n bricks: ['B_1x1_Gate_Expr_CompareLessOrEqual'],\n inputs: ['InputA', 'InputB'],\n outputs: ['bOutput'],\n },\n BrickComponentType_WireGraph_Expr_CompareNotEqual: {\n bricks: ['B_1x1_Gate_Expr_CompareNotEqual'],\n inputs: ['InputA', 'InputB'],\n outputs: ['bOutput'],\n },\n BrickComponentType_WireGraph_Expr_EdgeDetector: {\n bricks: ['B_1x1_Gate_Expr_EdgeDetector'],\n inputs: ['Input'],\n outputs: ['bPulseOnFallingEdge', 'bPulseOnRisingEdge'],\n },\n BrickComponentType_WireGraph_Expr_Floor: {\n bricks: ['B_1x1_Gate_Expr_Floor'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_LogicalAND: {\n bricks: ['B_1x1_Gate_Expr_LogicalAND'],\n inputs: ['bInputA', 'bInputB'],\n outputs: ['bOutput'],\n },\n BrickComponentType_WireGraph_Expr_LogicalNAND: {\n bricks: ['B_1x1_Gate_Expr_LogicalNAND'],\n inputs: ['bInputA', 'bInputB'],\n outputs: ['bOutput'],\n },\n BrickComponentType_WireGraph_Expr_LogicalNOR: {\n bricks: ['B_1x1_Gate_Expr_LogicalNOR'],\n inputs: ['bInputA', 'bInputB'],\n outputs: ['bOutput'],\n },\n BrickComponentType_WireGraph_Expr_LogicalNOT: {\n bricks: ['B_1x1_Gate_Expr_LogicalNOT'],\n inputs: ['bInput'],\n outputs: ['bOutput'],\n },\n BrickComponentType_WireGraph_Expr_LogicalOR: {\n bricks: ['B_1x1_Gate_Expr_LogicalOR'],\n inputs: ['bInputA', 'bInputB'],\n outputs: ['bOutput'],\n },\n BrickComponentType_WireGraph_Expr_LogicalXOR: {\n bricks: ['B_1x1_Gate_Expr_LogicalXOR'],\n inputs: ['bInputA', 'bInputB'],\n outputs: ['bOutput'],\n },\n BrickComponentType_WireGraph_Expr_MakeColor: {\n bricks: ['B_1x1_Gate_Expr_MakeColor'],\n inputs: ['A', 'B', 'G', 'R'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MakeVector: {\n bricks: ['B_1x1_Gate_Expr_MakeVector'],\n inputs: ['X', 'Y', 'Z'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathAbs: {\n bricks: ['B_1x1_Gate_Expr_MathAbs'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathAcos: {\n bricks: ['B_1x1_Gate_Expr_MathAcos'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathAcosh: {\n bricks: ['B_1x1_Gate_Expr_MathAcosh'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathAdd: {\n bricks: ['B_1x1_Gate_Expr_MathAdd'],\n inputs: ['InputA', 'InputB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathAsin: {\n bricks: ['B_1x1_Gate_Expr_MathAsin'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathAsinh: {\n bricks: ['B_1x1_Gate_Expr_MathAsinh'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathAtan: {\n bricks: ['B_1x1_Gate_Expr_MathAtan'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathAtan2: {\n bricks: ['B_1x1_Gate_Expr_MathAtan2'],\n inputs: ['X', 'Y'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathAtanh: {\n bricks: ['B_1x1_Gate_Expr_MathAtanh'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathBlend: {\n bricks: ['B_1x1_Gate_Expr_MathBlend'],\n inputs: ['Blend', 'InputA', 'InputB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathClamp: {\n bricks: ['B_1x1_Gate_Expr_MathClamp'],\n inputs: ['Input', 'Max', 'Min'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathCos: {\n bricks: ['B_1x1_Gate_Expr_MathCos'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathCosh: {\n bricks: ['B_1x1_Gate_Expr_MathCosh'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathDegreesToRadians: {\n bricks: ['B_1x1_Gate_Expr_MathDegreesToRadians'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathDivide: {\n bricks: ['B_1x1_Gate_Expr_MathDivide'],\n inputs: ['InputA', 'InputB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathEasing: {\n bricks: ['B_1x1_Gate_Expr_MathEasing'],\n inputs: ['Blend', 'Direction', 'Function', 'InputA', 'InputB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathExp: {\n bricks: ['B_1x1_Gate_Expr_MathExp'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathLn: {\n bricks: ['B_1x1_Gate_Expr_MathLn'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathLogBase: {\n bricks: ['B_1x1_Gate_Expr_MathLogBase'],\n inputs: ['Base', 'Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathMax: {\n bricks: ['B_1x1_Gate_Expr_MathMax'],\n inputs: ['InputA', 'InputB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathMin: {\n bricks: ['B_1x1_Gate_Expr_MathMin'],\n inputs: ['InputA', 'InputB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathModulo: {\n bricks: ['B_1x1_Gate_Expr_MathModulo'],\n inputs: ['InputA', 'InputB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathModuloFloored: {\n bricks: ['B_1x1_Gate_Expr_MathModuloFloored'],\n inputs: ['InputA', 'InputB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathMultiply: {\n bricks: ['B_1x1_Gate_Expr_MathMultiply'],\n inputs: ['InputA', 'InputB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathNegate: {\n bricks: ['B_1x1_Gate_Expr_MathNegate'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathPow: {\n bricks: ['B_1x1_Gate_Expr_MathPow'],\n inputs: ['Exponent', 'Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathRadiansToDegrees: {\n bricks: ['B_1x1_Gate_Expr_MathRadiansToDegrees'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathSign: {\n bricks: ['B_1x1_Gate_Expr_MathSign'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathSin: {\n bricks: ['B_1x1_Gate_Expr_MathSin'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathSinh: {\n bricks: ['B_1x1_Gate_Expr_MathSinh'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathSqrt: {\n bricks: ['B_1x1_Gate_Expr_MathSqrt'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathSubtract: {\n bricks: ['B_1x1_Gate_Expr_MathSubtract'],\n inputs: ['InputA', 'InputB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathTan: {\n bricks: ['B_1x1_Gate_Expr_MathTan'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_MathTanh: {\n bricks: ['B_1x1_Gate_Expr_MathTanh'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_NearlyEqual: {\n bricks: ['B_1x1_Gate_Expr_NearlyEqual'],\n inputs: ['InputA', 'InputB', 'Tolerance'],\n outputs: ['bOutput'],\n },\n BrickComponentType_WireGraph_Expr_Round: {\n bricks: ['B_1x1_Gate_Expr_Round'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_Select: {\n bricks: ['B_1x1_Gate_Expr_Select'],\n inputs: ['InputA', 'InputB', 'bSelectB'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_SplitColor: {\n bricks: ['B_1x1_Gate_Expr_SplitColor'],\n inputs: ['Input', 'Input.A', 'Input.B', 'Input.G', 'Input.R'],\n outputs: ['A', 'B', 'G', 'R'],\n },\n BrickComponentType_WireGraph_Expr_SplitVector: {\n bricks: ['B_1x1_Gate_Expr_SplitVector'],\n inputs: ['Input', 'Input.X', 'Input.Y', 'Input.Z'],\n outputs: ['X', 'Y', 'Z'],\n },\n BrickComponentType_WireGraph_Expr_String_Concatenate: {\n bricks: ['B_1x1_Gate_Expr_String_Concatenate'],\n inputs: ['InputA', 'InputB', 'Separator'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_String_Contains: {\n bricks: ['B_1x1_Gate_Expr_String_Contains'],\n inputs: ['Input', 'Search', 'bCaseSensitive'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_String_EndsWith: {\n bricks: ['B_1x1_Gate_Expr_String_EndsWith'],\n inputs: ['Input', 'Suffix', 'bCaseSensitive'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_String_Find: {\n bricks: ['B_1x1_Gate_Expr_String_Find'],\n inputs: ['Input', 'Search', 'bCaseSensitive'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_String_FormatText: {\n bricks: ['B_1x1_Gate_Expr_String_FormatText'],\n inputs: [\n 'FormatString',\n 'InputA',\n 'InputB',\n 'InputC',\n 'InputD',\n 'InputE',\n 'InputF',\n 'InputG',\n ],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_String_Length: {\n bricks: ['B_1x1_Gate_Expr_String_Length'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_String_ParseInt: {\n bricks: ['B_1x1_Gate_Expr_String_ParseInt'],\n inputs: ['Input'],\n outputs: ['Value', 'bSuccess'],\n },\n BrickComponentType_WireGraph_Expr_String_ParseNumber: {\n bricks: ['B_1x1_Gate_Expr_String_ParseNumber'],\n inputs: ['Input'],\n outputs: ['Value', 'bSuccess'],\n },\n BrickComponentType_WireGraph_Expr_String_Replace: {\n bricks: ['B_1x1_Gate_Expr_String_Replace'],\n inputs: ['Input', 'Replacement', 'Search', 'bCaseSensitive'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_String_Split: {\n bricks: ['B_1x1_Gate_Expr_String_Split'],\n inputs: ['Delimiter', 'Input', 'bCaseSensitive'],\n outputs: ['Left', 'Right', 'bFound'],\n },\n BrickComponentType_WireGraph_Expr_String_StartsWith: {\n bricks: ['B_1x1_Gate_Expr_String_StartsWith'],\n inputs: ['Input', 'Prefix', 'bCaseSensitive'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_String_Substring: {\n bricks: ['B_1x1_Gate_Expr_String_Substring'],\n inputs: ['Input', 'Length', 'Start'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_String_ToLower: {\n bricks: ['B_1x1_Gate_Expr_String_ToLower'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_String_ToUpper: {\n bricks: ['B_1x1_Gate_Expr_String_ToUpper'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_String_Trim: {\n bricks: ['B_1x1_Gate_Expr_String_Trim'],\n inputs: ['Input'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_Swap: {\n bricks: ['B_1x1_Gate_Expr_Swap'],\n inputs: ['InputA', 'InputB', 'bSwap'],\n outputs: ['Output', 'OutputB'],\n },\n BrickComponentType_WireGraph_Expr_VecCrossProduct: {\n bricks: ['B_1x1_Gate_Expr_VecCrossProduct'],\n inputs: [\n 'InputA',\n 'InputA.X',\n 'InputA.Y',\n 'InputA.Z',\n 'InputB',\n 'InputB.X',\n 'InputB.Y',\n 'InputB.Z',\n ],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_VecDistance: {\n bricks: ['B_1x1_Gate_Expr_VecDistance'],\n inputs: [\n 'InputA',\n 'InputA.X',\n 'InputA.Y',\n 'InputA.Z',\n 'InputB',\n 'InputB.X',\n 'InputB.Y',\n 'InputB.Z',\n ],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_VecDistanceSquared: {\n bricks: ['B_1x1_Gate_Expr_VecDistanceSquared'],\n inputs: [\n 'InputA',\n 'InputA.X',\n 'InputA.Y',\n 'InputA.Z',\n 'InputB',\n 'InputB.X',\n 'InputB.Y',\n 'InputB.Z',\n ],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_VecDotProduct: {\n bricks: ['B_1x1_Gate_Expr_VecDotProduct'],\n inputs: [\n 'InputA',\n 'InputA.X',\n 'InputA.Y',\n 'InputA.Z',\n 'InputB',\n 'InputB.X',\n 'InputB.Y',\n 'InputB.Z',\n ],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_VecMagnitude: {\n bricks: ['B_1x1_Gate_Expr_VecMagnitude'],\n inputs: ['Input', 'Input.X', 'Input.Y', 'Input.Z'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_VecMagnitudeSquared: {\n bricks: ['B_1x1_Gate_Expr_VecMagnitudeSquared'],\n inputs: ['Input', 'Input.X', 'Input.Y', 'Input.Z'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_VecNormalize: {\n bricks: ['B_1x1_Gate_Expr_VecNormalize'],\n inputs: ['Input', 'Input.X', 'Input.Y', 'Input.Z'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_VecRotationToDirection: {\n bricks: ['B_1x1_Gate_Expr_VecRotationToDirection'],\n inputs: ['Input', 'Input.X', 'Input.Y', 'Input.Z'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Expr_VecScale: {\n bricks: ['B_1x1_Gate_Expr_VecScale'],\n inputs: ['Input', 'Input.X', 'Input.Y', 'Input.Z', 'Scalar'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraph_Fake_Gamemode_CharacterDiedEvent: {\n bricks: ['B_1x1_Gate_Fake_Gamemode_CharacterDiedEvent'],\n inputs: [],\n outputs: ['Character', 'ExecOut'],\n },\n BrickComponentType_WireGraph_Fake_Gamemode_CharacterSpawnedEvent: {\n bricks: ['B_1x1_Gate_Fake_Gamemode_CharacterSpawnedEvent'],\n inputs: [],\n outputs: ['Character', 'ExecOut'],\n },\n BrickComponentType_WireGraph_Fake_Gamemode_ControllerJoinedEvent: {\n bricks: ['B_1x1_Gate_Fake_Gamemode_ControllerJoinedEvent'],\n inputs: [],\n outputs: ['Controller', 'ExecOut'],\n },\n BrickComponentType_WireGraph_Fake_Gamemode_ControllerLeftEvent: {\n bricks: ['B_1x1_Gate_Fake_Gamemode_ControllerLeftEvent'],\n inputs: [],\n outputs: ['Controller', 'ExecOut'],\n },\n BrickComponentType_WireGraph_Fake_Gamemode_RoundEndEvent: {\n bricks: ['B_1x1_Gate_Fake_Gamemode_RoundEndEvent'],\n inputs: ['Exec'],\n outputs: ['ExecOut', 'RoundNumber'],\n },\n BrickComponentType_WireGraph_Fake_Gamemode_RoundStartEvent: {\n bricks: ['B_1x1_Gate_Fake_Gamemode_RoundStartEvent'],\n inputs: ['Exec'],\n outputs: ['ExecOut', 'RoundNumber'],\n },\n BrickComponentType_WireGraph_FontReference: {\n bricks: ['B_1x1_Gate_FontReference'],\n inputs: [],\n outputs: ['Value'],\n },\n BrickComponentType_WireGraph_ItemReference: {\n bricks: ['B_1x1_Gate_ItemReference'],\n inputs: [],\n outputs: ['Value'],\n },\n BrickComponentType_WireGraph_OneShotAudioReference: {\n bricks: ['B_1x1_Gate_OneShotAudioReference'],\n inputs: [],\n outputs: ['Value'],\n },\n BrickComponentType_WireGraph_ParticleReference: {\n bricks: ['B_1x1_Gate_ParticleReference'],\n inputs: [],\n outputs: ['Value'],\n },\n BrickComponentType_WireGraph_PickupReference: {\n bricks: ['B_1x1_Gate_PickupReference'],\n inputs: [],\n outputs: ['Value'],\n },\n BrickComponentType_WireGraph_ProjectileReference: {\n bricks: ['B_1x1_Gate_ProjectileReference'],\n inputs: [],\n outputs: ['Value'],\n },\n BrickComponentType_WireGraph_ServerUptime: {\n bricks: ['B_1x1_Gate_ServerUptime'],\n inputs: [],\n outputs: ['Uptime'],\n },\n BrickComponentType_WireGraph_WheelEngineAudioReference: {\n bricks: ['B_1x1_Gate_WheelEngineAudioReference'],\n inputs: [],\n outputs: ['Value'],\n },\n BrickComponentType_WireGraphPseudo_ArrayVar: {\n bricks: ['B_1x1_Gate_Variable_Array'],\n inputs: [],\n outputs: ['ArrayVarRef'],\n },\n BrickComponentType_WireGraphPseudo_BufferSeconds: {\n bricks: ['B_1x1_Gate_Pseudo_BufferSeconds'],\n inputs: ['Input', 'SecondsToWait', 'ZeroSecondsToWait'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraphPseudo_BufferTicks: {\n bricks: ['B_1x1_Gate_Pseudo_BufferTicks'],\n inputs: ['Input', 'TicksToWait', 'ZeroTicksToWait'],\n outputs: ['Output'],\n },\n BrickComponentType_WireGraphPseudo_Dampen: {\n bricks: ['B_1x1_Gate_Pseudo_Dampen'],\n inputs: ['SmoothTime', 'Target'],\n outputs: ['Value'],\n },\n BrickComponentType_WireGraphPseudo_QueueSeconds: {\n bricks: ['B_1x1_Gate_Pseudo_QueueSeconds'],\n inputs: [\n 'DataIn1',\n 'DataIn2',\n 'DataIn3',\n 'DataIn4',\n 'DataIn5',\n 'DataIn6',\n 'DataIn7',\n 'DataIn8',\n 'ExecIn',\n 'SecondsToWait',\n ],\n outputs: [\n 'DataOut1',\n 'DataOut2',\n 'DataOut3',\n 'DataOut4',\n 'DataOut5',\n 'DataOut6',\n 'DataOut7',\n 'DataOut8',\n 'ExecOut',\n ],\n },\n BrickComponentType_WireGraphPseudo_QueueTicks: {\n bricks: ['B_1x1_Gate_Pseudo_QueueTicks'],\n inputs: [\n 'DataIn1',\n 'DataIn2',\n 'DataIn3',\n 'DataIn4',\n 'DataIn5',\n 'DataIn6',\n 'DataIn7',\n 'DataIn8',\n 'ExecIn',\n 'TicksToWait',\n ],\n outputs: [\n 'DataOut1',\n 'DataOut2',\n 'DataOut3',\n 'DataOut4',\n 'DataOut5',\n 'DataOut6',\n 'DataOut7',\n 'DataOut8',\n 'ExecOut',\n ],\n },\n BrickComponentType_WireGraphPseudo_Timer: {\n bricks: ['B_1x1_Gate_Pseudo_Timer'],\n inputs: ['Limit', 'Pause', 'Restart', 'Resume'],\n outputs: ['Expired', 'Time'],\n },\n BrickComponentType_WireGraphPseudo_Tween: {\n bricks: ['B_1x1_Gate_Pseudo_Tween'],\n inputs: ['Direction', 'Duration', 'Function', 'Target'],\n outputs: ['Arrived', 'Value'],\n },\n BrickComponentType_WireGraphPseudo_Var: {\n bricks: ['B_1x1_Gate_Variable'],\n inputs: [],\n outputs: ['Value', 'VarRef'],\n },\n Component_AudioEmitter: {\n bricks: ['B_1x1F_Speaker', 'B_2x2F_Speaker'],\n inputs: [\n 'AudioDescriptor',\n 'FocusAzimuth',\n 'InnerRadius',\n 'MaxDistance',\n 'NonFocusAzimuth',\n 'NonFocusVolumeAttenuation',\n 'PitchMultiplier',\n 'VolumeMultiplier',\n 'bEnabled',\n 'bSpatialization',\n ],\n outputs: [],\n },\n Component_BotSpawn: {\n bricks: ['B_Bot_Spawn_Point'],\n inputs: [\n 'AggroRange',\n 'Agression',\n 'AttackDamageMultiplier',\n 'AttackMovementAmount',\n 'BotName',\n 'BotWeapon',\n 'CorpseTimeout',\n 'GunSkill',\n 'HealthMultiplier',\n 'Jumpyness',\n 'MoveTarget',\n 'MoveTarget.X',\n 'MoveTarget.Y',\n 'MoveTarget.Z',\n 'MovementAmount',\n 'MovementGoalDummy',\n 'MovementRandomness',\n 'ReactionTime',\n 'RespawnTime',\n 'RunSpeed',\n 'SkinDummy',\n 'TeamCollisionChannel',\n 'bActiveBot',\n 'bBackVision',\n 'bCanJump',\n 'bCanTargetBots',\n 'bCanTargetPlayers',\n 'bDeleteBot',\n 'bSpawnEnable',\n 'bTeamCollision',\n 'bTeamCollision1',\n 'bTeamCollision2',\n 'bTeamCollision3',\n 'bVisionRaycasting',\n ],\n outputs: ['DistanceToTarget', 'FocusCharacter', 'SpawnedCharacter'],\n },\n Component_BrickPropertyChanger: {\n bricks: ['B_1x1F_Round'],\n inputs: [\n 'Color',\n 'Color.A',\n 'Color.B',\n 'Color.G',\n 'Color.R',\n 'MaterialAlpha',\n 'bCollisionEnabled',\n 'bCollisionEnabled_Interaction',\n 'bCollisionEnabled_Physics',\n 'bCollisionEnabled_Player',\n 'bCollisionEnabled_Player1',\n 'bCollisionEnabled_Player2',\n 'bCollisionEnabled_Player3',\n 'bCollisionEnabled_Weapon',\n 'bVisibility',\n ],\n outputs: [],\n },\n Component_Button: {\n bricks: ['B_1x1F_Round'],\n inputs: [\n 'PressSound',\n 'PromptCustomLabel',\n 'ReleaseSound',\n 'bAllowNearbyInteraction',\n 'bHiddenInteraction',\n ],\n outputs: ['Character', 'PressCount', 'bHeld'],\n },\n Component_CheckPoint: {\n bricks: ['B_CheckPoint'],\n inputs: ['bRotatePlayerGravityOnSpawn'],\n outputs: [],\n },\n Component_Damage: {\n bricks: ['B_1x1F_Round'],\n inputs: ['ConsoleTag', 'Message'],\n outputs: [],\n },\n Component_GoalPoint: {\n bricks: ['B_GoalPoint'],\n inputs: [],\n outputs: [],\n },\n Component_Interact: {\n bricks: ['B_1x1F_Round'],\n inputs: [\n 'ConsoleTag',\n 'InteractSound',\n 'Message',\n 'PromptCustomLabel',\n 'bAllowNearbyInteraction',\n 'bHiddenInteraction',\n ],\n outputs: [],\n },\n Component_Internal_AnimatedButton: {\n bricks: [\n 'B_Button',\n 'B_Button_Pressed',\n 'B_Button_Square',\n 'B_Button_Square_Pressed',\n ],\n inputs: [\n 'PressSound',\n 'PromptCustomLabel',\n 'ReleaseSound',\n 'bAllowNearbyInteraction',\n 'bHiddenInteraction',\n ],\n outputs: ['Character', 'PressCount', 'bHeld'],\n },\n Component_Internal_AnimatedPressurePlate: {\n bricks: ['B_1x1F_Round'],\n inputs: [\n 'BeginTouchSound',\n 'EndTouchSound',\n 'bCollisionEnabled_Player',\n 'bCollisionEnabled_Player1',\n 'bCollisionEnabled_Player2',\n 'bCollisionEnabled_Player3',\n ],\n outputs: ['Character', 'TouchCount', 'bTouching'],\n },\n Component_Internal_AnimatedSwitch: {\n bricks: ['B_Switch_Flipped', 'B_Switch_Test'],\n inputs: [\n 'InteractSound',\n 'PromptCustomLabel',\n 'bAllowNearbyInteraction',\n 'bHiddenInteraction',\n ],\n outputs: ['Character', 'bEnabled'],\n },\n Component_Internal_AttachedZone: {\n bricks: ['B_1x1F_Round'],\n inputs: [\n 'ZoneEndDistance',\n 'ZoneStartDistance',\n 'bIsBuildingZone',\n 'bIsLooseZone',\n 'bIsShareZone',\n ],\n outputs: ['OccupantCount', 'ZoneRef', 'bOccupied'],\n },\n Component_Internal_Bearing: {\n bricks: ['B_Joint_Bearing', 'B_Joint_Bearing_Micro'],\n inputs: [\n 'Damping',\n 'LimitAngle',\n 'bAnglesArePercentages',\n 'bLimitAngle',\n ],\n outputs: ['CurrentAngle'],\n },\n Component_Internal_InputSplitter: {\n bricks: ['B_1x1_Gate_SeatControlSplitter'],\n inputs: ['Character'],\n outputs: ['InputForward', 'InputRight', 'bPressedJump'],\n },\n Component_Internal_Joint_Fixed: {\n bricks: ['B_Joint_Fixed'],\n inputs: [\n 'LocationInterpMode',\n 'LocationMaxSpeed',\n 'LocationSmoothTime',\n 'OffsetLocation',\n 'OffsetLocation.X',\n 'OffsetLocation.Y',\n 'OffsetLocation.Z',\n 'OffsetRotation',\n 'OffsetRotation.Pitch',\n 'OffsetRotation.Roll',\n 'OffsetRotation.Yaw',\n 'RotationInterpMode',\n 'RotationMaxSpeed',\n 'RotationSmoothTime',\n ],\n outputs: ['bSettled', 'bWelded'],\n },\n Component_Internal_Joint_Wheel: {\n bricks: ['B_Joint_Wheel', 'B_Joint_Wheel_Micro'],\n inputs: [\n 'Control_DriveAndSteer',\n 'Damping',\n 'DrivePower',\n 'DriveSpeed',\n 'JointDistance',\n 'Steer',\n 'SteerLimitDegree',\n 'SteerPower',\n 'SuspensionDamping',\n 'SuspensionStiffness',\n 'bAllowEngineSteerCorrect',\n 'bCanBrake',\n 'bDriveWhenNotAttachedToEngine',\n 'bEnabled',\n 'bReversed',\n 'bSteerEnabled',\n 'bSuspensionEnabled',\n ],\n outputs: [],\n },\n Component_Internal_Joint_Wheel_Suspension: {\n bricks: ['B_Joint_Wheel_Micro_Suspension', 'B_Joint_Wheel_Suspension'],\n inputs: [\n 'Control_DriveAndSteer',\n 'Damping',\n 'DrivePower',\n 'DriveSpeed',\n 'JointDistance',\n 'Steer',\n 'SteerLimitDegree',\n 'SteerPower',\n 'SuspensionBottomOffset',\n 'SuspensionDamping',\n 'SuspensionStiffness',\n 'SuspensionTopOffset',\n 'bAllowEngineSteerCorrect',\n 'bCanBrake',\n 'bDriveWhenNotAttachedToEngine',\n 'bEnabled',\n 'bReversed',\n 'bSteerEnabled',\n 'bSuspensionEnabled',\n ],\n outputs: [],\n },\n Component_Internal_Microchip: {\n bricks: ['B_1x1_Microchip'],\n inputs: [],\n outputs: [],\n },\n Component_Internal_Motor: {\n bricks: ['B_Joint_Motor', 'B_Joint_Motor_Micro'],\n inputs: [\n 'Damping',\n 'LimitAngle',\n 'Power',\n 'Speed',\n 'bAnglesArePercentages',\n 'bEnabled',\n 'bLimitAngle',\n ],\n outputs: ['CurrentAngle'],\n },\n Component_Internal_MotorSlider: {\n bricks: ['B_1x1F_Round'],\n inputs: [\n 'Damping',\n 'Power',\n 'Speed',\n 'bEnabled',\n 'bPositionsArePercentages',\n ],\n outputs: ['CurrentPosition'],\n },\n Component_Internal_Rerouter: {\n bricks: ['B_1x1_Reroute_Node'],\n inputs: ['RER_Input'],\n outputs: ['RER_Output'],\n },\n Component_Internal_Seat: {\n bricks: ['B_Seat'],\n inputs: [\n 'ExitOffset',\n 'ExitOffset.X',\n 'ExitOffset.Y',\n 'ExitOffset.Z',\n 'PromptCustomLabel',\n 'bAllowNearbyInteraction',\n 'bHiddenInteraction',\n 'bRollCameraInThirdPerson',\n ],\n outputs: ['SittingCharacter', 'bIsOccupied'],\n },\n Component_Internal_Servo: {\n bricks: ['B_Joint_Servo', 'B_Joint_Servo_Micro'],\n inputs: [\n 'ActiveDamping',\n 'Damping',\n 'ForceLimit',\n 'LimitAngle',\n 'Power',\n 'TargetAngle',\n 'bAnglesArePercentages',\n 'bEnabled',\n 'bLimitAngle',\n ],\n outputs: ['CurrentAngle', 'bStopped'],\n },\n Component_Internal_ServoSlider: {\n bricks: ['B_1x1F_Round'],\n inputs: [\n 'Damping',\n 'Exponent',\n 'Power',\n 'TargetPosition',\n 'TopSpeed',\n 'bEnabled',\n 'bPositionsArePercentages',\n ],\n outputs: ['CurrentPosition', 'bStopped'],\n },\n Component_Internal_Slider: {\n bricks: ['B_1x1F_Round'],\n inputs: ['Damping', 'bPositionsArePercentages'],\n outputs: ['CurrentPosition'],\n },\n Component_Internal_Socket: {\n bricks: ['B_Joint_Socket', 'B_Joint_Socket_Micro'],\n inputs: [],\n outputs: [],\n },\n Component_Internal_Thruster: {\n bricks: ['B_2x2_Thruster'],\n inputs: [\n 'Force',\n 'Pitch',\n 'Throttle',\n 'Yaw',\n 'bEnabled',\n 'bSpawnLight',\n ],\n outputs: [],\n },\n Component_Internal_WeightBrick: {\n bricks: ['B_1x1_Gate_WeightBrick'],\n inputs: [\n 'Mass',\n 'MassOffset',\n 'MassOffset.X',\n 'MassOffset.Y',\n 'MassOffset.Z',\n 'MassSize',\n 'MassSize.X',\n 'MassSize.Y',\n 'MassSize.Z',\n ],\n outputs: [],\n },\n Component_Internal_WheelEngine: {\n bricks: ['B_1x1_Gate_WheelEngineSlim', 'B_Vehicle_Engine'],\n inputs: [\n 'AudioDescriptor',\n 'CenterOfSteering',\n 'Character',\n 'CustomMass',\n 'CustomMassVerticalOffset',\n 'DriveAcceleratingPowerMultiplier',\n 'DriveBrakingPowerMultiplier',\n 'DriveDampingMultiplier',\n 'DriveInterpSpeed',\n 'DriveSpeed',\n 'ManualInput_Drive',\n 'ManualInput_Steer',\n 'SteerInterpSpeed',\n 'SteerLimitDegree',\n 'SteerPowerMultiplier',\n 'TankSteerSpeedMultiplier',\n 'WaterDriveForce',\n 'WaterSteeringForce',\n 'bEnableManualControl',\n 'bEnabled',\n 'bManualInput_Brake',\n 'bTankSteering',\n ],\n outputs: ['Control_DriveAndSteer'],\n },\n Component_ItemSpawn: {\n bricks: ['B_1x1F_Round'],\n inputs: [\n 'DamageMultiplier',\n 'ItemNameOverride',\n 'PickupAnimationAxis',\n 'PickupAnimationPhase',\n 'PickupBobHeight',\n 'PickupBobSpeed',\n 'PickupClass',\n 'PickupMeshColors',\n 'PickupMinigameResetRespawnDelay',\n 'PickupOffsetDirection',\n 'PickupOffsetDistance',\n 'PickupRespawnTime',\n 'PickupRotation',\n 'PickupRotation.Pitch',\n 'PickupRotation.Roll',\n 'PickupRotation.Yaw',\n 'PickupScale',\n 'PickupSpinSpeed',\n 'ProjectileOverride',\n 'WeaponSpeedMultiplier',\n 'bOverridePickupColors',\n 'bPickupAnimationAxisLocal',\n 'bPickupAnimationEnabled',\n 'bPickupAutoDisableOnPickup',\n 'bPickupEnabled',\n 'bPickupRespawnOnMinigameReset',\n 'bRenderTranslucentWhenDisabled',\n ],\n outputs: ['bShowPickupEnabled'],\n },\n Component_OneShotAudioEmitter: {\n bricks: ['B_1x1_SoundEmitter'],\n inputs: [\n 'AudioDescriptor',\n 'InnerRadius',\n 'MaxDistance',\n 'PitchMultiplier',\n 'RepeatTime',\n 'RepeatVariance',\n 'VolumeMultiplier',\n 'bEnableRepeat',\n 'bPlay',\n 'bSpatialization',\n ],\n outputs: [],\n },\n Component_PointLight: {\n bricks: ['B_1x1F_Round'],\n inputs: [\n 'Brightness',\n 'Color',\n 'Color.A',\n 'Color.B',\n 'Color.G',\n 'Color.R',\n 'Radius',\n 'bCastShadows',\n 'bEnabled',\n 'bMatchBrickShape',\n 'bUseBrickColor',\n ],\n outputs: [],\n },\n Component_SpawnPoint: {\n bricks: ['B_SpawnPoint'],\n inputs: ['bEnable', 'bRotatePlayerGravityOnSpawn'],\n outputs: [],\n },\n Component_SpotLight: {\n bricks: ['B_1x1F_Round'],\n inputs: [\n 'Brightness',\n 'Color',\n 'Color.A',\n 'Color.B',\n 'Color.G',\n 'Color.R',\n 'InnerConeAngle',\n 'OuterConeAngle',\n 'Radius',\n 'Rotation',\n 'Rotation.Pitch',\n 'Rotation.Roll',\n 'Rotation.Yaw',\n 'bCastShadows',\n 'bEnabled',\n 'bUseBrickColor',\n ],\n outputs: [],\n },\n Component_Switch: {\n bricks: ['B_1x1F_Round'],\n inputs: [\n 'InteractSound',\n 'PromptCustomLabel',\n 'bAllowNearbyInteraction',\n 'bHiddenInteraction',\n ],\n outputs: ['Character', 'bEnabled'],\n },\n Component_Target: {\n bricks: ['B_2x2F_Target'],\n inputs: ['OnTime'],\n outputs: [\n 'CharacterThatJustHit',\n 'Damage',\n 'WeaponNameThatJustHit',\n 'WeaponThatJustHit',\n 'bJustHit',\n ],\n },\n Component_TextDisplay: {\n bricks: ['B_1x1F_Round'],\n inputs: [\n 'Anchor',\n 'Anchor.X',\n 'Anchor.Y',\n 'Billboard',\n 'Color',\n 'Color.A',\n 'Color.B',\n 'Color.G',\n 'Color.R',\n 'Face',\n 'Font',\n 'GraffitiAngleLimit',\n 'GraffitiDepthLimit',\n 'GraffitiLayer',\n 'Kerning',\n 'LineHeight',\n 'LineOffset',\n 'Material',\n 'MaterialSlider',\n 'Offset',\n 'Offset.X',\n 'Offset.Y',\n 'Offset.Z',\n 'Outline',\n 'OutlineColor',\n 'OutlineColor.A',\n 'OutlineColor.B',\n 'OutlineColor.G',\n 'OutlineColor.R',\n 'OutlineWidth',\n 'Rotation',\n 'ScuffWidth',\n 'Shading',\n 'ShadingWidth',\n 'Skew',\n 'Text',\n 'Typeface',\n 'bAlignToWedge',\n 'bEnabled',\n 'bFlipShading',\n 'bForeground',\n 'bOverrideColor',\n 'bOverrideOutlineColor',\n 'bSharpCorners',\n 'bSharpOutlines',\n ],\n outputs: [],\n },\n Component_Touch: {\n bricks: ['B_1x1F_Round'],\n inputs: [\n 'BeginTouchSound',\n 'EndTouchSound',\n 'bCollisionEnabled_Player',\n 'bCollisionEnabled_Player1',\n 'bCollisionEnabled_Player2',\n 'bCollisionEnabled_Player3',\n ],\n outputs: ['Character', 'TouchCount', 'bTouching'],\n },\n Component_WireGraph_PlayAudioAt: {\n bricks: ['B_1x1_Gate_Exec_Entity_PlayAudioAt'],\n inputs: [\n 'Entity',\n 'Exec',\n 'InnerRadius',\n 'MaxDistance',\n 'PitchMultiplier',\n 'VolumeMultiplier',\n 'bSpatialization',\n ],\n outputs: ['ExecOut'],\n },\n Component_WireGraph_SetInventoryEntry: {\n bricks: ['B_1x1_Gate_Exec_Character_SetInventoryEntry'],\n inputs: ['Character', 'Exec', 'Slot'],\n outputs: ['ExecOut'],\n },\n })\n );\n\n/** Ergonomic authoring constants per component type:\n * `COMPONENTS.PlayAudioAt.NAME` (component type name), `.BRICK` (host\n * brick asset; `.BRICKS` lists all hosts), `.PORTS.*` (wire port names,\n * e.g. `COMPONENTS.PlayAudioAt.PORTS.EXEC`). */\nexport const COMPONENTS = {\n CharacterZoneEvent_Entered: {\n NAME: 'BrickComponentType_Internal_CharacterZoneEvent_Entered',\n BRICK: 'B_1x1_Gate_Internal_CharacterZoneEvent_Entered',\n BRICKS: ['B_1x1_Gate_Internal_CharacterZoneEvent_Entered'],\n PORTS: {\n Zone: 'Zone',\n bCollisionEnabled_Player: 'bCollisionEnabled_Player',\n bCollisionEnabled_Player1: 'bCollisionEnabled_Player1',\n bCollisionEnabled_Player2: 'bCollisionEnabled_Player2',\n bCollisionEnabled_Player3: 'bCollisionEnabled_Player3',\n Character: 'Character',\n Exec: 'Exec',\n },\n },\n CharacterZoneEvent_Left: {\n NAME: 'BrickComponentType_Internal_CharacterZoneEvent_Left',\n BRICK: 'B_1x1_Gate_Internal_CharacterZoneEvent_Left',\n BRICKS: ['B_1x1_Gate_Internal_CharacterZoneEvent_Left'],\n PORTS: {\n Zone: 'Zone',\n bCollisionEnabled_Player: 'bCollisionEnabled_Player',\n bCollisionEnabled_Player1: 'bCollisionEnabled_Player1',\n bCollisionEnabled_Player2: 'bCollisionEnabled_Player2',\n bCollisionEnabled_Player3: 'bCollisionEnabled_Player3',\n Character: 'Character',\n Exec: 'Exec',\n },\n },\n MicrochipInput: {\n NAME: 'BrickComponentType_Internal_MicrochipInput',\n BRICK: 'B_1x1_Gate_MicrochipInput',\n BRICKS: ['B_1x1_Gate_MicrochipInput'],\n PORTS: {\n RER_Input: 'RER_Input',\n RER_Output: 'RER_Output',\n },\n },\n MicrochipOutput: {\n NAME: 'BrickComponentType_Internal_MicrochipOutput',\n BRICK: 'B_1x1_Gate_MicrochipOutput',\n BRICKS: ['B_1x1_Gate_MicrochipOutput'],\n PORTS: {\n RER_Input: 'RER_Input',\n RER_Output: 'RER_Output',\n },\n },\n ReadBrickGrid: {\n NAME: 'BrickComponentType_Internal_ReadBrickGrid',\n BRICK: 'B_1x1_Gate_Internal_ReadBrickGrid',\n BRICKS: ['B_1x1_Gate_Internal_ReadBrickGrid'],\n PORTS: {\n BrickGrid: 'BrickGrid',\n },\n },\n TeleportDestination: {\n NAME: 'BrickComponentType_Internal_TeleportDestination',\n BRICK: 'B_DestinationPoint',\n BRICKS: ['B_DestinationPoint'],\n PORTS: {\n ThisDestination: 'ThisDestination',\n },\n },\n ZoneEvent_BrickChanged: {\n NAME: 'BrickComponentType_Internal_ZoneEvent_BrickChanged',\n BRICK: 'B_1x1_Gate_Internal_ZoneEvent_BrickChanged',\n BRICKS: ['B_1x1_Gate_Internal_ZoneEvent_BrickChanged'],\n PORTS: {\n Zone: 'Zone',\n Exec: 'Exec',\n },\n },\n ZoneEvent_BrickRemoved: {\n NAME: 'BrickComponentType_Internal_ZoneEvent_BrickRemoved',\n BRICK: 'B_1x1_Gate_Internal_ZoneEvent_BrickRemoved',\n BRICKS: ['B_1x1_Gate_Internal_ZoneEvent_BrickRemoved'],\n PORTS: {\n Zone: 'Zone',\n Exec: 'Exec',\n },\n },\n PrefabSpawn: {\n NAME: 'BrickComponentType_PrefabSpawn',\n BRICK: 'B_1x1F_Round',\n BRICKS: ['B_1x1F_Round'],\n PORTS: {\n Prefab: 'Prefab',\n Prefab_Path: 'Prefab.Path',\n RespawnTime: 'RespawnTime',\n SpawnOffset: 'SpawnOffset',\n SpawnOffset_X: 'SpawnOffset.X',\n SpawnOffset_Y: 'SpawnOffset.Y',\n SpawnOffset_Z: 'SpawnOffset.Z',\n SpawnOffsetRotation: 'SpawnOffsetRotation',\n SpawnOffsetRotation_Pitch: 'SpawnOffsetRotation.Pitch',\n SpawnOffsetRotation_Roll: 'SpawnOffsetRotation.Roll',\n SpawnOffsetRotation_Yaw: 'SpawnOffsetRotation.Yaw',\n bSpawnEnable: 'bSpawnEnable',\n SpawnedEntity: 'SpawnedEntity',\n },\n },\n AudioReference: {\n NAME: 'BrickComponentType_WireGraph_AudioReference',\n BRICK: 'B_1x1_Gate_AudioReference',\n BRICKS: ['B_1x1_Gate_AudioReference'],\n PORTS: {\n Value: 'Value',\n },\n },\n DeltaTime: {\n NAME: 'BrickComponentType_WireGraph_DeltaTime',\n BRICK: 'B_1x1_Gate_DeltaTime',\n BRICKS: ['B_1x1_Gate_DeltaTime'],\n PORTS: {\n DeltaTime: 'DeltaTime',\n },\n },\n Exec_ArrayVar_Append: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Append',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Append',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Append'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n SourceRef: 'SourceRef',\n ExecOut: 'ExecOut',\n },\n },\n Exec_ArrayVar_Average: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Average',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Average',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Average'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n Value: 'Value',\n bIsEmpty: 'bIsEmpty',\n },\n },\n Exec_ArrayVar_Clear: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Clear',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Clear',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Clear'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n },\n },\n Exec_ArrayVar_CopyFrom: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_CopyFrom',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_CopyFrom',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_CopyFrom'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n SourceRef: 'SourceRef',\n ExecOut: 'ExecOut',\n },\n },\n Exec_ArrayVar_Fill: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Fill',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Fill',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Fill'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n Value: 'Value',\n ExecOut: 'ExecOut',\n },\n },\n Exec_ArrayVar_Find: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Find',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Find',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Find'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n Value: 'Value',\n ExecOut: 'ExecOut',\n Index: 'Index',\n bFound: 'bFound',\n },\n },\n Exec_ArrayVar_Get: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Get',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Get',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Get'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n Index: 'Index',\n ExecOut: 'ExecOut',\n Value: 'Value',\n bOutOfBounds: 'bOutOfBounds',\n },\n },\n Exec_ArrayVar_GetLength: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_GetLength',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_GetLength',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_GetLength'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n Length: 'Length',\n },\n },\n Exec_ArrayVar_Insert: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Insert',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Insert',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Insert'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n Index: 'Index',\n Value: 'Value',\n ExecOut: 'ExecOut',\n bOutOfBounds: 'bOutOfBounds',\n },\n },\n Exec_ArrayVar_Max: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Max',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Max',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Max'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n Value: 'Value',\n bIsEmpty: 'bIsEmpty',\n },\n },\n Exec_ArrayVar_Min: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Min',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Min',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Min'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n Value: 'Value',\n bIsEmpty: 'bIsEmpty',\n },\n },\n Exec_ArrayVar_Pop: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Pop',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Pop',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Pop'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n Value: 'Value',\n bIsEmpty: 'bIsEmpty',\n },\n },\n Exec_ArrayVar_Push: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Push',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Push',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Push'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n Value: 'Value',\n ExecOut: 'ExecOut',\n },\n },\n Exec_ArrayVar_RemoveAtIndex: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_RemoveAtIndex',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_RemoveAtIndex',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_RemoveAtIndex'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n Index: 'Index',\n ExecOut: 'ExecOut',\n bOutOfBounds: 'bOutOfBounds',\n },\n },\n Exec_ArrayVar_Resize: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Resize',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Resize',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Resize'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n Size: 'Size',\n Value: 'Value',\n ExecOut: 'ExecOut',\n },\n },\n Exec_ArrayVar_Reverse: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Reverse',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Reverse',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Reverse'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n },\n },\n Exec_ArrayVar_SetAtIndex: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_SetAtIndex',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_SetAtIndex',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_SetAtIndex'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n Index: 'Index',\n Value: 'Value',\n ExecOut: 'ExecOut',\n },\n },\n Exec_ArrayVar_Shuffle: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Shuffle',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Shuffle',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Shuffle'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n },\n },\n Exec_ArrayVar_Slice: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Slice',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Slice',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Slice'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Count: 'Count',\n Exec: 'Exec',\n SourceRef: 'SourceRef',\n Start: 'Start',\n ExecOut: 'ExecOut',\n bOutOfBounds: 'bOutOfBounds',\n },\n },\n Exec_ArrayVar_Sort: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Sort',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Sort',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Sort'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n bDescending: 'bDescending',\n ExecOut: 'ExecOut',\n },\n },\n Exec_ArrayVar_Sum: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Sum',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Sum',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Sum'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n Value: 'Value',\n },\n },\n Exec_ArrayVar_Swap: {\n NAME: 'BrickComponentType_WireGraph_Exec_ArrayVar_Swap',\n BRICK: 'B_1x1_Gate_Exec_ArrayVar_Swap',\n BRICKS: ['B_1x1_Gate_Exec_ArrayVar_Swap'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n IndexA: 'IndexA',\n IndexB: 'IndexB',\n ExecOut: 'ExecOut',\n bOutOfBounds: 'bOutOfBounds',\n },\n },\n Exec_Branch: {\n NAME: 'BrickComponentType_WireGraph_Exec_Branch',\n BRICK: 'B_1x1_Gate_Exec_Branch',\n BRICKS: ['B_1x1_Gate_Exec_Branch'],\n PORTS: {\n Exec: 'Exec',\n bCond: 'bCond',\n ExecOutA: 'ExecOutA',\n ExecOutB: 'ExecOutB',\n },\n },\n Exec_Character_GetAim: {\n NAME: 'BrickComponentType_WireGraph_Exec_Character_GetAim',\n BRICK: 'B_1x1_Gate_Exec_Character_GetAim',\n BRICKS: ['B_1x1_Gate_Exec_Character_GetAim'],\n PORTS: {\n Character: 'Character',\n Exec: 'Exec',\n Direction: 'Direction',\n ExecOut: 'ExecOut',\n Origin: 'Origin',\n },\n },\n Exec_Character_GetDamage: {\n NAME: 'BrickComponentType_WireGraph_Exec_Character_GetDamage',\n BRICK: 'B_1x1_Gate_Exec_Character_GetDamage',\n BRICKS: ['B_1x1_Gate_Exec_Character_GetDamage'],\n PORTS: {\n Character: 'Character',\n Exec: 'Exec',\n Damage: 'Damage',\n DamageLimit: 'DamageLimit',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Character_GetFromController: {\n NAME: 'BrickComponentType_WireGraph_Exec_Character_GetFromController',\n BRICK: 'B_1x1_Gate_Exec_Character_GetFromController',\n BRICKS: ['B_1x1_Gate_Exec_Character_GetFromController'],\n PORTS: {\n Controller: 'Controller',\n Exec: 'Exec',\n Character: 'Character',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Character_IncDamage: {\n NAME: 'BrickComponentType_WireGraph_Exec_Character_IncDamage',\n BRICK: 'B_1x1_Gate_Exec_Character_IncDamage',\n BRICKS: ['B_1x1_Gate_Exec_Character_IncDamage'],\n PORTS: {\n Amount: 'Amount',\n Character: 'Character',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Character_SetDamage: {\n NAME: 'BrickComponentType_WireGraph_Exec_Character_SetDamage',\n BRICK: 'B_1x1_Gate_Exec_Character_SetDamage',\n BRICKS: ['B_1x1_Gate_Exec_Character_SetDamage'],\n PORTS: {\n Character: 'Character',\n Damage: 'Damage',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Character_SetTempPermission: {\n NAME: 'BrickComponentType_WireGraph_Exec_Character_SetTempPermission',\n BRICK: 'B_1x1_Gate_Exec_Character_SetTempPermission',\n BRICKS: ['B_1x1_Gate_Exec_Character_SetTempPermission'],\n PORTS: {\n Character: 'Character',\n Exec: 'Exec',\n bPermissionEnable: 'bPermissionEnable',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Character_ShowHint: {\n NAME: 'BrickComponentType_WireGraph_Exec_Character_ShowHint',\n BRICK: 'B_1x1_Gate_Exec_Character_ShowHint',\n BRICKS: ['B_1x1_Gate_Exec_Character_ShowHint'],\n PORTS: {\n Character: 'Character',\n Exec: 'Exec',\n HintText: 'HintText',\n HintTitle: 'HintTitle',\n ExecOut: 'ExecOut',\n },\n },\n Exec_ChatCommand: {\n NAME: 'BrickComponentType_WireGraph_Exec_ChatCommand',\n BRICK: 'B_1x1_Gate_Exec_ChatCommand',\n BRICKS: ['B_1x1_Gate_Exec_ChatCommand'],\n PORTS: {\n Arguments: 'Arguments',\n Controller: 'Controller',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Controller_DisplayText: {\n NAME: 'BrickComponentType_WireGraph_Exec_Controller_DisplayText',\n BRICK: 'B_1x1_Gate_Exec_Controller_DisplayText',\n BRICKS: ['B_1x1_Gate_Exec_Controller_DisplayText'],\n PORTS: {\n AnchorX: 'AnchorX',\n AnchorY: 'AnchorY',\n Angle: 'Angle',\n Controller: 'Controller',\n Exec: 'Exec',\n FontColor: 'FontColor',\n FontColor_A: 'FontColor.A',\n FontColor_B: 'FontColor.B',\n FontColor_G: 'FontColor.G',\n FontColor_R: 'FontColor.R',\n FontSize: 'FontSize',\n Lifetime: 'Lifetime',\n OutlineColor: 'OutlineColor',\n OutlineColor_A: 'OutlineColor.A',\n OutlineColor_B: 'OutlineColor.B',\n OutlineColor_G: 'OutlineColor.G',\n OutlineColor_R: 'OutlineColor.R',\n OutlineSize: 'OutlineSize',\n PositionX: 'PositionX',\n PositionY: 'PositionY',\n ScaleX: 'ScaleX',\n ScaleY: 'ScaleY',\n Text: 'Text',\n TextId: 'TextId',\n Transition: 'Transition',\n ExecOut: 'ExecOut',\n TextIdOut: 'TextIdOut',\n },\n },\n Exec_Controller_GetDisplayName: {\n NAME: 'BrickComponentType_WireGraph_Exec_Controller_GetDisplayName',\n BRICK: 'B_1x1_Gate_Exec_Controller_GetDisplayName',\n BRICKS: ['B_1x1_Gate_Exec_Controller_GetDisplayName'],\n PORTS: {\n Controller: 'Controller',\n Exec: 'Exec',\n DisplayName: 'DisplayName',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Controller_GetFromEntity: {\n NAME: 'BrickComponentType_WireGraph_Exec_Controller_GetFromEntity',\n BRICK: 'B_1x1_Gate_Exec_Controller_GetFromEntity',\n BRICKS: ['B_1x1_Gate_Exec_Controller_GetFromEntity'],\n PORTS: {\n Entity: 'Entity',\n Exec: 'Exec',\n Controller: 'Controller',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Controller_GetUserId: {\n NAME: 'BrickComponentType_WireGraph_Exec_Controller_GetUserId',\n BRICK: 'B_1x1_Gate_Exec_Controller_GetUserId',\n BRICKS: ['B_1x1_Gate_Exec_Controller_GetUserId'],\n PORTS: {\n Controller: 'Controller',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n UserId: 'UserId',\n },\n },\n Exec_Controller_GetUserName: {\n NAME: 'BrickComponentType_WireGraph_Exec_Controller_GetUserName',\n BRICK: 'B_1x1_Gate_Exec_Controller_GetUserName',\n BRICKS: ['B_1x1_Gate_Exec_Controller_GetUserName'],\n PORTS: {\n Controller: 'Controller',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n UserName: 'UserName',\n },\n },\n Exec_Controller_HasPermission: {\n NAME: 'BrickComponentType_WireGraph_Exec_Controller_HasPermission',\n BRICK: 'B_1x1_Gate_Exec_Controller_HasPermission',\n BRICKS: ['B_1x1_Gate_Exec_Controller_HasPermission'],\n PORTS: {\n Controller: 'Controller',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n bHasPermission: 'bHasPermission',\n },\n },\n Exec_Controller_IsTrustedByBrickOwner: {\n NAME: 'BrickComponentType_WireGraph_Exec_Controller_IsTrustedByBrickOwner',\n BRICK: 'B_1x1_Gate_Exec_Controller_IsTrustedByBrickOwner',\n BRICKS: ['B_1x1_Gate_Exec_Controller_IsTrustedByBrickOwner'],\n PORTS: {\n Controller: 'Controller',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n bIsTrusted: 'bIsTrusted',\n },\n },\n Exec_Controller_SetCanRespawn: {\n NAME: 'BrickComponentType_WireGraph_Exec_Controller_SetCanRespawn',\n BRICK: 'B_1x1_Gate_Exec_Controller_SetCanRespawn',\n BRICKS: ['B_1x1_Gate_Exec_Controller_SetCanRespawn'],\n PORTS: {\n Controller: 'Controller',\n Exec: 'Exec',\n bCanRespawn: 'bCanRespawn',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Controller_ShowStatusMessage: {\n NAME: 'BrickComponentType_WireGraph_Exec_Controller_ShowStatusMessage',\n BRICK: 'B_1x1_Gate_Exec_Controller_ShowStatusMessage',\n BRICKS: ['B_1x1_Gate_Exec_Controller_ShowStatusMessage'],\n PORTS: {\n Controller: 'Controller',\n Exec: 'Exec',\n Message: 'Message',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Entity_AddLocationRotation: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_AddLocationRotation',\n BRICK: 'B_1x1_Gate_Exec_Entity_AddLocationRotation',\n BRICKS: ['B_1x1_Gate_Exec_Entity_AddLocationRotation'],\n PORTS: {\n Entity: 'Entity',\n Exec: 'Exec',\n Rotation: 'Rotation',\n Rotation_Pitch: 'Rotation.Pitch',\n Rotation_Roll: 'Rotation.Roll',\n Rotation_Yaw: 'Rotation.Yaw',\n Vector: 'Vector',\n Vector_X: 'Vector.X',\n Vector_Y: 'Vector.Y',\n Vector_Z: 'Vector.Z',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Entity_AddVelocity: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_AddVelocity',\n BRICK: 'B_1x1_Gate_Exec_Entity_AddVelocity',\n BRICKS: ['B_1x1_Gate_Exec_Entity_AddVelocity'],\n PORTS: {\n Entity: 'Entity',\n Exec: 'Exec',\n Rotation: 'Rotation',\n Rotation_X: 'Rotation.X',\n Rotation_Y: 'Rotation.Y',\n Rotation_Z: 'Rotation.Z',\n Vector: 'Vector',\n Vector_X: 'Vector.X',\n Vector_Y: 'Vector.Y',\n Vector_Z: 'Vector.Z',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Entity_GetAngularVelocity: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_GetAngularVelocity',\n BRICK: 'B_1x1_Gate_Exec_Entity_GetAngularVelocity',\n BRICKS: ['B_1x1_Gate_Exec_Entity_GetAngularVelocity'],\n PORTS: {\n Entity: 'Entity',\n Exec: 'Exec',\n AngularVelocity: 'AngularVelocity',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Entity_GetLinearVelocity: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_GetLinearVelocity',\n BRICK: 'B_1x1_Gate_Exec_Entity_GetLinearVelocity',\n BRICKS: ['B_1x1_Gate_Exec_Entity_GetLinearVelocity'],\n PORTS: {\n Entity: 'Entity',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n LinearVelocity: 'LinearVelocity',\n },\n },\n Exec_Entity_GetLocation: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_GetLocation',\n BRICK: 'B_1x1_Gate_Exec_Entity_GetLocation',\n BRICKS: ['B_1x1_Gate_Exec_Entity_GetLocation'],\n PORTS: {\n Entity: 'Entity',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n Vector: 'Vector',\n },\n },\n Exec_Entity_GetLocationRotation: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_GetLocationRotation',\n BRICK: 'B_1x1_Gate_Exec_Entity_GetLocationRotation',\n BRICKS: ['B_1x1_Gate_Exec_Entity_GetLocationRotation'],\n PORTS: {\n Entity: 'Entity',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n Rotation: 'Rotation',\n Vector: 'Vector',\n },\n },\n Exec_Entity_GetRotation: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_GetRotation',\n BRICK: 'B_1x1_Gate_Exec_Entity_GetRotation',\n BRICKS: ['B_1x1_Gate_Exec_Entity_GetRotation'],\n PORTS: {\n Entity: 'Entity',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n Rotation: 'Rotation',\n },\n },\n Exec_Entity_GetVelocity: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_GetVelocity',\n BRICK: 'B_1x1_Gate_Exec_Entity_GetVelocity',\n BRICKS: ['B_1x1_Gate_Exec_Entity_GetVelocity'],\n PORTS: {\n Entity: 'Entity',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n Rotation: 'Rotation',\n Vector: 'Vector',\n },\n },\n Exec_Entity_RelativeTeleport: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_RelativeTeleport',\n BRICK: 'B_1x1_Gate_Exec_Entity_RelativeTeleport',\n BRICKS: ['B_1x1_Gate_Exec_Entity_RelativeTeleport'],\n PORTS: {\n Destination: 'Destination',\n Entity: 'Entity',\n Exec: 'Exec',\n Source: 'Source',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Entity_SetAngularVelocity: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_SetAngularVelocity',\n BRICK: 'B_1x1_Gate_Exec_Entity_SetAngularVelocity',\n BRICKS: ['B_1x1_Gate_Exec_Entity_SetAngularVelocity'],\n PORTS: {\n AngularVelocity: 'AngularVelocity',\n AngularVelocity_X: 'AngularVelocity.X',\n AngularVelocity_Y: 'AngularVelocity.Y',\n AngularVelocity_Z: 'AngularVelocity.Z',\n Entity: 'Entity',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Entity_SetFrozen: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_SetFrozen',\n BRICK: 'B_1x1_Gate_Exec_Entity_SetFrozen',\n BRICKS: ['B_1x1_Gate_Exec_Entity_SetFrozen'],\n PORTS: {\n Entity: 'Entity',\n Exec: 'Exec',\n bFrozen: 'bFrozen',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Entity_SetGravityDirection: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_SetGravityDirection',\n BRICK: 'B_1x1_Gate_Exec_Entity_SetGravityDirection',\n BRICKS: ['B_1x1_Gate_Exec_Entity_SetGravityDirection'],\n PORTS: {\n Entity: 'Entity',\n Exec: 'Exec',\n Rotation: 'Rotation',\n Rotation_Pitch: 'Rotation.Pitch',\n Rotation_Roll: 'Rotation.Roll',\n Rotation_Yaw: 'Rotation.Yaw',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Entity_SetLinearVelocity: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_SetLinearVelocity',\n BRICK: 'B_1x1_Gate_Exec_Entity_SetLinearVelocity',\n BRICKS: ['B_1x1_Gate_Exec_Entity_SetLinearVelocity'],\n PORTS: {\n Entity: 'Entity',\n Exec: 'Exec',\n LinearVelocity: 'LinearVelocity',\n LinearVelocity_X: 'LinearVelocity.X',\n LinearVelocity_Y: 'LinearVelocity.Y',\n LinearVelocity_Z: 'LinearVelocity.Z',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Entity_SetLocation: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_SetLocation',\n BRICK: 'B_1x1_Gate_Exec_Entity_SetLocation',\n BRICKS: ['B_1x1_Gate_Exec_Entity_SetLocation'],\n PORTS: {\n Entity: 'Entity',\n Exec: 'Exec',\n Vector: 'Vector',\n Vector_X: 'Vector.X',\n Vector_Y: 'Vector.Y',\n Vector_Z: 'Vector.Z',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Entity_SetLocationRotation: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_SetLocationRotation',\n BRICK: 'B_1x1_Gate_Exec_Entity_SetLocationRotation',\n BRICKS: ['B_1x1_Gate_Exec_Entity_SetLocationRotation'],\n PORTS: {\n Entity: 'Entity',\n Exec: 'Exec',\n Rotation: 'Rotation',\n Rotation_Pitch: 'Rotation.Pitch',\n Rotation_Roll: 'Rotation.Roll',\n Rotation_Yaw: 'Rotation.Yaw',\n Vector: 'Vector',\n Vector_X: 'Vector.X',\n Vector_Y: 'Vector.Y',\n Vector_Z: 'Vector.Z',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Entity_SetRotation: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_SetRotation',\n BRICK: 'B_1x1_Gate_Exec_Entity_SetRotation',\n BRICKS: ['B_1x1_Gate_Exec_Entity_SetRotation'],\n PORTS: {\n Entity: 'Entity',\n Exec: 'Exec',\n Rotation: 'Rotation',\n Rotation_Pitch: 'Rotation.Pitch',\n Rotation_Roll: 'Rotation.Roll',\n Rotation_Yaw: 'Rotation.Yaw',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Entity_SetVelocity: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_SetVelocity',\n BRICK: 'B_1x1_Gate_Exec_Entity_SetVelocity',\n BRICKS: ['B_1x1_Gate_Exec_Entity_SetVelocity'],\n PORTS: {\n Entity: 'Entity',\n Exec: 'Exec',\n Rotation: 'Rotation',\n Rotation_X: 'Rotation.X',\n Rotation_Y: 'Rotation.Y',\n Rotation_Z: 'Rotation.Z',\n Vector: 'Vector',\n Vector_X: 'Vector.X',\n Vector_Y: 'Vector.Y',\n Vector_Z: 'Vector.Z',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Entity_Teleport: {\n NAME: 'BrickComponentType_WireGraph_Exec_Entity_Teleport',\n BRICK: 'B_1x1_Gate_Exec_Entity_Teleport',\n BRICKS: ['B_1x1_Gate_Exec_Entity_Teleport'],\n PORTS: {\n Destination: 'Destination',\n Entity: 'Entity',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Gamemode_FillArrayFromPlayers: {\n NAME: 'BrickComponentType_WireGraph_Exec_Gamemode_FillArrayFromPlayers',\n BRICK: 'B_1x1_Gate_Exec_Gamemode_FillArrayFromPlayers',\n BRICKS: ['B_1x1_Gate_Exec_Gamemode_FillArrayFromPlayers'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Gamemode_FillArrayFromTeamMembers: {\n NAME: 'BrickComponentType_WireGraph_Exec_Gamemode_FillArrayFromTeamMembers',\n BRICK: 'B_1x1_Gate_Exec_Gamemode_FillArrayFromTeamMembers',\n BRICKS: ['B_1x1_Gate_Exec_Gamemode_FillArrayFromTeamMembers'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n Exec: 'Exec',\n Team: 'Team',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Gamemode_GetCurrentRound: {\n NAME: 'BrickComponentType_WireGraph_Exec_Gamemode_GetCurrentRound',\n BRICK: 'B_1x1_Gate_Exec_Gamemode_GetCurrentRound',\n BRICKS: ['B_1x1_Gate_Exec_Gamemode_GetCurrentRound'],\n PORTS: {\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n RoundNumber: 'RoundNumber',\n },\n },\n Exec_Gamemode_GetLeaderboardValue: {\n NAME: 'BrickComponentType_WireGraph_Exec_Gamemode_GetLeaderboardValue',\n BRICK: 'B_1x1_Gate_Exec_Gamemode_GetLeaderboardValue',\n BRICKS: ['B_1x1_Gate_Exec_Gamemode_GetLeaderboardValue'],\n PORTS: {\n Controller: 'Controller',\n Exec: 'Exec',\n Key: 'Key',\n ExecOut: 'ExecOut',\n Value: 'Value',\n },\n },\n Exec_Gamemode_GetTeam: {\n NAME: 'BrickComponentType_WireGraph_Exec_Gamemode_GetTeam',\n BRICK: 'B_1x1_Gate_Exec_Gamemode_GetTeam',\n BRICKS: ['B_1x1_Gate_Exec_Gamemode_GetTeam'],\n PORTS: {\n Character: 'Character',\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n Team: 'Team',\n },\n },\n Exec_Gamemode_GetTeamByName: {\n NAME: 'BrickComponentType_WireGraph_Exec_Gamemode_GetTeamByName',\n BRICK: 'B_1x1_Gate_Exec_Gamemode_GetTeamByName',\n BRICKS: ['B_1x1_Gate_Exec_Gamemode_GetTeamByName'],\n PORTS: {\n Exec: 'Exec',\n TeamName: 'TeamName',\n ExecOut: 'ExecOut',\n Team: 'Team',\n },\n },\n Exec_Gamemode_GetTeamLeaderboardValue: {\n NAME: 'BrickComponentType_WireGraph_Exec_Gamemode_GetTeamLeaderboardValue',\n BRICK: 'B_1x1_Gate_Exec_Gamemode_GetTeamLeaderboardValue',\n BRICKS: ['B_1x1_Gate_Exec_Gamemode_GetTeamLeaderboardValue'],\n PORTS: {\n Exec: 'Exec',\n Key: 'Key',\n Team: 'Team',\n ExecOut: 'ExecOut',\n Value: 'Value',\n },\n },\n Exec_Gamemode_GetTeamName: {\n NAME: 'BrickComponentType_WireGraph_Exec_Gamemode_GetTeamName',\n BRICK: 'B_1x1_Gate_Exec_Gamemode_GetTeamName',\n BRICKS: ['B_1x1_Gate_Exec_Gamemode_GetTeamName'],\n PORTS: {\n Exec: 'Exec',\n Team: 'Team',\n ExecOut: 'ExecOut',\n Name: 'Name',\n },\n },\n Exec_Gamemode_IncrementLeaderboardValue: {\n NAME: 'BrickComponentType_WireGraph_Exec_Gamemode_IncrementLeaderboardValue',\n BRICK: 'B_1x1_Gate_Exec_Gamemode_IncrementLeaderboardValue',\n BRICKS: ['B_1x1_Gate_Exec_Gamemode_IncrementLeaderboardValue'],\n PORTS: {\n Controller: 'Controller',\n Exec: 'Exec',\n Key: 'Key',\n Value: 'Value',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Gamemode_IncrementTeamLeaderboardValue: {\n NAME: 'BrickComponentType_WireGraph_Exec_Gamemode_IncrementTeamLeaderboardValue',\n BRICK: 'B_1x1_Gate_Exec_Gamemode_IncrementTeamLeaderboardValue',\n BRICKS: ['B_1x1_Gate_Exec_Gamemode_IncrementTeamLeaderboardValue'],\n PORTS: {\n Exec: 'Exec',\n Key: 'Key',\n Team: 'Team',\n Value: 'Value',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Gamemode_PlayerWins: {\n NAME: 'BrickComponentType_WireGraph_Exec_Gamemode_PlayerWins',\n BRICK: 'B_1x1_Gate_Exec_Gamemode_PlayerWins',\n BRICKS: ['B_1x1_Gate_Exec_Gamemode_PlayerWins'],\n PORTS: {\n Exec: 'Exec',\n Player: 'Player',\n bTeamWinsInstead: 'bTeamWinsInstead',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Gamemode_SetLeaderboardValue: {\n NAME: 'BrickComponentType_WireGraph_Exec_Gamemode_SetLeaderboardValue',\n BRICK: 'B_1x1_Gate_Exec_Gamemode_SetLeaderboardValue',\n BRICKS: ['B_1x1_Gate_Exec_Gamemode_SetLeaderboardValue'],\n PORTS: {\n Controller: 'Controller',\n Exec: 'Exec',\n Key: 'Key',\n Value: 'Value',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Gamemode_SetTeam: {\n NAME: 'BrickComponentType_WireGraph_Exec_Gamemode_SetTeam',\n BRICK: 'B_1x1_Gate_Exec_Gamemode_SetTeam',\n BRICKS: ['B_1x1_Gate_Exec_Gamemode_SetTeam'],\n PORTS: {\n Controller: 'Controller',\n Exec: 'Exec',\n Team: 'Team',\n bPinPlayerToTeam: 'bPinPlayerToTeam',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Gamemode_SetTeamLeaderboardValue: {\n NAME: 'BrickComponentType_WireGraph_Exec_Gamemode_SetTeamLeaderboardValue',\n BRICK: 'B_1x1_Gate_Exec_Gamemode_SetTeamLeaderboardValue',\n BRICKS: ['B_1x1_Gate_Exec_Gamemode_SetTeamLeaderboardValue'],\n PORTS: {\n Exec: 'Exec',\n Key: 'Key',\n Team: 'Team',\n Value: 'Value',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Gamemode_SetTeamPinned: {\n NAME: 'BrickComponentType_WireGraph_Exec_Gamemode_SetTeamPinned',\n BRICK: 'B_1x1_Gate_Exec_Gamemode_SetTeamPinned',\n BRICKS: ['B_1x1_Gate_Exec_Gamemode_SetTeamPinned'],\n PORTS: {\n Controller: 'Controller',\n Exec: 'Exec',\n bPinned: 'bPinned',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Gamemode_TeamWins: {\n NAME: 'BrickComponentType_WireGraph_Exec_Gamemode_TeamWins',\n BRICK: 'B_1x1_Gate_Exec_Gamemode_TeamWins',\n BRICKS: ['B_1x1_Gate_Exec_Gamemode_TeamWins'],\n PORTS: {\n Exec: 'Exec',\n Team: 'Team',\n ExecOut: 'ExecOut',\n },\n },\n Exec_PlayGlobalAudio: {\n NAME: 'BrickComponentType_WireGraph_Exec_PlayGlobalAudio',\n BRICK: 'B_1x1_Gate_Exec_PlayGlobalAudio',\n BRICKS: ['B_1x1_Gate_Exec_PlayGlobalAudio'],\n PORTS: {\n Exec: 'Exec',\n PitchMultiplier: 'PitchMultiplier',\n VolumeMultiplier: 'VolumeMultiplier',\n ExecOut: 'ExecOut',\n },\n },\n Exec_PrefabSpawner: {\n NAME: 'BrickComponentType_WireGraph_Exec_PrefabSpawner',\n BRICK: 'B_1x1_Gate_Exec_PrefabSpawner',\n BRICKS: ['B_1x1_Gate_Exec_PrefabSpawner'],\n PORTS: {\n Exec: 'Exec',\n Lifetime: 'Lifetime',\n Limit: 'Limit',\n SpawnOffset: 'SpawnOffset',\n SpawnOffset_X: 'SpawnOffset.X',\n SpawnOffset_Y: 'SpawnOffset.Y',\n SpawnOffset_Z: 'SpawnOffset.Z',\n SpawnOffsetRotation: 'SpawnOffsetRotation',\n SpawnOffsetRotation_Pitch: 'SpawnOffsetRotation.Pitch',\n SpawnOffsetRotation_Roll: 'SpawnOffsetRotation.Roll',\n SpawnOffsetRotation_Yaw: 'SpawnOffsetRotation.Yaw',\n Entity: 'Entity',\n ExecOut: 'ExecOut',\n },\n },\n Exec_PrintToConsole: {\n NAME: 'BrickComponentType_WireGraph_Exec_PrintToConsole',\n BRICK: 'B_1x1_Gate_Exec_PrintToConsole',\n BRICKS: ['B_1x1_Gate_Exec_PrintToConsole'],\n PORTS: {\n Exec: 'Exec',\n Text: 'Text',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Random: {\n NAME: 'BrickComponentType_WireGraph_Exec_Random',\n BRICK: 'B_1x1_Gate_Exec_Random',\n BRICKS: ['B_1x1_Gate_Exec_Random'],\n PORTS: {\n Exec: 'Exec',\n Max: 'Max',\n Min: 'Min',\n ExecOut: 'ExecOut',\n Output: 'Output',\n },\n },\n Exec_Sweep: {\n NAME: 'BrickComponentType_WireGraph_Exec_Sweep',\n BRICK: 'B_1x1_Gate_Exec_Sweep',\n BRICKS: ['B_1x1_Gate_Exec_Sweep'],\n PORTS: {\n Direction: 'Direction',\n Direction_X: 'Direction.X',\n Direction_Y: 'Direction.Y',\n Direction_Z: 'Direction.Z',\n Distance: 'Distance',\n Exec: 'Exec',\n IgnoreEntity: 'IgnoreEntity',\n Origin: 'Origin',\n Origin_X: 'Origin.X',\n Origin_Y: 'Origin.Y',\n Origin_Z: 'Origin.Z',\n Radius: 'Radius',\n bRelative: 'bRelative',\n ExecOut: 'ExecOut',\n Hit: 'Hit',\n HitDistance: 'HitDistance',\n HitEntity: 'HitEntity',\n HitLocation: 'HitLocation',\n HitNormal: 'HitNormal',\n Miss: 'Miss',\n },\n },\n Exec_Union: {\n NAME: 'BrickComponentType_WireGraph_Exec_Union',\n BRICK: 'B_1x1_Gate_Exec_Union',\n BRICKS: ['B_1x1_Gate_Exec_Union'],\n PORTS: {\n ExecA: 'ExecA',\n ExecB: 'ExecB',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Var_Get: {\n NAME: 'BrickComponentType_WireGraph_Exec_Var_Get',\n BRICK: 'B_1x1_Gate_Exec_Var_Get',\n BRICKS: ['B_1x1_Gate_Exec_Var_Get'],\n PORTS: {\n Exec: 'Exec',\n VarRef: 'VarRef',\n ExecOut: 'ExecOut',\n Value: 'Value',\n },\n },\n Exec_Var_Increment: {\n NAME: 'BrickComponentType_WireGraph_Exec_Var_Increment',\n BRICK: 'B_1x1_Gate_Exec_Var_Increment',\n BRICKS: ['B_1x1_Gate_Exec_Var_Increment'],\n PORTS: {\n Exec: 'Exec',\n Value: 'Value',\n VarRef: 'VarRef',\n ExecOut: 'ExecOut',\n },\n },\n Exec_Var_Set: {\n NAME: 'BrickComponentType_WireGraph_Exec_Var_Set',\n BRICK: 'B_1x1_Gate_Exec_Var_Set',\n BRICKS: ['B_1x1_Gate_Exec_Var_Set'],\n PORTS: {\n Exec: 'Exec',\n Value: 'Value',\n VarRef: 'VarRef',\n ExecOut: 'ExecOut',\n },\n },\n Expr_BitwiseAND: {\n NAME: 'BrickComponentType_WireGraph_Expr_BitwiseAND',\n BRICK: 'B_1x1_Gate_Expr_BitwiseAND',\n BRICKS: ['B_1x1_Gate_Expr_BitwiseAND'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n Output: 'Output',\n },\n },\n Expr_BitwiseBitCount: {\n NAME: 'BrickComponentType_WireGraph_Expr_BitwiseBitCount',\n BRICK: 'B_1x1_Gate_Expr_BitwiseBitCount',\n BRICKS: ['B_1x1_Gate_Expr_BitwiseBitCount'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_BitwiseNAND: {\n NAME: 'BrickComponentType_WireGraph_Expr_BitwiseNAND',\n BRICK: 'B_1x1_Gate_Expr_BitwiseNAND',\n BRICKS: ['B_1x1_Gate_Expr_BitwiseNAND'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n Output: 'Output',\n },\n },\n Expr_BitwiseNOR: {\n NAME: 'BrickComponentType_WireGraph_Expr_BitwiseNOR',\n BRICK: 'B_1x1_Gate_Expr_BitwiseNOR',\n BRICKS: ['B_1x1_Gate_Expr_BitwiseNOR'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n Output: 'Output',\n },\n },\n Expr_BitwiseNOT: {\n NAME: 'BrickComponentType_WireGraph_Expr_BitwiseNOT',\n BRICK: 'B_1x1_Gate_Expr_BitwiseNOT',\n BRICKS: ['B_1x1_Gate_Expr_BitwiseNOT'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_BitwiseOR: {\n NAME: 'BrickComponentType_WireGraph_Expr_BitwiseOR',\n BRICK: 'B_1x1_Gate_Expr_BitwiseOR',\n BRICKS: ['B_1x1_Gate_Expr_BitwiseOR'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n Output: 'Output',\n },\n },\n Expr_BitwiseShiftLeft: {\n NAME: 'BrickComponentType_WireGraph_Expr_BitwiseShiftLeft',\n BRICK: 'B_1x1_Gate_Expr_BitwiseShiftLeft',\n BRICKS: ['B_1x1_Gate_Expr_BitwiseShiftLeft'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n Output: 'Output',\n },\n },\n Expr_BitwiseShiftRight: {\n NAME: 'BrickComponentType_WireGraph_Expr_BitwiseShiftRight',\n BRICK: 'B_1x1_Gate_Expr_BitwiseShiftRight',\n BRICKS: ['B_1x1_Gate_Expr_BitwiseShiftRight'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n Output: 'Output',\n },\n },\n Expr_BitwiseXOR: {\n NAME: 'BrickComponentType_WireGraph_Expr_BitwiseXOR',\n BRICK: 'B_1x1_Gate_Expr_BitwiseXOR',\n BRICKS: ['B_1x1_Gate_Expr_BitwiseXOR'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n Output: 'Output',\n },\n },\n Expr_Ceil: {\n NAME: 'BrickComponentType_WireGraph_Expr_Ceil',\n BRICK: 'B_1x1_Gate_Expr_Ceil',\n BRICKS: ['B_1x1_Gate_Expr_Ceil'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_CompareEqual: {\n NAME: 'BrickComponentType_WireGraph_Expr_CompareEqual',\n BRICK: 'B_1x1_Gate_Expr_CompareEqual',\n BRICKS: ['B_1x1_Gate_Expr_CompareEqual'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n bOutput: 'bOutput',\n },\n },\n Expr_CompareGreater: {\n NAME: 'BrickComponentType_WireGraph_Expr_CompareGreater',\n BRICK: 'B_1x1_Gate_Expr_CompareGreater',\n BRICKS: ['B_1x1_Gate_Expr_CompareGreater'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n bOutput: 'bOutput',\n },\n },\n Expr_CompareGreaterOrEqual: {\n NAME: 'BrickComponentType_WireGraph_Expr_CompareGreaterOrEqual',\n BRICK: 'B_1x1_Gate_Expr_CompareGreaterOrEqual',\n BRICKS: ['B_1x1_Gate_Expr_CompareGreaterOrEqual'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n bOutput: 'bOutput',\n },\n },\n Expr_CompareLess: {\n NAME: 'BrickComponentType_WireGraph_Expr_CompareLess',\n BRICK: 'B_1x1_Gate_Expr_CompareLess',\n BRICKS: ['B_1x1_Gate_Expr_CompareLess'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n bOutput: 'bOutput',\n },\n },\n Expr_CompareLessOrEqual: {\n NAME: 'BrickComponentType_WireGraph_Expr_CompareLessOrEqual',\n BRICK: 'B_1x1_Gate_Expr_CompareLessOrEqual',\n BRICKS: ['B_1x1_Gate_Expr_CompareLessOrEqual'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n bOutput: 'bOutput',\n },\n },\n Expr_CompareNotEqual: {\n NAME: 'BrickComponentType_WireGraph_Expr_CompareNotEqual',\n BRICK: 'B_1x1_Gate_Expr_CompareNotEqual',\n BRICKS: ['B_1x1_Gate_Expr_CompareNotEqual'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n bOutput: 'bOutput',\n },\n },\n Expr_EdgeDetector: {\n NAME: 'BrickComponentType_WireGraph_Expr_EdgeDetector',\n BRICK: 'B_1x1_Gate_Expr_EdgeDetector',\n BRICKS: ['B_1x1_Gate_Expr_EdgeDetector'],\n PORTS: {\n Input: 'Input',\n bPulseOnFallingEdge: 'bPulseOnFallingEdge',\n bPulseOnRisingEdge: 'bPulseOnRisingEdge',\n },\n },\n Expr_Floor: {\n NAME: 'BrickComponentType_WireGraph_Expr_Floor',\n BRICK: 'B_1x1_Gate_Expr_Floor',\n BRICKS: ['B_1x1_Gate_Expr_Floor'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_LogicalAND: {\n NAME: 'BrickComponentType_WireGraph_Expr_LogicalAND',\n BRICK: 'B_1x1_Gate_Expr_LogicalAND',\n BRICKS: ['B_1x1_Gate_Expr_LogicalAND'],\n PORTS: {\n bInputA: 'bInputA',\n bInputB: 'bInputB',\n bOutput: 'bOutput',\n },\n },\n Expr_LogicalNAND: {\n NAME: 'BrickComponentType_WireGraph_Expr_LogicalNAND',\n BRICK: 'B_1x1_Gate_Expr_LogicalNAND',\n BRICKS: ['B_1x1_Gate_Expr_LogicalNAND'],\n PORTS: {\n bInputA: 'bInputA',\n bInputB: 'bInputB',\n bOutput: 'bOutput',\n },\n },\n Expr_LogicalNOR: {\n NAME: 'BrickComponentType_WireGraph_Expr_LogicalNOR',\n BRICK: 'B_1x1_Gate_Expr_LogicalNOR',\n BRICKS: ['B_1x1_Gate_Expr_LogicalNOR'],\n PORTS: {\n bInputA: 'bInputA',\n bInputB: 'bInputB',\n bOutput: 'bOutput',\n },\n },\n Expr_LogicalNOT: {\n NAME: 'BrickComponentType_WireGraph_Expr_LogicalNOT',\n BRICK: 'B_1x1_Gate_Expr_LogicalNOT',\n BRICKS: ['B_1x1_Gate_Expr_LogicalNOT'],\n PORTS: {\n bInput: 'bInput',\n bOutput: 'bOutput',\n },\n },\n Expr_LogicalOR: {\n NAME: 'BrickComponentType_WireGraph_Expr_LogicalOR',\n BRICK: 'B_1x1_Gate_Expr_LogicalOR',\n BRICKS: ['B_1x1_Gate_Expr_LogicalOR'],\n PORTS: {\n bInputA: 'bInputA',\n bInputB: 'bInputB',\n bOutput: 'bOutput',\n },\n },\n Expr_LogicalXOR: {\n NAME: 'BrickComponentType_WireGraph_Expr_LogicalXOR',\n BRICK: 'B_1x1_Gate_Expr_LogicalXOR',\n BRICKS: ['B_1x1_Gate_Expr_LogicalXOR'],\n PORTS: {\n bInputA: 'bInputA',\n bInputB: 'bInputB',\n bOutput: 'bOutput',\n },\n },\n Expr_MakeColor: {\n NAME: 'BrickComponentType_WireGraph_Expr_MakeColor',\n BRICK: 'B_1x1_Gate_Expr_MakeColor',\n BRICKS: ['B_1x1_Gate_Expr_MakeColor'],\n PORTS: {\n A: 'A',\n B: 'B',\n G: 'G',\n R: 'R',\n Output: 'Output',\n },\n },\n Expr_MakeVector: {\n NAME: 'BrickComponentType_WireGraph_Expr_MakeVector',\n BRICK: 'B_1x1_Gate_Expr_MakeVector',\n BRICKS: ['B_1x1_Gate_Expr_MakeVector'],\n PORTS: {\n X: 'X',\n Y: 'Y',\n Z: 'Z',\n Output: 'Output',\n },\n },\n Expr_MathAbs: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathAbs',\n BRICK: 'B_1x1_Gate_Expr_MathAbs',\n BRICKS: ['B_1x1_Gate_Expr_MathAbs'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathAcos: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathAcos',\n BRICK: 'B_1x1_Gate_Expr_MathAcos',\n BRICKS: ['B_1x1_Gate_Expr_MathAcos'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathAcosh: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathAcosh',\n BRICK: 'B_1x1_Gate_Expr_MathAcosh',\n BRICKS: ['B_1x1_Gate_Expr_MathAcosh'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathAdd: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathAdd',\n BRICK: 'B_1x1_Gate_Expr_MathAdd',\n BRICKS: ['B_1x1_Gate_Expr_MathAdd'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n Output: 'Output',\n },\n },\n Expr_MathAsin: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathAsin',\n BRICK: 'B_1x1_Gate_Expr_MathAsin',\n BRICKS: ['B_1x1_Gate_Expr_MathAsin'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathAsinh: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathAsinh',\n BRICK: 'B_1x1_Gate_Expr_MathAsinh',\n BRICKS: ['B_1x1_Gate_Expr_MathAsinh'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathAtan: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathAtan',\n BRICK: 'B_1x1_Gate_Expr_MathAtan',\n BRICKS: ['B_1x1_Gate_Expr_MathAtan'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathAtan2: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathAtan2',\n BRICK: 'B_1x1_Gate_Expr_MathAtan2',\n BRICKS: ['B_1x1_Gate_Expr_MathAtan2'],\n PORTS: {\n X: 'X',\n Y: 'Y',\n Output: 'Output',\n },\n },\n Expr_MathAtanh: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathAtanh',\n BRICK: 'B_1x1_Gate_Expr_MathAtanh',\n BRICKS: ['B_1x1_Gate_Expr_MathAtanh'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathBlend: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathBlend',\n BRICK: 'B_1x1_Gate_Expr_MathBlend',\n BRICKS: ['B_1x1_Gate_Expr_MathBlend'],\n PORTS: {\n Blend: 'Blend',\n InputA: 'InputA',\n InputB: 'InputB',\n Output: 'Output',\n },\n },\n Expr_MathClamp: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathClamp',\n BRICK: 'B_1x1_Gate_Expr_MathClamp',\n BRICKS: ['B_1x1_Gate_Expr_MathClamp'],\n PORTS: {\n Input: 'Input',\n Max: 'Max',\n Min: 'Min',\n Output: 'Output',\n },\n },\n Expr_MathCos: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathCos',\n BRICK: 'B_1x1_Gate_Expr_MathCos',\n BRICKS: ['B_1x1_Gate_Expr_MathCos'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathCosh: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathCosh',\n BRICK: 'B_1x1_Gate_Expr_MathCosh',\n BRICKS: ['B_1x1_Gate_Expr_MathCosh'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathDegreesToRadians: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathDegreesToRadians',\n BRICK: 'B_1x1_Gate_Expr_MathDegreesToRadians',\n BRICKS: ['B_1x1_Gate_Expr_MathDegreesToRadians'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathDivide: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathDivide',\n BRICK: 'B_1x1_Gate_Expr_MathDivide',\n BRICKS: ['B_1x1_Gate_Expr_MathDivide'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n Output: 'Output',\n },\n },\n Expr_MathEasing: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathEasing',\n BRICK: 'B_1x1_Gate_Expr_MathEasing',\n BRICKS: ['B_1x1_Gate_Expr_MathEasing'],\n PORTS: {\n Blend: 'Blend',\n Direction: 'Direction',\n Function: 'Function',\n InputA: 'InputA',\n InputB: 'InputB',\n Output: 'Output',\n },\n },\n Expr_MathExp: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathExp',\n BRICK: 'B_1x1_Gate_Expr_MathExp',\n BRICKS: ['B_1x1_Gate_Expr_MathExp'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathLn: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathLn',\n BRICK: 'B_1x1_Gate_Expr_MathLn',\n BRICKS: ['B_1x1_Gate_Expr_MathLn'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathLogBase: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathLogBase',\n BRICK: 'B_1x1_Gate_Expr_MathLogBase',\n BRICKS: ['B_1x1_Gate_Expr_MathLogBase'],\n PORTS: {\n Base: 'Base',\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathMax: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathMax',\n BRICK: 'B_1x1_Gate_Expr_MathMax',\n BRICKS: ['B_1x1_Gate_Expr_MathMax'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n Output: 'Output',\n },\n },\n Expr_MathMin: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathMin',\n BRICK: 'B_1x1_Gate_Expr_MathMin',\n BRICKS: ['B_1x1_Gate_Expr_MathMin'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n Output: 'Output',\n },\n },\n Expr_MathModulo: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathModulo',\n BRICK: 'B_1x1_Gate_Expr_MathModulo',\n BRICKS: ['B_1x1_Gate_Expr_MathModulo'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n Output: 'Output',\n },\n },\n Expr_MathModuloFloored: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathModuloFloored',\n BRICK: 'B_1x1_Gate_Expr_MathModuloFloored',\n BRICKS: ['B_1x1_Gate_Expr_MathModuloFloored'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n Output: 'Output',\n },\n },\n Expr_MathMultiply: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathMultiply',\n BRICK: 'B_1x1_Gate_Expr_MathMultiply',\n BRICKS: ['B_1x1_Gate_Expr_MathMultiply'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n Output: 'Output',\n },\n },\n Expr_MathNegate: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathNegate',\n BRICK: 'B_1x1_Gate_Expr_MathNegate',\n BRICKS: ['B_1x1_Gate_Expr_MathNegate'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathPow: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathPow',\n BRICK: 'B_1x1_Gate_Expr_MathPow',\n BRICKS: ['B_1x1_Gate_Expr_MathPow'],\n PORTS: {\n Exponent: 'Exponent',\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathRadiansToDegrees: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathRadiansToDegrees',\n BRICK: 'B_1x1_Gate_Expr_MathRadiansToDegrees',\n BRICKS: ['B_1x1_Gate_Expr_MathRadiansToDegrees'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathSign: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathSign',\n BRICK: 'B_1x1_Gate_Expr_MathSign',\n BRICKS: ['B_1x1_Gate_Expr_MathSign'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathSin: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathSin',\n BRICK: 'B_1x1_Gate_Expr_MathSin',\n BRICKS: ['B_1x1_Gate_Expr_MathSin'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathSinh: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathSinh',\n BRICK: 'B_1x1_Gate_Expr_MathSinh',\n BRICKS: ['B_1x1_Gate_Expr_MathSinh'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathSqrt: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathSqrt',\n BRICK: 'B_1x1_Gate_Expr_MathSqrt',\n BRICKS: ['B_1x1_Gate_Expr_MathSqrt'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathSubtract: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathSubtract',\n BRICK: 'B_1x1_Gate_Expr_MathSubtract',\n BRICKS: ['B_1x1_Gate_Expr_MathSubtract'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n Output: 'Output',\n },\n },\n Expr_MathTan: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathTan',\n BRICK: 'B_1x1_Gate_Expr_MathTan',\n BRICKS: ['B_1x1_Gate_Expr_MathTan'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_MathTanh: {\n NAME: 'BrickComponentType_WireGraph_Expr_MathTanh',\n BRICK: 'B_1x1_Gate_Expr_MathTanh',\n BRICKS: ['B_1x1_Gate_Expr_MathTanh'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_NearlyEqual: {\n NAME: 'BrickComponentType_WireGraph_Expr_NearlyEqual',\n BRICK: 'B_1x1_Gate_Expr_NearlyEqual',\n BRICKS: ['B_1x1_Gate_Expr_NearlyEqual'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n Tolerance: 'Tolerance',\n bOutput: 'bOutput',\n },\n },\n Expr_Round: {\n NAME: 'BrickComponentType_WireGraph_Expr_Round',\n BRICK: 'B_1x1_Gate_Expr_Round',\n BRICKS: ['B_1x1_Gate_Expr_Round'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_Select: {\n NAME: 'BrickComponentType_WireGraph_Expr_Select',\n BRICK: 'B_1x1_Gate_Expr_Select',\n BRICKS: ['B_1x1_Gate_Expr_Select'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n bSelectB: 'bSelectB',\n Output: 'Output',\n },\n },\n Expr_SplitColor: {\n NAME: 'BrickComponentType_WireGraph_Expr_SplitColor',\n BRICK: 'B_1x1_Gate_Expr_SplitColor',\n BRICKS: ['B_1x1_Gate_Expr_SplitColor'],\n PORTS: {\n Input: 'Input',\n Input_A: 'Input.A',\n Input_B: 'Input.B',\n Input_G: 'Input.G',\n Input_R: 'Input.R',\n A: 'A',\n B: 'B',\n G: 'G',\n R: 'R',\n },\n },\n Expr_SplitVector: {\n NAME: 'BrickComponentType_WireGraph_Expr_SplitVector',\n BRICK: 'B_1x1_Gate_Expr_SplitVector',\n BRICKS: ['B_1x1_Gate_Expr_SplitVector'],\n PORTS: {\n Input: 'Input',\n Input_X: 'Input.X',\n Input_Y: 'Input.Y',\n Input_Z: 'Input.Z',\n X: 'X',\n Y: 'Y',\n Z: 'Z',\n },\n },\n Expr_String_Concatenate: {\n NAME: 'BrickComponentType_WireGraph_Expr_String_Concatenate',\n BRICK: 'B_1x1_Gate_Expr_String_Concatenate',\n BRICKS: ['B_1x1_Gate_Expr_String_Concatenate'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n Separator: 'Separator',\n Output: 'Output',\n },\n },\n Expr_String_Contains: {\n NAME: 'BrickComponentType_WireGraph_Expr_String_Contains',\n BRICK: 'B_1x1_Gate_Expr_String_Contains',\n BRICKS: ['B_1x1_Gate_Expr_String_Contains'],\n PORTS: {\n Input: 'Input',\n Search: 'Search',\n bCaseSensitive: 'bCaseSensitive',\n Output: 'Output',\n },\n },\n Expr_String_EndsWith: {\n NAME: 'BrickComponentType_WireGraph_Expr_String_EndsWith',\n BRICK: 'B_1x1_Gate_Expr_String_EndsWith',\n BRICKS: ['B_1x1_Gate_Expr_String_EndsWith'],\n PORTS: {\n Input: 'Input',\n Suffix: 'Suffix',\n bCaseSensitive: 'bCaseSensitive',\n Output: 'Output',\n },\n },\n Expr_String_Find: {\n NAME: 'BrickComponentType_WireGraph_Expr_String_Find',\n BRICK: 'B_1x1_Gate_Expr_String_Find',\n BRICKS: ['B_1x1_Gate_Expr_String_Find'],\n PORTS: {\n Input: 'Input',\n Search: 'Search',\n bCaseSensitive: 'bCaseSensitive',\n Output: 'Output',\n },\n },\n Expr_String_FormatText: {\n NAME: 'BrickComponentType_WireGraph_Expr_String_FormatText',\n BRICK: 'B_1x1_Gate_Expr_String_FormatText',\n BRICKS: ['B_1x1_Gate_Expr_String_FormatText'],\n PORTS: {\n FormatString: 'FormatString',\n InputA: 'InputA',\n InputB: 'InputB',\n InputC: 'InputC',\n InputD: 'InputD',\n InputE: 'InputE',\n InputF: 'InputF',\n InputG: 'InputG',\n Output: 'Output',\n },\n },\n Expr_String_Length: {\n NAME: 'BrickComponentType_WireGraph_Expr_String_Length',\n BRICK: 'B_1x1_Gate_Expr_String_Length',\n BRICKS: ['B_1x1_Gate_Expr_String_Length'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_String_ParseInt: {\n NAME: 'BrickComponentType_WireGraph_Expr_String_ParseInt',\n BRICK: 'B_1x1_Gate_Expr_String_ParseInt',\n BRICKS: ['B_1x1_Gate_Expr_String_ParseInt'],\n PORTS: {\n Input: 'Input',\n Value: 'Value',\n bSuccess: 'bSuccess',\n },\n },\n Expr_String_ParseNumber: {\n NAME: 'BrickComponentType_WireGraph_Expr_String_ParseNumber',\n BRICK: 'B_1x1_Gate_Expr_String_ParseNumber',\n BRICKS: ['B_1x1_Gate_Expr_String_ParseNumber'],\n PORTS: {\n Input: 'Input',\n Value: 'Value',\n bSuccess: 'bSuccess',\n },\n },\n Expr_String_Replace: {\n NAME: 'BrickComponentType_WireGraph_Expr_String_Replace',\n BRICK: 'B_1x1_Gate_Expr_String_Replace',\n BRICKS: ['B_1x1_Gate_Expr_String_Replace'],\n PORTS: {\n Input: 'Input',\n Replacement: 'Replacement',\n Search: 'Search',\n bCaseSensitive: 'bCaseSensitive',\n Output: 'Output',\n },\n },\n Expr_String_Split: {\n NAME: 'BrickComponentType_WireGraph_Expr_String_Split',\n BRICK: 'B_1x1_Gate_Expr_String_Split',\n BRICKS: ['B_1x1_Gate_Expr_String_Split'],\n PORTS: {\n Delimiter: 'Delimiter',\n Input: 'Input',\n bCaseSensitive: 'bCaseSensitive',\n Left: 'Left',\n Right: 'Right',\n bFound: 'bFound',\n },\n },\n Expr_String_StartsWith: {\n NAME: 'BrickComponentType_WireGraph_Expr_String_StartsWith',\n BRICK: 'B_1x1_Gate_Expr_String_StartsWith',\n BRICKS: ['B_1x1_Gate_Expr_String_StartsWith'],\n PORTS: {\n Input: 'Input',\n Prefix: 'Prefix',\n bCaseSensitive: 'bCaseSensitive',\n Output: 'Output',\n },\n },\n Expr_String_Substring: {\n NAME: 'BrickComponentType_WireGraph_Expr_String_Substring',\n BRICK: 'B_1x1_Gate_Expr_String_Substring',\n BRICKS: ['B_1x1_Gate_Expr_String_Substring'],\n PORTS: {\n Input: 'Input',\n Length: 'Length',\n Start: 'Start',\n Output: 'Output',\n },\n },\n Expr_String_ToLower: {\n NAME: 'BrickComponentType_WireGraph_Expr_String_ToLower',\n BRICK: 'B_1x1_Gate_Expr_String_ToLower',\n BRICKS: ['B_1x1_Gate_Expr_String_ToLower'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_String_ToUpper: {\n NAME: 'BrickComponentType_WireGraph_Expr_String_ToUpper',\n BRICK: 'B_1x1_Gate_Expr_String_ToUpper',\n BRICKS: ['B_1x1_Gate_Expr_String_ToUpper'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_String_Trim: {\n NAME: 'BrickComponentType_WireGraph_Expr_String_Trim',\n BRICK: 'B_1x1_Gate_Expr_String_Trim',\n BRICKS: ['B_1x1_Gate_Expr_String_Trim'],\n PORTS: {\n Input: 'Input',\n Output: 'Output',\n },\n },\n Expr_Swap: {\n NAME: 'BrickComponentType_WireGraph_Expr_Swap',\n BRICK: 'B_1x1_Gate_Expr_Swap',\n BRICKS: ['B_1x1_Gate_Expr_Swap'],\n PORTS: {\n InputA: 'InputA',\n InputB: 'InputB',\n bSwap: 'bSwap',\n Output: 'Output',\n OutputB: 'OutputB',\n },\n },\n Expr_VecCrossProduct: {\n NAME: 'BrickComponentType_WireGraph_Expr_VecCrossProduct',\n BRICK: 'B_1x1_Gate_Expr_VecCrossProduct',\n BRICKS: ['B_1x1_Gate_Expr_VecCrossProduct'],\n PORTS: {\n InputA: 'InputA',\n InputA_X: 'InputA.X',\n InputA_Y: 'InputA.Y',\n InputA_Z: 'InputA.Z',\n InputB: 'InputB',\n InputB_X: 'InputB.X',\n InputB_Y: 'InputB.Y',\n InputB_Z: 'InputB.Z',\n Output: 'Output',\n },\n },\n Expr_VecDistance: {\n NAME: 'BrickComponentType_WireGraph_Expr_VecDistance',\n BRICK: 'B_1x1_Gate_Expr_VecDistance',\n BRICKS: ['B_1x1_Gate_Expr_VecDistance'],\n PORTS: {\n InputA: 'InputA',\n InputA_X: 'InputA.X',\n InputA_Y: 'InputA.Y',\n InputA_Z: 'InputA.Z',\n InputB: 'InputB',\n InputB_X: 'InputB.X',\n InputB_Y: 'InputB.Y',\n InputB_Z: 'InputB.Z',\n Output: 'Output',\n },\n },\n Expr_VecDistanceSquared: {\n NAME: 'BrickComponentType_WireGraph_Expr_VecDistanceSquared',\n BRICK: 'B_1x1_Gate_Expr_VecDistanceSquared',\n BRICKS: ['B_1x1_Gate_Expr_VecDistanceSquared'],\n PORTS: {\n InputA: 'InputA',\n InputA_X: 'InputA.X',\n InputA_Y: 'InputA.Y',\n InputA_Z: 'InputA.Z',\n InputB: 'InputB',\n InputB_X: 'InputB.X',\n InputB_Y: 'InputB.Y',\n InputB_Z: 'InputB.Z',\n Output: 'Output',\n },\n },\n Expr_VecDotProduct: {\n NAME: 'BrickComponentType_WireGraph_Expr_VecDotProduct',\n BRICK: 'B_1x1_Gate_Expr_VecDotProduct',\n BRICKS: ['B_1x1_Gate_Expr_VecDotProduct'],\n PORTS: {\n InputA: 'InputA',\n InputA_X: 'InputA.X',\n InputA_Y: 'InputA.Y',\n InputA_Z: 'InputA.Z',\n InputB: 'InputB',\n InputB_X: 'InputB.X',\n InputB_Y: 'InputB.Y',\n InputB_Z: 'InputB.Z',\n Output: 'Output',\n },\n },\n Expr_VecMagnitude: {\n NAME: 'BrickComponentType_WireGraph_Expr_VecMagnitude',\n BRICK: 'B_1x1_Gate_Expr_VecMagnitude',\n BRICKS: ['B_1x1_Gate_Expr_VecMagnitude'],\n PORTS: {\n Input: 'Input',\n Input_X: 'Input.X',\n Input_Y: 'Input.Y',\n Input_Z: 'Input.Z',\n Output: 'Output',\n },\n },\n Expr_VecMagnitudeSquared: {\n NAME: 'BrickComponentType_WireGraph_Expr_VecMagnitudeSquared',\n BRICK: 'B_1x1_Gate_Expr_VecMagnitudeSquared',\n BRICKS: ['B_1x1_Gate_Expr_VecMagnitudeSquared'],\n PORTS: {\n Input: 'Input',\n Input_X: 'Input.X',\n Input_Y: 'Input.Y',\n Input_Z: 'Input.Z',\n Output: 'Output',\n },\n },\n Expr_VecNormalize: {\n NAME: 'BrickComponentType_WireGraph_Expr_VecNormalize',\n BRICK: 'B_1x1_Gate_Expr_VecNormalize',\n BRICKS: ['B_1x1_Gate_Expr_VecNormalize'],\n PORTS: {\n Input: 'Input',\n Input_X: 'Input.X',\n Input_Y: 'Input.Y',\n Input_Z: 'Input.Z',\n Output: 'Output',\n },\n },\n Expr_VecRotationToDirection: {\n NAME: 'BrickComponentType_WireGraph_Expr_VecRotationToDirection',\n BRICK: 'B_1x1_Gate_Expr_VecRotationToDirection',\n BRICKS: ['B_1x1_Gate_Expr_VecRotationToDirection'],\n PORTS: {\n Input: 'Input',\n Input_X: 'Input.X',\n Input_Y: 'Input.Y',\n Input_Z: 'Input.Z',\n Output: 'Output',\n },\n },\n Expr_VecScale: {\n NAME: 'BrickComponentType_WireGraph_Expr_VecScale',\n BRICK: 'B_1x1_Gate_Expr_VecScale',\n BRICKS: ['B_1x1_Gate_Expr_VecScale'],\n PORTS: {\n Input: 'Input',\n Input_X: 'Input.X',\n Input_Y: 'Input.Y',\n Input_Z: 'Input.Z',\n Scalar: 'Scalar',\n Output: 'Output',\n },\n },\n Fake_Gamemode_CharacterDiedEvent: {\n NAME: 'BrickComponentType_WireGraph_Fake_Gamemode_CharacterDiedEvent',\n BRICK: 'B_1x1_Gate_Fake_Gamemode_CharacterDiedEvent',\n BRICKS: ['B_1x1_Gate_Fake_Gamemode_CharacterDiedEvent'],\n PORTS: {\n Character: 'Character',\n ExecOut: 'ExecOut',\n },\n },\n Fake_Gamemode_CharacterSpawnedEvent: {\n NAME: 'BrickComponentType_WireGraph_Fake_Gamemode_CharacterSpawnedEvent',\n BRICK: 'B_1x1_Gate_Fake_Gamemode_CharacterSpawnedEvent',\n BRICKS: ['B_1x1_Gate_Fake_Gamemode_CharacterSpawnedEvent'],\n PORTS: {\n Character: 'Character',\n ExecOut: 'ExecOut',\n },\n },\n Fake_Gamemode_ControllerJoinedEvent: {\n NAME: 'BrickComponentType_WireGraph_Fake_Gamemode_ControllerJoinedEvent',\n BRICK: 'B_1x1_Gate_Fake_Gamemode_ControllerJoinedEvent',\n BRICKS: ['B_1x1_Gate_Fake_Gamemode_ControllerJoinedEvent'],\n PORTS: {\n Controller: 'Controller',\n ExecOut: 'ExecOut',\n },\n },\n Fake_Gamemode_ControllerLeftEvent: {\n NAME: 'BrickComponentType_WireGraph_Fake_Gamemode_ControllerLeftEvent',\n BRICK: 'B_1x1_Gate_Fake_Gamemode_ControllerLeftEvent',\n BRICKS: ['B_1x1_Gate_Fake_Gamemode_ControllerLeftEvent'],\n PORTS: {\n Controller: 'Controller',\n ExecOut: 'ExecOut',\n },\n },\n Fake_Gamemode_RoundEndEvent: {\n NAME: 'BrickComponentType_WireGraph_Fake_Gamemode_RoundEndEvent',\n BRICK: 'B_1x1_Gate_Fake_Gamemode_RoundEndEvent',\n BRICKS: ['B_1x1_Gate_Fake_Gamemode_RoundEndEvent'],\n PORTS: {\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n RoundNumber: 'RoundNumber',\n },\n },\n Fake_Gamemode_RoundStartEvent: {\n NAME: 'BrickComponentType_WireGraph_Fake_Gamemode_RoundStartEvent',\n BRICK: 'B_1x1_Gate_Fake_Gamemode_RoundStartEvent',\n BRICKS: ['B_1x1_Gate_Fake_Gamemode_RoundStartEvent'],\n PORTS: {\n Exec: 'Exec',\n ExecOut: 'ExecOut',\n RoundNumber: 'RoundNumber',\n },\n },\n FontReference: {\n NAME: 'BrickComponentType_WireGraph_FontReference',\n BRICK: 'B_1x1_Gate_FontReference',\n BRICKS: ['B_1x1_Gate_FontReference'],\n PORTS: {\n Value: 'Value',\n },\n },\n ItemReference: {\n NAME: 'BrickComponentType_WireGraph_ItemReference',\n BRICK: 'B_1x1_Gate_ItemReference',\n BRICKS: ['B_1x1_Gate_ItemReference'],\n PORTS: {\n Value: 'Value',\n },\n },\n OneShotAudioReference: {\n NAME: 'BrickComponentType_WireGraph_OneShotAudioReference',\n BRICK: 'B_1x1_Gate_OneShotAudioReference',\n BRICKS: ['B_1x1_Gate_OneShotAudioReference'],\n PORTS: {\n Value: 'Value',\n },\n },\n ParticleReference: {\n NAME: 'BrickComponentType_WireGraph_ParticleReference',\n BRICK: 'B_1x1_Gate_ParticleReference',\n BRICKS: ['B_1x1_Gate_ParticleReference'],\n PORTS: {\n Value: 'Value',\n },\n },\n PickupReference: {\n NAME: 'BrickComponentType_WireGraph_PickupReference',\n BRICK: 'B_1x1_Gate_PickupReference',\n BRICKS: ['B_1x1_Gate_PickupReference'],\n PORTS: {\n Value: 'Value',\n },\n },\n ProjectileReference: {\n NAME: 'BrickComponentType_WireGraph_ProjectileReference',\n BRICK: 'B_1x1_Gate_ProjectileReference',\n BRICKS: ['B_1x1_Gate_ProjectileReference'],\n PORTS: {\n Value: 'Value',\n },\n },\n ServerUptime: {\n NAME: 'BrickComponentType_WireGraph_ServerUptime',\n BRICK: 'B_1x1_Gate_ServerUptime',\n BRICKS: ['B_1x1_Gate_ServerUptime'],\n PORTS: {\n Uptime: 'Uptime',\n },\n },\n WheelEngineAudioReference: {\n NAME: 'BrickComponentType_WireGraph_WheelEngineAudioReference',\n BRICK: 'B_1x1_Gate_WheelEngineAudioReference',\n BRICKS: ['B_1x1_Gate_WheelEngineAudioReference'],\n PORTS: {\n Value: 'Value',\n },\n },\n ArrayVar: {\n NAME: 'BrickComponentType_WireGraphPseudo_ArrayVar',\n BRICK: 'B_1x1_Gate_Variable_Array',\n BRICKS: ['B_1x1_Gate_Variable_Array'],\n PORTS: {\n ArrayVarRef: 'ArrayVarRef',\n },\n },\n BufferSeconds: {\n NAME: 'BrickComponentType_WireGraphPseudo_BufferSeconds',\n BRICK: 'B_1x1_Gate_Pseudo_BufferSeconds',\n BRICKS: ['B_1x1_Gate_Pseudo_BufferSeconds'],\n PORTS: {\n Input: 'Input',\n SecondsToWait: 'SecondsToWait',\n ZeroSecondsToWait: 'ZeroSecondsToWait',\n Output: 'Output',\n },\n },\n BufferTicks: {\n NAME: 'BrickComponentType_WireGraphPseudo_BufferTicks',\n BRICK: 'B_1x1_Gate_Pseudo_BufferTicks',\n BRICKS: ['B_1x1_Gate_Pseudo_BufferTicks'],\n PORTS: {\n Input: 'Input',\n TicksToWait: 'TicksToWait',\n ZeroTicksToWait: 'ZeroTicksToWait',\n Output: 'Output',\n },\n },\n Dampen: {\n NAME: 'BrickComponentType_WireGraphPseudo_Dampen',\n BRICK: 'B_1x1_Gate_Pseudo_Dampen',\n BRICKS: ['B_1x1_Gate_Pseudo_Dampen'],\n PORTS: {\n SmoothTime: 'SmoothTime',\n Target: 'Target',\n Value: 'Value',\n },\n },\n QueueSeconds: {\n NAME: 'BrickComponentType_WireGraphPseudo_QueueSeconds',\n BRICK: 'B_1x1_Gate_Pseudo_QueueSeconds',\n BRICKS: ['B_1x1_Gate_Pseudo_QueueSeconds'],\n PORTS: {\n DataIn1: 'DataIn1',\n DataIn2: 'DataIn2',\n DataIn3: 'DataIn3',\n DataIn4: 'DataIn4',\n DataIn5: 'DataIn5',\n DataIn6: 'DataIn6',\n DataIn7: 'DataIn7',\n DataIn8: 'DataIn8',\n ExecIn: 'ExecIn',\n SecondsToWait: 'SecondsToWait',\n DataOut1: 'DataOut1',\n DataOut2: 'DataOut2',\n DataOut3: 'DataOut3',\n DataOut4: 'DataOut4',\n DataOut5: 'DataOut5',\n DataOut6: 'DataOut6',\n DataOut7: 'DataOut7',\n DataOut8: 'DataOut8',\n ExecOut: 'ExecOut',\n },\n },\n QueueTicks: {\n NAME: 'BrickComponentType_WireGraphPseudo_QueueTicks',\n BRICK: 'B_1x1_Gate_Pseudo_QueueTicks',\n BRICKS: ['B_1x1_Gate_Pseudo_QueueTicks'],\n PORTS: {\n DataIn1: 'DataIn1',\n DataIn2: 'DataIn2',\n DataIn3: 'DataIn3',\n DataIn4: 'DataIn4',\n DataIn5: 'DataIn5',\n DataIn6: 'DataIn6',\n DataIn7: 'DataIn7',\n DataIn8: 'DataIn8',\n ExecIn: 'ExecIn',\n TicksToWait: 'TicksToWait',\n DataOut1: 'DataOut1',\n DataOut2: 'DataOut2',\n DataOut3: 'DataOut3',\n DataOut4: 'DataOut4',\n DataOut5: 'DataOut5',\n DataOut6: 'DataOut6',\n DataOut7: 'DataOut7',\n DataOut8: 'DataOut8',\n ExecOut: 'ExecOut',\n },\n },\n Timer: {\n NAME: 'BrickComponentType_WireGraphPseudo_Timer',\n BRICK: 'B_1x1_Gate_Pseudo_Timer',\n BRICKS: ['B_1x1_Gate_Pseudo_Timer'],\n PORTS: {\n Limit: 'Limit',\n Pause: 'Pause',\n Restart: 'Restart',\n Resume: 'Resume',\n Expired: 'Expired',\n Time: 'Time',\n },\n },\n Tween: {\n NAME: 'BrickComponentType_WireGraphPseudo_Tween',\n BRICK: 'B_1x1_Gate_Pseudo_Tween',\n BRICKS: ['B_1x1_Gate_Pseudo_Tween'],\n PORTS: {\n Direction: 'Direction',\n Duration: 'Duration',\n Function: 'Function',\n Target: 'Target',\n Arrived: 'Arrived',\n Value: 'Value',\n },\n },\n Var: {\n NAME: 'BrickComponentType_WireGraphPseudo_Var',\n BRICK: 'B_1x1_Gate_Variable',\n BRICKS: ['B_1x1_Gate_Variable'],\n PORTS: {\n Value: 'Value',\n VarRef: 'VarRef',\n },\n },\n AudioEmitter: {\n NAME: 'Component_AudioEmitter',\n BRICK: 'B_1x1F_Speaker',\n BRICKS: ['B_1x1F_Speaker', 'B_2x2F_Speaker'],\n PORTS: {\n AudioDescriptor: 'AudioDescriptor',\n FocusAzimuth: 'FocusAzimuth',\n InnerRadius: 'InnerRadius',\n MaxDistance: 'MaxDistance',\n NonFocusAzimuth: 'NonFocusAzimuth',\n NonFocusVolumeAttenuation: 'NonFocusVolumeAttenuation',\n PitchMultiplier: 'PitchMultiplier',\n VolumeMultiplier: 'VolumeMultiplier',\n bEnabled: 'bEnabled',\n bSpatialization: 'bSpatialization',\n },\n },\n BotSpawn: {\n NAME: 'Component_BotSpawn',\n BRICK: 'B_Bot_Spawn_Point',\n BRICKS: ['B_Bot_Spawn_Point'],\n PORTS: {\n AggroRange: 'AggroRange',\n Agression: 'Agression',\n AttackDamageMultiplier: 'AttackDamageMultiplier',\n AttackMovementAmount: 'AttackMovementAmount',\n BotName: 'BotName',\n BotWeapon: 'BotWeapon',\n CorpseTimeout: 'CorpseTimeout',\n GunSkill: 'GunSkill',\n HealthMultiplier: 'HealthMultiplier',\n Jumpyness: 'Jumpyness',\n MoveTarget: 'MoveTarget',\n MoveTarget_X: 'MoveTarget.X',\n MoveTarget_Y: 'MoveTarget.Y',\n MoveTarget_Z: 'MoveTarget.Z',\n MovementAmount: 'MovementAmount',\n MovementGoalDummy: 'MovementGoalDummy',\n MovementRandomness: 'MovementRandomness',\n ReactionTime: 'ReactionTime',\n RespawnTime: 'RespawnTime',\n RunSpeed: 'RunSpeed',\n SkinDummy: 'SkinDummy',\n TeamCollisionChannel: 'TeamCollisionChannel',\n bActiveBot: 'bActiveBot',\n bBackVision: 'bBackVision',\n bCanJump: 'bCanJump',\n bCanTargetBots: 'bCanTargetBots',\n bCanTargetPlayers: 'bCanTargetPlayers',\n bDeleteBot: 'bDeleteBot',\n bSpawnEnable: 'bSpawnEnable',\n bTeamCollision: 'bTeamCollision',\n bTeamCollision1: 'bTeamCollision1',\n bTeamCollision2: 'bTeamCollision2',\n bTeamCollision3: 'bTeamCollision3',\n bVisionRaycasting: 'bVisionRaycasting',\n DistanceToTarget: 'DistanceToTarget',\n FocusCharacter: 'FocusCharacter',\n SpawnedCharacter: 'SpawnedCharacter',\n },\n },\n BrickPropertyChanger: {\n NAME: 'Component_BrickPropertyChanger',\n BRICK: 'B_1x1F_Round',\n BRICKS: ['B_1x1F_Round'],\n PORTS: {\n Color: 'Color',\n Color_A: 'Color.A',\n Color_B: 'Color.B',\n Color_G: 'Color.G',\n Color_R: 'Color.R',\n MaterialAlpha: 'MaterialAlpha',\n bCollisionEnabled: 'bCollisionEnabled',\n bCollisionEnabled_Interaction: 'bCollisionEnabled_Interaction',\n bCollisionEnabled_Physics: 'bCollisionEnabled_Physics',\n bCollisionEnabled_Player: 'bCollisionEnabled_Player',\n bCollisionEnabled_Player1: 'bCollisionEnabled_Player1',\n bCollisionEnabled_Player2: 'bCollisionEnabled_Player2',\n bCollisionEnabled_Player3: 'bCollisionEnabled_Player3',\n bCollisionEnabled_Weapon: 'bCollisionEnabled_Weapon',\n bVisibility: 'bVisibility',\n },\n },\n Button: {\n NAME: 'Component_Button',\n BRICK: 'B_1x1F_Round',\n BRICKS: ['B_1x1F_Round'],\n PORTS: {\n PressSound: 'PressSound',\n PromptCustomLabel: 'PromptCustomLabel',\n ReleaseSound: 'ReleaseSound',\n bAllowNearbyInteraction: 'bAllowNearbyInteraction',\n bHiddenInteraction: 'bHiddenInteraction',\n Character: 'Character',\n PressCount: 'PressCount',\n bHeld: 'bHeld',\n },\n },\n CheckPoint: {\n NAME: 'Component_CheckPoint',\n BRICK: 'B_CheckPoint',\n BRICKS: ['B_CheckPoint'],\n PORTS: {\n bRotatePlayerGravityOnSpawn: 'bRotatePlayerGravityOnSpawn',\n },\n },\n Damage: {\n NAME: 'Component_Damage',\n BRICK: 'B_1x1F_Round',\n BRICKS: ['B_1x1F_Round'],\n PORTS: {\n ConsoleTag: 'ConsoleTag',\n Message: 'Message',\n },\n },\n GoalPoint: {\n NAME: 'Component_GoalPoint',\n BRICK: 'B_GoalPoint',\n BRICKS: ['B_GoalPoint'],\n PORTS: {},\n },\n Interact: {\n NAME: 'Component_Interact',\n BRICK: 'B_1x1F_Round',\n BRICKS: ['B_1x1F_Round'],\n PORTS: {\n ConsoleTag: 'ConsoleTag',\n InteractSound: 'InteractSound',\n Message: 'Message',\n PromptCustomLabel: 'PromptCustomLabel',\n bAllowNearbyInteraction: 'bAllowNearbyInteraction',\n bHiddenInteraction: 'bHiddenInteraction',\n },\n },\n AnimatedButton: {\n NAME: 'Component_Internal_AnimatedButton',\n BRICK: 'B_Button',\n BRICKS: [\n 'B_Button',\n 'B_Button_Pressed',\n 'B_Button_Square',\n 'B_Button_Square_Pressed',\n ],\n PORTS: {\n PressSound: 'PressSound',\n PromptCustomLabel: 'PromptCustomLabel',\n ReleaseSound: 'ReleaseSound',\n bAllowNearbyInteraction: 'bAllowNearbyInteraction',\n bHiddenInteraction: 'bHiddenInteraction',\n Character: 'Character',\n PressCount: 'PressCount',\n bHeld: 'bHeld',\n },\n },\n AnimatedPressurePlate: {\n NAME: 'Component_Internal_AnimatedPressurePlate',\n BRICK: 'B_1x1F_Round',\n BRICKS: ['B_1x1F_Round'],\n PORTS: {\n BeginTouchSound: 'BeginTouchSound',\n EndTouchSound: 'EndTouchSound',\n bCollisionEnabled_Player: 'bCollisionEnabled_Player',\n bCollisionEnabled_Player1: 'bCollisionEnabled_Player1',\n bCollisionEnabled_Player2: 'bCollisionEnabled_Player2',\n bCollisionEnabled_Player3: 'bCollisionEnabled_Player3',\n Character: 'Character',\n TouchCount: 'TouchCount',\n bTouching: 'bTouching',\n },\n },\n AnimatedSwitch: {\n NAME: 'Component_Internal_AnimatedSwitch',\n BRICK: 'B_Switch_Flipped',\n BRICKS: ['B_Switch_Flipped', 'B_Switch_Test'],\n PORTS: {\n InteractSound: 'InteractSound',\n PromptCustomLabel: 'PromptCustomLabel',\n bAllowNearbyInteraction: 'bAllowNearbyInteraction',\n bHiddenInteraction: 'bHiddenInteraction',\n Character: 'Character',\n bEnabled: 'bEnabled',\n },\n },\n AttachedZone: {\n NAME: 'Component_Internal_AttachedZone',\n BRICK: 'B_1x1F_Round',\n BRICKS: ['B_1x1F_Round'],\n PORTS: {\n ZoneEndDistance: 'ZoneEndDistance',\n ZoneStartDistance: 'ZoneStartDistance',\n bIsBuildingZone: 'bIsBuildingZone',\n bIsLooseZone: 'bIsLooseZone',\n bIsShareZone: 'bIsShareZone',\n OccupantCount: 'OccupantCount',\n ZoneRef: 'ZoneRef',\n bOccupied: 'bOccupied',\n },\n },\n Bearing: {\n NAME: 'Component_Internal_Bearing',\n BRICK: 'B_Joint_Bearing',\n BRICKS: ['B_Joint_Bearing', 'B_Joint_Bearing_Micro'],\n PORTS: {\n Damping: 'Damping',\n LimitAngle: 'LimitAngle',\n bAnglesArePercentages: 'bAnglesArePercentages',\n bLimitAngle: 'bLimitAngle',\n CurrentAngle: 'CurrentAngle',\n },\n },\n InputSplitter: {\n NAME: 'Component_Internal_InputSplitter',\n BRICK: 'B_1x1_Gate_SeatControlSplitter',\n BRICKS: ['B_1x1_Gate_SeatControlSplitter'],\n PORTS: {\n Character: 'Character',\n InputForward: 'InputForward',\n InputRight: 'InputRight',\n bPressedJump: 'bPressedJump',\n },\n },\n Joint_Fixed: {\n NAME: 'Component_Internal_Joint_Fixed',\n BRICK: 'B_Joint_Fixed',\n BRICKS: ['B_Joint_Fixed'],\n PORTS: {\n LocationInterpMode: 'LocationInterpMode',\n LocationMaxSpeed: 'LocationMaxSpeed',\n LocationSmoothTime: 'LocationSmoothTime',\n OffsetLocation: 'OffsetLocation',\n OffsetLocation_X: 'OffsetLocation.X',\n OffsetLocation_Y: 'OffsetLocation.Y',\n OffsetLocation_Z: 'OffsetLocation.Z',\n OffsetRotation: 'OffsetRotation',\n OffsetRotation_Pitch: 'OffsetRotation.Pitch',\n OffsetRotation_Roll: 'OffsetRotation.Roll',\n OffsetRotation_Yaw: 'OffsetRotation.Yaw',\n RotationInterpMode: 'RotationInterpMode',\n RotationMaxSpeed: 'RotationMaxSpeed',\n RotationSmoothTime: 'RotationSmoothTime',\n bSettled: 'bSettled',\n bWelded: 'bWelded',\n },\n },\n Joint_Wheel: {\n NAME: 'Component_Internal_Joint_Wheel',\n BRICK: 'B_Joint_Wheel',\n BRICKS: ['B_Joint_Wheel', 'B_Joint_Wheel_Micro'],\n PORTS: {\n Control_DriveAndSteer: 'Control_DriveAndSteer',\n Damping: 'Damping',\n DrivePower: 'DrivePower',\n DriveSpeed: 'DriveSpeed',\n JointDistance: 'JointDistance',\n Steer: 'Steer',\n SteerLimitDegree: 'SteerLimitDegree',\n SteerPower: 'SteerPower',\n SuspensionDamping: 'SuspensionDamping',\n SuspensionStiffness: 'SuspensionStiffness',\n bAllowEngineSteerCorrect: 'bAllowEngineSteerCorrect',\n bCanBrake: 'bCanBrake',\n bDriveWhenNotAttachedToEngine: 'bDriveWhenNotAttachedToEngine',\n bEnabled: 'bEnabled',\n bReversed: 'bReversed',\n bSteerEnabled: 'bSteerEnabled',\n bSuspensionEnabled: 'bSuspensionEnabled',\n },\n },\n Joint_Wheel_Suspension: {\n NAME: 'Component_Internal_Joint_Wheel_Suspension',\n BRICK: 'B_Joint_Wheel_Micro_Suspension',\n BRICKS: ['B_Joint_Wheel_Micro_Suspension', 'B_Joint_Wheel_Suspension'],\n PORTS: {\n Control_DriveAndSteer: 'Control_DriveAndSteer',\n Damping: 'Damping',\n DrivePower: 'DrivePower',\n DriveSpeed: 'DriveSpeed',\n JointDistance: 'JointDistance',\n Steer: 'Steer',\n SteerLimitDegree: 'SteerLimitDegree',\n SteerPower: 'SteerPower',\n SuspensionBottomOffset: 'SuspensionBottomOffset',\n SuspensionDamping: 'SuspensionDamping',\n SuspensionStiffness: 'SuspensionStiffness',\n SuspensionTopOffset: 'SuspensionTopOffset',\n bAllowEngineSteerCorrect: 'bAllowEngineSteerCorrect',\n bCanBrake: 'bCanBrake',\n bDriveWhenNotAttachedToEngine: 'bDriveWhenNotAttachedToEngine',\n bEnabled: 'bEnabled',\n bReversed: 'bReversed',\n bSteerEnabled: 'bSteerEnabled',\n bSuspensionEnabled: 'bSuspensionEnabled',\n },\n },\n Microchip: {\n NAME: 'Component_Internal_Microchip',\n BRICK: 'B_1x1_Microchip',\n BRICKS: ['B_1x1_Microchip'],\n PORTS: {},\n },\n Motor: {\n NAME: 'Component_Internal_Motor',\n BRICK: 'B_Joint_Motor',\n BRICKS: ['B_Joint_Motor', 'B_Joint_Motor_Micro'],\n PORTS: {\n Damping: 'Damping',\n LimitAngle: 'LimitAngle',\n Power: 'Power',\n Speed: 'Speed',\n bAnglesArePercentages: 'bAnglesArePercentages',\n bEnabled: 'bEnabled',\n bLimitAngle: 'bLimitAngle',\n CurrentAngle: 'CurrentAngle',\n },\n },\n MotorSlider: {\n NAME: 'Component_Internal_MotorSlider',\n BRICK: 'B_1x1F_Round',\n BRICKS: ['B_1x1F_Round'],\n PORTS: {\n Damping: 'Damping',\n Power: 'Power',\n Speed: 'Speed',\n bEnabled: 'bEnabled',\n bPositionsArePercentages: 'bPositionsArePercentages',\n CurrentPosition: 'CurrentPosition',\n },\n },\n Rerouter: {\n NAME: 'Component_Internal_Rerouter',\n BRICK: 'B_1x1_Reroute_Node',\n BRICKS: ['B_1x1_Reroute_Node'],\n PORTS: {\n RER_Input: 'RER_Input',\n RER_Output: 'RER_Output',\n },\n },\n Seat: {\n NAME: 'Component_Internal_Seat',\n BRICK: 'B_Seat',\n BRICKS: ['B_Seat'],\n PORTS: {\n ExitOffset: 'ExitOffset',\n ExitOffset_X: 'ExitOffset.X',\n ExitOffset_Y: 'ExitOffset.Y',\n ExitOffset_Z: 'ExitOffset.Z',\n PromptCustomLabel: 'PromptCustomLabel',\n bAllowNearbyInteraction: 'bAllowNearbyInteraction',\n bHiddenInteraction: 'bHiddenInteraction',\n bRollCameraInThirdPerson: 'bRollCameraInThirdPerson',\n SittingCharacter: 'SittingCharacter',\n bIsOccupied: 'bIsOccupied',\n },\n },\n Servo: {\n NAME: 'Component_Internal_Servo',\n BRICK: 'B_Joint_Servo',\n BRICKS: ['B_Joint_Servo', 'B_Joint_Servo_Micro'],\n PORTS: {\n ActiveDamping: 'ActiveDamping',\n Damping: 'Damping',\n ForceLimit: 'ForceLimit',\n LimitAngle: 'LimitAngle',\n Power: 'Power',\n TargetAngle: 'TargetAngle',\n bAnglesArePercentages: 'bAnglesArePercentages',\n bEnabled: 'bEnabled',\n bLimitAngle: 'bLimitAngle',\n CurrentAngle: 'CurrentAngle',\n bStopped: 'bStopped',\n },\n },\n ServoSlider: {\n NAME: 'Component_Internal_ServoSlider',\n BRICK: 'B_1x1F_Round',\n BRICKS: ['B_1x1F_Round'],\n PORTS: {\n Damping: 'Damping',\n Exponent: 'Exponent',\n Power: 'Power',\n TargetPosition: 'TargetPosition',\n TopSpeed: 'TopSpeed',\n bEnabled: 'bEnabled',\n bPositionsArePercentages: 'bPositionsArePercentages',\n CurrentPosition: 'CurrentPosition',\n bStopped: 'bStopped',\n },\n },\n Slider: {\n NAME: 'Component_Internal_Slider',\n BRICK: 'B_1x1F_Round',\n BRICKS: ['B_1x1F_Round'],\n PORTS: {\n Damping: 'Damping',\n bPositionsArePercentages: 'bPositionsArePercentages',\n CurrentPosition: 'CurrentPosition',\n },\n },\n Socket: {\n NAME: 'Component_Internal_Socket',\n BRICK: 'B_Joint_Socket',\n BRICKS: ['B_Joint_Socket', 'B_Joint_Socket_Micro'],\n PORTS: {},\n },\n Thruster: {\n NAME: 'Component_Internal_Thruster',\n BRICK: 'B_2x2_Thruster',\n BRICKS: ['B_2x2_Thruster'],\n PORTS: {\n Force: 'Force',\n Pitch: 'Pitch',\n Throttle: 'Throttle',\n Yaw: 'Yaw',\n bEnabled: 'bEnabled',\n bSpawnLight: 'bSpawnLight',\n },\n },\n WeightBrick: {\n NAME: 'Component_Internal_WeightBrick',\n BRICK: 'B_1x1_Gate_WeightBrick',\n BRICKS: ['B_1x1_Gate_WeightBrick'],\n PORTS: {\n Mass: 'Mass',\n MassOffset: 'MassOffset',\n MassOffset_X: 'MassOffset.X',\n MassOffset_Y: 'MassOffset.Y',\n MassOffset_Z: 'MassOffset.Z',\n MassSize: 'MassSize',\n MassSize_X: 'MassSize.X',\n MassSize_Y: 'MassSize.Y',\n MassSize_Z: 'MassSize.Z',\n },\n },\n WheelEngine: {\n NAME: 'Component_Internal_WheelEngine',\n BRICK: 'B_1x1_Gate_WheelEngineSlim',\n BRICKS: ['B_1x1_Gate_WheelEngineSlim', 'B_Vehicle_Engine'],\n PORTS: {\n AudioDescriptor: 'AudioDescriptor',\n CenterOfSteering: 'CenterOfSteering',\n Character: 'Character',\n CustomMass: 'CustomMass',\n CustomMassVerticalOffset: 'CustomMassVerticalOffset',\n DriveAcceleratingPowerMultiplier: 'DriveAcceleratingPowerMultiplier',\n DriveBrakingPowerMultiplier: 'DriveBrakingPowerMultiplier',\n DriveDampingMultiplier: 'DriveDampingMultiplier',\n DriveInterpSpeed: 'DriveInterpSpeed',\n DriveSpeed: 'DriveSpeed',\n ManualInput_Drive: 'ManualInput_Drive',\n ManualInput_Steer: 'ManualInput_Steer',\n SteerInterpSpeed: 'SteerInterpSpeed',\n SteerLimitDegree: 'SteerLimitDegree',\n SteerPowerMultiplier: 'SteerPowerMultiplier',\n TankSteerSpeedMultiplier: 'TankSteerSpeedMultiplier',\n WaterDriveForce: 'WaterDriveForce',\n WaterSteeringForce: 'WaterSteeringForce',\n bEnableManualControl: 'bEnableManualControl',\n bEnabled: 'bEnabled',\n bManualInput_Brake: 'bManualInput_Brake',\n bTankSteering: 'bTankSteering',\n Control_DriveAndSteer: 'Control_DriveAndSteer',\n },\n },\n ItemSpawn: {\n NAME: 'Component_ItemSpawn',\n BRICK: 'B_1x1F_Round',\n BRICKS: ['B_1x1F_Round'],\n PORTS: {\n DamageMultiplier: 'DamageMultiplier',\n ItemNameOverride: 'ItemNameOverride',\n PickupAnimationAxis: 'PickupAnimationAxis',\n PickupAnimationPhase: 'PickupAnimationPhase',\n PickupBobHeight: 'PickupBobHeight',\n PickupBobSpeed: 'PickupBobSpeed',\n PickupClass: 'PickupClass',\n PickupMeshColors: 'PickupMeshColors',\n PickupMinigameResetRespawnDelay: 'PickupMinigameResetRespawnDelay',\n PickupOffsetDirection: 'PickupOffsetDirection',\n PickupOffsetDistance: 'PickupOffsetDistance',\n PickupRespawnTime: 'PickupRespawnTime',\n PickupRotation: 'PickupRotation',\n PickupRotation_Pitch: 'PickupRotation.Pitch',\n PickupRotation_Roll: 'PickupRotation.Roll',\n PickupRotation_Yaw: 'PickupRotation.Yaw',\n PickupScale: 'PickupScale',\n PickupSpinSpeed: 'PickupSpinSpeed',\n ProjectileOverride: 'ProjectileOverride',\n WeaponSpeedMultiplier: 'WeaponSpeedMultiplier',\n bOverridePickupColors: 'bOverridePickupColors',\n bPickupAnimationAxisLocal: 'bPickupAnimationAxisLocal',\n bPickupAnimationEnabled: 'bPickupAnimationEnabled',\n bPickupAutoDisableOnPickup: 'bPickupAutoDisableOnPickup',\n bPickupEnabled: 'bPickupEnabled',\n bPickupRespawnOnMinigameReset: 'bPickupRespawnOnMinigameReset',\n bRenderTranslucentWhenDisabled: 'bRenderTranslucentWhenDisabled',\n bShowPickupEnabled: 'bShowPickupEnabled',\n },\n },\n OneShotAudioEmitter: {\n NAME: 'Component_OneShotAudioEmitter',\n BRICK: 'B_1x1_SoundEmitter',\n BRICKS: ['B_1x1_SoundEmitter'],\n PORTS: {\n AudioDescriptor: 'AudioDescriptor',\n InnerRadius: 'InnerRadius',\n MaxDistance: 'MaxDistance',\n PitchMultiplier: 'PitchMultiplier',\n RepeatTime: 'RepeatTime',\n RepeatVariance: 'RepeatVariance',\n VolumeMultiplier: 'VolumeMultiplier',\n bEnableRepeat: 'bEnableRepeat',\n bPlay: 'bPlay',\n bSpatialization: 'bSpatialization',\n },\n },\n PointLight: {\n NAME: 'Component_PointLight',\n BRICK: 'B_1x1F_Round',\n BRICKS: ['B_1x1F_Round'],\n PORTS: {\n Brightness: 'Brightness',\n Color: 'Color',\n Color_A: 'Color.A',\n Color_B: 'Color.B',\n Color_G: 'Color.G',\n Color_R: 'Color.R',\n Radius: 'Radius',\n bCastShadows: 'bCastShadows',\n bEnabled: 'bEnabled',\n bMatchBrickShape: 'bMatchBrickShape',\n bUseBrickColor: 'bUseBrickColor',\n },\n },\n SpawnPoint: {\n NAME: 'Component_SpawnPoint',\n BRICK: 'B_SpawnPoint',\n BRICKS: ['B_SpawnPoint'],\n PORTS: {\n bEnable: 'bEnable',\n bRotatePlayerGravityOnSpawn: 'bRotatePlayerGravityOnSpawn',\n },\n },\n SpotLight: {\n NAME: 'Component_SpotLight',\n BRICK: 'B_1x1F_Round',\n BRICKS: ['B_1x1F_Round'],\n PORTS: {\n Brightness: 'Brightness',\n Color: 'Color',\n Color_A: 'Color.A',\n Color_B: 'Color.B',\n Color_G: 'Color.G',\n Color_R: 'Color.R',\n InnerConeAngle: 'InnerConeAngle',\n OuterConeAngle: 'OuterConeAngle',\n Radius: 'Radius',\n Rotation: 'Rotation',\n Rotation_Pitch: 'Rotation.Pitch',\n Rotation_Roll: 'Rotation.Roll',\n Rotation_Yaw: 'Rotation.Yaw',\n bCastShadows: 'bCastShadows',\n bEnabled: 'bEnabled',\n bUseBrickColor: 'bUseBrickColor',\n },\n },\n Switch: {\n NAME: 'Component_Switch',\n BRICK: 'B_1x1F_Round',\n BRICKS: ['B_1x1F_Round'],\n PORTS: {\n InteractSound: 'InteractSound',\n PromptCustomLabel: 'PromptCustomLabel',\n bAllowNearbyInteraction: 'bAllowNearbyInteraction',\n bHiddenInteraction: 'bHiddenInteraction',\n Character: 'Character',\n bEnabled: 'bEnabled',\n },\n },\n Target: {\n NAME: 'Component_Target',\n BRICK: 'B_2x2F_Target',\n BRICKS: ['B_2x2F_Target'],\n PORTS: {\n OnTime: 'OnTime',\n CharacterThatJustHit: 'CharacterThatJustHit',\n Damage: 'Damage',\n WeaponNameThatJustHit: 'WeaponNameThatJustHit',\n WeaponThatJustHit: 'WeaponThatJustHit',\n bJustHit: 'bJustHit',\n },\n },\n TextDisplay: {\n NAME: 'Component_TextDisplay',\n BRICK: 'B_1x1F_Round',\n BRICKS: ['B_1x1F_Round'],\n PORTS: {\n Anchor: 'Anchor',\n Anchor_X: 'Anchor.X',\n Anchor_Y: 'Anchor.Y',\n Billboard: 'Billboard',\n Color: 'Color',\n Color_A: 'Color.A',\n Color_B: 'Color.B',\n Color_G: 'Color.G',\n Color_R: 'Color.R',\n Face: 'Face',\n Font: 'Font',\n GraffitiAngleLimit: 'GraffitiAngleLimit',\n GraffitiDepthLimit: 'GraffitiDepthLimit',\n GraffitiLayer: 'GraffitiLayer',\n Kerning: 'Kerning',\n LineHeight: 'LineHeight',\n LineOffset: 'LineOffset',\n Material: 'Material',\n MaterialSlider: 'MaterialSlider',\n Offset: 'Offset',\n Offset_X: 'Offset.X',\n Offset_Y: 'Offset.Y',\n Offset_Z: 'Offset.Z',\n Outline: 'Outline',\n OutlineColor: 'OutlineColor',\n OutlineColor_A: 'OutlineColor.A',\n OutlineColor_B: 'OutlineColor.B',\n OutlineColor_G: 'OutlineColor.G',\n OutlineColor_R: 'OutlineColor.R',\n OutlineWidth: 'OutlineWidth',\n Rotation: 'Rotation',\n ScuffWidth: 'ScuffWidth',\n Shading: 'Shading',\n ShadingWidth: 'ShadingWidth',\n Skew: 'Skew',\n Text: 'Text',\n Typeface: 'Typeface',\n bAlignToWedge: 'bAlignToWedge',\n bEnabled: 'bEnabled',\n bFlipShading: 'bFlipShading',\n bForeground: 'bForeground',\n bOverrideColor: 'bOverrideColor',\n bOverrideOutlineColor: 'bOverrideOutlineColor',\n bSharpCorners: 'bSharpCorners',\n bSharpOutlines: 'bSharpOutlines',\n },\n },\n Touch: {\n NAME: 'Component_Touch',\n BRICK: 'B_1x1F_Round',\n BRICKS: ['B_1x1F_Round'],\n PORTS: {\n BeginTouchSound: 'BeginTouchSound',\n EndTouchSound: 'EndTouchSound',\n bCollisionEnabled_Player: 'bCollisionEnabled_Player',\n bCollisionEnabled_Player1: 'bCollisionEnabled_Player1',\n bCollisionEnabled_Player2: 'bCollisionEnabled_Player2',\n bCollisionEnabled_Player3: 'bCollisionEnabled_Player3',\n Character: 'Character',\n TouchCount: 'TouchCount',\n bTouching: 'bTouching',\n },\n },\n PlayAudioAt: {\n NAME: 'Component_WireGraph_PlayAudioAt',\n BRICK: 'B_1x1_Gate_Exec_Entity_PlayAudioAt',\n BRICKS: ['B_1x1_Gate_Exec_Entity_PlayAudioAt'],\n PORTS: {\n Entity: 'Entity',\n Exec: 'Exec',\n InnerRadius: 'InnerRadius',\n MaxDistance: 'MaxDistance',\n PitchMultiplier: 'PitchMultiplier',\n VolumeMultiplier: 'VolumeMultiplier',\n bSpatialization: 'bSpatialization',\n ExecOut: 'ExecOut',\n },\n },\n SetInventoryEntry: {\n NAME: 'Component_WireGraph_SetInventoryEntry',\n BRICK: 'B_1x1_Gate_Exec_Character_SetInventoryEntry',\n BRICKS: ['B_1x1_Gate_Exec_Character_SetInventoryEntry'],\n PORTS: {\n Character: 'Character',\n Exec: 'Exec',\n Slot: 'Slot',\n ExecOut: 'ExecOut',\n },\n },\n} as const;\n","// brdb Guids are four u32s (A,B,C,D) = the uuid's u128 split into\n// big-endian quarters. Flat-serialized as\n// BRGuid { A,B,C,D: u32 } with each u32 little-endian on disk — the\n// value walkers handle the LE part; this module only maps strings.\nimport { uuidParse, uuidStringify } from '../uuid';\n\nexport interface BrGuid {\n A: number;\n B: number;\n C: number;\n D: number;\n}\n\n/** Owner-table row 0 sentinel (the PUBLIC owner). */\nexport const PUBLIC_GUID: BrGuid = {\n A: 0xffffffff,\n B: 0xffffffff,\n C: 0xffffffff,\n D: 0xffffffff,\n};\n\nexport function uuidToGuid(uuid: string): BrGuid {\n const bytes = uuidParse(uuid);\n const view = new DataView(bytes.buffer, bytes.byteOffset, 16);\n return {\n A: view.getUint32(0, false),\n B: view.getUint32(4, false),\n C: view.getUint32(8, false),\n D: view.getUint32(12, false),\n };\n}\n\nexport function guidToUuid(guid: BrGuid): string {\n const bytes = new Uint8Array(16);\n const view = new DataView(bytes.buffer);\n view.setUint32(0, guid.A, false);\n view.setUint32(4, guid.B, false);\n view.setUint32(8, guid.C, false);\n view.setUint32(12, guid.D, false);\n return uuidStringify(Array.from(bytes));\n}\n","// Pending virtual-filesystem tree: the interchange type between the world\n// serializer and the container writers.\n// Children are ordered; that order determines archive ids (BFS, Task 4).\nexport type PendingEntry = [name: string, node: PendingNode];\nexport type PendingNode =\n | { type: 'folder'; children: PendingEntry[] }\n | { type: 'file'; content: Uint8Array };\n\nexport const folder = (children: PendingEntry[]): PendingNode => ({\n type: 'folder',\n children,\n});\n\nexport const file = (content: Uint8Array): PendingNode => ({\n type: 'file',\n content,\n});\n","// msgpack primitives for the brdb msgpack-schema encoding. This is NOT standard\n// msgpack: see the u8 negative-fixint band and the float shrink predicates.\nimport { ByteReader, ByteWriter } from './bytes';\n\nconst utf8Encoder = new TextEncoder();\nconst utf8Decoder = new TextDecoder('utf-8', { fatal: true });\n\nconst checkSafe = (v: number, what: string) => {\n if (!Number.isSafeInteger(v))\n throw new RangeError(`brdb: ${what} ${v} is not a safe integer`);\n};\n\nexport const mpNil = (w: ByteWriter) => w.u8(0xc0);\nexport const mpBool = (w: ByteWriter, v: boolean) => w.u8(v ? 0xc3 : 0xc2);\n\n// The 'u8' schema type only. 0..=127 pfix; 225..=255 negative fixint\n// (0xe1..0xff); 128..=224 u8 marker.\nexport function mpU8(w: ByteWriter, v: number) {\n if (v < 0 || v > 255 || !Number.isInteger(v))\n throw new RangeError(`brdb: u8 value out of range: ${v}`);\n if (v <= 127) w.u8(v);\n // reinterpreted as negative fixint on the wire\n else if (v > 224) w.u8(v);\n else {\n w.u8(0xcc);\n w.u8(v);\n }\n}\n\n// u16/u32/u64 schema types.\nexport function mpUint(w: ByteWriter, v: number) {\n checkSafe(v, 'uint');\n if (v < 0) throw new RangeError(`brdb: uint value negative: ${v}`);\n if (v <= 127) w.u8(v);\n else if (v <= 0xff) {\n w.u8(0xcc);\n w.u8(v);\n } else if (v <= 0xffff) {\n w.u8(0xcd);\n w.u16be(v);\n } else if (v <= 0xffffffff) {\n w.u8(0xce);\n w.u32be(v);\n } else {\n w.u8(0xcf);\n w.u64be(BigInt(v));\n }\n}\n\n// i8..i64 schema types. Positive values use SIGNED markers (never 0xcc+),\n// and positives 128..=32767 skip i8 and go straight to i16.\nexport function mpInt(w: ByteWriter, v: number) {\n checkSafe(v, 'int');\n if (v >= 0) {\n if (v < 128) w.u8(v);\n else if (v <= 32767) {\n w.u8(0xd1);\n w.i16be(v);\n } else if (v <= 2147483647) {\n w.u8(0xd2);\n w.i32be(v);\n } else {\n w.u8(0xd3);\n w.i64be(BigInt(v));\n }\n } else {\n // negative fixint 0xe1..0xff\n if (v > -32) w.u8(0x100 + v);\n else if (v >= -128) {\n w.u8(0xd0);\n w.i8(v);\n } else if (v >= -32768) {\n w.u8(0xd1);\n w.i16be(v);\n } else if (v >= -2147483648) {\n w.u8(0xd2);\n w.i32be(v);\n } else {\n w.u8(0xd3);\n w.i64be(BigInt(v));\n }\n }\n}\n\n// Whole f32 shrinks to int when (v as u16) < 65535 && (v as i16) > -32768.\n// With saturating casts this reduces to v < 65535 && v > -32768.\nexport function mpF32(w: ByteWriter, v: number) {\n if (v === Math.round(v) && v < 65535 && v > -32768) mpInt(w, v === 0 ? 0 : v);\n else {\n w.u8(0xca);\n w.f32be(v);\n }\n}\n\n// Whole f64 shrinks when (v as u32) < 4294967295 && (v as i32) > -2147483648.\nexport function mpF64(w: ByteWriter, v: number) {\n if (v === Math.round(v) && v < 4294967295 && v > -2147483648)\n mpInt(w, v === 0 ? 0 : v);\n else {\n w.u8(0xcb);\n w.f64be(v);\n }\n}\n\nexport function mpStr(w: ByteWriter, s: string) {\n const bytes = utf8Encoder.encode(s);\n const len = bytes.length;\n if (len < 32) w.u8(0xa0 | len);\n else if (len < 256) {\n w.u8(0xd9);\n w.u8(len);\n } else if (len <= 0xffff) {\n w.u8(0xda);\n w.u16be(len);\n } else {\n w.u8(0xdb);\n w.u32be(len);\n }\n w.bytes(bytes);\n}\n\nexport function mpBinHeader(w: ByteWriter, len: number) {\n if (len < 256) {\n w.u8(0xc4);\n w.u8(len);\n } else if (len <= 0xffff) {\n w.u8(0xc5);\n w.u16be(len);\n } else {\n w.u8(0xc6);\n w.u32be(len);\n }\n}\n\nexport function mpArrayHeader(w: ByteWriter, len: number) {\n if (len < 16) w.u8(0x90 | len);\n else if (len <= 0xffff) {\n w.u8(0xdc);\n w.u16be(len);\n } else {\n w.u8(0xdd);\n w.u32be(len);\n }\n}\n\nexport function mpMapHeader(w: ByteWriter, len: number) {\n if (len < 16) w.u8(0x80 | len);\n else if (len <= 0xffff) {\n w.u8(0xde);\n w.u16be(len);\n } else {\n w.u8(0xdf);\n w.u32be(len);\n }\n}\n\n// ---- readers ----\n\nconst fromBigint = (v: bigint): number => {\n if (\n v > BigInt(Number.MAX_SAFE_INTEGER) ||\n v < BigInt(Number.MIN_SAFE_INTEGER)\n )\n throw new RangeError(\n `brdb: 64-bit value ${v} exceeds JS safe integer range`\n );\n return Number(v);\n};\n\nconst badMarker = (marker: number, expected: string): never => {\n throw new TypeError(\n `brdb: unexpected marker 0x${marker.toString(16)} for ${expected}`\n );\n};\n\nconst isFixPos = (m: number) => (m & 0x80) === 0;\nconst isFixNeg = (m: number) => (m & 0xe0) === 0xe0;\n\n// Accepts every int marker, signed and unsigned.\nexport function rdInt(r: ByteReader): number {\n const m = r.u8();\n if (isFixPos(m)) return m;\n if (isFixNeg(m)) return m - 256;\n switch (m) {\n case 0xcc:\n return r.u8();\n case 0xcd:\n return r.u16be();\n case 0xce:\n return r.u32be();\n case 0xcf:\n return fromBigint(r.u64be());\n case 0xd0:\n return r.i8();\n case 0xd1:\n return r.i16be();\n case 0xd2:\n return r.i32be();\n case 0xd3:\n return fromBigint(r.i64be());\n default:\n return badMarker(m, 'integer');\n }\n}\n\n// Negative fixint bytes are unsigned 224..255 in this format (256+v), and\n// an explicit I8 marker's payload is likewise reinterpreted as 0..255: the\n// game's encoder casts u8 to i8 before writing, so u8 values 128..=224\n// arrive as d0 XX in real saves (e.g. MaterialAlpha=128 is d0 80). The\n// reference decoder sign-extends the i8 to u64 and its u8 field cast\n// truncates back to the same byte.\nexport function rdUint(r: ByteReader): number {\n const m = r.u8();\n if (isFixPos(m)) return m;\n if (isFixNeg(m)) return m; // 0xe0..0xff read back as 224..255\n switch (m) {\n case 0xcc:\n case 0xd0:\n return r.u8();\n case 0xcd:\n return r.u16be();\n case 0xce:\n return r.u32be();\n case 0xcf:\n return fromBigint(r.u64be());\n default:\n return badMarker(m, 'uint');\n }\n}\n\n// f32 accepts FixPos/FixNeg/I8/I16/U8/U16/F32 only.\nexport function rdF32(r: ByteReader): number {\n const m = r.u8();\n if (isFixPos(m)) return m;\n if (isFixNeg(m)) return m - 256;\n switch (m) {\n case 0xcc:\n return r.u8();\n case 0xcd:\n return r.u16be();\n case 0xd0:\n return r.i8();\n case 0xd1:\n return r.i16be();\n case 0xca:\n return r.f32be();\n default:\n return badMarker(m, 'float32');\n }\n}\n\n// f64 additionally accepts I32/U32/F32/F64.\nexport function rdF64(r: ByteReader): number {\n const m = r.u8();\n if (isFixPos(m)) return m;\n if (isFixNeg(m)) return m - 256;\n switch (m) {\n case 0xcc:\n return r.u8();\n case 0xcd:\n return r.u16be();\n case 0xce:\n return r.u32be();\n case 0xd0:\n return r.i8();\n case 0xd1:\n return r.i16be();\n case 0xd2:\n return r.i32be();\n case 0xca:\n return r.f32be();\n case 0xcb:\n return r.f64be();\n default:\n return badMarker(m, 'float64');\n }\n}\n\nexport function rdBool(r: ByteReader): boolean {\n const m = r.u8();\n if (m === 0xc3) return true;\n if (m === 0xc2) return false;\n return badMarker(m, 'bool');\n}\n\nexport function rdStr(r: ByteReader): string {\n const m = r.u8();\n let len: number;\n if ((m & 0xe0) === 0xa0) len = m & 0x1f;\n else if (m === 0xd9) len = r.u8();\n else if (m === 0xda) len = r.u16be();\n else if (m === 0xdb) len = r.u32be();\n else return badMarker(m, 'str');\n return utf8Decoder.decode(r.bytes(len));\n}\n\nexport function rdBinLen(r: ByteReader): number {\n const m = r.u8();\n if (m === 0xc4) return r.u8();\n if (m === 0xc5) return r.u16be();\n if (m === 0xc6) return r.u32be();\n return badMarker(m, 'bin');\n}\n\nexport function rdArrayLen(r: ByteReader): number {\n const m = r.u8();\n if ((m & 0xf0) === 0x90) return m & 0x0f;\n if (m === 0xdc) return r.u16be();\n if (m === 0xdd) return r.u32be();\n return badMarker(m, 'array');\n}\n\nexport function rdMapLen(r: ByteReader): number {\n const m = r.u8();\n if ((m & 0xf0) === 0x80) return m & 0x0f;\n if (m === 0xde) return r.u16be();\n if (m === 0xdf) return r.u32be();\n return badMarker(m, 'map');\n}\n\nexport function rdNil(r: ByteReader): void {\n const m = r.u8();\n if (m !== 0xc0) badMarker(m, 'nil');\n}\n","// Parser for the plaintext .schema sources: enum, variant, and struct\n// declarations. Enum keys are qualified (\"EFoo::Bar\"); enum values accept\n// decimal, 0b binary, and 0x hex literals with optional underscores.\nimport type { PropDesc } from './schema';\n\nexport interface SchemaData {\n enums: Map<string, Map<string, number>>;\n variants: Map<string, string[]>;\n structs: Map<string, Map<string, PropDesc>>;\n}\n\nconst stripComments = (text: string): string =>\n text\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, ' ')\n .replace(/\\/\\/[^\\n]*/g, ' ')\n .replace(/#[^\\n]*/g, ' ');\n\n// Identifier, optionally qualified: EBRColorSpace::Linear\nconst IDENT = String.raw`[A-Za-z_]\\w*(?:::\\w+)*`;\n\nfunction parseIntLiteral(raw: string): number {\n const t = raw.replace(/_/g, '');\n if (t.startsWith('0b')) return parseInt(t.slice(2), 2);\n if (t.startsWith('0x')) return parseInt(t.slice(2), 16);\n return parseInt(t, 10);\n}\n\nexport function parseSchemaText(text: string): SchemaData {\n const src = stripComments(text);\n const enums = new Map<string, Map<string, number>>();\n const variants = new Map<string, string[]>();\n const structs = new Map<string, Map<string, PropDesc>>();\n const declRe = /\\b(enum|variant|struct)\\s+([A-Za-z0-9_]+)\\s*\\{([^{}]*)\\}/g;\n const enumEntryRe = new RegExp(\n String.raw`^(${IDENT})\\s*=\\s*(-?\\d+(?:_\\d+)*|0b[01]+(?:_[01]+)*|0x[0-9a-fA-F]+(?:_[0-9a-fA-F]+)*)$`\n );\n const memberRe = new RegExp(String.raw`^${IDENT}$`);\n const propRe = new RegExp(\n String.raw`^(\\w+)\\s*:\\s*(\\w+)\\s*(\\[\\s*(flat)?\\s*\\])?$`\n );\n\n let lastEnd = 0;\n let match: RegExpExecArray | null;\n while ((match = declRe.exec(src))) {\n if (src.slice(lastEnd, match.index).trim() !== '')\n throw new Error(`brdb: unexpected schema text before ${match[2]}`);\n lastEnd = declRe.lastIndex;\n const [, keyword, name, body] = match;\n const items = body\n .split(',')\n .map(s => s.trim())\n .filter(s => s !== '');\n\n if (keyword === 'enum') {\n const values = new Map<string, number>();\n for (const item of items) {\n const m = enumEntryRe.exec(item);\n if (!m)\n throw new Error(`brdb: cannot parse enum entry '${item}' in ${name}`);\n values.set(m[1], parseIntLiteral(m[2]));\n }\n enums.set(name, values);\n } else if (keyword === 'variant') {\n const members: string[] = [];\n for (const item of items) {\n if (!memberRe.test(item))\n throw new Error(\n `brdb: cannot parse variant member '${item}' in ${name}`\n );\n members.push(item);\n }\n variants.set(name, members);\n } else {\n const props = new Map<string, PropDesc>();\n for (const item of items) {\n const m = propRe.exec(item);\n if (!m)\n throw new Error(\n `brdb: cannot parse struct property '${item}' in ${name}`\n );\n const [, prop, ty, isArray, isFlat] = m;\n props.set(\n prop,\n isArray\n ? { kind: isFlat ? 'flatarray' : 'array', type: ty }\n : { kind: 'type', type: ty }\n );\n }\n structs.set(name, props);\n }\n }\n if (src.slice(lastEnd).trim() !== '')\n throw new Error('brdb: trailing unparsed schema text');\n return { enums, variants, structs };\n}\n","// GENERATED by scripts/syncBrdbData.mjs — do not edit by hand.\n// Regenerate with: just sync-brdb-data\n\nimport type { SchemaSource } from './schema';\n\nexport type EmbeddedSchemaName =\n | 'BRSavedGlobalDataSoA'\n | 'BRSavedOwnerTableSoA'\n | 'BRSavedBrickChunkIndexSoA'\n | 'BRSavedBrickChunkSoA'\n | 'BRSavedWireChunkSoA'\n | 'BRSavedComponentChunkSoA'\n | 'BRSavedComponentChunkSoA_max'\n | 'BRSavedEntityChunkIndexSoA'\n | 'BRSavedEntityChunkSoA';\n\nexport const SCHEMAS: Record<EmbeddedSchemaName, SchemaSource> = {\n BRSavedGlobalDataSoA: {\n enums: {},\n variants: {},\n structs: {\n BRSavedPrimaryAssetId: {\n PrimaryAssetType: 'str',\n PrimaryAssetName: 'str',\n },\n BRSavedGlobalDataSoA: {\n EntityTypeNames: ['str'],\n EntityDataClassNames: ['str'],\n BasicBrickAssetNames: ['str'],\n ProceduralBrickAssetNames: ['str'],\n MaterialAssetNames: ['str'],\n ComponentTypeNames: ['str'],\n ComponentDataStructNames: ['str'],\n ComponentWirePortNames: ['str'],\n ExternalAssetReferences: ['BRSavedPrimaryAssetId'],\n GlobalGridEntityTypeIndex: 'i32',\n },\n },\n },\n BRSavedOwnerTableSoA: {\n enums: {},\n variants: {},\n structs: {\n BRGuid: {\n A: 'u32',\n B: 'u32',\n C: 'u32',\n D: 'u32',\n },\n BRSavedOwnerTableSoA: {\n UserIds: ['BRGuid', null],\n UserNames: ['str'],\n DisplayNames: ['str'],\n EntityCounts: ['u32'],\n BrickCounts: ['u32'],\n ComponentCounts: ['u32'],\n WireCounts: ['u32'],\n },\n },\n },\n BRSavedBrickChunkIndexSoA: {\n enums: {},\n variants: {},\n structs: {\n BRSavedChunk3DIndex: {\n X: 'i16',\n Y: 'i16',\n Z: 'i16',\n },\n IntVector: {\n X: 'i32',\n Y: 'i32',\n Z: 'i32',\n },\n BRSavedBrickChunkIndexSoA: {\n Chunk3DIndices: ['BRSavedChunk3DIndex'],\n ChunkOffsets: ['IntVector'],\n ChunkSizes: ['i32'],\n NumBricks: ['u32'],\n NumComponents: ['u32'],\n NumWires: ['u32'],\n },\n },\n },\n BRSavedBrickChunkSoA: {\n enums: {},\n variants: {},\n structs: {\n BRSavedBitFlags: {\n Flags: ['u8', null],\n },\n BRSavedBrickColor: {\n R: 'u8',\n G: 'u8',\n B: 'u8',\n A: 'u8',\n },\n BRSavedBrickSize: {\n X: 'u16',\n Y: 'u16',\n Z: 'u16',\n },\n BRSavedBrickSizeCounter: {\n AssetIndex: 'u32',\n NumSizes: 'u32',\n },\n BRSavedRelativeBrickPosition: {\n X: 'i16',\n Y: 'i16',\n Z: 'i16',\n },\n BRSavedBrickChunkSoA: {\n ProceduralBrickStartingIndex: 'u32',\n BrickSizeCounters: ['BRSavedBrickSizeCounter'],\n BrickSizes: ['BRSavedBrickSize'],\n BrickTypeIndices: ['u32'],\n OwnerIndices: ['u32'],\n OriginalOwnerIndices: ['u32'],\n RelativePositions: ['BRSavedRelativeBrickPosition', null],\n Orientations: ['u8', null],\n CollisionFlags_Player: 'BRSavedBitFlags',\n CollisionFlags_Player1: 'BRSavedBitFlags',\n CollisionFlags_Player2: 'BRSavedBitFlags',\n CollisionFlags_Player3: 'BRSavedBitFlags',\n CollisionFlags_Weapon: 'BRSavedBitFlags',\n CollisionFlags_Interaction: 'BRSavedBitFlags',\n CollisionFlags_Physics: 'BRSavedBitFlags',\n VisibilityFlags: 'BRSavedBitFlags',\n MaterialIndices: ['u8', null],\n ColorsAndAlphas: ['BRSavedBrickColor', null],\n bColorsAreLinear: 'bool',\n },\n },\n },\n BRSavedWireChunkSoA: {\n enums: {},\n variants: {},\n structs: {\n BRSavedBitFlags: {\n Flags: ['u8', null],\n },\n BRSavedChunk3DIndex: {\n X: 'i16',\n Y: 'i16',\n Z: 'i16',\n },\n BRSavedLocalWirePortSource: {\n BrickIndexInChunk: 'u32',\n ComponentTypeIndex: 'u16',\n PortIndex: 'u16',\n },\n BRSavedWirePortTarget: {\n BrickIndexInChunk: 'u32',\n ComponentTypeIndex: 'u16',\n PortIndex: 'u16',\n },\n BRSavedRemoteWirePortSource: {\n GridPersistentIndex: 'u32',\n ChunkIndex: 'BRSavedChunk3DIndex',\n BrickIndexInChunk: 'u32',\n ComponentTypeIndex: 'u16',\n PortIndex: 'u16',\n },\n BRSavedWireChunkSoA: {\n RemoteWireSources: ['BRSavedRemoteWirePortSource'],\n LocalWireSources: ['BRSavedLocalWirePortSource'],\n RemoteWireTargets: ['BRSavedWirePortTarget'],\n LocalWireTargets: ['BRSavedWirePortTarget'],\n PendingPropagationFlags: 'BRSavedBitFlags',\n },\n },\n },\n BRSavedComponentChunkSoA: {\n enums: {},\n variants: {},\n structs: {\n BRSavedBrickComponentTypeCounter: {\n TypeIndex: 'u32',\n NumInstances: 'u32',\n },\n Quat4f: {\n X: 'f32',\n Y: 'f32',\n Z: 'f32',\n W: 'f32',\n },\n Vector3f: {\n X: 'f32',\n Y: 'f32',\n Z: 'f32',\n },\n BRSavedComponentChunkSoA: {\n ComponentTypeCounters: ['BRSavedBrickComponentTypeCounter'],\n ComponentBrickIndices: ['u32'],\n JointBrickIndices: ['u32'],\n JointEntityReferences: ['u32'],\n JointInitialRelativeOffsets: ['Vector3f', null],\n JointInitialRelativeRotations: ['Quat4f', null],\n MicrochipBrickIndices: ['u32'],\n MicrochipBrickGridReferences: ['u32'],\n },\n },\n },\n BRSavedComponentChunkSoA_max: {\n enums: {\n EBRColorSpace: {\n 'EBRColorSpace::Linear': 0,\n 'EBRColorSpace::Srgb': 1,\n 'EBRColorSpace::Oklab': 2,\n 'EBRColorSpace::Hsv': 3,\n 'EBRColorSpace::EBRColorSpace_MAX': 4,\n },\n EBRDisplayTextEasing: {\n 'EBRDisplayTextEasing::Linear': 0,\n 'EBRDisplayTextEasing::EaseIn': 1,\n 'EBRDisplayTextEasing::EaseOut': 2,\n 'EBRDisplayTextEasing::EaseInOut': 3,\n 'EBRDisplayTextEasing::EBRDisplayTextEasing_MAX': 4,\n },\n EBRDisplayTextJustification: {\n 'EBRDisplayTextJustification::Left': 0,\n 'EBRDisplayTextJustification::Center': 1,\n 'EBRDisplayTextJustification::Right': 2,\n 'EBRDisplayTextJustification::EBRDisplayTextJustification_MAX': 3,\n },\n EBREasingDirection: {\n 'EBREasingDirection::In': 0,\n 'EBREasingDirection::Out': 1,\n 'EBREasingDirection::InOut': 2,\n 'EBREasingDirection::EBREasingDirection_MAX': 3,\n },\n EBREasingFunction: {\n 'EBREasingFunction::Linear': 0,\n 'EBREasingFunction::Sine': 1,\n 'EBREasingFunction::Quad': 2,\n 'EBREasingFunction::Cubic': 3,\n 'EBREasingFunction::Quart': 4,\n 'EBREasingFunction::Quint': 5,\n 'EBREasingFunction::Expo': 6,\n 'EBREasingFunction::Circ': 7,\n 'EBREasingFunction::Back': 8,\n 'EBREasingFunction::Elastic': 9,\n 'EBREasingFunction::Bounce': 10,\n 'EBREasingFunction::EBREasingFunction_MAX': 11,\n },\n EBrickAxis: {\n 'EBrickAxis::X': 0,\n 'EBrickAxis::Y': 1,\n 'EBrickAxis::Z': 2,\n 'EBrickAxis::MAX': 3,\n },\n EBrickDirection: {\n 'EBrickDirection::X_Positive': 0,\n 'EBrickDirection::X_Negative': 1,\n 'EBrickDirection::Y_Positive': 2,\n 'EBrickDirection::Y_Negative': 3,\n 'EBrickDirection::Z_Positive': 4,\n 'EBrickDirection::Z_Negative': 5,\n 'EBrickDirection::MAX': 6,\n },\n EBrickMaterial: {\n 'EBrickMaterial::Plastic': 0,\n 'EBrickMaterial::Glass': 1,\n 'EBrickMaterial::TranslucentPlastic': 2,\n 'EBrickMaterial::Glow': 3,\n 'EBrickMaterial::Metal': 4,\n 'EBrickMaterial::Hologram': 5,\n 'EBrickMaterial::EBrickMaterial_MAX': 6,\n },\n EBrickRigidJointInterpMode: {\n 'EBrickRigidJointInterpMode::Snap': 0,\n 'EBrickRigidJointInterpMode::Linear': 1,\n 'EBrickRigidJointInterpMode::Smooth': 2,\n 'EBrickRigidJointInterpMode::EBrickRigidJointInterpMode_MAX': 3,\n },\n EBRInventoryEntryPlanType: {\n 'EBRInventoryEntryPlanType::Nothing': 0,\n 'EBRInventoryEntryPlanType::Brick': 1,\n 'EBRInventoryEntryPlanType::Entity': 2,\n 'EBRInventoryEntryPlanType::Item': 3,\n 'EBRInventoryEntryPlanType::EBRInventoryEntryPlanType_MAX': 4,\n },\n EBRPawnCollisionChannel: {\n 'EBRPawnCollisionChannel::Channel1': 0,\n 'EBRPawnCollisionChannel::Channel2': 1,\n 'EBRPawnCollisionChannel::Channel3': 2,\n 'EBRPawnCollisionChannel::Channel4': 3,\n 'EBRPawnCollisionChannel::EBRPawnCollisionChannel_MAX': 4,\n },\n EBRTextFacing: {\n 'EBRTextFacing::None': 0,\n 'EBRTextFacing::Full': 1,\n 'EBRTextFacing::InPlane': 2,\n 'EBRTextFacing::EBRTextFacing_MAX': 3,\n },\n EBRTextMaterial: {\n 'EBRTextMaterial::Unlit': 0,\n 'EBRTextMaterial::Graffiti': 1,\n 'EBRTextMaterial::Plastic': 2,\n 'EBRTextMaterial::Metallic': 3,\n 'EBRTextMaterial::Glow': 4,\n 'EBRTextMaterial::TranslucentPlastic': 5,\n 'EBRTextMaterial::Glass': 6,\n 'EBRTextMaterial::EBRTextMaterial_MAX': 7,\n },\n EBRTextOutline: {\n 'EBRTextOutline::None': 0,\n 'EBRTextOutline::Inlined': 1,\n 'EBRTextOutline::Outlined': 2,\n 'EBRTextOutline::HollowInlined': 3,\n 'EBRTextOutline::HollowOutlined': 4,\n 'EBRTextOutline::EBRTextOutline_MAX': 5,\n },\n EBRTextShading: {\n 'EBRTextShading::None': 0,\n 'EBRTextShading::Chamfer': 1,\n 'EBRTextShading::Fillet': 2,\n 'EBRTextShading::DoubleChamfer': 3,\n 'EBRTextShading::DoubleFillet': 4,\n 'EBRTextShading::Rounded': 5,\n 'EBRTextShading::EBRTextShading_MAX': 6,\n },\n EBRTextTypeface: {\n 'EBRTextTypeface::Regular': 0,\n 'EBRTextTypeface::Bold': 1,\n 'EBRTextTypeface::Italic': 2,\n 'EBRTextTypeface::BoldItalic': 3,\n 'EBRTextTypeface::EBRTextTypeface_MAX': 4,\n },\n EProjectileSpawnLocation: {\n 'EProjectileSpawnLocation::FaceCenter': 0,\n 'EProjectileSpawnLocation::RandomPointInFace': 1,\n 'EProjectileSpawnLocation::EProjectileSpawnLocation_MAX': 2,\n },\n },\n variants: {\n WireGraphArrayVariant: [\n 'WireGraphDoubleArray',\n 'WireGraphInt64Array',\n 'WireGraphBoolArray',\n 'WireGraphObjectArray',\n 'WireGraphVectorArray',\n 'WireGraphRotatorArray',\n 'WireGraphQuatArray',\n 'WireGraphStringArray',\n 'WireGraphLinearColorArray',\n 'WireGraphEnumArrayWrapper',\n ],\n WireGraphEnumArrayVariant: [\n 'WireGraphEnumArray_EBrickDirection',\n 'WireGraphEnumArray_EBrickAxis',\n 'WireGraphEnumArray_EBRPawnCollisionChannel',\n 'WireGraphEnumArray_EBRTextShading',\n 'WireGraphEnumArray_EBRTextOutline',\n 'WireGraphEnumArray_EBRTextMaterial',\n 'WireGraphEnumArray_EBRTextTypeface',\n 'WireGraphEnumArray_EBRTextFacing',\n 'WireGraphEnumArray_EBREasingFunction',\n 'WireGraphEnumArray_EBREasingDirection',\n 'WireGraphEnumArray_EBRColorSpace',\n 'WireGraphEnumArray_EProjectileSpawnLocation',\n 'WireGraphEnumArray_EBrickRigidJointInterpMode',\n 'WireGraphEnumArray_EBRDisplayTextJustification',\n 'WireGraphEnumArray_EBRDisplayTextEasing',\n 'WireGraphEnumArray_EBrickMaterial',\n ],\n WireGraphEnumVariant: [\n 'EBrickDirection',\n 'EBrickAxis',\n 'EBrickMaterial',\n 'EBRPawnCollisionChannel',\n 'EBRTextShading',\n 'EBRTextOutline',\n 'EBRTextMaterial',\n 'EBRTextTypeface',\n 'EBRTextFacing',\n 'EBREasingFunction',\n 'EBREasingDirection',\n 'EBRColorSpace',\n 'EProjectileSpawnLocation',\n 'EBrickRigidJointInterpMode',\n 'EBRDisplayTextJustification',\n 'EBRDisplayTextEasing',\n ],\n WireGraphPrimMathVariant: [\n 'f64',\n 'i64',\n 'Vector',\n 'Rotator',\n 'Quat',\n 'LinearColor',\n ],\n WireGraphVariant: [\n 'f64',\n 'i64',\n 'bool',\n 'weak_object',\n 'WireGraphExec',\n 'Vector',\n 'Rotator',\n 'Quat',\n 'str',\n 'LinearColor',\n 'WireGraphEnumWrapper',\n ],\n },\n structs: {\n BrickComponentData_AudioEmitter: {\n bEnabled: 'bool',\n AudioDescriptor: 'object',\n VolumeMultiplier: 'f32',\n PitchMultiplier: 'f32',\n InnerRadius: 'f32',\n MaxDistance: 'f32',\n bSpatialization: 'bool',\n FocusAzimuth: 'f32',\n NonFocusAzimuth: 'f32',\n NonFocusVolumeAttenuation: 'f32',\n },\n BrickComponentData_Bearing: {\n bLimitAngle: 'bool',\n LimitAngle: 'f32',\n bAnglesArePercentages: 'bool',\n bReversed: 'bool',\n Damping: 'f32',\n },\n BrickComponentData_Button: {\n PressSound: 'object',\n ReleaseSound: 'object',\n bAllowNearbyInteraction: 'bool',\n bHiddenInteraction: 'bool',\n PromptCustomLabel: 'str',\n },\n BrickComponentData_CheckPoint: {\n bRotatePlayerGravityOnSpawn: 'bool',\n },\n BrickComponentData_Damage: {\n Damage: 'f32',\n RepeatDelay: 'f32',\n Message: 'str',\n ConsoleTag: 'str',\n },\n BrickComponentData_Interact: {\n InteractSound: 'object',\n Message: 'str',\n ConsoleTag: 'str',\n bAllowNearbyInteraction: 'bool',\n bHiddenInteraction: 'bool',\n PromptCustomLabel: 'str',\n },\n BrickComponentData_Internal_AttachedZone: {\n ZoneStartDistance: 'i32',\n ZoneEndDistance: 'i32',\n bIsBuildingZone: 'bool',\n bIsLooseZone: 'bool',\n bIsShareZone: 'bool',\n bDetectPlayers: 'bool',\n bDetectPlayers1: 'bool',\n bDetectPlayers2: 'bool',\n bDetectPlayers3: 'bool',\n bDetectEntities: 'bool',\n bDetectProjectiles: 'bool',\n TagFilter: 'str',\n },\n BrickComponentData_Internal_CharacterZoneEvent: {\n bCollisionEnabled_Player: 'bool',\n bCollisionEnabled_Player1: 'bool',\n bCollisionEnabled_Player2: 'bool',\n bCollisionEnabled_Player3: 'bool',\n },\n BrickComponentData_Internal_EntityZoneEvent: {},\n BrickComponentData_Internal_InputSplitter_V2: {},\n BrickComponentData_Internal_Microchip: {},\n BrickComponentData_Internal_MicrochipInput: {\n PortLabel: 'str',\n },\n BrickComponentData_Internal_MicrochipOutput: {\n PortLabel: 'str',\n },\n BrickComponentData_Internal_ProjectileZoneEvent: {},\n BrickComponentData_Internal_ReadBrickGrid: {},\n BrickComponentData_Internal_ZoneEvent: {},\n BrickComponentData_Motor: {\n bEnabled: 'bool',\n Speed: 'f32',\n Power: 'f32',\n bLimitAngle: 'bool',\n LimitAngle: 'f32',\n bAnglesArePercentages: 'bool',\n bReversed: 'bool',\n Damping: 'f32',\n },\n BrickComponentData_MotorSlider: {\n bEnabled: 'bool',\n Speed: 'f32',\n Power: 'f32',\n bPositionsArePercentages: 'bool',\n bReversed: 'bool',\n Damping: 'f32',\n },\n BrickComponentData_OneShotAudioEmitter: {\n AudioDescriptor: 'object',\n VolumeMultiplier: 'f32',\n PitchMultiplier: 'f32',\n InnerRadius: 'f32',\n MaxDistance: 'f32',\n bSpatialization: 'bool',\n bEnableRepeat: 'bool',\n RepeatTime: 'f32',\n RepeatVariance: 'f32',\n RepeatCount: 'i32',\n },\n BrickComponentData_ProjectileSpawner: {\n ProjectileClass: 'class',\n FireSound: 'object',\n Direction: 'EBrickDirection',\n SpawnLocation: 'EProjectileSpawnLocation',\n SpawnMargin: 'f32',\n bEnabled: 'bool',\n NumberOfShots: 'i32',\n SpreadConeAngle: 'f32',\n bSpreadBiasedTowardsCenter: 'bool',\n FireRate: 'f32',\n DamageMultiplier: 'f32',\n SpeedMultiplier: 'f32',\n ScaleMultiplier: 'f32',\n },\n BrickComponentData_Rerouter: {},\n BrickComponentData_RigidBearing: {\n TargetAngle: 'f32',\n bAnglesArePercentages: 'bool',\n bReversed: 'bool',\n InterpMode: 'EBrickRigidJointInterpMode',\n SmoothTime: 'f32',\n TopSpeed: 'f32',\n },\n BrickComponentData_RigidSlider: {\n TargetPosition: 'f32',\n bPositionsArePercentages: 'bool',\n bReversed: 'bool',\n InterpMode: 'EBrickRigidJointInterpMode',\n SmoothTime: 'f32',\n TopSpeed: 'f32',\n },\n BrickComponentData_Servo: {\n bEnabled: 'bool',\n TargetAngle: 'f32',\n Power: 'f32',\n ActiveDamping: 'f32',\n ForceLimit: 'f32',\n bLimitAngle: 'bool',\n LimitAngle: 'f32',\n bAnglesArePercentages: 'bool',\n bReversed: 'bool',\n Damping: 'f32',\n },\n BrickComponentData_ServoSlider: {\n bEnabled: 'bool',\n TargetPosition: 'f32',\n Power: 'f32',\n TopSpeed: 'f32',\n Exponent: 'f32',\n bPositionsArePercentages: 'bool',\n bReversed: 'bool',\n Damping: 'f32',\n },\n BrickComponentData_Slider: {\n bPositionsArePercentages: 'bool',\n bReversed: 'bool',\n Damping: 'f32',\n },\n BrickComponentData_SpawnPoint: {\n bRotatePlayerGravityOnSpawn: 'bool',\n bEnable: 'bool',\n },\n BrickComponentData_Switch: {\n bEnabled: 'bool',\n InteractSound: 'object',\n bAllowNearbyInteraction: 'bool',\n bHiddenInteraction: 'bool',\n PromptCustomLabel: 'str',\n },\n BrickComponentData_Target: {\n OnTime: 'f32',\n },\n BrickComponentData_TeleportDestination: {},\n BrickComponentData_Thruster: {\n bEnabled: 'bool',\n Force: 'f32',\n Throttle: 'f32',\n Pitch: 'f32',\n Yaw: 'f32',\n bSpawnLight: 'bool',\n },\n BrickComponentData_Touch: {\n BeginTouchSound: 'object',\n EndTouchSound: 'object',\n bCollisionEnabled_Player: 'bool',\n bCollisionEnabled_Player1: 'bool',\n bCollisionEnabled_Player2: 'bool',\n bCollisionEnabled_Player3: 'bool',\n },\n BrickComponentData_WireGraph_AudioReference: {\n Asset: 'object',\n },\n BrickComponentData_WireGraph_BrickAssetReference: {\n Asset: 'object',\n },\n BrickComponentData_WireGraph_DeltaTime: {},\n BrickComponentData_WireGraph_EntityTypeReference: {\n Asset: 'class',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Average: {\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Base: {},\n BrickComponentData_WireGraph_Exec_ArrayVar_DualRef: {},\n BrickComponentData_WireGraph_Exec_ArrayVar_ElementOp: {\n Index: 'i64',\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Find: {\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Get: {\n Index: 'i64',\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_GetLength: {},\n BrickComponentData_WireGraph_Exec_ArrayVar_Insert: {\n Index: 'i64',\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_MinMax: {\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Pop: {\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Push: {\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_RemoveAtIndex: {\n Index: 'i64',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Resize: {\n Size: 'i64',\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Slice: {\n Start: 'i64',\n Count: 'i64',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Sort: {\n bDescending: 'bool',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Sum: {\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_ArrayVar_Swap: {\n IndexA: 'i64',\n IndexB: 'i64',\n },\n BrickComponentData_WireGraph_Exec_Character_AddInventoryEntity: {},\n BrickComponentData_WireGraph_Exec_Character_AddInventoryItem: {},\n BrickComponentData_WireGraph_Exec_Character_GetAim: {},\n BrickComponentData_WireGraph_Exec_Character_GetDamage: {},\n BrickComponentData_WireGraph_Exec_Character_GetFromController: {},\n BrickComponentData_WireGraph_Exec_Character_IncDamage: {\n Amount: 'f64',\n },\n BrickComponentData_WireGraph_Exec_Character_SetDamage: {\n Damage: 'f64',\n },\n BrickComponentData_WireGraph_Exec_Character_SetInventoryEntity: {\n Slot: 'i32',\n },\n BrickComponentData_WireGraph_Exec_Character_SetInventoryItem: {\n Slot: 'i32',\n },\n BrickComponentData_WireGraph_Exec_Character_SetTempPermission: {\n PermissionTagStr: 'str',\n bPermissionEnable: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Character_ShowHint: {\n HintTitle: 'str',\n HintText: 'str',\n },\n BrickComponentData_WireGraph_Exec_ChatCommand: {\n CommandName: 'str',\n HelpText: 'str',\n },\n BrickComponentData_WireGraph_Exec_Controller_GetDisplayName: {},\n BrickComponentData_WireGraph_Exec_Controller_GetFromEntity: {},\n BrickComponentData_WireGraph_Exec_Controller_GetUserId: {},\n BrickComponentData_WireGraph_Exec_Controller_GetUserName: {},\n BrickComponentData_WireGraph_Exec_Controller_HasPermission: {\n PermissionName: 'str',\n },\n BrickComponentData_WireGraph_Exec_Controller_HasRole: {\n RoleName: 'str',\n },\n BrickComponentData_WireGraph_Exec_Controller_IsTrustedByBrickOwner: {},\n BrickComponentData_WireGraph_Exec_Controller_SetCanRespawn: {\n bCanRespawn: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Controller_ShowChatMessage: {\n Message: 'str',\n },\n BrickComponentData_WireGraph_Exec_Controller_ShowStatusMessage: {},\n BrickComponentData_WireGraph_Exec_Cycle: {\n Count: 'i64',\n Value: 'i64',\n },\n BrickComponentData_WireGraph_Exec_Entity_GetAngularVelocity: {},\n BrickComponentData_WireGraph_Exec_Entity_GetLinearVelocity: {},\n BrickComponentData_WireGraph_Exec_Entity_GetLocation: {},\n BrickComponentData_WireGraph_Exec_Entity_GetLocationRotation: {},\n BrickComponentData_WireGraph_Exec_Entity_GetRotation: {},\n BrickComponentData_WireGraph_Exec_Entity_GetTag: {},\n BrickComponentData_WireGraph_Exec_Entity_GetVelocity: {},\n BrickComponentData_WireGraph_Exec_Entity_PlayAudioAt: {\n AudioDescriptor: 'object',\n VolumeMultiplier: 'f32',\n PitchMultiplier: 'f32',\n InnerRadius: 'f32',\n MaxDistance: 'f32',\n bSpatialization: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetFrozen: {\n bFrozen: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetTag: {\n Tag: 'str',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_BroadcastChatMessage: {\n Message: 'str',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_BroadcastStatusMessage: {\n Message: 'str',\n bFlashIfUnchanged: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_FillArrayFromTeamMembers: {},\n BrickComponentData_WireGraph_Exec_Gamemode_GetCurrentRound: {},\n BrickComponentData_WireGraph_Exec_Gamemode_GetLeaderboardValue: {\n Key: 'str',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_GetTeam: {},\n BrickComponentData_WireGraph_Exec_Gamemode_GetTeamByName: {\n TeamName: 'str',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_GetTeamLeaderboardValue: {\n Key: 'str',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_GetTeamName: {},\n BrickComponentData_WireGraph_Exec_Gamemode_LeaderboardValue: {\n Key: 'str',\n Value: 'i64',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_PlayerWins: {\n bTeamWinsInstead: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_SetTeam: {\n bPinPlayerToTeam: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_SetTeamPinned: {\n bPinned: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_TeamLeaderboardValue: {\n Key: 'str',\n Value: 'i64',\n },\n BrickComponentData_WireGraph_Exec_Gamemode_TeamWins: {},\n BrickComponentData_WireGraph_Exec_PlayGlobalAudio: {\n AudioDescriptor: 'object',\n VolumeMultiplier: 'f32',\n PitchMultiplier: 'f32',\n },\n BrickComponentData_WireGraph_Exec_PrintToConsole: {\n Text: 'str',\n },\n BrickComponentData_WireGraph_Exec_Random: {\n Min: 'WireGraphPrimMathVariant',\n Max: 'WireGraphPrimMathVariant',\n },\n BrickComponentData_WireGraph_Exec_Toggle: {\n Value: 'bool',\n },\n BrickComponentData_WireGraph_Exec_Var_EditOrGet: {\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Exec_Var_Get: {\n Value: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_ExecBranch: {\n bCond: 'bool',\n },\n BrickComponentData_WireGraph_ExecUnion: {},\n BrickComponentData_WireGraph_Expr_Bool_Bool: {\n bInput: 'bool',\n },\n BrickComponentData_WireGraph_Expr_BoolBool_Bool: {\n bInputA: 'bool',\n bInputB: 'bool',\n },\n BrickComponentData_WireGraph_Expr_Compare: {\n InputA: 'WireGraphVariant',\n InputB: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Expr_Convert: {\n TargetType: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Expr_EdgeDetector: {\n Input: 'f64',\n bPulseOnRisingEdge: 'bool',\n bPulseOnFallingEdge: 'bool',\n },\n BrickComponentData_WireGraph_Expr_Float_Float: {\n Input: 'f64',\n },\n BrickComponentData_WireGraph_Expr_Int_Int: {\n Input: 'i64',\n },\n BrickComponentData_WireGraph_Expr_IntInt_Int: {\n InputA: 'i64',\n InputB: 'i64',\n },\n BrickComponentData_WireGraph_Expr_MakeColor: {\n R: 'f64',\n G: 'f64',\n B: 'f64',\n A: 'f64',\n },\n BrickComponentData_WireGraph_Expr_MakeColorHex: {\n Hex: 'str',\n },\n BrickComponentData_WireGraph_Expr_MakeColorSRGB: {\n R: 'i64',\n G: 'i64',\n B: 'i64',\n A: 'i64',\n },\n BrickComponentData_WireGraph_Expr_MakeQuaternion: {\n X: 'f64',\n Y: 'f64',\n Z: 'f64',\n W: 'f64',\n },\n BrickComponentData_WireGraph_Expr_MakeRotation: {\n Pitch: 'f64',\n Yaw: 'f64',\n Roll: 'f64',\n },\n BrickComponentData_WireGraph_Expr_MakeVector: {\n X: 'f64',\n Y: 'f64',\n Z: 'f64',\n },\n BrickComponentData_WireGraph_Expr_MathAtan2: {\n Y: 'f64',\n X: 'f64',\n },\n BrickComponentData_WireGraph_Expr_MathBlend: {\n Blend: 'f64',\n bClampAlpha: 'bool',\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n BrickComponentData_WireGraph_Expr_MathClamp: {\n Min: 'WireGraphPrimMathVariant',\n Max: 'WireGraphPrimMathVariant',\n Input: 'WireGraphPrimMathVariant',\n },\n BrickComponentData_WireGraph_Expr_MathCompare: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n BrickComponentData_WireGraph_Expr_MathEasing: {\n Blend: 'f64',\n Function: 'EBREasingFunction',\n Direction: 'EBREasingDirection',\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n BrickComponentData_WireGraph_Expr_MathLogBase: {\n Input: 'f64',\n Base: 'f64',\n },\n BrickComponentData_WireGraph_Expr_MathPow: {\n Input: 'f64',\n Exponent: 'f64',\n },\n BrickComponentData_WireGraph_Expr_NearlyEqual: {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n Tolerance: 'f64',\n },\n BrickComponentData_WireGraph_Expr_PrimMathVariant_PrimMathVariant: {\n Input: 'WireGraphPrimMathVariant',\n },\n BrickComponentData_WireGraph_Expr_PrimMathVariantPrimMathVariant_PrimMathVariant:\n {\n InputA: 'WireGraphPrimMathVariant',\n InputB: 'WireGraphPrimMathVariant',\n },\n BrickComponentData_WireGraph_Expr_Select: {\n bSelectB: 'bool',\n InputA: 'WireGraphVariant',\n InputB: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Expr_String_Concatenate: {\n InputA: 'str',\n InputB: 'str',\n Separator: 'str',\n },\n BrickComponentData_WireGraph_Expr_String_Contains: {\n Input: 'str',\n Search: 'str',\n bCaseSensitive: 'bool',\n },\n BrickComponentData_WireGraph_Expr_String_EndsWith: {\n Input: 'str',\n Suffix: 'str',\n bCaseSensitive: 'bool',\n },\n BrickComponentData_WireGraph_Expr_String_Find: {\n Input: 'str',\n Search: 'str',\n bCaseSensitive: 'bool',\n },\n BrickComponentData_WireGraph_Expr_String_FormatText: {\n FormatString: 'str',\n InputA: 'WireGraphVariant',\n InputB: 'WireGraphVariant',\n InputC: 'WireGraphVariant',\n InputD: 'WireGraphVariant',\n InputE: 'WireGraphVariant',\n InputF: 'WireGraphVariant',\n InputG: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Expr_String_Length: {\n Input: 'str',\n },\n BrickComponentData_WireGraph_Expr_String_ParseInt: {\n Input: 'str',\n },\n BrickComponentData_WireGraph_Expr_String_ParseNumber: {\n Input: 'str',\n },\n BrickComponentData_WireGraph_Expr_String_Replace: {\n Input: 'str',\n Search: 'str',\n Replacement: 'str',\n bCaseSensitive: 'bool',\n },\n BrickComponentData_WireGraph_Expr_String_Split: {\n Input: 'str',\n Delimiter: 'str',\n bCaseSensitive: 'bool',\n },\n BrickComponentData_WireGraph_Expr_String_StartsWith: {\n Input: 'str',\n Prefix: 'str',\n bCaseSensitive: 'bool',\n },\n BrickComponentData_WireGraph_Expr_String_Substring: {\n Input: 'str',\n Start: 'i64',\n Length: 'i64',\n },\n BrickComponentData_WireGraph_Expr_String_ToLower: {\n Input: 'str',\n },\n BrickComponentData_WireGraph_Expr_String_ToUpper: {\n Input: 'str',\n },\n BrickComponentData_WireGraph_Expr_String_Trim: {\n Input: 'str',\n },\n BrickComponentData_WireGraph_Expr_Swap: {\n bSwap: 'bool',\n InputA: 'WireGraphVariant',\n InputB: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Expr_Variant_Variant: {\n Input: 'WireGraphVariant',\n },\n BrickComponentData_WireGraph_Fake_CharacterDamageEvent: {},\n BrickComponentData_WireGraph_Fake_CharacterDeathEvent: {},\n BrickComponentData_WireGraph_Fake_CharacterEvent: {},\n BrickComponentData_WireGraph_Fake_ControllerEvent: {},\n BrickComponentData_WireGraph_Fake_RoundEvent: {\n RoundNumber: 'i32',\n },\n BrickComponentData_WireGraph_FindPlayer: {\n Query: 'str',\n },\n BrickComponentData_WireGraph_FontReference: {\n Asset: 'object',\n },\n BrickComponentData_WireGraph_ItemReference: {\n Asset: 'class',\n },\n BrickComponentData_WireGraph_OneShotAudioReference: {\n Asset: 'object',\n },\n BrickComponentData_WireGraph_ParticleReference: {\n Asset: 'object',\n },\n BrickComponentData_WireGraph_PickupReference: {\n Asset: 'class',\n },\n BrickComponentData_WireGraph_ProjectileReference: {\n Asset: 'class',\n },\n BrickComponentData_WireGraph_ServerUptime: {},\n BrickComponentData_WireGraph_WheelEngineAudioReference: {\n Asset: 'object',\n },\n BrickComponentData_WireGraphPseudo_ArrayVar: {\n Value: 'WireGraphArrayVariant',\n },\n BrickComponentData_WireGraphPseudo_BufferSeconds: {\n SecondsToWait: 'f32',\n ZeroSecondsToWait: 'f32',\n CurrentTime: 'f32',\n Input: 'WireGraphVariant',\n Output: 'WireGraphVariant',\n Buffered: 'WireGraphVariant',\n bHasQueued: 'bool',\n bIsOffTimer: 'bool',\n },\n BrickComponentData_WireGraphPseudo_BufferTicks: {\n TicksToWait: 'i32',\n ZeroTicksToWait: 'i32',\n CurrentTicks: 'i32',\n Input: 'WireGraphVariant',\n Output: 'WireGraphVariant',\n Buffered: 'WireGraphVariant',\n bHasQueued: 'bool',\n bIsOffTimer: 'bool',\n },\n BrickComponentData_WireGraphPseudo_Timer: {\n Limit: 'f64',\n Time: 'f64',\n bRunning: 'bool',\n },\n BrickComponentData_WireGraphPseudo_Tween: {\n Target: 'WireGraphVariant',\n Value: 'WireGraphVariant',\n StartValue: 'WireGraphVariant',\n Duration: 'f64',\n Elapsed: 'f64',\n Function: 'EBREasingFunction',\n Direction: 'EBREasingDirection',\n },\n BrickComponentData_WireGraphPseudo_Var: {\n Value: 'WireGraphVariant',\n },\n BrickComponentWireControl_DriveAndSteer: {},\n BrickComponentWirePortControl_TeleportDestination: {},\n BRInventoryEntryVariant: {},\n BRQueueSecondsEntry: {\n Data: ['WireGraphVariant'],\n RemainingTime: 'f32',\n },\n BRQueueTicksEntry: {\n Data: ['WireGraphVariant'],\n RemainingTicks: 'i32',\n },\n BRSavedBrickComponentTypeCounter: {\n TypeIndex: 'u32',\n NumInstances: 'u32',\n },\n Color: {\n B: 'u8',\n G: 'u8',\n R: 'u8',\n A: 'u8',\n },\n IntVector: {\n X: 'i32',\n Y: 'i32',\n Z: 'i32',\n },\n LinearColor: {\n R: 'f32',\n G: 'f32',\n B: 'f32',\n A: 'f32',\n },\n Quat: {\n X: 'f64',\n Y: 'f64',\n Z: 'f64',\n W: 'f64',\n },\n Quat4f: {\n X: 'f32',\n Y: 'f32',\n Z: 'f32',\n W: 'f32',\n },\n Rotator: {\n Pitch: 'f64',\n Yaw: 'f64',\n Roll: 'f64',\n },\n Rotator3f: {\n Pitch: 'f32',\n Yaw: 'f32',\n Roll: 'f32',\n },\n Vector: {\n X: 'f64',\n Y: 'f64',\n Z: 'f64',\n },\n Vector2f: {\n X: 'f32',\n Y: 'f32',\n },\n Vector3f: {\n X: 'f32',\n Y: 'f32',\n Z: 'f32',\n },\n Vector4: {\n X: 'f64',\n Y: 'f64',\n Z: 'f64',\n W: 'f64',\n },\n WireGraphBoolArray: {\n Values: ['bool'],\n },\n WireGraphDoubleArray: {\n Values: ['f64'],\n },\n WireGraphEnumArray_EBRColorSpace: {\n Values: ['EBRColorSpace'],\n },\n WireGraphEnumArray_EBRDisplayTextEasing: {\n Values: ['EBRDisplayTextEasing'],\n },\n WireGraphEnumArray_EBRDisplayTextJustification: {\n Values: ['EBRDisplayTextJustification'],\n },\n WireGraphEnumArray_EBREasingDirection: {\n Values: ['EBREasingDirection'],\n },\n WireGraphEnumArray_EBREasingFunction: {\n Values: ['EBREasingFunction'],\n },\n WireGraphEnumArray_EBrickAxis: {\n Values: ['EBrickAxis'],\n },\n WireGraphEnumArray_EBrickDirection: {\n Values: ['EBrickDirection'],\n },\n WireGraphEnumArray_EBrickMaterial: {\n Values: ['EBrickMaterial'],\n },\n WireGraphEnumArray_EBrickRigidJointInterpMode: {\n Values: ['EBrickRigidJointInterpMode'],\n },\n WireGraphEnumArray_EBRPawnCollisionChannel: {\n Values: ['EBRPawnCollisionChannel'],\n },\n WireGraphEnumArray_EBRTextFacing: {\n Values: ['EBRTextFacing'],\n },\n WireGraphEnumArray_EBRTextMaterial: {\n Values: ['EBRTextMaterial'],\n },\n WireGraphEnumArray_EBRTextOutline: {\n Values: ['EBRTextOutline'],\n },\n WireGraphEnumArray_EBRTextShading: {\n Values: ['EBRTextShading'],\n },\n WireGraphEnumArray_EBRTextTypeface: {\n Values: ['EBRTextTypeface'],\n },\n WireGraphEnumArray_EProjectileSpawnLocation: {\n Values: ['EProjectileSpawnLocation'],\n },\n WireGraphEnumArrayWrapper: {\n Enum: 'WireGraphEnumArrayVariant',\n },\n WireGraphEnumWrapper: {\n Enum: 'WireGraphEnumVariant',\n },\n WireGraphExec: {},\n WireGraphInt64Array: {\n Values: ['i64'],\n },\n WireGraphObjectArray: {\n Values: ['weak_object'],\n },\n WireGraphStringArray: {\n Values: ['str'],\n },\n BrickComponentData_BrickPropertyChanger: {\n bVisibility: 'bool',\n bCollisionEnabled: 'bool',\n bCollisionEnabled_Player: 'bool',\n bCollisionEnabled_Player1: 'bool',\n bCollisionEnabled_Player2: 'bool',\n bCollisionEnabled_Player3: 'bool',\n bCollisionEnabled_Weapon: 'bool',\n bCollisionEnabled_Interaction: 'bool',\n bCollisionEnabled_Physics: 'bool',\n Color: 'Color',\n MaterialAlpha: 'u8',\n Material: 'EBrickMaterial',\n },\n BrickComponentData_Gyroscope: {\n bEnabled: 'bool',\n Strength: 'f32',\n Damping: 'f32',\n MaxForce: 'f32',\n TargetAxis: 'Vector',\n },\n BrickComponentData_ItemSpawn: {\n PickupClass: 'class',\n bPickupEnabled: 'bool',\n bPickupRespawnOnMinigameReset: 'bool',\n PickupMinigameResetRespawnDelay: 'f32',\n bPickupAutoDisableOnPickup: 'bool',\n PickupRespawnTime: 'f32',\n bRenderTranslucentWhenDisabled: 'bool',\n DamageMultiplier: 'f32',\n WeaponSpeedMultiplier: 'f32',\n ItemNameOverride: 'str',\n ProjectileOverride: 'class',\n PickupOffsetDirection: 'EBrickDirection',\n PickupOffsetDistance: 'f32',\n PickupRotation: 'Rotator3f',\n PickupScale: 'f32',\n bOverridePickupColors: 'bool',\n PickupMeshColors: ['Color'],\n bPickupAnimationEnabled: 'bool',\n PickupAnimationAxis: 'EBrickAxis',\n bPickupAnimationAxisLocal: 'bool',\n PickupSpinSpeed: 'f32',\n PickupBobSpeed: 'f32',\n PickupBobHeight: 'f32',\n PickupAnimationPhase: 'f32',\n },\n BrickComponentData_Joint_Wheel: {\n Control_DriveAndSteer: 'BrickComponentWireControl_DriveAndSteer',\n bEnabled: 'bool',\n DriveSpeed: 'f32',\n DrivePower: 'f32',\n bSteerEnabled: 'bool',\n Steer: 'f32',\n SteerLimitDegree: 'f32',\n SteerPower: 'f32',\n bSuspensionEnabled: 'bool',\n SuspensionStiffness: 'f32',\n SuspensionDamping: 'f32',\n JointDistance: 'i32',\n bDriveWhenNotAttachedToEngine: 'bool',\n bCanBrake: 'bool',\n bAllowEngineSteerCorrect: 'bool',\n bReversed: 'bool',\n Damping: 'f32',\n },\n BrickComponentData_Joint_Wheel_Suspension: {\n Control_DriveAndSteer: 'BrickComponentWireControl_DriveAndSteer',\n bEnabled: 'bool',\n DriveSpeed: 'f32',\n DrivePower: 'f32',\n bSteerEnabled: 'bool',\n Steer: 'f32',\n SteerLimitDegree: 'f32',\n SteerPower: 'f32',\n bSuspensionEnabled: 'bool',\n SuspensionStiffness: 'f32',\n SuspensionDamping: 'f32',\n SuspensionOffset: 'f32',\n SuspensionLength: 'f32',\n JointDistance: 'i32',\n bDriveWhenNotAttachedToEngine: 'bool',\n bCanBrake: 'bool',\n bAllowEngineSteerCorrect: 'bool',\n bReversed: 'bool',\n Damping: 'f32',\n },\n BrickComponentData_PointLight: {\n bMatchBrickShape: 'bool',\n bEnabled: 'bool',\n Brightness: 'f32',\n Radius: 'f32',\n Color: 'Color',\n bUseBrickColor: 'bool',\n bCastShadows: 'bool',\n },\n BrickComponentData_PrefabSpawn: {\n Prefab: 'bundle_path_ref',\n SpawnOffset: 'Vector',\n SpawnOffsetRotation: 'Rotator',\n SpawnVelocity: 'Vector',\n bSpawnEnable: 'bool',\n RespawnTime: 'f64',\n SpawnedEntityIds: ['u32'],\n },\n BrickComponentData_Seat_V2: {\n bIsOccupied: 'bool',\n ExitOffset: 'IntVector',\n bRollCameraInThirdPerson: 'bool',\n bAllowNearbyInteraction: 'bool',\n bHiddenInteraction: 'bool',\n PromptCustomLabel: 'str',\n },\n BrickComponentData_SpotLight: {\n Rotation: 'Rotator3f',\n InnerConeAngle: 'f32',\n OuterConeAngle: 'f32',\n bEnabled: 'bool',\n Brightness: 'f32',\n Radius: 'f32',\n Color: 'Color',\n bUseBrickColor: 'bool',\n bCastShadows: 'bool',\n },\n BrickComponentData_TextDisplay: {\n Text: 'str',\n Font: 'object',\n Rotation: 'f32',\n Skew: 'f32',\n Kerning: 'f32',\n LineHeight: 'f32',\n LineOffset: 'f32',\n Anchor: 'Vector2f',\n Offset: 'Vector3f',\n Color: 'Color',\n MaterialSlider: 'i32',\n ShadingWidth: 'f32',\n OutlineColor: 'Color',\n OutlineWidth: 'f32',\n ScuffWidth: 'f32',\n GraffitiDepthLimit: 'f32',\n GraffitiAngleLimit: 'f32',\n GraffitiLayer: 'i32',\n bEnabled: 'bool',\n Face: 'EBrickDirection',\n bAlignToWedge: 'bool',\n bOverrideColor: 'bool',\n Typeface: 'EBRTextTypeface',\n Billboard: 'EBRTextFacing',\n Material: 'EBRTextMaterial',\n Shading: 'EBRTextShading',\n bFlipShading: 'bool',\n Outline: 'EBRTextOutline',\n bSharpCorners: 'bool',\n bSharpOutlines: 'bool',\n bOverrideOutlineColor: 'bool',\n bForeground: 'bool',\n },\n BrickComponentData_WeightBrick: {\n Mass: 'f32',\n MassSize: 'IntVector',\n MassOffset: 'IntVector',\n },\n BrickComponentData_WheelEngine_V2: {\n bEnabled: 'bool',\n bEnableManualControl: 'bool',\n ManualInput_Drive: 'f32',\n ManualInput_Steer: 'f32',\n bManualInput_Brake: 'bool',\n Control_DriveAndSteer: 'BrickComponentWireControl_DriveAndSteer',\n CustomMass: 'f32',\n CustomMassVerticalOffset: 'f32',\n DriveInterpSpeed: 'f32',\n DriveSpeed: 'f32',\n DriveAcceleratingPowerMultiplier: 'f32',\n DriveBrakingPowerMultiplier: 'f32',\n DriveDampingMultiplier: 'f32',\n SteerPowerMultiplier: 'f32',\n WheelFrictionMultiplier: 'f32',\n SteerInterpSpeed: 'f32',\n SteerLimitSpeedFalloff: 'f32',\n SteerLimitDegree: 'f32',\n CenterOfSteering: 'f32',\n bTankSteering: 'bool',\n TankSteerSpeedMultiplier: 'f32',\n bAutoRight: 'bool',\n WaterDriveForce: 'f32',\n WaterSteeringForce: 'f32',\n AudioDescriptor: 'object',\n },\n BrickComponentData_WireGraph_Exec_Character_AddInventoryBrick: {\n ProceduralSize: 'Vector',\n },\n BrickComponentData_WireGraph_Exec_Character_SetInventoryBrick: {\n Slot: 'i32',\n ProceduralSize: 'Vector',\n },\n BrickComponentData_WireGraph_Exec_Controller_DisplayText: {\n Text: 'str',\n AnchorX: 'f64',\n AnchorY: 'f64',\n PositionX: 'f64',\n PositionY: 'f64',\n Angle: 'f64',\n ScaleX: 'f64',\n ScaleY: 'f64',\n FontSize: 'i32',\n FontColor: 'Color',\n OutlineSize: 'i64',\n OutlineColor: 'Color',\n Justification: 'EBRDisplayTextJustification',\n Transition: 'f64',\n Easing: 'EBRDisplayTextEasing',\n Lifetime: 'f64',\n TextId: 'i64',\n },\n BrickComponentData_WireGraph_Exec_Entity_AddLocationRotation: {\n Vector: 'Vector',\n Rotation: 'Rotator',\n },\n BrickComponentData_WireGraph_Exec_Entity_AddVelocity: {\n Vector: 'Vector',\n Rotation: 'Vector',\n },\n BrickComponentData_WireGraph_Exec_Entity_RelativeTeleport: {\n Source: 'BrickComponentWirePortControl_TeleportDestination',\n Destination: 'BrickComponentWirePortControl_TeleportDestination',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetAngularVelocity: {\n AngularVelocity: 'Vector',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetGravityDirection: {\n Rotation: 'Rotator',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetLinearVelocity: {\n LinearVelocity: 'Vector',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetLocation: {\n Vector: 'Vector',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetLocationRotation: {\n Vector: 'Vector',\n Rotation: 'Rotator',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetRotation: {\n Rotation: 'Rotator',\n },\n BrickComponentData_WireGraph_Exec_Entity_SetVelocity: {\n Vector: 'Vector',\n Rotation: 'Vector',\n },\n BrickComponentData_WireGraph_Exec_Entity_Teleport: {\n Destination: 'BrickComponentWirePortControl_TeleportDestination',\n },\n BrickComponentData_WireGraph_Exec_PrefabSpawner: {\n Prefab: 'bundle_path_ref',\n SpawnOffset: 'Vector',\n SpawnOffsetRotation: 'Rotator',\n SpawnVelocity: 'Vector',\n Lifetime: 'f64',\n Limit: 'i64',\n SpawnedEntityIds: ['u32'],\n },\n BrickComponentData_WireGraph_Exec_Sweep: {\n Origin: 'Vector',\n Direction: 'Vector',\n Distance: 'f64',\n Radius: 'f64',\n bDetectBricks: 'bool',\n bDetectPlayers1: 'bool',\n bDetectPlayers2: 'bool',\n bDetectPlayers3: 'bool',\n bDetectPlayers4: 'bool',\n bDetectPhysics: 'bool',\n bDetectMap: 'bool',\n bRelative: 'bool',\n bIgnoreOwningGrid: 'bool',\n },\n BrickComponentData_WireGraph_Expr_ColorBlend: {\n ColorA: 'LinearColor',\n ColorB: 'LinearColor',\n Alpha: 'f64',\n BlendSpace: 'EBRColorSpace',\n bClampAlpha: 'bool',\n },\n BrickComponentData_WireGraph_Expr_ColorConvert: {\n Input: 'LinearColor',\n FromSpace: 'EBRColorSpace',\n ToSpace: 'EBRColorSpace',\n },\n BrickComponentData_WireGraph_Expr_ColorToHex: {\n Input: 'LinearColor',\n },\n BrickComponentData_WireGraph_Expr_DirectionToRotation: {\n Direction: 'Vector',\n },\n BrickComponentData_WireGraph_Expr_InvertRotation: {\n Input: 'Quat',\n },\n BrickComponentData_WireGraph_Expr_QuatAngleBetween: {\n InputA: 'Quat',\n InputB: 'Quat',\n },\n BrickComponentData_WireGraph_Expr_QuatBetween: {\n From: 'Vector',\n To: 'Vector',\n },\n BrickComponentData_WireGraph_Expr_QuatDotProduct: {\n InputA: 'Quat',\n InputB: 'Quat',\n },\n BrickComponentData_WireGraph_Expr_QuatFromAxisAngle: {\n Axis: 'Vector',\n Angle: 'f64',\n },\n BrickComponentData_WireGraph_Expr_QuatSlerp: {\n InputA: 'Quat',\n InputB: 'Quat',\n Alpha: 'f64',\n bShortestPath: 'bool',\n bClampAlpha: 'bool',\n },\n BrickComponentData_WireGraph_Expr_QuatToAxisAngle: {\n Input: 'Quat',\n },\n BrickComponentData_WireGraph_Expr_RotateVector: {\n Rotation: 'Quat',\n Vector: 'Vector',\n },\n BrickComponentData_WireGraph_Expr_RotationToDirection: {\n Rotation: 'Quat',\n },\n BrickComponentData_WireGraph_Expr_SplitColor: {\n Input: 'LinearColor',\n },\n BrickComponentData_WireGraph_Expr_SplitColorSRGB: {\n Input: 'LinearColor',\n },\n BrickComponentData_WireGraph_Expr_SplitQuaternion: {\n Input: 'Quat',\n },\n BrickComponentData_WireGraph_Expr_SplitRotation: {\n Input: 'Rotator',\n },\n BrickComponentData_WireGraph_Expr_SplitVector: {\n Input: 'Vector',\n },\n BrickComponentData_WireGraph_Expr_Vec_Float: {\n Input: 'Vector',\n },\n BrickComponentData_WireGraph_Expr_Vec_Vec: {\n Input: 'Vector',\n },\n BrickComponentData_WireGraph_Expr_VecFloat_Vec: {\n Input: 'Vector',\n Scalar: 'f64',\n },\n BrickComponentData_WireGraph_Expr_VecVec_Float: {\n InputA: 'Vector',\n InputB: 'Vector',\n },\n BrickComponentData_WireGraph_Expr_VecVec_Vec: {\n InputA: 'Vector',\n InputB: 'Vector',\n },\n BrickComponentData_WireGraphPseudo_Dampen: {\n Target: 'WireGraphVariant',\n Value: 'WireGraphVariant',\n SmoothTime: 'f64',\n Velocity: 'Vector4',\n },\n BrickComponentData_WireGraphPseudo_QueueSeconds: {\n SecondsToWait: 'f32',\n Entries: ['BRQueueSecondsEntry'],\n DataIn1: 'WireGraphVariant',\n DataIn2: 'WireGraphVariant',\n DataIn3: 'WireGraphVariant',\n DataIn4: 'WireGraphVariant',\n DataIn5: 'WireGraphVariant',\n DataIn6: 'WireGraphVariant',\n DataIn7: 'WireGraphVariant',\n DataIn8: 'WireGraphVariant',\n DataOut1: 'WireGraphVariant',\n DataOut2: 'WireGraphVariant',\n DataOut3: 'WireGraphVariant',\n DataOut4: 'WireGraphVariant',\n DataOut5: 'WireGraphVariant',\n DataOut6: 'WireGraphVariant',\n DataOut7: 'WireGraphVariant',\n DataOut8: 'WireGraphVariant',\n },\n BrickComponentData_WireGraphPseudo_QueueTicks: {\n TicksToWait: 'i32',\n Entries: ['BRQueueTicksEntry'],\n DataIn1: 'WireGraphVariant',\n DataIn2: 'WireGraphVariant',\n DataIn3: 'WireGraphVariant',\n DataIn4: 'WireGraphVariant',\n DataIn5: 'WireGraphVariant',\n DataIn6: 'WireGraphVariant',\n DataIn7: 'WireGraphVariant',\n DataIn8: 'WireGraphVariant',\n DataOut1: 'WireGraphVariant',\n DataOut2: 'WireGraphVariant',\n DataOut3: 'WireGraphVariant',\n DataOut4: 'WireGraphVariant',\n DataOut5: 'WireGraphVariant',\n DataOut6: 'WireGraphVariant',\n DataOut7: 'WireGraphVariant',\n DataOut8: 'WireGraphVariant',\n },\n BrickTypeNetWrapper: {\n BrickAsset: 'object',\n ProceduralSize: 'IntVector',\n },\n BRInventoryEntryConfig: {\n Item: 'BRInventoryEntryVariant',\n },\n BRPlayerPartCustomizationV3: {\n PartDescriptor: 'object',\n DecalDescriptor: 'object',\n SocketName: 'str',\n Colors: ['Color'],\n },\n BRSavedComponentChunkSoA: {\n ComponentTypeCounters: ['BRSavedBrickComponentTypeCounter'],\n ComponentBrickIndices: ['u32'],\n JointBrickIndices: ['u32'],\n JointEntityReferences: ['u32'],\n JointInitialRelativeOffsets: ['Vector3f', null],\n JointInitialRelativeRotations: ['Quat4f', null],\n MicrochipBrickIndices: ['u32'],\n MicrochipBrickGridReferences: ['u32'],\n },\n WireGraphLinearColorArray: {\n Values: ['LinearColor'],\n },\n WireGraphQuatArray: {\n Values: ['Quat'],\n },\n WireGraphRotatorArray: {\n Values: ['Rotator'],\n },\n WireGraphVectorArray: {\n Values: ['Vector'],\n },\n BrickComponentData_WireGraph_Exec_Character_AddInventoryEntry: {\n Entry: 'BRInventoryEntryConfig',\n },\n BRInventoryEntryPlan: {\n Type: 'EBRInventoryEntryPlanType',\n BrickTypeIfBrick: 'BrickTypeNetWrapper',\n EntityTypeIfEntity: 'class',\n ItemTypeIfItem: 'class',\n },\n BRPlayerAvatarCustomizationV3: {\n Parts: ['BRPlayerPartCustomizationV3'],\n },\n BrickComponentData_BotSpawn: {\n RespawnTime: 'f32',\n CorpseTimeout: 'f32',\n GunSkill: 'f32',\n Agression: 'f32',\n ReactionTime: 'f32',\n MovementRandomness: 'f32',\n RunSpeed: 'f32',\n HealthMultiplier: 'f32',\n Jumpyness: 'f32',\n MovementAmount: 'f32',\n AttackMovementAmount: 'f32',\n AggroRange: 'f32',\n AttackDamageMultiplier: 'f32',\n bCanJump: 'bool',\n bBackVision: 'bool',\n bVisionRaycasting: 'bool',\n bCanTargetPlayers: 'bool',\n bCanTargetBots: 'bool',\n bActiveBot: 'bool',\n bSpawnEnable: 'bool',\n bDeleteBot: 'bool',\n MoveTarget: 'Vector',\n MovementGoalDummy: 'BrickComponentWirePortControl_TeleportDestination',\n BotName: 'str',\n Skin: 'BRPlayerAvatarCustomizationV3',\n bColorsAreLinear: 'bool',\n TeamCollisionChannel: 'EBRPawnCollisionChannel',\n bTeamCollision: 'bool',\n bTeamCollision1: 'bool',\n bTeamCollision2: 'bool',\n bTeamCollision3: 'bool',\n BotWeapon: 'class',\n },\n BrickComponentData_WireGraph_Exec_Character_SetInventoryEntry: {\n Slot: 'i32',\n Entry: 'BRInventoryEntryConfig',\n EntryPlan: 'BRInventoryEntryPlan',\n },\n },\n },\n BRSavedEntityChunkIndexSoA: {\n enums: {},\n variants: {},\n structs: {\n BRSavedChunk3DIndex: {\n X: 'i16',\n Y: 'i16',\n Z: 'i16',\n },\n BRSavedEntityChunkIndexSoA: {\n NextPersistentIndex: 'u32',\n Chunk3DIndices: ['BRSavedChunk3DIndex'],\n NumEntities: ['u32'],\n },\n },\n },\n BRSavedEntityChunkSoA: {\n enums: {},\n variants: {},\n structs: {\n BrickGridDynamicActor: {\n BouyancyScale: 'f32',\n MassScale: 'f32',\n bEnableGravity: 'bool',\n bUseNewMassCalculation: 'bool',\n bReceivesDecals: 'bool',\n EntityTag: 'str',\n },\n BRSavedBitFlags: {\n Flags: ['u8', null],\n },\n BRSavedBrickColor: {\n R: 'u8',\n G: 'u8',\n B: 'u8',\n A: 'u8',\n },\n BRSavedEntityTypeCounter: {\n TypeIndex: 'u32',\n NumEntities: 'u32',\n },\n IntVector: {\n X: 'i32',\n Y: 'i32',\n Z: 'i32',\n },\n Quat4f: {\n X: 'f32',\n Y: 'f32',\n Z: 'f32',\n W: 'f32',\n },\n Vector3f: {\n X: 'f32',\n Y: 'f32',\n Z: 'f32',\n },\n BP_MicrochipBrickGridDynamicActor_C: {\n bCollapsed: 'bool',\n PlaneCenter: 'IntVector',\n PlaneExtent: 'IntVector',\n },\n BRSavedEntityColors: {\n Color0: 'BRSavedBrickColor',\n Color1: 'BRSavedBrickColor',\n Color2: 'BRSavedBrickColor',\n Color3: 'BRSavedBrickColor',\n Color4: 'BRSavedBrickColor',\n Color5: 'BRSavedBrickColor',\n Color6: 'BRSavedBrickColor',\n Color7: 'BRSavedBrickColor',\n },\n BRSavedEntityChunkSoA: {\n TypeCounters: ['BRSavedEntityTypeCounter'],\n PersistentIndices: ['u32'],\n OwnerIndices: ['u32'],\n OriginalOwnerIndices: ['u32'],\n Locations: ['Vector3f', null],\n Rotations: ['Quat4f', null],\n WeldParentFlags: 'BRSavedBitFlags',\n PhysicsLockedFlags: 'BRSavedBitFlags',\n PhysicsSleepingFlags: 'BRSavedBitFlags',\n WeldParentIndices: ['u32'],\n LinearVelocities: ['Vector3f', null],\n AngularVelocities: ['Vector3f', null],\n ColorsAndAlphas: ['BRSavedEntityColors', null],\n RemainingLifeSpans: ['f32', null],\n bColorsAreLinear: 'bool',\n },\n },\n },\n};\n","// BrdbSchema: the msgpack-schema model plus its binary (de)serialization.\n// Wire form: always the 3-element [enums, variants, structs] msgpack array,\n// structs in topological dependency-first order.\nimport { ByteReader, ByteWriter } from './bytes';\nimport {\n mpArrayHeader,\n mpBinHeader,\n mpBool,\n mpF32,\n mpF64,\n mpInt,\n mpMapHeader,\n mpNil,\n mpStr,\n mpU8,\n mpUint,\n rdArrayLen,\n rdBinLen,\n rdBool,\n rdF32,\n rdF64,\n rdInt,\n rdMapLen,\n rdNil,\n rdStr,\n rdUint,\n} from './msgpack';\nimport { parseSchemaText, SchemaData } from './schemaText';\nimport { EmbeddedSchemaName, SCHEMAS } from './schemas';\n\nexport type PropDesc =\n | { kind: 'type' | 'array' | 'flatarray'; type: string }\n | { kind: 'map'; key: string; value: string };\n\n/** Compact data form emitted by scripts/syncBrdbData.mjs:\n * 'T' = plain type, ['T'] = array, ['T', null] = flat array,\n * { K: 'V' } = map (single entry). */\nexport type SchemaSourceProp =\n | string\n | readonly [string]\n | readonly [string, null]\n | Readonly<Record<string, string>>;\n\nexport interface SchemaSource {\n enums: Readonly<Record<string, Readonly<Record<string, number>>>>;\n variants: Readonly<Record<string, readonly string[]>>;\n structs: Readonly<Record<string, Readonly<Record<string, SchemaSourceProp>>>>;\n}\n\nfunction propFromSource(source: SchemaSourceProp, ctx: string): PropDesc {\n if (typeof source === 'string') return { kind: 'type', type: source };\n if (Array.isArray(source)) {\n if (source.length === 1) return { kind: 'array', type: source[0] };\n if (source.length === 2 && source[1] === null)\n return { kind: 'flatarray', type: source[0] };\n throw new Error(`brdb: invalid schema prop source at ${ctx}`);\n }\n const entries = Object.entries(source);\n if (entries.length === 1)\n return { kind: 'map', key: entries[0][0], value: entries[0][1] as string };\n throw new Error(`brdb: invalid schema prop source at ${ctx}`);\n}\n\nexport type BrdbValue =\n | number\n | boolean\n | string\n | null\n | BrdbValue[]\n | { [field: string]: BrdbValue };\n\n/** A decoded variant value: which member the tag selected, plus its payload.\n * Kept tagged (rather than flattened like the reference reader) so that\n * decode -> encode round-trips byte-identically. */\nexport interface BrdbVariant {\n $variant: string;\n value: BrdbValue;\n}\n\n// The legacy (pre-variant-table) unions use fixed tags; the member names\n// match the named-variant vocabulary so both share one representation.\nconst LEGACY_WIRE_MEMBERS = [\n 'f64',\n 'i64',\n 'bool',\n 'weak_object',\n 'WireGraphExec',\n];\nconst LEGACY_PRIM_MATH_MEMBERS = ['f64', 'i64'];\n\nfunction asVariant(value: BrdbValue, ty: string): BrdbVariant {\n if (\n value !== null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n typeof (value as { $variant?: unknown }).$variant === 'string'\n )\n return value as unknown as BrdbVariant;\n throw new Error(`brdb: variant ${ty} requires a { $variant, value } wrapper`);\n}\n\nconst FLAT_SIZES: Record<string, number> = {\n u8: 1,\n i8: 1,\n u16: 2,\n i16: 2,\n u32: 4,\n i32: 4,\n f32: 4,\n u64: 8,\n i64: 8,\n f64: 8,\n};\n\nfunction readPropDesc(r: ByteReader): PropDesc {\n const m = r.peek();\n // Type: FixStr/Str8/Str16 only (Str32 descriptors are invalid in this format)\n if ((m & 0xe0) === 0xa0 || m === 0xd9 || m === 0xda)\n return { kind: 'type', type: rdStr(r) };\n if ((m & 0xf0) === 0x90) {\n const len = rdArrayLen(r);\n if (len === 1) return { kind: 'array', type: rdStr(r) };\n if (len === 2) {\n const type = rdStr(r);\n rdNil(r); // FlatArray is exactly [type, nil]\n return { kind: 'flatarray', type };\n }\n throw new Error(`brdb: unsupported property array length ${len}`);\n }\n if ((m & 0xf0) === 0x80) {\n const len = rdMapLen(r);\n if (len !== 1)\n throw new Error(`brdb: unsupported property map length ${len}`);\n return { kind: 'map', key: rdStr(r), value: rdStr(r) };\n }\n throw new Error(`brdb: unsupported property marker 0x${m.toString(16)}`);\n}\n\nexport class BrdbSchema {\n constructor(\n readonly enums: Map<string, Map<string, number>>,\n readonly variants: Map<string, string[]>,\n readonly structs: Map<string, Map<string, PropDesc>>\n ) {}\n\n static fromText(text: string): BrdbSchema {\n const { enums, variants, structs } = parseSchemaText(text);\n return new BrdbSchema(enums, variants, structs);\n }\n\n /** Hydrate a schema from the generated data form (see SchemaSource). */\n static fromData(data: SchemaSource): BrdbSchema {\n const enums = new Map(\n Object.entries(data.enums).map(([name, values]) => [\n name,\n new Map(Object.entries(values)),\n ])\n );\n const variants = new Map(\n Object.entries(data.variants).map(([name, members]) => [\n name,\n [...members],\n ])\n );\n const structs = new Map(\n Object.entries(data.structs).map(([name, props]) => [\n name,\n new Map(\n Object.entries(props).map(([field, source]) => [\n field,\n propFromSource(source, `${name}.${field}`),\n ])\n ),\n ])\n );\n return new BrdbSchema(enums, variants, structs);\n }\n\n static fromBinary(bytes: Uint8Array): BrdbSchema {\n const r = new ByteReader(bytes);\n const header = rdArrayLen(r);\n if (header !== 2 && header !== 3)\n throw new Error(`brdb: invalid schema header length ${header}`);\n const enums = new Map<string, Map<string, number>>();\n for (let i = 0, n = rdMapLen(r); i < n; i++) {\n const name = rdStr(r);\n const values = new Map<string, number>();\n for (let j = 0, m = rdMapLen(r); j < m; j++)\n values.set(rdStr(r), rdInt(r));\n enums.set(name, values);\n }\n const variants = new Map<string, string[]>();\n if (header === 3) {\n for (let i = 0, n = rdMapLen(r); i < n; i++) {\n const name = rdStr(r);\n const members: string[] = [];\n for (let j = 0, m = rdArrayLen(r); j < m; j++) members.push(rdStr(r));\n variants.set(name, members);\n }\n }\n const structs = new Map<string, Map<string, PropDesc>>();\n for (let i = 0, n = rdMapLen(r); i < n; i++) {\n const name = rdStr(r);\n const props = new Map<string, PropDesc>();\n for (let j = 0, m = rdMapLen(r); j < m; j++)\n props.set(rdStr(r), readPropDesc(r));\n structs.set(name, props);\n }\n if (r.remaining !== 0)\n throw new Error(`brdb: ${r.remaining} trailing bytes after schema`);\n return new BrdbSchema(enums, variants, structs);\n }\n\n /** Extract the named structs plus every type they transitively reference\n * (sub-structs, enums, variants, and variant member types) into a\n * self-contained subset. Primitive/unknown names are skipped. Uses a LIFO\n * worklist; the result ORDER matches the reference implementation, and\n * that order determines the serialized schema's bytes. */\n extractStructsTransitive(seeds: Iterable<string>): SchemaData {\n const enums = new Map<string, Map<string, number>>();\n const variants = new Map<string, string[]>();\n const structs = new Map<string, Map<string, PropDesc>>();\n const seen = new Set<string>();\n const work = [...seeds];\n for (let name = work.pop(); name !== undefined; name = work.pop()) {\n if (seen.has(name)) continue;\n seen.add(name);\n const variantMembers = this.variants.get(name);\n if (variantMembers) {\n work.push(...variantMembers);\n variants.set(name, [...variantMembers]);\n continue;\n }\n const enumValues = this.enums.get(name);\n if (enumValues) {\n enums.set(name, new Map(enumValues));\n continue;\n }\n const props = this.structs.get(name);\n if (props) {\n const copy = new Map<string, PropDesc>();\n for (const [field, prop] of props) {\n if (prop.kind === 'map') work.push(prop.key, prop.value);\n else work.push(prop.type);\n copy.set(field, { ...prop });\n }\n structs.set(name, copy);\n }\n // else: primitive/unknown type, nothing to extract\n }\n return { enums, variants, structs };\n }\n\n /** Merge definitions into this schema. Existing names keep their position\n * (and are replaced); new names append, matching the reference merge. */\n merge(data: SchemaData): void {\n for (const [name, values] of data.enums) this.enums.set(name, values);\n for (const [name, members] of data.variants)\n this.variants.set(name, members);\n for (const [name, props] of data.structs) this.structs.set(name, props);\n }\n\n /** The zero value of a type: numbers 0, bool false, str '', asset refs\n * null, arrays empty, structs recursive, enums ordinal 0, variants tag 0\n * with the first member's zero value. */\n zeroValue(ty: string): BrdbValue {\n switch (ty) {\n case 'u8':\n case 'u16':\n case 'u32':\n case 'u64':\n case 'i8':\n case 'i16':\n case 'i32':\n case 'i64':\n case 'f32':\n case 'f64':\n return 0;\n case 'bool':\n return false;\n case 'str':\n case 'bundle_path_ref':\n return '';\n case 'class':\n case 'object':\n case 'weak_object':\n return null;\n case 'wire_graph_variant':\n case 'wire_graph_prim_math_variant':\n return { $variant: 'f64', value: 0 };\n }\n const variant = this.variants.get(ty);\n if (variant) {\n const first = variant[0];\n if (first === undefined) throw new Error(`brdb: empty variant ${ty}`);\n return { $variant: first, value: this.zeroValue(first) };\n }\n if (this.enums.has(ty)) return 0;\n const struct = this.structs.get(ty);\n if (struct) {\n const obj: { [k: string]: BrdbValue } = {};\n for (const [field, prop] of struct)\n obj[field] = prop.kind === 'type' ? this.zeroValue(prop.type) : [];\n return obj;\n }\n throw new Error(`brdb: unknown type ${ty}`);\n }\n\n /** Complete a partial struct value: present fields pass through, missing\n * fields fall back to `defaults`, then to their zero value. Unknown keys\n * in `partial` are an error; unknown keys in `defaults` are ignored (the\n * defaults table may carry fields a given schema revision lacks). */\n fillStruct(\n structName: string,\n partial: Readonly<Record<string, BrdbValue>>,\n defaults?: Readonly<Record<string, BrdbValue>>\n ): Record<string, BrdbValue> {\n const struct = this.structs.get(structName);\n if (!struct) throw new Error(`brdb: unknown struct ${structName}`);\n for (const key of Object.keys(partial))\n if (!struct.has(key))\n throw new Error(`brdb: ${structName} has no field '${key}'`);\n const out: Record<string, BrdbValue> = {};\n for (const [field, prop] of struct) {\n const given =\n partial[field] !== undefined ? partial[field] : defaults?.[field];\n out[field] =\n given !== undefined\n ? given\n : prop.kind === 'type'\n ? this.zeroValue(prop.type)\n : [];\n }\n return out;\n }\n\n // DFS post-order: a struct is emitted after every struct it references.\n // Roots iterate in insertion order; deps in property declaration order\n // (map: key then value).\n topoStructOrder(): string[] {\n const visited = new Set<string>();\n const order: string[] = [];\n const visit = (name: string) => {\n if (visited.has(name)) return;\n visited.add(name);\n const props = this.structs.get(name);\n if (props)\n for (const prop of props.values()) {\n const deps =\n prop.kind === 'map' ? [prop.key, prop.value] : [prop.type];\n for (const dep of deps) if (this.structs.has(dep)) visit(dep);\n }\n order.push(name);\n };\n for (const name of this.structs.keys()) visit(name);\n return order;\n }\n\n toBinary(): Uint8Array {\n const w = new ByteWriter();\n // Always the 3-element form; an empty variants map is valid.\n mpArrayHeader(w, 3);\n mpMapHeader(w, this.enums.size);\n for (const [name, values] of this.enums) {\n mpStr(w, name);\n mpMapHeader(w, values.size);\n for (const [key, value] of values) {\n mpStr(w, key);\n mpInt(w, value);\n }\n }\n mpMapHeader(w, this.variants.size);\n for (const [name, members] of this.variants) {\n mpStr(w, name);\n mpArrayHeader(w, members.length);\n for (const member of members) mpStr(w, member);\n }\n const order = this.topoStructOrder();\n mpMapHeader(w, order.length);\n for (const structName of order) {\n const props = this.structs.get(structName)!;\n mpStr(w, structName);\n mpMapHeader(w, props.size);\n for (const [propName, prop] of props) {\n mpStr(w, propName);\n switch (prop.kind) {\n case 'type':\n mpStr(w, prop.type);\n break;\n case 'array':\n mpArrayHeader(w, 1);\n mpStr(w, prop.type);\n break;\n case 'flatarray':\n mpArrayHeader(w, 2);\n mpStr(w, prop.type);\n mpNil(w);\n break;\n case 'map':\n mpMapHeader(w, 1);\n mpStr(w, prop.key);\n mpStr(w, prop.value);\n break;\n }\n }\n }\n return w.toBytes();\n }\n\n flatTypeSize(ty: string): number {\n const prim = FLAT_SIZES[ty];\n if (prim) return prim;\n const struct = this.structs.get(ty);\n if (!struct) return 0;\n let sum = 0;\n for (const prop of struct.values())\n sum += prop.kind === 'type' ? this.flatTypeSize(prop.type) : 0;\n return sum;\n }\n\n writeValue(w: ByteWriter, ty: string, value: BrdbValue): void {\n switch (ty) {\n case 'u8':\n return mpU8(w, value as number);\n case 'u16':\n case 'u32':\n case 'u64':\n return mpUint(w, value as number);\n case 'i8':\n case 'i16':\n case 'i32':\n case 'i64':\n return mpInt(w, value as number);\n case 'f32':\n return mpF32(w, value as number);\n case 'f64':\n return mpF64(w, value as number);\n case 'str':\n case 'bundle_path_ref': // a string path on the wire\n return mpStr(w, value as string);\n case 'bool':\n return mpBool(w, value as boolean);\n case 'class':\n case 'object':\n case 'weak_object':\n // asset reference: index into external_asset_references; null = -1\n if (value === null) return mpInt(w, -1);\n return mpUint(w, value as number);\n case 'wire_graph_variant':\n case 'wire_graph_prim_math_variant':\n return this.writeLegacyWireVariant(w, ty, value);\n }\n // Named variants (e.g. WireGraphVariant): uint tag (the member's index\n // in the schema's ordered member list — resolved per schema, never\n // hardcoded) followed by the member value.\n const variantTy = this.variants.get(ty);\n if (variantTy) {\n const v = asVariant(value, ty);\n const tag = variantTy.indexOf(v.$variant);\n if (tag === -1)\n throw new Error(\n `brdb: '${v.$variant}' is not a member of variant ${ty}`\n );\n mpUint(w, tag);\n return this.writeVariantPayload(w, v.$variant, v.value);\n }\n const enumTy = this.enums.get(ty);\n if (enumTy) {\n const ordinal = value as number;\n if (ordinal < 0 || ordinal >= enumTy.size)\n throw new RangeError(\n `brdb: enum ${ty} ordinal ${ordinal} out of bounds`\n );\n return mpUint(w, ordinal); // ordinal, NOT the declared value\n }\n const struct = this.structs.get(ty);\n if (struct) {\n const obj = value as { [k: string]: BrdbValue };\n for (const [field, prop] of struct) {\n if (!(field in obj))\n throw new Error(`brdb: missing struct field ${ty}.${field}`);\n this.writeProperty(w, prop, obj[field], `${ty}.${field}`);\n }\n return;\n }\n throw new Error(`brdb: unknown type ${ty}`);\n }\n\n private writeVariantPayload(\n w: ByteWriter,\n member: string,\n value: BrdbValue\n ): void {\n // weak_object payloads inside variants use the signed-int encoder for\n // both null and non-null (matching the component write path); plain\n // schema-typed asset refs use the uint encoder when set.\n if (member === 'weak_object')\n return mpInt(w, value === null ? -1 : (value as number));\n this.writeValue(w, member, value);\n }\n\n private writeLegacyWireVariant(\n w: ByteWriter,\n ty: string,\n value: BrdbValue\n ): void {\n const members =\n ty === 'wire_graph_variant'\n ? LEGACY_WIRE_MEMBERS\n : LEGACY_PRIM_MATH_MEMBERS;\n const v = asVariant(value, ty);\n const tag = members.indexOf(v.$variant);\n if (tag === -1)\n throw new Error(`brdb: '${v.$variant}' is not a member of ${ty}`);\n mpUint(w, tag);\n switch (v.$variant) {\n case 'f64':\n return mpF64(w, v.value as number);\n case 'i64':\n return mpInt(w, v.value as number);\n case 'bool':\n return mpBool(w, v.value as boolean);\n case 'weak_object':\n return mpInt(w, v.value === null ? -1 : (v.value as number));\n case 'WireGraphExec':\n return; // no payload\n }\n }\n\n private writeProperty(\n w: ByteWriter,\n prop: PropDesc,\n value: BrdbValue,\n ctx: string\n ): void {\n switch (prop.kind) {\n case 'type':\n return this.writeValue(w, prop.type, value);\n case 'array': {\n const arr = value as BrdbValue[];\n mpArrayHeader(w, arr.length);\n for (const item of arr) this.writeValue(w, prop.type, item);\n return;\n }\n case 'flatarray': {\n const arr = value as BrdbValue[];\n const size = this.flatTypeSize(prop.type);\n if (size === 0)\n throw new Error(`brdb: invalid flat type ${prop.type} at ${ctx}`);\n mpBinHeader(w, arr.length * size);\n for (const item of arr) this.writeFlat(w, prop.type, item, ctx);\n return;\n }\n case 'map':\n // No shipped schema uses Map properties, and the format's reference\n // reader/writer disagree on the wire form (BRDB.md §4.4 item 10).\n throw new Error(`brdb: Map properties are unsupported (${ctx})`);\n }\n }\n\n private writeFlat(\n w: ByteWriter,\n ty: string,\n value: BrdbValue,\n ctx: string\n ): void {\n switch (ty) {\n case 'u8':\n return w.u8(value as number);\n case 'i8':\n return w.i8(value as number);\n case 'u16':\n return w.u16le(value as number);\n case 'i16':\n return w.i16le(value as number);\n case 'u32':\n return w.u32le(value as number);\n case 'i32':\n return w.i32le(value as number);\n case 'f32':\n return w.f32le(value as number);\n case 'f64':\n return w.f64le(value as number);\n case 'u64':\n return w.u64le(BigInt(value as number));\n case 'i64':\n return w.i64le(BigInt(value as number));\n }\n const struct = this.structs.get(ty);\n if (!struct) throw new Error(`brdb: invalid flat type ${ty} at ${ctx}`);\n const obj = value as { [k: string]: BrdbValue };\n for (const [field, prop] of struct) {\n if (prop.kind !== 'type')\n throw new Error(`brdb: flat struct ${ty} has non-flat field ${field}`);\n if (!(field in obj))\n throw new Error(`brdb: missing struct field ${ty}.${field}`);\n this.writeFlat(w, prop.type, obj[field], `${ctx}.${field}`);\n }\n }\n\n // A hostile .schema blob can declare a struct that references itself\n // (directly or transitively) as a plain field, which would otherwise\n // recurse forever consuming zero input bytes. depth is threaded through\n // the decode-side walk only (readValue/readProperty); encode is\n // unaffected since it always terminates against caller-supplied values.\n private static readonly MAX_DECODE_DEPTH = 64;\n\n readValue(r: ByteReader, ty: string, depth = 0): BrdbValue {\n if (depth > BrdbSchema.MAX_DECODE_DEPTH)\n throw new Error('brdb: schema recursion too deep');\n switch (ty) {\n case 'u8':\n case 'u16':\n case 'u32':\n case 'u64':\n return rdUint(r);\n case 'i8':\n case 'i16':\n case 'i32':\n case 'i64':\n return rdInt(r);\n case 'f32':\n return rdF32(r);\n case 'f64':\n return rdF64(r);\n case 'str':\n case 'bundle_path_ref':\n return rdStr(r);\n case 'bool':\n return rdBool(r);\n case 'class':\n case 'object':\n case 'weak_object': {\n const id = rdInt(r);\n return id < 0 ? null : id;\n }\n case 'wire_graph_variant':\n case 'wire_graph_prim_math_variant':\n return this.readLegacyWireVariant(r, ty);\n }\n // Named variant: uint tag indexes the schema's ordered member list.\n const variantTy = this.variants.get(ty);\n if (variantTy) {\n const tag = rdUint(r);\n const member = variantTy[tag];\n if (member === undefined)\n throw new Error(`brdb: unknown tag ${tag} for variant ${ty}`);\n return { $variant: member, value: this.readValue(r, member, depth + 1) };\n }\n const enumTy = this.enums.get(ty);\n if (enumTy) {\n const ordinal = rdUint(r);\n if (ordinal >= enumTy.size)\n throw new RangeError(\n `brdb: enum ${ty} ordinal ${ordinal} out of bounds`\n );\n return ordinal;\n }\n const struct = this.structs.get(ty);\n if (struct) {\n const obj: { [k: string]: BrdbValue } = {};\n for (const [field, prop] of struct)\n obj[field] = this.readProperty(r, prop, `${ty}.${field}`, depth + 1);\n return obj;\n }\n throw new Error(`brdb: unknown type ${ty}`);\n }\n\n private readLegacyWireVariant(r: ByteReader, ty: string): BrdbValue {\n const members =\n ty === 'wire_graph_variant'\n ? LEGACY_WIRE_MEMBERS\n : LEGACY_PRIM_MATH_MEMBERS;\n const tag = rdUint(r);\n const member = members[tag];\n switch (member) {\n case 'f64':\n return { $variant: member, value: rdF64(r) };\n case 'i64':\n return { $variant: member, value: rdInt(r) };\n case 'bool':\n return { $variant: member, value: rdBool(r) };\n case 'weak_object': {\n const id = rdInt(r);\n return { $variant: member, value: id < 0 ? null : id };\n }\n case 'WireGraphExec':\n return { $variant: member, value: null }; // no payload\n default:\n throw new Error(`brdb: unknown tag ${tag} for ${ty}`);\n }\n }\n\n private readProperty(\n r: ByteReader,\n prop: PropDesc,\n ctx: string,\n depth = 0\n ): BrdbValue {\n switch (prop.kind) {\n case 'type':\n return this.readValue(r, prop.type, depth);\n case 'array': {\n const len = rdArrayLen(r);\n const out: BrdbValue[] = [];\n for (let i = 0; i < len; i++)\n out.push(this.readValue(r, prop.type, depth));\n return out;\n }\n case 'flatarray': {\n const byteLen = rdBinLen(r);\n const size = this.flatTypeSize(prop.type);\n if (size === 0)\n throw new Error(`brdb: invalid flat type ${prop.type} at ${ctx}`);\n if (byteLen % size !== 0)\n throw new Error(\n `brdb: flat data length ${byteLen} not divisible by ${size} (${ctx})`\n );\n const out: BrdbValue[] = [];\n for (let i = 0; i < byteLen / size; i++)\n out.push(this.readFlat(r, prop.type, ctx));\n return out;\n }\n case 'map':\n throw new Error(`brdb: Map properties are unsupported (${ctx})`);\n }\n }\n\n private readFlat(r: ByteReader, ty: string, ctx: string): BrdbValue {\n switch (ty) {\n case 'u8':\n return r.u8();\n case 'i8':\n return r.i8();\n case 'u16':\n return r.u16le();\n case 'i16':\n return r.i16le();\n case 'u32':\n return r.u32le();\n case 'i32':\n return r.i32le();\n case 'f32':\n return r.f32le();\n case 'f64':\n return r.f64le();\n case 'u64':\n case 'i64': {\n const v = ty === 'u64' ? r.u64le() : r.i64le();\n if (\n v > BigInt(Number.MAX_SAFE_INTEGER) ||\n v < BigInt(Number.MIN_SAFE_INTEGER)\n )\n throw new RangeError(\n `brdb: flat 64-bit value ${v} exceeds JS safe range`\n );\n return Number(v);\n }\n }\n const struct = this.structs.get(ty);\n if (!struct) throw new Error(`brdb: invalid flat type ${ty} at ${ctx}`);\n const obj: { [k: string]: BrdbValue } = {};\n for (const [field, prop] of struct) {\n if (prop.kind !== 'type')\n throw new Error(`brdb: flat struct ${ty} has non-flat field ${field}`);\n obj[field] = this.readFlat(r, prop.type, `${ctx}.${field}`);\n }\n return obj;\n }\n\n encode(ty: string, value: BrdbValue): Uint8Array {\n const w = new ByteWriter();\n this.writeValue(w, ty, value);\n return w.toBytes();\n }\n\n decode(bytes: Uint8Array, ty: string): BrdbValue {\n const r = new ByteReader(bytes);\n const value = this.readValue(r, ty);\n if (r.remaining !== 0)\n throw new Error(`brdb: ${r.remaining} trailing bytes after ${ty}`);\n return value;\n }\n}\n\nconst embeddedCache = new Map<string, BrdbSchema>();\n\nexport function embeddedSchema(name: EmbeddedSchemaName): BrdbSchema {\n let schema = embeddedCache.get(name);\n if (!schema) {\n schema = BrdbSchema.fromData(SCHEMAS[name]);\n embeddedCache.set(name, schema);\n }\n return schema;\n}\n","// WriteSaveObject -> brdb world tree -> .brz. Bricks, brdb-native\n// components, and wires; entities are a later phase.\nimport { DEFAULT_UUID } from '../brs/constants';\nimport type { WriteSaveObject } from '../brs/types';\nimport { BitFlags } from './bits';\nimport { BrzContainerOptions, Compressor, writeBrzContainer } from './brz';\nimport { ByteWriter } from './bytes';\nimport { isProceduralAsset } from './catalog';\nimport {\n COMPONENT_STRUCT_DEFAULTS,\n COMPONENT_TYPE_STRUCTS,\n} from './componentDb';\nimport type { ComponentTypeDataMap } from './componentTypes';\nimport { BrGuid, PUBLIC_GUID, uuidToGuid } from './guid';\nimport { file, folder, PendingEntry } from './pending';\nimport { BrdbSchema, BrdbValue, embeddedSchema } from './schema';\nimport { SCHEMAS } from './schemas';\n\nexport const CHUNK_SIZE = 2048;\nexport const CHUNK_HALF = 1024;\n\nexport interface BundleJson {\n type: string;\n iD: string;\n name: string;\n version: string;\n tags: string[];\n authors: string[];\n createdAt: string;\n updatedAt: string;\n description: string;\n dependencies: unknown[];\n gameVersion: string;\n}\n\nexport interface WriteBrzOptions {\n /** zstd compressor for blobs; omitted -> all blobs stored raw (valid, and\n * what the byte-parity gates compare against). */\n compress?: Compressor;\n /** Meta/World.json environment. save.map is NOT used. Default \"Plate\". */\n environment?: string;\n /** Meta/Bundle.json field overrides. */\n bundle?: Partial<BundleJson>;\n}\n\n/** A brdb-native component on a brick. Legacy brs components\n * (save.components / brick.components) are NOT converted. */\n/** Typed component input: known component types complete their `data`\n * fields in the editor; unknown type strings stay accepted (they throw at\n * write time unless the component db knows them). Omitted data fields take\n * the game's default values (zero values where no default is known). */\nexport type BrdbComponentInput =\n | {\n [T in keyof ComponentTypeDataMap]: {\n /** brdb component type name, e.g. 'Component_Internal_Seat' */\n type: T;\n /** fields of the component's data struct */\n data?: Partial<ComponentTypeDataMap[T]>;\n };\n }[keyof ComponentTypeDataMap]\n | {\n type: string & {};\n data?: Record<string, BrdbValue>;\n };\n\nexport interface BrdbWireEndpointInput {\n /** index into save.bricks */\n brick_index: number;\n /** brdb component type name (must be used by a brick in this save) */\n component_type: string;\n /** wire port name, e.g. 'Output' */\n port: string;\n}\n\n/** A wire between two component ports, using brdb-native names. Legacy\n * save.wires (brs component names) are NOT converted. */\nexport interface BrdbWireInput {\n source: BrdbWireEndpointInput;\n target: BrdbWireEndpointInput;\n}\n\n/** brdb-native extras alongside the legacy save shape: bricks carry a\n * modern `components` ARRAY of typed inputs (replacing the legacy .brs\n * component map on that field, which is not converted) and the save\n * carries `wires`. */\nexport interface BrdbBrickExtras {\n components?: BrdbComponentInput[];\n /** Required for procedural assets; optional for basic (non-procedural)\n * assets, whose size is fixed by the asset and never stored. */\n size?: WriteSaveObject['bricks'][number]['size'];\n}\n\nexport interface BrdbSaveExtras {\n wires?: BrdbWireInput[];\n}\n\n/** The legacy save shape plus the brdb-native extras. The brick-level\n * legacy `components` map and the save-level legacy `wires` list are\n * replaced by the modern forms. */\nexport type WriteBrzSave = Omit<WriteSaveObject, 'bricks' | 'wires'> & {\n bricks: (Omit<WriteSaveObject['bricks'][number], 'components' | 'size'> &\n BrdbBrickExtras)[];\n} & BrdbSaveExtras;\n\n/** What the world writers accept: the modern shape, or an unmodified\n * legacy save (whose map-shaped `components` and legacy-named `wires`\n * are ignored rather than converted). */\nexport type WriteBrzInput = WriteBrzSave | WriteSaveObject;\n\nconst floorDiv = (a: number, n: number) => Math.floor(a / n);\nconst euclidMod = (a: number, n: number) => ((a % n) + n) % n;\n\nexport function toRelative(position: readonly number[]): {\n chunk: [number, number, number];\n rel: [number, number, number];\n} {\n const chunk = position.map(v => floorDiv(v, CHUNK_SIZE)) as [\n number,\n number,\n number\n ];\n const rel = position.map(v => euclidMod(v, CHUNK_SIZE) - CHUNK_HALF) as [\n number,\n number,\n number\n ];\n return { chunk, rel };\n}\n\ninterface Brick {\n assetName: string;\n procedural: boolean;\n size: [number, number, number];\n position: [number, number, number];\n direction: number;\n rotation: number;\n collision: {\n player: boolean;\n weapon: boolean;\n interaction: boolean;\n physics: boolean;\n };\n visible: boolean;\n materialName: string;\n intensity: number;\n color: [number, number, number];\n ownerIndex: number;\n components: BrdbComponentInput[];\n}\n\nfunction normalizeBricks(save: WriteBrzInput): Brick[] {\n const assets = save.brick_assets ?? ['PB_DefaultBrick'];\n const materials = save.materials ?? ['BMC_Plastic'];\n const numOwners = save.brick_owners?.length ?? 0;\n return save.bricks.map((brick, i) => {\n const at = `bricks[${i}]`;\n // Only the modern array form is written; a legacy map-shaped .brs\n // `components` object on a brick is ignored (not converted).\n const componentInputs = Array.isArray(brick.components)\n ? brick.components\n : [];\n const components = componentInputs.map((c, ci) => {\n if (!COMPONENT_TYPE_STRUCTS.has(c.type))\n throw new Error(\n `brdb: ${at}.components[${ci}]: unknown component type '${c.type}'`\n );\n return c;\n });\n const assetName = assets[brick.asset_name_index ?? 0];\n if (assetName === undefined)\n throw new Error(\n `brdb: ${at}: asset_name_index ${brick.asset_name_index} out of range`\n );\n const materialName = materials[brick.material_index ?? 0];\n if (materialName === undefined)\n throw new Error(\n `brdb: ${at}: material_index ${brick.material_index} out of range`\n );\n const position = brick.position.map(v => {\n if (!Number.isSafeInteger(v))\n throw new Error(\n `brdb: ${at}: position must be integers, got ${brick.position}`\n );\n if (!(v >= -32768 * CHUNK_SIZE && v <= 32768 * CHUNK_SIZE - 1))\n throw new Error(\n `brdb: ${at}: position ${v} outside the i16 chunk range`\n );\n return v;\n }) as [number, number, number];\n const procedural = isProceduralAsset(assetName);\n if (brick.size === undefined && procedural)\n throw new Error(\n `brdb: ${at}: procedural asset ${assetName} requires a size`\n );\n // Basic assets have a fixed size that is never stored; default it.\n const size = (brick.size ?? [0, 0, 0]).map(v => {\n if (!Number.isInteger(v) || v < 0 || v > 0xffff)\n throw new Error(\n `brdb: ${at}: size components must be u16, got ${brick.size}`\n );\n return v;\n }) as [number, number, number];\n let collision: Brick['collision'];\n if (typeof brick.collision === 'boolean') {\n const b = brick.collision;\n collision = { player: b, weapon: b, interaction: b, physics: b };\n } else {\n collision = {\n player: brick.collision?.player ?? true,\n weapon: brick.collision?.weapon ?? true,\n interaction: brick.collision?.interaction ?? true,\n physics: brick.collision?.physics ?? true,\n // Collision.tool is not serialized in brdb (the column was removed)\n };\n }\n let color: [number, number, number];\n const c = brick.color;\n if (typeof c === 'number') {\n const entry = save.colors?.[c];\n if (!entry)\n throw new Error(`brdb: ${at}: color palette index ${c} out of range`);\n color = [entry[0], entry[1], entry[2]]; // in-memory palette is RGBA\n } else if (Array.isArray(c)) {\n if (c.length < 3)\n throw new Error(\n `brdb: ${at}: color array must have at least 3 components`\n );\n color = [c[0], c[1], c[2]];\n } else {\n color = [255, 255, 255];\n }\n color = color.map((v, ci) => {\n if (!Number.isInteger(v) || v < 0 || v > 255)\n throw new Error(\n `brdb: ${at}: resolved color component ${ci} must be u8, got ${v}`\n );\n return v;\n }) as [number, number, number];\n const intensity = brick.material_intensity ?? 5;\n if (!Number.isInteger(intensity) || intensity < 0 || intensity > 255)\n throw new Error(\n `brdb: ${at}: material_intensity must be u8, got ${intensity}`\n );\n const ownerIndex = brick.owner_index ?? 0;\n if (\n !Number.isInteger(ownerIndex) ||\n ownerIndex < 0 ||\n ownerIndex > numOwners\n )\n throw new Error(\n `brdb: ${at}: owner_index ${ownerIndex} out of range (0..${numOwners})`\n );\n return {\n assetName,\n procedural,\n size,\n position,\n direction: brick.direction ?? 4, // ZPositive\n rotation: brick.rotation ?? 0, // Deg0\n collision,\n visible: brick.visibility ?? true,\n materialName,\n intensity,\n color,\n ownerIndex,\n components,\n };\n });\n}\n\nclass Registry {\n private map = new Map<string, number>();\n add(name: string): number {\n let i = this.map.get(name);\n if (i === undefined) {\n i = this.map.size;\n this.map.set(name, i);\n }\n return i;\n }\n indexOf(name: string): number {\n const i = this.map.get(name);\n if (i === undefined) throw new Error(`brdb: registry miss for ${name}`);\n return i;\n }\n has(name: string): boolean {\n return this.map.has(name);\n }\n get names(): string[] {\n return [...this.map.keys()];\n }\n get size(): number {\n return this.map.size;\n }\n}\n\n// Column packer for one chunk of the brick SoA.\nclass ChunkBuilder {\n private sizeCounters: { AssetIndex: number; NumSizes: number }[] = [];\n private sizes: { X: number; Y: number; Z: number }[] = [];\n private typeIndices: number[] = [];\n private ownerIndices: number[] = [];\n private originalOwnerIndices: number[] = [];\n private relPositions: { X: number; Y: number; Z: number }[] = [];\n private orientations: number[] = [];\n private colPlayer = new BitFlags();\n private colPlayer1 = new BitFlags();\n private colPlayer2 = new BitFlags();\n private colPlayer3 = new BitFlags();\n private colWeapon = new BitFlags();\n private colInteraction = new BitFlags();\n private colPhysics = new BitFlags();\n private visibility = new BitFlags();\n private materialIndices: number[] = [];\n private colors: { R: number; G: number; B: number; A: number }[] = [];\n private sizeIndexMap = new Map<string, number>();\n private numBrickSizes = 0;\n numBricks = 0;\n\n addBrick(\n b: Brick,\n rel: [number, number, number],\n reg: { materials: Registry; basic: Registry; procedural: Registry },\n basicCount: number\n ) {\n let typeIndex: number;\n if (!b.procedural) {\n typeIndex = reg.basic.indexOf(b.assetName);\n } else {\n const tyIndex = reg.procedural.indexOf(b.assetName);\n const key = `${tyIndex}:${b.size[0]},${b.size[1]},${b.size[2]}`;\n let sizeIndex = this.sizeIndexMap.get(key);\n if (sizeIndex === undefined) {\n // slot = per-chunk running size count, offset past the basic assets\n sizeIndex = this.numBrickSizes + basicCount;\n const last = this.sizeCounters[this.sizeCounters.length - 1];\n if (last && last.AssetIndex === tyIndex) {\n // extend the tail run; the equal-size case is unreachable because\n // a repeated (asset,size) pair hits sizeIndexMap above\n last.NumSizes += 1;\n } else {\n this.sizeCounters.push({ AssetIndex: tyIndex, NumSizes: 1 });\n }\n this.sizes.push({ X: b.size[0], Y: b.size[1], Z: b.size[2] });\n this.sizeIndexMap.set(key, sizeIndex);\n this.numBrickSizes += 1;\n }\n typeIndex = sizeIndex;\n }\n this.typeIndices.push(typeIndex);\n this.ownerIndices.push(b.ownerIndex);\n this.originalOwnerIndices.push(b.ownerIndex); // mirrors owner (legacy rule)\n this.relPositions.push({ X: rel[0], Y: rel[1], Z: rel[2] });\n this.orientations.push(((b.direction & 0x7) << 2) | (b.rotation & 0x3));\n this.colPlayer.push(b.collision.player);\n this.colPlayer1.push(b.collision.player); // Player1..3 mirror player\n this.colPlayer2.push(b.collision.player);\n this.colPlayer3.push(b.collision.player);\n this.colWeapon.push(b.collision.weapon);\n this.colInteraction.push(b.collision.interaction);\n this.colPhysics.push(b.collision.physics);\n this.visibility.push(b.visible);\n this.materialIndices.push(reg.materials.indexOf(b.materialName));\n this.colors.push({\n R: b.color[0],\n G: b.color[1],\n B: b.color[2],\n A: b.intensity,\n });\n this.numBricks += 1;\n }\n\n toValue(proceduralBrickStartingIndex: number): BrdbValue {\n return {\n ProceduralBrickStartingIndex: proceduralBrickStartingIndex,\n BrickSizeCounters: this.sizeCounters,\n BrickSizes: this.sizes,\n BrickTypeIndices: this.typeIndices,\n OwnerIndices: this.ownerIndices,\n OriginalOwnerIndices: this.originalOwnerIndices,\n RelativePositions: this.relPositions,\n Orientations: this.orientations,\n CollisionFlags_Player: this.colPlayer.toValue(),\n CollisionFlags_Player1: this.colPlayer1.toValue(),\n CollisionFlags_Player2: this.colPlayer2.toValue(),\n CollisionFlags_Player3: this.colPlayer3.toValue(),\n CollisionFlags_Weapon: this.colWeapon.toValue(),\n CollisionFlags_Interaction: this.colInteraction.toValue(),\n CollisionFlags_Physics: this.colPhysics.toValue(),\n VisibilityFlags: this.visibility.toValue(),\n MaterialIndices: this.materialIndices,\n ColorsAndAlphas: this.colors,\n bColorsAreLinear: false, // new saves always store sRGB\n };\n }\n}\n\n// Column packer for one chunk's component SoA plus the trailing\n// per-instance data structs (appended back-to-back after the SoA; a type\n// whose data-struct slot is \"None\" contributes no trailing bytes).\nclass ComponentChunkBuilder {\n private counters: { TypeIndex: number; NumInstances: number }[] = [];\n private brickIndices: number[] = [];\n private trailing: { structName: string; data: Record<string, BrdbValue> }[] =\n [];\n numComponents = 0;\n\n add(\n typeIndex: number,\n brickIndex: number,\n structName: string,\n data: Record<string, BrdbValue>\n ) {\n // run-length counters merge only consecutive same-type instances\n const last = this.counters[this.counters.length - 1];\n if (last && last.TypeIndex === typeIndex) last.NumInstances += 1;\n else this.counters.push({ TypeIndex: typeIndex, NumInstances: 1 });\n this.brickIndices.push(brickIndex);\n if (structName !== 'None') this.trailing.push({ structName, data });\n this.numComponents += 1;\n }\n\n toBytes(schema: BrdbSchema): Uint8Array {\n const w = new ByteWriter();\n schema.writeValue(w, 'BRSavedComponentChunkSoA', {\n ComponentTypeCounters: this.counters,\n ComponentBrickIndices: this.brickIndices,\n JointBrickIndices: [],\n JointEntityReferences: [],\n JointInitialRelativeOffsets: [],\n JointInitialRelativeRotations: [],\n MicrochipBrickIndices: [],\n MicrochipBrickGridReferences: [],\n });\n for (const t of this.trailing)\n schema.writeValue(\n w,\n t.structName,\n schema.fillStruct(\n t.structName,\n t.data,\n COMPONENT_STRUCT_DEFAULTS.get(t.structName)\n )\n );\n return w.toBytes();\n }\n}\n\nexport function saveToPendingFs(\n save: WriteBrzInput,\n options: WriteBrzOptions = {}\n): PendingEntry[] {\n const bricks = normalizeBricks(save);\n\n // Registry pre-pass: material THEN asset, per brick, in brick order.\n // Registration must complete before any chunk packs — procedural type\n // indices embed the final basic-asset count.\n const materials = new Registry();\n const basic = new Registry();\n const procedural = new Registry();\n for (const b of bricks) {\n materials.add(b.materialName);\n (b.procedural ? procedural : basic).add(b.assetName);\n }\n if (materials.size > 256)\n throw new Error(\n `brdb: too many distinct materials (${materials.size}); MaterialIndices is u8 (max 256)`\n );\n const reg = { materials, basic, procedural };\n const basicCount = basic.size;\n\n // Component registries: type names first-seen across bricks, with the\n // parallel data-struct column; port names come from the wires that use\n // them (matching the reference writer's used-only registration).\n const componentTypes = new Registry();\n const componentStructNames: string[] = [];\n for (const b of bricks)\n for (const c of b.components) {\n const before = componentTypes.size;\n if (componentTypes.add(c.type) === before)\n componentStructNames.push(COMPONENT_TYPE_STRUCTS.get(c.type)!);\n }\n\n // Legacy .brs wires name endpoints by brs component; only modern-shaped\n // wires (component_type) are written, matching the components handling.\n const wires = (save.wires ?? []).filter(\n (w): w is BrdbWireInput => 'component_type' in w.source\n );\n const ports = new Registry();\n wires.forEach((wire, wi) => {\n for (const [role, end] of [\n ['source', wire.source],\n ['target', wire.target],\n ] as const) {\n if (\n !Number.isInteger(end.brick_index) ||\n end.brick_index < 0 ||\n end.brick_index >= bricks.length\n )\n throw new Error(\n `brdb: wires[${wi}].${role}: brick_index ${end.brick_index} out of range`\n );\n if (!componentTypes.has(end.component_type))\n throw new Error(\n `brdb: wires[${wi}].${role}: component type '${end.component_type}' is not used by any brick`\n );\n ports.add(end.port);\n }\n });\n\n // ComponentsShared.schema: the minimal SoA scaffolding, plus (when\n // components are used) the data structs actually referenced and their\n // transitive dependencies pulled from the max catalog schema.\n const componentsSchema = BrdbSchema.fromData(\n SCHEMAS.BRSavedComponentChunkSoA\n );\n if (componentTypes.size > 0) {\n const seeds: string[] = [];\n for (const structName of componentStructNames)\n if (structName !== 'None' && !seeds.includes(structName))\n seeds.push(structName);\n componentsSchema.merge(\n embeddedSchema('BRSavedComponentChunkSoA_max').extractStructsTransitive(\n seeds\n )\n );\n }\n\n // Owner table: row 0 = PUBLIC, then brick_owners\n const ownerRows: { guid: BrGuid; name: string; display: string }[] = [\n { guid: PUBLIC_GUID, name: 'PUBLIC', display: 'PUBLIC' },\n ];\n for (const o of save.brick_owners ?? []) {\n ownerRows.push({\n guid: uuidToGuid(o.id ?? DEFAULT_UUID),\n name: o.name ?? 'Unknown',\n display: o.display_name ?? o.name ?? 'Unknown',\n });\n }\n const brickCounts = ownerRows.map(() => 0);\n const componentCounts = ownerRows.map(() => 0);\n\n // Chunking: first-seen chunk order (deterministic; the ChunkIndex SoA\n // rows use the same order)\n const chunkOrder: string[] = [];\n const chunks = new Map<\n string,\n { index: [number, number, number]; builder: ChunkBuilder }\n >();\n const componentChunks = new Map<string, ComponentChunkBuilder>();\n const brickLocations: {\n key: string;\n chunk: [number, number, number];\n localIndex: number;\n }[] = [];\n for (const b of bricks) {\n const { chunk, rel } = toRelative(b.position);\n const key = chunk.join('_');\n let entry = chunks.get(key);\n if (!entry) {\n entry = { index: chunk, builder: new ChunkBuilder() };\n chunks.set(key, entry);\n chunkOrder.push(key);\n }\n const localIndex = entry.builder.numBricks;\n entry.builder.addBrick(b, rel, reg, basicCount);\n brickLocations.push({ key, chunk, localIndex });\n brickCounts[b.ownerIndex] += 1;\n if (b.components.length > 0) {\n componentCounts[b.ownerIndex] += b.components.length;\n let componentBuilder = componentChunks.get(key);\n if (!componentBuilder)\n componentChunks.set(\n key,\n (componentBuilder = new ComponentChunkBuilder())\n );\n for (const c of b.components) {\n const typeIndex = componentTypes.indexOf(c.type);\n componentBuilder.add(\n typeIndex,\n localIndex,\n componentStructNames[typeIndex],\n c.data ?? {}\n );\n }\n }\n }\n\n // Wires live in the TARGET's chunk. Local rows are same-chunk sources\n // (the legacy writer is single-grid); anything else is a remote source\n // carrying the source grid + chunk.\n interface WireRows {\n remoteSources: Record<string, BrdbValue>[];\n localSources: Record<string, BrdbValue>[];\n remoteTargets: Record<string, BrdbValue>[];\n localTargets: Record<string, BrdbValue>[];\n }\n const wireChunks = new Map<string, WireRows>();\n const chunkWireCounts = new Map<string, number>();\n for (const wire of wires) {\n const source = brickLocations[wire.source.brick_index];\n const targetLoc = brickLocations[wire.target.brick_index];\n const target = {\n BrickIndexInChunk: targetLoc.localIndex,\n ComponentTypeIndex: componentTypes.indexOf(wire.target.component_type),\n PortIndex: ports.indexOf(wire.target.port),\n };\n let rows = wireChunks.get(targetLoc.key);\n if (!rows)\n wireChunks.set(\n targetLoc.key,\n (rows = {\n remoteSources: [],\n localSources: [],\n remoteTargets: [],\n localTargets: [],\n })\n );\n chunkWireCounts.set(\n targetLoc.key,\n (chunkWireCounts.get(targetLoc.key) ?? 0) + 1\n );\n if (source.key === targetLoc.key) {\n rows.localSources.push({\n BrickIndexInChunk: source.localIndex,\n ComponentTypeIndex: componentTypes.indexOf(wire.source.component_type),\n PortIndex: ports.indexOf(wire.source.port),\n });\n rows.localTargets.push(target);\n } else {\n rows.remoteSources.push({\n GridPersistentIndex: 1, // single (main) grid in the legacy writer\n ChunkIndex: {\n X: source.chunk[0],\n Y: source.chunk[1],\n Z: source.chunk[2],\n },\n BrickIndexInChunk: source.localIndex,\n ComponentTypeIndex: componentTypes.indexOf(wire.source.component_type),\n PortIndex: ports.indexOf(wire.source.port),\n });\n rows.remoteTargets.push(target);\n }\n }\n\n const globalDataSchema = embeddedSchema('BRSavedGlobalDataSoA');\n const ownersSchema = embeddedSchema('BRSavedOwnerTableSoA');\n const chunkIndexSchema = embeddedSchema('BRSavedBrickChunkIndexSoA');\n const chunkSchema = embeddedSchema('BRSavedBrickChunkSoA');\n const wiresSchema = embeddedSchema('BRSavedWireChunkSoA');\n const entityChunkIndexSchema = embeddedSchema('BRSavedEntityChunkIndexSoA');\n const entitySchema = embeddedSchema('BRSavedEntityChunkSoA');\n\n const globalDataMps = globalDataSchema.encode('BRSavedGlobalDataSoA', {\n EntityTypeNames: [],\n EntityDataClassNames: [],\n BasicBrickAssetNames: basic.names,\n ProceduralBrickAssetNames: procedural.names,\n MaterialAssetNames: materials.names,\n ComponentTypeNames: componentTypes.names,\n ComponentDataStructNames: componentStructNames,\n ComponentWirePortNames: ports.names,\n ExternalAssetReferences: [],\n GlobalGridEntityTypeIndex: -1,\n });\n\n const ownersMps = ownersSchema.encode('BRSavedOwnerTableSoA', {\n UserIds: ownerRows.map(r => ({\n A: r.guid.A,\n B: r.guid.B,\n C: r.guid.C,\n D: r.guid.D,\n })),\n UserNames: ownerRows.map(r => r.name),\n DisplayNames: ownerRows.map(r => r.display),\n EntityCounts: ownerRows.map(() => 0),\n BrickCounts: brickCounts,\n ComponentCounts: componentCounts,\n WireCounts: ownerRows.map(() => 0),\n });\n\n const chunkIndexMps = chunkIndexSchema.encode('BRSavedBrickChunkIndexSoA', {\n Chunk3DIndices: chunkOrder.map(k => {\n const [X, Y, Z] = chunks.get(k)!.index;\n return { X, Y, Z };\n }),\n // origin chunk gets zero offsets; every other chunk (CHUNK_HALF)³\n ChunkOffsets: chunkOrder.map(k => {\n const zero = chunks.get(k)!.index.every(v => v === 0);\n const off = zero ? 0 : CHUNK_HALF;\n return { X: off, Y: off, Z: off };\n }),\n ChunkSizes: chunkOrder.map(() => CHUNK_SIZE),\n NumBricks: chunkOrder.map(k => chunks.get(k)!.builder.numBricks),\n NumComponents: chunkOrder.map(\n k => componentChunks.get(k)?.numComponents ?? 0\n ),\n NumWires: chunkOrder.map(k => chunkWireCounts.get(k) ?? 0),\n });\n\n const entityChunkIndexMps = entityChunkIndexSchema.encode(\n 'BRSavedEntityChunkIndexSoA',\n {\n NextPersistentIndex: 2, // sub-grids/entities start at 2; none in phase 1\n Chunk3DIndices: [],\n NumEntities: [],\n }\n );\n\n const utf8 = new TextEncoder();\n const bundle: BundleJson = {\n type: 'World',\n iD: '00000000-0000-0000-0000-000000000000',\n name: '',\n version: '',\n tags: [],\n authors: save.author?.name ? [save.author.name] : [],\n createdAt: '0001.01.01-00.00.00',\n updatedAt: '0001.01.01-00.00.00',\n description: save.description ?? 'A Generated World',\n dependencies: [],\n gameVersion: 'CL0',\n ...options.bundle,\n };\n\n // Tree creation order below defines archive ids — it is part of the\n // byte format; do not reorder.\n const gridDir: PendingEntry[] = [['ChunkIndex.mps', file(chunkIndexMps)]];\n if (chunkOrder.length > 0) {\n gridDir.push([\n 'Chunks',\n folder(\n chunkOrder.map(k => [\n `${k}.mps`,\n file(\n chunkSchema.encode(\n 'BRSavedBrickChunkSoA',\n chunks.get(k)!.builder.toValue(basicCount)\n )\n ),\n ])\n ),\n ]);\n }\n if (componentChunks.size > 0) {\n gridDir.push([\n 'Components',\n folder(\n chunkOrder\n .filter(k => componentChunks.has(k))\n .map(k => [\n `${k}.mps`,\n file(componentChunks.get(k)!.toBytes(componentsSchema)),\n ])\n ),\n ]);\n }\n if (wireChunks.size > 0) {\n gridDir.push([\n 'Wires',\n folder(\n chunkOrder\n .filter(k => wireChunks.has(k))\n .map(k => {\n const rows = wireChunks.get(k)!;\n return [\n `${k}.mps`,\n file(\n wiresSchema.encode('BRSavedWireChunkSoA', {\n RemoteWireSources: rows.remoteSources,\n LocalWireSources: rows.localSources,\n RemoteWireTargets: rows.remoteTargets,\n LocalWireTargets: rows.localTargets,\n PendingPropagationFlags: { Flags: [] },\n })\n ),\n ];\n })\n ),\n ]);\n }\n return [\n [\n 'Meta',\n folder([\n ['Bundle.json', file(utf8.encode(JSON.stringify(bundle)))],\n // Screenshot.jpg / Thumbnail.png: no content -> omitted entirely\n [\n 'World.json',\n file(\n utf8.encode(\n JSON.stringify({ environment: options.environment ?? 'Plate' })\n )\n ),\n ],\n ]),\n ],\n [\n 'World',\n folder([\n [\n '0',\n folder([\n ['GlobalData.schema', file(globalDataSchema.toBinary())],\n ['GlobalData.mps', file(globalDataMps)],\n ['Owners.schema', file(ownersSchema.toBinary())],\n ['Owners.mps', file(ownersMps)],\n [\n 'Bricks',\n folder([\n ['ChunkIndexShared.schema', file(chunkIndexSchema.toBinary())],\n ['ChunksShared.schema', file(chunkSchema.toBinary())],\n ['WiresShared.schema', file(wiresSchema.toBinary())],\n ['ComponentsShared.schema', file(componentsSchema.toBinary())],\n ['Grids', folder([['1', folder(gridDir)]])],\n ]),\n ],\n [\n 'Entities',\n folder([\n ['ChunkIndex.schema', file(entityChunkIndexSchema.toBinary())],\n ['ChunkIndex.mps', file(entityChunkIndexMps)],\n ['ChunksShared.schema', file(entitySchema.toBinary())],\n ]),\n ],\n ]),\n ],\n ]),\n ],\n ];\n}\n\n/** Write a .brz world from a legacy .brs-shaped WriteSaveObject. A\n * builder-style world API for authoring saves from scratch is planned;\n * this entry point exists for converting existing saves. */\nexport function writeBrzLegacy(\n save: WriteBrzInput,\n options: WriteBrzOptions = {}\n): Uint8Array {\n const containerOptions: BrzContainerOptions = { compress: options.compress };\n return writeBrzContainer(saveToPendingFs(save, options), containerOptions);\n}\n","// Lazy .brz world reader. Schemas are parsed once and cached per archive\n// path; chunk payloads are decoded on demand (never all at once); grids and\n// entities are enumerated from the archive rather than assumed. Decoding\n// always uses the ARCHIVE's own schemas — game-authored files may carry\n// field sets that differ from the embedded (current) schemas, and a .brz\n// holds exactly one schema per category.\nimport type { Collision, Owner, Vector } from '../brs/types';\nimport { bit } from './bits';\nimport { ByteReader } from './bytes';\nimport { BrzReader } from './brz';\nimport { ENTITY_TYPE_STRUCTS } from './componentDb';\nimport type { FoundFile, WorldFs } from './fs';\nimport { guidToUuid } from './guid';\nimport { BrdbSchema, BrdbValue } from './schema';\nimport { BundleJson, CHUNK_HALF, CHUNK_SIZE } from './world';\n\nexport type { FoundFile, WorldFs } from './fs';\n\nexport const MAIN_GRID = 1;\n\nexport interface ChunkCoord {\n x: number;\n y: number;\n z: number;\n}\n\nexport interface BrickChunkRef {\n index: ChunkCoord;\n offset: ChunkCoord;\n size: number;\n numBricks: number;\n numComponents: number;\n numWires: number;\n}\n\nexport interface EntityChunkRef {\n index: ChunkCoord;\n numEntities: number;\n}\n\nexport interface EntityChunkIndex {\n nextPersistentIndex: number;\n chunks: EntityChunkRef[];\n}\n\nexport interface ComponentInstance {\n typeName: string;\n structName: string | null;\n /** the owning brick's local index within its chunk */\n brickIndex: number;\n data: Record<string, BrdbValue> | null;\n}\n\nexport interface WireEndpoint {\n /** the endpoint brick's local index within its chunk */\n brickIndex: number;\n componentType: string;\n port: string;\n}\n\nexport interface RemoteWireEndpoint extends WireEndpoint {\n gridId: number;\n chunk: ChunkCoord;\n}\n\nexport interface WireChunk {\n /** wires whose source is in the same grid+chunk as the target */\n local: Array<{ source: WireEndpoint; target: WireEndpoint }>;\n /** wires whose source lives in another grid or chunk */\n remote: Array<{ source: RemoteWireEndpoint; target: WireEndpoint }>;\n}\n\nexport interface EntityRecord {\n typeName: string;\n className: string | null;\n persistentIndex: number;\n ownerIndex: number;\n originalOwnerIndex: number;\n location: { X: number; Y: number; Z: number };\n rotation: { X: number; Y: number; Z: number; W: number };\n frozen: boolean;\n sleeping: boolean;\n linearVelocity: { X: number; Y: number; Z: number };\n angularVelocity: { X: number; Y: number; Z: number };\n colors: Record<string, BrdbValue>;\n remainingLifeSpan: number;\n data: Record<string, BrdbValue> | null;\n}\n\nexport interface BrzWorldBrick {\n asset_name_index: number;\n size: Vector;\n position: Vector;\n direction: number;\n rotation: number;\n collision: Collision;\n visibility: boolean;\n material_index: number;\n material_intensity: number;\n color: [number, number, number];\n owner_index: number;\n}\n\n/** Convert one linear-light color channel (0-255) to sRGB. Saves whose\n * colors are stored linear (bColorsAreLinear true, or the field missing\n * entirely on older saves) need this on read; new saves store sRGB already\n * and skip the conversion. Values at or below 0x0F scale into a 15-wide\n * range instead of 255, matching the low-value storage convention used\n * throughout the color format. */\nexport function linearToSrgb(v: number): number {\n const scale = v <= 0x0f ? 15 : 255;\n return Math.trunc(Math.pow(v / 255, 1 / 2.2) * scale);\n}\n\n/** Convert one brick color's R/G/B from linear to sRGB, leaving A (material\n * intensity) untouched. */\nfunction colorToSrgb<T extends { R: number; G: number; B: number }>(c: T): T {\n return {\n ...c,\n R: linearToSrgb(c.R),\n G: linearToSrgb(c.G),\n B: linearToSrgb(c.B),\n };\n}\n\n/** Convert every Color0..Color7 slot of an entity's packed colors struct\n * from linear to sRGB, leaving each slot's A untouched. */\nfunction entityColorsToSrgb(\n colors: Record<string, BrdbValue>\n): Record<string, BrdbValue> {\n const out: Record<string, BrdbValue> = {};\n for (const [key, value] of Object.entries(colors))\n out[key] = colorToSrgb(\n value as { R: number; G: number; B: number; A: number }\n );\n return out;\n}\n\n/** Expand one decoded brick chunk SoA into bricks. Positions are relative to\n * the owning grid's origin (world origin for the main grid). */\nfunction decodeChunkBricks(\n soa: any,\n chunk: ChunkCoord,\n basicCount: number\n): BrzWorldBrick[] {\n // Expand the run-length size table: slot s belongs to the counter\n // covering it; BrickSizes[s] is its size. Bound the expansion by the real\n // payload (a hostile/corrupt chunk could otherwise claim billions of\n // slots from a single counter): the total must not exceed BrickSizes.\n let totalNumSizes = 0;\n for (const counter of soa.BrickSizeCounters)\n totalNumSizes += counter.NumSizes;\n if (totalNumSizes < 0 || totalNumSizes > soa.BrickSizes.length)\n throw new Error('brdb: brick size counters exceed size table');\n const slotAssets: number[] = [];\n for (const counter of soa.BrickSizeCounters)\n for (let s = 0; s < counter.NumSizes; s++)\n slotAssets.push(counter.AssetIndex);\n const start: number = soa.ProceduralBrickStartingIndex;\n // Saves whose colors are stored linear (older saves, or the field simply\n // absent from this archive's schema) need converting to sRGB on read; new\n // saves write bColorsAreLinear = false and are returned unchanged.\n const linear: boolean = soa.bColorsAreLinear ?? true;\n\n const bricks: BrzWorldBrick[] = [];\n for (let i = 0; i < soa.BrickTypeIndices.length; i++) {\n const ty: number = soa.BrickTypeIndices[i];\n let asset_name_index: number;\n let size: Vector;\n if (ty < start) {\n asset_name_index = ty; // basic: same index in the combined list\n size = [0, 0, 0];\n } else {\n const slot = ty - start;\n const sz = soa.BrickSizes[slot];\n if (sz === undefined || slotAssets[slot] === undefined)\n throw new Error(`brdb: invalid procedural size slot ${slot}`);\n asset_name_index = basicCount + slotAssets[slot];\n size = [sz.X, sz.Y, sz.Z];\n }\n const rel = soa.RelativePositions[i];\n const orientation: number = soa.Orientations[i];\n const rawColor = soa.ColorsAndAlphas[i];\n const color = linear ? colorToSrgb(rawColor) : rawColor;\n bricks.push({\n asset_name_index,\n size,\n position: [\n chunk.x * CHUNK_SIZE + CHUNK_HALF + rel.X,\n chunk.y * CHUNK_SIZE + CHUNK_HALF + rel.Y,\n chunk.z * CHUNK_SIZE + CHUNK_HALF + rel.Z,\n ],\n direction: (orientation >> 2) & 0x7,\n rotation: orientation & 0x3,\n collision: {\n player: bit(soa.CollisionFlags_Player, i),\n weapon: bit(soa.CollisionFlags_Weapon, i),\n interaction: bit(soa.CollisionFlags_Interaction, i),\n tool: true, // not stored in brdb\n physics: bit(soa.CollisionFlags_Physics, i),\n },\n visibility: bit(soa.VisibilityFlags, i),\n material_index: soa.MaterialIndices[i],\n material_intensity: color.A,\n color: [color.R, color.G, color.B],\n owner_index: soa.OwnerIndices[i],\n });\n }\n return bricks;\n}\n\n/** Reads a .brz or .brdb world lazily through a WorldFs. Schema blobs and\n * decoded metadata (GlobalData, Owners, Bundle/World JSON) are cached for\n * the lifetime of the reader; chunk payloads are always decoded fresh. For\n * a .brz this is safe by construction (the archive never changes), but a\n * reader built over a live Brdb (Brdb.worldReader()) must not be reused\n * across a write to that database: construct a new reader afterward so\n * cached metadata cannot mix with newly written chunk data. */\nexport class WorldReader {\n private schemas = new Map<string, BrdbSchema>();\n private values = new Map<string, unknown>();\n\n constructor(readonly fs: WorldFs, readonly worldId: number = 0) {}\n\n static from(data: Uint8Array): WorldReader {\n return new WorldReader(BrzReader.from(data));\n }\n\n private path(rel: string): string {\n return `World/${this.worldId}/${rel}`;\n }\n\n /** Parse a .schema blob once per revision; later calls return the cached\n * schema. The public form resolves the schema file's own (latest)\n * revision. */\n schema(path: string): BrdbSchema {\n const found = this.fs.findFileByPath(path);\n if (!found) throw new Error(`brdb: file not found: ${path}`);\n return this.schemaAt(path, found.createdAt);\n }\n\n /** Schema as it existed at `revision` (a created_at timestamp). Schemas\n * evolve over a world's history; data files must decode with the schema\n * revision that was live when they were written. */\n private schemaAt(path: string, revision: number): BrdbSchema {\n const key = `${path}@${revision}`;\n let schema = this.schemas.get(key);\n if (!schema) {\n const found = this.fs.findFileByPathAtRevision(path, revision);\n if (!found)\n throw new Error(`brdb: file not found: ${path} at ${revision}`);\n schema = BrdbSchema.fromBinary(this.fs.readBlob(found.contentId));\n this.schemas.set(key, schema);\n }\n return schema;\n }\n\n private decode(mpsPath: string, schemaPath: string, struct: string): any {\n const found = this.fs.findFileByPath(mpsPath);\n if (!found) throw new Error(`brdb: file not found: ${mpsPath}`);\n return this.schemaAt(schemaPath, found.createdAt).decode(\n this.fs.readBlob(found.contentId),\n struct\n );\n }\n\n private cached<T>(key: string, load: () => T): T {\n if (!this.values.has(key)) this.values.set(key, load());\n return this.values.get(key) as T;\n }\n\n bundle(): BundleJson {\n return this.cached('Meta/Bundle.json', () =>\n JSON.parse(new TextDecoder().decode(this.fs.readFile('Meta/Bundle.json')))\n );\n }\n\n environment(): { environment: string } {\n return this.cached('Meta/World.json', () =>\n JSON.parse(new TextDecoder().decode(this.fs.readFile('Meta/World.json')))\n );\n }\n\n globalData(): any {\n return this.cached(this.path('GlobalData.mps'), () =>\n this.decode(\n this.path('GlobalData.mps'),\n this.path('GlobalData.schema'),\n 'BRSavedGlobalDataSoA'\n )\n );\n }\n\n owners(): any {\n return this.cached(this.path('Owners.mps'), () =>\n this.decode(\n this.path('Owners.mps'),\n this.path('Owners.schema'),\n 'BRSavedOwnerTableSoA'\n )\n );\n }\n\n /** Basic asset names followed by procedural — decoded brick\n * asset_name_index values point into this combined list. */\n brickAssets(): string[] {\n const globalData = this.globalData();\n return [\n ...globalData.BasicBrickAssetNames,\n ...globalData.ProceduralBrickAssetNames,\n ];\n }\n\n materials(): string[] {\n return this.globalData().MaterialAssetNames;\n }\n\n /** Owner rows 1.. (the PUBLIC row 0 is excluded). */\n brickOwners(): Owner[] {\n const owners = this.owners();\n const out: Owner[] = [];\n for (let i = 1; i < owners.UserNames.length; i++) {\n out.push({\n id: guidToUuid(owners.UserIds[i]),\n name: owners.UserNames[i],\n display_name: owners.DisplayNames[i],\n bricks: owners.BrickCounts[i],\n });\n }\n return out;\n }\n\n /** Grid ids under Bricks/Grids: 1 = the main grid, ≥2 = entity sub-grids. */\n gridIds(): number[] {\n return this.fs\n .childFolders(this.path('Bricks/Grids'))\n .map(Number)\n .sort((a, b) => a - b);\n }\n\n brickChunkIndex(gridId: number = MAIN_GRID): BrickChunkRef[] {\n const soa = this.decode(\n this.path(`Bricks/Grids/${gridId}/ChunkIndex.mps`),\n this.path('Bricks/ChunkIndexShared.schema'),\n 'BRSavedBrickChunkIndexSoA'\n );\n // ChunkOffsets/ChunkSizes were added to the format later; older worlds\n // decode without them (the archive's own schema simply omits the\n // keys), so default to a half-chunk offset and the standard chunk size.\n return soa.Chunk3DIndices.map((c: any, i: number) => {\n const off = soa.ChunkOffsets?.[i];\n return {\n index: { x: c.X, y: c.Y, z: c.Z },\n offset: off\n ? { x: off.X, y: off.Y, z: off.Z }\n : { x: CHUNK_HALF, y: CHUNK_HALF, z: CHUNK_HALF },\n size: soa.ChunkSizes?.[i] ?? CHUNK_SIZE,\n numBricks: soa.NumBricks[i],\n numComponents: soa.NumComponents[i],\n numWires: soa.NumWires[i],\n };\n });\n }\n\n /** Decode one brick chunk's SoA. Not cached: chunk payloads are the bulk\n * of an archive and are meant to be streamed, not retained. */\n brickChunkSoa(gridId: number, chunk: ChunkCoord): any {\n return this.decode(\n this.path(\n `Bricks/Grids/${gridId}/Chunks/${chunk.x}_${chunk.y}_${chunk.z}.mps`\n ),\n this.path('Bricks/ChunksShared.schema'),\n 'BRSavedBrickChunkSoA'\n );\n }\n\n /** Lazily decode a grid's bricks, one chunk at a time. Positions are\n * relative to the grid's origin: world origin for the main grid (1),\n * entity-relative for sub-grids (≥2). */\n *bricks(gridId: number = MAIN_GRID): Generator<BrzWorldBrick, void, void> {\n const basicCount = this.globalData().BasicBrickAssetNames.length;\n for (const ref of this.brickChunkIndex(gridId)) {\n yield* decodeChunkBricks(\n this.brickChunkSoa(gridId, ref.index),\n ref.index,\n basicCount\n );\n }\n }\n\n /** Entity chunk registry. */\n entityChunkIndex(): EntityChunkIndex {\n const soa = this.decode(\n this.path('Entities/ChunkIndex.mps'),\n this.path('Entities/ChunkIndex.schema'),\n 'BRSavedEntityChunkIndexSoA'\n );\n return {\n nextPersistentIndex: soa.NextPersistentIndex,\n chunks: soa.Chunk3DIndices.map((c: any, i: number) => ({\n index: { x: c.X, y: c.Y, z: c.Z },\n numEntities: soa.NumEntities[i],\n })),\n };\n }\n\n /** Decode a component chunk: the SoA plus each instance's trailing data\n * struct. Instances stream in counter order; a type whose data-struct\n * slot is missing or \"None\" contributes no trailing bytes. */\n componentChunk(\n gridId: number,\n chunk: ChunkCoord\n ): { soa: any; components: ComponentInstance[] } {\n const mpsPath = this.path(\n `Bricks/Grids/${gridId}/Components/${chunk.x}_${chunk.y}_${chunk.z}.mps`\n );\n const found = this.fs.findFileByPath(mpsPath);\n if (!found) throw new Error(`brdb: file not found: ${mpsPath}`);\n const bytes = this.fs.readBlob(found.contentId);\n const schema = this.schemaAt(\n this.path('Bricks/ComponentsShared.schema'),\n found.createdAt\n );\n const globalData = this.globalData();\n const r = new ByteReader(bytes);\n const soa: any = schema.readValue(r, 'BRSavedComponentChunkSoA');\n // A hostile/corrupt chunk could claim billions of instances from a\n // single counter with no backing data; validate the total against the\n // real row count before looping instead of allocating unbounded.\n let totalInstances = 0;\n for (const counter of soa.ComponentTypeCounters)\n totalInstances += counter.NumInstances;\n if (totalInstances !== soa.ComponentBrickIndices.length)\n throw new Error(\n 'brdb: component counters do not match brick index count'\n );\n\n const components: ComponentInstance[] = [];\n let stream = 0;\n for (const counter of soa.ComponentTypeCounters) {\n const typeName: string =\n globalData.ComponentTypeNames[counter.TypeIndex] ?? '<invalid>';\n const rawStruct: string | undefined =\n globalData.ComponentDataStructNames[counter.TypeIndex];\n const structName = rawStruct && rawStruct !== 'None' ? rawStruct : null;\n for (let i = 0; i < counter.NumInstances; i++) {\n components.push({\n typeName,\n structName,\n brickIndex: soa.ComponentBrickIndices[stream],\n data: structName\n ? (schema.readValue(r, structName) as Record<string, BrdbValue>)\n : null,\n });\n stream += 1;\n }\n }\n if (r.remaining !== 0)\n throw new Error(\n `brdb: ${r.remaining} trailing bytes after component chunk`\n );\n return { soa, components };\n }\n\n /** Decode a wire chunk. Wires live in the TARGET's grid+chunk; local\n * rows are same-grid-same-chunk sources, remote rows carry the source\n * grid + chunk. Component/port names resolve through GlobalData. */\n wireChunk(gridId: number, chunk: ChunkCoord): WireChunk {\n const soa: any = this.decode(\n this.path(\n `Bricks/Grids/${gridId}/Wires/${chunk.x}_${chunk.y}_${chunk.z}.mps`\n ),\n this.path('Bricks/WiresShared.schema'),\n 'BRSavedWireChunkSoA'\n );\n const globalData = this.globalData();\n const endpoint = (row: any): WireEndpoint => ({\n brickIndex: row.BrickIndexInChunk,\n componentType:\n globalData.ComponentTypeNames[row.ComponentTypeIndex] ?? '<invalid>',\n port: globalData.ComponentWirePortNames[row.PortIndex] ?? '<invalid>',\n });\n return {\n local: soa.LocalWireSources.map((s: any, i: number) => ({\n source: endpoint(s),\n target: endpoint(soa.LocalWireTargets[i]),\n })),\n remote: soa.RemoteWireSources.map((s: any, i: number) => ({\n source: {\n ...endpoint(s),\n gridId: s.GridPersistentIndex,\n chunk: {\n x: s.ChunkIndex.X,\n y: s.ChunkIndex.Y,\n z: s.ChunkIndex.Z,\n },\n },\n target: endpoint(soa.RemoteWireTargets[i]),\n })),\n };\n }\n\n /** Decode one entity chunk: the SoA plus each entity's trailing data\n * struct (gated on EntityDataClassNames: absent or \"None\" = no struct). */\n entityChunk(chunk: ChunkCoord): EntityRecord[] {\n const mpsPath = this.path(\n `Entities/Chunks/${chunk.x}_${chunk.y}_${chunk.z}.mps`\n );\n const found = this.fs.findFileByPath(mpsPath);\n if (!found) throw new Error(`brdb: file not found: ${mpsPath}`);\n const bytes = this.fs.readBlob(found.contentId);\n const schema = this.schemaAt(\n this.path('Entities/ChunksShared.schema'),\n found.createdAt\n );\n const globalData = this.globalData();\n const r = new ByteReader(bytes);\n const soa: any = schema.readValue(r, 'BRSavedEntityChunkSoA');\n // A hostile/corrupt chunk could claim billions of entities from a\n // single counter with no backing rows; validate the total against the\n // real row count before looping instead of allocating unbounded.\n let totalEntities = 0;\n for (const counter of soa.TypeCounters)\n totalEntities += counter.NumEntities;\n if (totalEntities !== soa.PersistentIndices.length)\n throw new Error(\n 'brdb: entity counters do not match persistent index count'\n );\n // Very old (legacy) worlds omit EntityDataClassNames from GlobalData\n // entirely; fall back to the known entity-type-to-class table, using\n // 'Unknown' for anything not in it (an 'Unknown' struct decode throws\n // loudly below, same as the reference behavior for such saves).\n const entityDataClassNames: string[] =\n globalData.EntityDataClassNames ??\n globalData.EntityTypeNames.map(\n (n: string) => ENTITY_TYPE_STRUCTS.get(n) ?? 'Unknown'\n );\n // Colors are stored linear on older saves (or any save whose schema\n // simply omits the flag); convert to sRGB on read, alpha untouched.\n const entityColorsLinear: boolean = soa.bColorsAreLinear ?? true;\n\n const entities: EntityRecord[] = [];\n let index = 0;\n for (const counter of soa.TypeCounters) {\n const typeName: string =\n globalData.EntityTypeNames[counter.TypeIndex] ?? '<invalid>';\n const rawClass: string | undefined =\n entityDataClassNames[counter.TypeIndex];\n const className = rawClass && rawClass !== 'None' ? rawClass : null;\n for (let i = 0; i < counter.NumEntities; i++) {\n const rawColors = soa.ColorsAndAlphas[index];\n entities.push({\n typeName,\n className,\n persistentIndex: soa.PersistentIndices[index],\n ownerIndex: soa.OwnerIndices[index],\n // Added alongside the per-entity original-owner update; older\n // saves omit this column and mirror the owner index instead.\n originalOwnerIndex:\n soa.OriginalOwnerIndices?.[index] ?? soa.OwnerIndices[index],\n location: soa.Locations[index],\n rotation: soa.Rotations[index],\n frozen: bit(soa.PhysicsLockedFlags, index),\n sleeping: bit(soa.PhysicsSleepingFlags, index),\n linearVelocity: soa.LinearVelocities[index],\n angularVelocity: soa.AngularVelocities[index],\n colors: entityColorsLinear\n ? entityColorsToSrgb(rawColors)\n : rawColors,\n remainingLifeSpan: soa.RemainingLifeSpans?.[index] ?? 0,\n data: className\n ? (schema.readValue(r, className) as Record<string, BrdbValue>)\n : null,\n });\n index += 1;\n }\n }\n if (r.remaining !== 0)\n throw new Error(`brdb: ${r.remaining} trailing bytes after entity chunk`);\n return entities;\n }\n\n /** Lazily decode every entity, one chunk at a time. */\n *entities(): Generator<EntityRecord, void, void> {\n for (const ref of this.entityChunkIndex().chunks)\n yield* this.entityChunk(ref.index);\n }\n}\n","// .brdb container: the same virtual filesystem as .brz, stored in SQLite\n// with content-addressed blobs and soft-delete revision history. This module\n// is engine-free: it speaks to any handle satisfying BrdbSqlite (better-\n// sqlite3 does structurally). The static openers below lazily load\n// better-sqlite3 so the web bundle never needs it.\nimport { blake3 } from '@noble/hashes/blake3.js';\nimport { decompress as zstdDecompress } from 'fzstd';\nimport type { Compressor } from './brz';\nimport type { FoundFile, WorldFs } from './fs';\nimport type { PendingEntry, PendingNode } from './pending';\nimport { WorldReader } from './reader';\nimport { saveToPendingFs, WriteBrzInput, WriteBrzOptions } from './world';\n\nexport interface BrdbStatement {\n run(...params: unknown[]): { lastInsertRowid: number | bigint };\n get(...params: unknown[]): unknown;\n all(...params: unknown[]): unknown[];\n}\n\nexport interface BrdbSqlite {\n exec(sql: string): unknown;\n prepare(sql: string): BrdbStatement;\n close(): void;\n}\n\nexport interface BrdbBlob {\n blobId: number;\n compression: number;\n sizeUncompressed: number;\n sizeCompressed: number;\n deltaBaseId: number | null;\n hash: Uint8Array;\n content: Uint8Array;\n}\n\nexport interface BrdbRevision {\n revisionId: number;\n description: string;\n createdAt: number;\n}\n\nexport interface WritePendingOptions {\n /** Revision timestamp in unix seconds. Defaults to the wall clock. */\n createdAt?: number;\n /** Blob compressor. undefined uses the instance default (zstd level 14\n * when opened through the lazy openers); null stores raw. */\n compress?: Compressor | null;\n}\n\n// The exact statement text matters: SQLite stores CREATE statements verbatim\n// in sqlite_schema, and the parity suite compares this against databases\n// created by the reference implementation (whose DDL indents columns with\n// four tabs and closing parens with three).\nconst C = '\\n\\t\\t\\t\\t';\nconst E = '\\n\\t\\t\\t';\nexport const BRDB_SQLITE_SCHEMA =\n `CREATE TABLE blobs (${C}blob_id INTEGER PRIMARY KEY,${C}compression INTEGER,` +\n `${C}size_uncompressed INTEGER,${C}size_compressed INTEGER,` +\n `${C}delta_base_id INTEGER REFERENCES blobs(blob_id),${C}hash BLOB,` +\n `${C}content BLOB${E});\\n` +\n `CREATE TABLE revisions (${C}revision_id INTEGER PRIMARY KEY,` +\n `${C}description TEXT,${C}created_at INTEGER${E});\\n` +\n `CREATE TABLE folders (${C}folder_id INTEGER PRIMARY KEY,` +\n `${C}parent_id INTEGER REFERENCES folders(folder_id),${C}name TEXT,` +\n `${C}created_at INTEGER,${C}deleted_at INTEGER${E});\\n` +\n `CREATE TABLE files (${C}file_id INTEGER PRIMARY KEY,` +\n `${C}parent_id INTEGER REFERENCES folders(folder_id),${C}name TEXT,` +\n `${C}content_id INTEGER REFERENCES blobs(blob_id),${C}created_at INTEGER,` +\n `${C}deleted_at INTEGER${E});\\n` +\n 'CREATE INDEX blobs_size_hash ON blobs(size_uncompressed, hash);\\n' +\n 'CREATE INDEX folders_parent_name_deleted ON folders(parent_id, name, deleted_at);\\n' +\n 'CREATE INDEX files_parent_name_deleted ON files(parent_id, name, deleted_at);';\n\nconst REQUIRED_TABLES = ['blobs', 'revisions', 'folders', 'files'] as const;\n\nconst now = () => Math.floor(Date.now() / 1000);\n\n// src/ stays isomorphic (no @types/node), so Buffer has no ambient type here.\n// This module-local declaration describes just enough of the real Node global\n// to type the guarded access below; it shadows (does not conflict with) the\n// full Node typing that test/tsconfig.json brings in for the test suite.\ndeclare const Buffer:\n | {\n from(\n data: ArrayBufferLike | Uint8Array,\n byteOffset?: number,\n length?: number\n ): Uint8Array;\n }\n | undefined;\n\n/** Bind bytes as a BLOB parameter. better-sqlite3 requires Buffer; when\n * unavailable (browser engines), pass the Uint8Array through. */\nconst asBlob = (bytes: Uint8Array): Uint8Array =>\n typeof Buffer === 'undefined'\n ? bytes\n : Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\ndeclare const process: { getBuiltinModule?(name: string): any } | undefined;\n\n/** A node builtin without any import machinery (bundler inert and safe\n * under test runners that cannot compile dynamic import at runtime).\n * Null outside node or below Node 22.3. */\nconst builtin = (name: string): any => {\n try {\n return typeof process !== 'undefined'\n ? process?.getBuiltinModule?.(name) ?? null\n : null;\n } catch {\n return null;\n }\n};\n\n/** Dynamic import kept opaque so bundlers never try to resolve engine or\n * node-builtin specifiers; the web bundle stays SQLite-free. Constructed\n * lazily so merely loading the library never evaluates code under a CSP\n * that bans eval. */\nlet dynamicImport: ((specifier: string) => Promise<any>) | null = null;\nconst loadModule = (specifier: string): Promise<any> => {\n dynamicImport ??= new Function(\n 'specifier',\n 'return import(specifier)'\n ) as any;\n return dynamicImport!(specifier);\n};\n\ninterface SerializableSqlite extends BrdbSqlite {\n serialize(): Uint8Array;\n}\n\nasync function engine(): Promise<\n new (\n source: string | Uint8Array,\n options?: { readonly?: boolean; fileMustExist?: boolean }\n ) => SerializableSqlite\n> {\n try {\n const mod: any = await (\n Brdb.engineLoader ?? (() => loadModule('better-sqlite3'))\n )();\n return mod.default ?? mod;\n } catch {\n throw new Error(\n 'brdb: the Brdb openers require better-sqlite3 (npm install better-sqlite3), or wrap your own handle with new Brdb(db)'\n );\n }\n}\n\nfunction nodeZstd(): Compressor | null {\n const zlib = builtin('node:zlib');\n if (typeof zlib?.zstdCompressSync !== 'function') return null;\n const level = zlib.constants.ZSTD_c_compressionLevel;\n return data =>\n new Uint8Array(zlib.zstdCompressSync(data, { params: { [level]: 14 } }));\n}\n\nexport class Brdb implements WorldFs {\n /** Override how the better-sqlite3 module is resolved. Useful when a\n * bundler or test runner cannot execute a native dynamic import. */\n static engineLoader: (() => Promise<unknown>) | null = null;\n\n /** zstd compressor applied to new blobs when no per-write compressor is\n * given. The lazy openers set this; a directly-wrapped handle has none. */\n defaultCompress: Compressor | null = null;\n\n constructor(readonly db: BrdbSqlite) {\n for (const t of REQUIRED_TABLES) {\n const row = this.db\n .prepare(\n \"SELECT name FROM sqlite_schema WHERE type = 'table' AND name = ?\"\n )\n .get(t);\n if (!row) throw new Error(`brdb: missing required table '${t}'`);\n }\n }\n\n /** Create-container semantics on any handle: run the DDL and stamp the\n * initial revision. */\n static init(db: BrdbSqlite, createdAt: number = now()): Brdb {\n db.exec(BRDB_SQLITE_SCHEMA);\n const brdb = new Brdb(db);\n brdb.createRevision('Initial Revision', createdAt);\n return brdb;\n }\n\n /** Construct create/open semantics on a handle, closing it if construction\n * (the DDL or the required-table guard) throws so a failed opener never\n * leaks the underlying handle (and, on Windows, never leaves it locked). */\n private static async wrap(db: BrdbSqlite, init: boolean): Promise<Brdb> {\n try {\n const brdb = init ? Brdb.init(db) : new Brdb(db);\n brdb.defaultCompress = nodeZstd();\n return brdb;\n } catch (err) {\n db.close();\n throw err;\n }\n }\n\n /** Open an existing database file. Rejects (without creating a file) when\n * the path does not already exist. */\n static async open(path: string): Promise<Brdb> {\n return Brdb.wrap(\n new (await engine())(path, { fileMustExist: true }),\n false\n );\n }\n\n /** Open an existing database file read-only. Rejects (without creating a\n * file) when the path does not already exist. */\n static async openReadonly(path: string): Promise<Brdb> {\n return Brdb.wrap(\n new (await engine())(path, { readonly: true, fileMustExist: true }),\n false\n );\n }\n\n /** Create a new database file (container schema + initial revision). */\n static async create(path: string): Promise<Brdb> {\n return Brdb.wrap(new (await engine())(path), true);\n }\n\n /** Open the file if it exists, otherwise create it. */\n static async openOrCreate(path: string): Promise<Brdb> {\n const fs = builtin('node:fs');\n if (!fs)\n throw new Error(\n 'brdb: openOrCreate requires node 22.3 or newer; call open or create explicitly'\n );\n return fs.existsSync(path) ? Brdb.open(path) : Brdb.create(path);\n }\n\n /** New in-memory database. */\n static async memory(): Promise<Brdb> {\n return Brdb.wrap(new (await engine())(':memory:'), true);\n }\n\n /** Open a database from serialized bytes. */\n static async fromBytes(bytes: Uint8Array): Promise<Brdb> {\n return Brdb.wrap(new (await engine())(Buffer.from(bytes)), false);\n }\n\n /** Serialize the database to bytes (requires a better-sqlite3 handle). */\n toBytes(): Uint8Array {\n const serialize = (this.db as Partial<SerializableSqlite>).serialize;\n if (typeof serialize !== 'function')\n throw new Error(\n 'brdb: toBytes requires a better-sqlite3 database handle'\n );\n return new Uint8Array(serialize.call(this.db));\n }\n\n /** Write a world save as one revision. */\n save(\n description: string,\n save: WriteBrzInput,\n options: Omit<WriteBrzOptions, 'compress'> & WritePendingOptions = {}\n ): void {\n this.writePending(description, saveToPendingFs(save, options), options);\n }\n\n /** Lazy world reader over this database (same surface as .brz reading).\n * The reader caches decoded metadata (GlobalData, Owners, Bundle/World\n * JSON) for its lifetime; if this Brdb is written to (save/writePending)\n * after the reader is created, construct a fresh worldReader() rather\n * than reusing the old one, or later reads may mix stale cached metadata\n * with newly written chunk data. */\n worldReader(): WorldReader {\n return new WorldReader(this);\n }\n\n sqliteSchema(): string {\n return (this.db.prepare('SELECT sql FROM sqlite_schema').all() as any[])\n .map(r => r.sql)\n .join('\\n');\n }\n\n createRevision(description: string, createdAt: number = now()): number {\n return Number(\n this.db\n .prepare(\n 'INSERT INTO revisions (description, created_at) VALUES (?, ?);'\n )\n .run(description, createdAt).lastInsertRowid\n );\n }\n\n revisions(): BrdbRevision[] {\n return (\n this.db\n .prepare(\n 'SELECT revision_id, description, created_at FROM revisions ORDER BY revision_id;'\n )\n .all() as any[]\n ).map(r => ({\n revisionId: Number(r.revision_id),\n description: String(r.description),\n createdAt: Number(r.created_at),\n }));\n }\n\n insertFolder(\n name: string,\n parentId: number | null,\n createdAt: number\n ): number {\n return Number(\n this.db\n .prepare(\n 'INSERT INTO folders (name, parent_id, created_at) VALUES (?, ?, ?);'\n )\n .run(name, parentId, createdAt).lastInsertRowid\n );\n }\n\n insertFile(\n name: string,\n parentId: number | null,\n contentId: number,\n createdAt: number\n ): number {\n return Number(\n this.db\n .prepare(\n 'INSERT INTO files (name, parent_id, content_id, created_at) VALUES (?, ?, ?, ?);'\n )\n .run(name, parentId, contentId, createdAt).lastInsertRowid\n );\n }\n\n /** Insert a blob (dedup by hash + uncompressed size), compressing when the\n * compressor yields something strictly smaller. */\n insertBlob(\n content: Uint8Array,\n hash: Uint8Array,\n compress: Compressor | null\n ): number {\n const existing = this.findBlobByHash(content.length, hash);\n if (existing) return existing.blobId;\n const sizeUncompressed = content.length;\n let sizeCompressed = sizeUncompressed;\n let compression = 0;\n let stored = content;\n const compressed = compress ? compress(content) : null;\n if (compressed && compressed.length < sizeUncompressed) {\n sizeCompressed = compressed.length;\n compression = 1;\n stored = compressed;\n }\n return Number(\n this.db\n .prepare(\n 'INSERT INTO blobs (compression, size_uncompressed, size_compressed, delta_base_id, hash, content) VALUES (?, ?, ?, ?, ?, ?);'\n )\n .run(\n compression,\n sizeUncompressed,\n sizeCompressed,\n null,\n asBlob(hash),\n asBlob(stored)\n ).lastInsertRowid\n );\n }\n\n findBlobByHash(size: number, hash: Uint8Array): BrdbBlob | null {\n const row = this.db\n .prepare(\n 'SELECT blob_id, compression, size_uncompressed, size_compressed, delta_base_id, hash, content FROM blobs WHERE hash = ? AND size_uncompressed = ? LIMIT 1;'\n )\n .get(asBlob(hash), size);\n return row ? rowToBlob(row) : null;\n }\n\n findBlob(contentId: number): BrdbBlob {\n const row = this.db\n .prepare(\n 'SELECT blob_id, compression, size_uncompressed, size_compressed, delta_base_id, hash, content FROM blobs WHERE blob_id = ?;'\n )\n .get(contentId);\n if (!row) throw new Error(`brdb: blob ${contentId} not found`);\n return rowToBlob(row);\n }\n\n deleteFile(fileId: number, deletedAt: number): void {\n this.db\n .prepare('UPDATE files SET deleted_at = ? WHERE file_id = ?;')\n .run(deletedAt, fileId);\n }\n\n deleteFolder(folderId: number, deletedAt: number): void {\n this.db\n .prepare('UPDATE folders SET deleted_at = ? WHERE folder_id = ?;')\n .run(deletedAt, folderId);\n }\n\n findFolder(parentId: number | null, name: string): number | null {\n const row = this.db\n .prepare(\n `SELECT folder_id FROM folders WHERE parent_id ${\n parentId === null ? 'IS NULL' : '= ?'\n } AND name = ? AND deleted_at IS NULL;`\n )\n .get(...(parentId === null ? [name] : [parentId, name]));\n return row ? Number((row as any).folder_id) : null;\n }\n\n /** Like findFolder, but resolves against the tree as of a revision date\n * instead of the current tree. Used by findFileByPathAtRevision so an\n * ancestor folder that was soft-deleted after `date` does not hide a file\n * that was still live at `date`. */\n findFolderAtRevision(\n parentId: number | null,\n name: string,\n date: number\n ): number | null {\n const row = this.db\n .prepare(\n `SELECT folder_id FROM folders WHERE parent_id ${\n parentId === null ? 'IS NULL' : '= ?'\n } AND name = ? AND created_at <= ? AND (deleted_at IS NULL OR deleted_at > ?) ORDER BY created_at ASC LIMIT 1;`\n )\n .get(\n ...(parentId === null\n ? [name, date, date]\n : [parentId, name, date, date])\n );\n return row ? Number((row as any).folder_id) : null;\n }\n\n findFile(parentId: number | null, name: string): FoundFile | null {\n const row = this.db\n .prepare(\n `SELECT content_id, created_at FROM files WHERE parent_id ${\n parentId === null ? 'IS NULL' : '= ?'\n } AND name = ? AND deleted_at IS NULL;`\n )\n .get(...(parentId === null ? [name] : [parentId, name]));\n return row ? rowToFound(row) : null;\n }\n\n findFileAtRevision(\n parentId: number | null,\n name: string,\n date: number\n ): FoundFile | null {\n const row = this.db\n .prepare(\n `SELECT content_id, created_at FROM files WHERE parent_id ${\n parentId === null ? 'IS NULL' : '= ?'\n } AND name = ? AND created_at <= ? AND (deleted_at IS NULL OR deleted_at > ?) ORDER BY created_at ASC LIMIT 1;`\n )\n .get(\n ...(parentId === null\n ? [name, date, date]\n : [parentId, name, date, date])\n );\n return row ? rowToFound(row) : null;\n }\n\n close(): void {\n this.db.close();\n }\n\n /** Merge a COMPLETE pending tree against the current tree in one\n * transaction: identical files are noops, changed files are soft-deleted\n * and reinserted, and existing entries absent from the pending tree are\n * soft-deleted recursively. */\n writePending(\n description: string,\n pending: PendingEntry[],\n options: WritePendingOptions = {}\n ): void {\n const createdAt = options.createdAt ?? now();\n const compress =\n options.compress === undefined ? this.defaultCompress : options.compress;\n this.db.exec('BEGIN');\n try {\n this.createRevision(description, createdAt);\n this.mergeFolder(null, pending, createdAt, compress);\n this.db.exec('COMMIT');\n } catch (err) {\n // Some SQLite error classes (SQLITE_FULL, SQLITE_IOERR, SQLITE_NOMEM)\n // auto-rollback the transaction before the throw reaches here; an\n // explicit ROLLBACK would then fail with its own unrelated error and\n // mask the original one. Swallow that failure so `err` always wins.\n try {\n this.db.exec('ROLLBACK');\n } catch {\n // transaction already rolled back by SQLite\n }\n throw err;\n }\n }\n\n private currentFolders(\n parentId: number | null\n ): { folderId: number; name: string }[] {\n const stmt = this.db.prepare(\n `SELECT folder_id, name FROM folders WHERE parent_id ${\n parentId === null ? 'IS NULL' : '= ?'\n } AND deleted_at IS NULL ORDER BY name;`\n );\n const rows = (parentId === null ? stmt.all() : stmt.all(parentId)) as any[];\n return rows.map(r => ({\n folderId: Number(r.folder_id),\n name: String(r.name),\n }));\n }\n\n private currentFiles(\n parentId: number | null\n ): { fileId: number; name: string; contentId: number | null }[] {\n const stmt = this.db.prepare(\n `SELECT file_id, name, content_id FROM files WHERE parent_id ${\n parentId === null ? 'IS NULL' : '= ?'\n } AND deleted_at IS NULL ORDER BY name;`\n );\n const rows = (parentId === null ? stmt.all() : stmt.all(parentId)) as any[];\n return rows.map(r => ({\n fileId: Number(r.file_id),\n name: String(r.name),\n contentId: r.content_id === null ? null : Number(r.content_id),\n }));\n }\n\n private mergeFolder(\n parentId: number | null,\n changes: PendingEntry[],\n createdAt: number,\n compress: Compressor | null\n ): void {\n const folders = new Map(\n this.currentFolders(parentId).map(f => [f.name, f.folderId])\n );\n const files = new Map(this.currentFiles(parentId).map(f => [f.name, f]));\n const seen = new Set<string>();\n for (const [name, node] of changes) {\n if (seen.has(name))\n throw new Error(`brdb: duplicate name '${name}' in pending tree`);\n seen.add(name);\n if (node.type === 'folder') {\n if (files.has(name))\n throw new Error(\n `brdb: pending folder '${name}' collides with an existing file`\n );\n const existing = folders.get(name);\n if (existing !== undefined)\n this.mergeFolder(existing, node.children, createdAt, compress);\n else this.insertPending(name, parentId, node, createdAt, compress);\n } else {\n if (folders.has(name))\n throw new Error(\n `brdb: pending file '${name}' collides with an existing folder`\n );\n const existing = files.get(name);\n if (existing === undefined) {\n this.insertPending(name, parentId, node, createdAt, compress);\n continue;\n }\n const hash = blake3(node.content);\n const blob = this.findBlobByHash(node.content.length, hash);\n if (blob && existing.contentId === blob.blobId) continue;\n this.deleteFile(existing.fileId, createdAt);\n const contentId = this.insertBlob(node.content, hash, compress);\n this.insertFile(name, parentId, contentId, createdAt);\n }\n }\n for (const [name, folderId] of folders)\n if (!seen.has(name)) this.deleteFolderRecursive(folderId, createdAt);\n for (const [name, f] of files)\n if (!seen.has(name)) this.deleteFile(f.fileId, createdAt);\n }\n\n private insertPending(\n name: string,\n parentId: number | null,\n node: PendingNode,\n createdAt: number,\n compress: Compressor | null\n ): void {\n if (node.type === 'folder') {\n // The reference writer stamps freshly-inserted folders with the wall\n // clock rather than the revision timestamp; we use the revision\n // timestamp for both (content-equivalent, deterministic under an\n // injected createdAt).\n const folderId = this.insertFolder(name, parentId, createdAt);\n const seen = new Set<string>();\n for (const [childName, child] of node.children) {\n if (seen.has(childName))\n throw new Error(\n `brdb: duplicate name '${childName}' in pending tree`\n );\n seen.add(childName);\n this.insertPending(childName, folderId, child, createdAt, compress);\n }\n } else {\n const contentId = this.insertBlob(\n node.content,\n blake3(node.content),\n compress\n );\n this.insertFile(name, parentId, contentId, createdAt);\n }\n }\n\n private deleteFolderRecursive(folderId: number, deletedAt: number): void {\n this.deleteFolder(folderId, deletedAt);\n for (const child of this.currentFolders(folderId))\n this.deleteFolderRecursive(child.folderId, deletedAt);\n for (const f of this.currentFiles(folderId))\n this.deleteFile(f.fileId, deletedAt);\n }\n\n /** Resolve a folder path. '' is the root. With no date, resolves against\n * the current tree; with a date, resolves each segment against the tree\n * as of that revision (see findFolderAtRevision). */\n private folderIdOf(path: string, date?: number): number | null {\n if (path === '') return null;\n let id: number | null = null;\n for (const part of path.split('/')) {\n // Real crate-written databases stamp a freshly inserted folder with\n // the wall clock mid-transaction, so a folder's created_at can be\n // LATER than the files it contains (the revision/file timestamps are\n // captured once at transaction start). When the at-revision lookup\n // misses for that reason, fall back to the current tree so such an\n // ancestor still resolves; a folder deleted after `date` is still\n // caught by the at-revision branch first.\n const next =\n date === undefined\n ? this.findFolder(id, part)\n : this.findFolderAtRevision(id, part, date) ??\n this.findFolder(id, part);\n if (next === null) return null;\n id = next;\n }\n return id;\n }\n\n findFileByPath(path: string): FoundFile | null {\n if (path.startsWith('/'))\n throw new Error('brdb: absolute paths not allowed');\n const slash = path.lastIndexOf('/');\n const parent = slash === -1 ? '' : path.slice(0, slash);\n const parentId = this.folderIdOf(parent);\n if (parent !== '' && parentId === null) return null;\n return this.findFile(parentId, path.slice(slash + 1));\n }\n\n /** Both folders and the leaf file resolve against the tree as of `date`,\n * so a file is still reachable at a date before an ancestor folder was\n * later soft-deleted. */\n findFileByPathAtRevision(path: string, date: number): FoundFile | null {\n if (path.startsWith('/'))\n throw new Error('brdb: absolute paths not allowed');\n const slash = path.lastIndexOf('/');\n const parent = slash === -1 ? '' : path.slice(0, slash);\n const parentId = this.folderIdOf(parent, date);\n if (parent !== '' && parentId === null) return null;\n return this.findFileAtRevision(parentId, path.slice(slash + 1), date);\n }\n\n childFolders(path: string): string[] {\n const parentId = this.folderIdOf(path);\n if (path !== '' && parentId === null) return [];\n return this.currentFolders(parentId).map(f => f.name);\n }\n\n childFiles(path: string): string[] {\n const parentId = this.folderIdOf(path);\n if (path !== '' && parentId === null) return [];\n return this.currentFiles(parentId).map(f => f.name);\n }\n\n /** Decompressed blob content. Empty files (contentId -1) yield empty\n * bytes, matching the .brz reader's documented deviation. */\n readBlob(contentId: number): Uint8Array {\n if (contentId === -1) return new Uint8Array(0);\n const blob = this.findBlob(contentId);\n if (blob.deltaBaseId !== null)\n throw new Error('brdb: delta blobs are not supported');\n let content = blob.content;\n if (blob.compression === 1)\n content = zstdDecompress(content, new Uint8Array(blob.sizeUncompressed));\n else if (blob.compression !== 0)\n throw new Error(`brdb: unknown blob compression ${blob.compression}`);\n if (content.length !== blob.sizeUncompressed)\n throw new Error('brdb: blob uncompressed size mismatch');\n return content;\n }\n\n readFile(path: string): Uint8Array {\n const found = this.findFileByPath(path);\n if (!found) throw new Error(`brdb: file not found: ${path}`);\n return this.readBlob(found.contentId);\n }\n\n /** The full current tree as a pending tree (folders first, then files,\n * each in name order). */\n toPending(): PendingEntry[] {\n const walk = (parentId: number | null): PendingEntry[] => {\n const out: PendingEntry[] = [];\n for (const f of this.currentFolders(parentId))\n out.push([f.name, { type: 'folder', children: walk(f.folderId) }]);\n for (const f of this.currentFiles(parentId))\n out.push([\n f.name,\n { type: 'file', content: this.readBlob(f.contentId ?? -1) },\n ]);\n return out;\n };\n return walk(null);\n }\n}\n\nconst rowToBlob = (row: any): BrdbBlob => ({\n blobId: Number(row.blob_id),\n compression: Number(row.compression),\n sizeUncompressed: Number(row.size_uncompressed),\n sizeCompressed: Number(row.size_compressed),\n deltaBaseId: row.delta_base_id === null ? null : Number(row.delta_base_id),\n hash: new Uint8Array(row.hash),\n content: new Uint8Array(row.content),\n});\n\nconst rowToFound = (row: any): FoundFile => ({\n contentId: row.content_id === null ? -1 : Number(row.content_id),\n createdAt: Number(row.created_at),\n});\n","export {\n CHUNK_HALF,\n CHUNK_SIZE,\n saveToPendingFs,\n toRelative,\n writeBrzLegacy,\n} from './world';\nexport type {\n BrdbBrickExtras,\n BrdbComponentInput,\n BrdbSaveExtras,\n BrdbWireEndpointInput,\n BrdbWireInput,\n BundleJson,\n WriteBrzInput,\n WriteBrzOptions,\n WriteBrzSave,\n} from './world';\nexport { MAIN_GRID, WorldReader } from './reader';\nexport type {\n BrickChunkRef,\n BrzWorldBrick,\n ChunkCoord,\n ComponentInstance,\n EntityChunkIndex,\n EntityChunkRef,\n EntityRecord,\n FoundFile,\n RemoteWireEndpoint,\n WireChunk,\n WireEndpoint,\n WorldFs,\n} from './reader';\nexport { BrzReader, writeBrzContainer } from './brz';\nexport type { BrzContainerOptions, Compressor } from './brz';\nexport { BrdbSchema, embeddedSchema } from './schema';\nexport type {\n BrdbValue,\n BrdbVariant,\n PropDesc,\n SchemaSource,\n SchemaSourceProp,\n} from './schema';\nexport type { SchemaData } from './schemaText';\nexport type { EmbeddedSchemaName } from './schemas';\nexport { guidToUuid, PUBLIC_GUID, uuidToGuid } from './guid';\nexport type { BrGuid } from './guid';\nexport { file, folder } from './pending';\nexport type { PendingEntry, PendingNode } from './pending';\nexport {\n BASIC_BRICK_ASSETS,\n BRICK_ASSETS,\n isProceduralAsset,\n PROCEDURAL_BRICK_ASSETS,\n} from './catalog';\nexport {\n COMPONENT_STRUCT_DEFAULTS,\n COMPONENT_TYPE_STRUCTS,\n COMPONENT_WIRE_PORTS,\n COMPONENTS,\n ENTITY_TYPE_STRUCTS,\n WIRE_PORT_NAMES,\n} from './componentDb';\nexport type { ComponentPortInfo } from './componentDb';\nexport type * from './componentTypes';\nexport { Brdb, BRDB_SQLITE_SCHEMA } from './brdb';\nexport type {\n BrdbBlob,\n BrdbRevision,\n BrdbSqlite,\n BrdbStatement,\n WritePendingOptions,\n} from './brdb';\n// Low-level building blocks for custom SoA (de)serializers: the packed\n// bit-flag column helpers, the growable byte buffers, and the exact\n// msgpack primitives the format uses (including its encoding deviations).\nexport { bit, BitFlags } from './bits';\nexport { ByteReader, ByteWriter } from './bytes';\nexport * as msgpack from './msgpack';\n","import read from './brs/read';\nimport write from './brs/write';\nimport * as utils from './brs/utils';\nimport * as constants from './brs/constants';\nimport * as types from './brs/types';\nimport * as brdb from './brdb';\nexport * from './brs/types';\n\n// https://i.imgur.com/cv1fDWs.png\nconst brs = { read, write, utils, constants, types, brdb };\nexport { read, write, utils, constants, types, brdb };\nexport { Brdb, WorldReader, writeBrzLegacy } from './brdb';\nexport default brs;\n\nif (typeof window !== 'undefined') {\n (window as any).BRS = brs;\n}\n"],"x_google_ignoreList":[1,16,17,18,19,20,21,22],"mappings":"qgBAEa,EAAQ,IAAI,WAAW,CAAC,GAAI,GAAI,EAAE,CAAC,EAEnC,EAAU,WACV,EAAqB,2tBCJlC,IAAI,EAAU,EACV,EAAW,EACX,EAAS,EACT,EAAY,EAChB,SAAS,EAAO,EAAK,CACpB,IAAI,EAAM,EAAI,OACd,KAAO,EAAE,GAAO,GAAG,EAAI,GAAO,CAC/B,CACA,IAAI,EAAe,EACf,EAAe,EACf,EAAY,EACZ,EAAe,GACf,EAAW,IACX,EAAU,IACV,EAAU,GACV,EAAW,GACX,EAAc,IACd,EAAW,GACX,EAAW,GACX,EAAc,EACd,EAAY,IACZ,EAAU,GACV,EAAY,GACZ,EAAc,GACd,EAAc,IAAI,WAAW,CAChC,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACD,CAAC,EACG,GAAc,IAAI,WAAW,CAChC,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,CAAC,EACG,GAAe,IAAI,WAAW,CACjC,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACD,CAAC,EACG,GAAW,IAAI,WAAW,CAC7B,GACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,GACA,EACA,GACA,EACA,GACA,EACA,GACA,EACA,GACA,EACA,EACD,CAAC,EACG,GAAgB,IAChB,GAAmB,MAAM,IAAM,CAAC,EACpC,EAAO,EAAY,EACnB,IAAI,GAAmB,MAAM,EAAU,CAAC,EACxC,EAAO,EAAY,EACnB,IAAI,GAAiB,MAAM,EAAa,EACxC,EAAO,EAAU,EACjB,IAAI,GAAmB,MAAM,GAAG,EAChC,EAAO,EAAY,EACnB,IAAI,GAAkB,MAAM,CAAY,EACxC,EAAO,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AK,EAAK,IAAW,CAC3B,EAAO,GAAO,EAAO,QAAU,GAAQ,GAAK,GAAM,IAClD,SAAS,KACV,MAAO,GAAI,EAAK,GAAI,CACnB,EAAM,KAAO,GACb,MAAM,GACP,KAAO,CACN,EAAK,IAAM,8BACX,EAAM,KAAO,GACb,MAAM,GACP,CACA,KACD,CACD,OAAS,EAAM,GAAQ,EAAO,GAC9B,EAAM,GAAQ,EACd,GAAO,EACP,GAAQ,GAAO,EACf,IAAS,GAAK,GAAQ,EACtB,EAAK,QAAU,EACf,EAAK,SAAW,EAChB,EAAK,SAAW,EAAM,EAAO,GAAK,EAAO,GAAO,GAAK,EAAM,GAC3D,EAAK,UAAY,EAAO,EAAM,KAAO,EAAM,GAAQ,KAAO,EAAO,GACjE,EAAM,KAAO,EACb,EAAM,KAAO,CACd,CAGA,IAAI,GAAU,GACV,GAAgB,IAChB,GAAiB,IACjB,GAAU,EACV,GAAS,EACT,GAAU,EACV,GAAQ,IAAI,YAAY,CAC3B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,CACD,CAAC,EACG,GAAO,IAAI,WAAW,CACzB,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,EACD,CAAC,EACG,GAAQ,IAAI,YAAY,CAC3B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,EACA,CACD,CAAC,EACG,GAAO,IAAI,WAAW,CACzB,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,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AK,CACxD,CC52BA,IAAa,GAAsD,IAAI,IAAI,CACzE,CACE,yDACA,gDACF,EACA,CACE,sDACA,gDACF,EACA,CACE,sDACA,6CACF,EACA,CACE,mDACA,6CACF,EACA,CACE,6CACA,4CACF,EACA,CACE,8CACA,6CACF,EACA,CACE,0DACA,iDACF,EACA,CACE,uDACA,iDACF,EACA,CACE,4CACA,2CACF,EACA,CACE,kDACA,wCACF,EACA,CACE,qDACA,uCACF,EACA,CACE,qDACA,uCACF,EACA,CAAC,iCAAkC,gCAAgC,EACnE,CACE,8CACA,6CACF,EACA,CACE,mDACA,kDACF,EACA,CACE,iDACA,gDACF,EACA,CACE,4CACA,2CACF,EACA,CACE,kDACA,iDACF,EACA,CACE,gDACA,+CACF,EACA,CACE,2CACA,0CACF,EACA,CACE,2CACA,0CACF,EACA,CACE,yCACA,wCACF,EACA,CACE,8CACA,6CACF,EACA,CACE,mDACA,kDACF,EACA,CACE,yCACA,wCACF,EACA,CACE,mDACA,kDACF,EACA,CACE,oDACA,oDACF,EACA,CACE,qDACA,oDACF,EACA,CACE,mDACA,iDACF,EACA,CACE,sDACA,oDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,iDACA,gDACF,EACA,CACE,uDACA,sDACF,EACA,CACE,oDACA,mDACF,EACA,CACE,iDACA,mDACF,EACA,CACE,iDACA,mDACF,EACA,CACE,iDACA,gDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,2DACA,0DACF,EACA,CACE,oDACA,mDACF,EACA,CACE,qDACA,iDACF,EACA,CACE,wDACA,sDACF,EACA,CACE,qDACA,iDACF,EACA,CACE,mDACA,kDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,iDACA,gDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,2CACA,yCACF,EACA,CACE,gEACA,+DACF,EACA,CACE,iEACA,gEACF,EACA,CACE,gEACA,+DACF,EACA,CACE,+DACA,8DACF,EACA,CACE,qDACA,oDACF,EACA,CACE,wDACA,uDACF,EACA,CACE,gEACA,+DACF,EACA,CACE,wDACA,uDACF,EACA,CACE,wDACA,uDACF,EACA,CACE,gEACA,+DACF,EACA,CACE,iEACA,gEACF,EACA,CACE,gEACA,+DACF,EACA,CACE,+DACA,8DACF,EACA,CACE,gEACA,+DACF,EACA,CACE,uDACA,sDACF,EACA,CACE,gDACA,+CACF,EACA,CACE,2DACA,0DACF,EACA,CACE,8DACA,6DACF,EACA,CACE,6DACA,4DACF,EACA,CACE,yDACA,wDACF,EACA,CACE,2DACA,0DACF,EACA,CACE,6DACA,4DACF,EACA,CACE,uDACA,sDACF,EACA,CACE,qEACA,oEACF,EACA,CACE,6DACA,4DACF,EACA,CACE,+DACA,8DACF,EACA,CACE,iEACA,gEACF,EACA,CACE,0CACA,yCACF,EACA,CACE,+DACA,8DACF,EACA,CACE,uDACA,sDACF,EACA,CACE,8DACA,6DACF,EACA,CACE,6DACA,4DACF,EACA,CACE,uDACA,sDACF,EACA,CACE,+DACA,8DACF,EACA,CACE,uDACA,sDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,uDACA,sDACF,EACA,CACE,4DACA,2DACF,EACA,CACE,8DACA,6DACF,EACA,CACE,qDACA,oDACF,EACA,CACE,+DACA,8DACF,EACA,CACE,6DACA,4DACF,EACA,CACE,uDACA,sDACF,EACA,CACE,+DACA,8DACF,EACA,CACE,uDACA,sDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,uDACA,sDACF,EACA,CACE,oDACA,mDACF,EACA,CACE,kEACA,iEACF,EACA,CACE,oEACA,mEACF,EACA,CACE,kEACA,iDACF,EACA,CACE,sEACA,qEACF,EACA,CACE,6DACA,4DACF,EACA,CACE,iEACA,gEACF,EACA,CACE,qDACA,oDACF,EACA,CACE,2DACA,0DACF,EACA,CACE,qEACA,oEACF,EACA,CACE,yDACA,wDACF,EACA,CACE,uEACA,6DACF,EACA,CACE,2EACA,iEACF,EACA,CACE,wDACA,uDACF,EACA,CACE,iEACA,6DACF,EACA,CACE,qDACA,oDACF,EACA,CACE,qEACA,iEACF,EACA,CACE,2DACA,0DACF,EACA,CACE,sDACA,qDACF,EACA,CACE,oDACA,mDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,mDACA,kDACF,EACA,CACE,2CACA,0CACF,EACA,CACE,0CACA,yCACF,EACA,CACE,2CACA,0CACF,EACA,CACE,0CACA,wCACF,EACA,CACE,4CACA,2CACF,EACA,CACE,kDACA,iDACF,EACA,CACE,4CACA,iDACF,EACA,CACE,+CACA,8CACF,EACA,CACE,oDACA,2CACF,EACA,CACE,gDACA,8CACF,EACA,CACE,+CACA,8CACF,EACA,CACE,+CACA,2CACF,EACA,CACE,8CACA,8CACF,EACA,CACE,qDACA,8CACF,EACA,CACE,sDACA,8CACF,EACA,CACE,+CACA,8CACF,EACA,CACE,yCACA,+CACF,EACA,CACE,+CACA,8CACF,EACA,CACE,iDACA,gDACF,EACA,CACE,+CACA,8CACF,EACA,CACE,iDACA,2CACF,EACA,CACE,mDACA,+CACF,EACA,CACE,0DACA,+CACF,EACA,CACE,gDACA,+CACF,EACA,CACE,uDACA,+CACF,EACA,CACE,oDACA,2CACF,EACA,CACE,4CACA,2CACF,EACA,CACE,wDACA,uDACF,EACA,CACE,iDACA,gDACF,EACA,CACE,0CACA,+CACF,EACA,CACE,mDACA,kDACF,EACA,CACE,+CACA,iDACF,EACA,CACE,gDACA,iDACF,EACA,CACE,+CACA,iDACF,EACA,CACE,+CACA,6CACF,EACA,CACE,8CACA,iDACF,EACA,CACE,+CACA,iDACF,EACA,CACE,8CACA,6CACF,EACA,CACE,iDACA,gDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,mDACA,kDACF,EACA,CACE,iDACA,gDACF,EACA,CACE,+CACA,8CACF,EACA,CACE,4CACA,mEACF,EACA,CACE,6CACA,+CACF,EACA,CACE,8CACA,+CACF,EACA,CACE,4CACA,kFACF,EACA,CACE,6CACA,+CACF,EACA,CACE,8CACA,+CACF,EACA,CACE,6CACA,+CACF,EACA,CACE,8CACA,6CACF,EACA,CACE,8CACA,+CACF,EACA,CACE,8CACA,6CACF,EACA,CACE,8CACA,6CACF,EACA,CACE,4CACA,+CACF,EACA,CACE,6CACA,+CACF,EACA,CACE,yDACA,+CACF,EACA,CACE,+CACA,kFACF,EACA,CACE,+CACA,8CACF,EACA,CACE,4CACA,+CACF,EACA,CACE,2CACA,+CACF,EACA,CACE,gDACA,+CACF,EACA,CACE,4CACA,kFACF,EACA,CACE,4CACA,kFACF,EACA,CACE,+CACA,kFACF,EACA,CACE,sDACA,kFACF,EACA,CACE,iDACA,kFACF,EACA,CACE,+CACA,mDACF,EACA,CACE,4CACA,2CACF,EACA,CACE,yDACA,+CACF,EACA,CACE,6CACA,mEACF,EACA,CACE,4CACA,+CACF,EACA,CACE,6CACA,+CACF,EACA,CACE,6CACA,+CACF,EACA,CACE,iDACA,kFACF,EACA,CACE,4CACA,+CACF,EACA,CACE,6CACA,+CACF,EACA,CACE,gDACA,+CACF,EACA,CACE,qDACA,oDACF,EACA,CACE,gDACA,+CACF,EACA,CACE,mDACA,kDACF,EACA,CACE,sDACA,qDACF,EACA,CACE,8CACA,6CACF,EACA,CACE,oDACA,mDACF,EACA,CACE,iDACA,gDACF,EACA,CACE,wDACA,uDACF,EACA,CACE,0CACA,+CACF,EACA,CACE,2CACA,0CACF,EACA,CACE,+CACA,8CACF,EACA,CACE,mDACA,kDACF,EACA,CACE,oDACA,mDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,gDACA,+CACF,EACA,CACE,uDACA,sDACF,EACA,CACE,oDACA,mDACF,EACA,CACE,oDACA,mDACF,EACA,CACE,gDACA,+CACF,EACA,CACE,sDACA,qDACF,EACA,CACE,kDACA,iDACF,EACA,CACE,oDACA,mDACF,EACA,CACE,uDACA,sDACF,EACA,CACE,mDACA,kDACF,EACA,CACE,iDACA,gDACF,EACA,CACE,sDACA,qDACF,EACA,CACE,qDACA,oDACF,EACA,CACE,mDACA,kDACF,EACA,CACE,mDACA,kDACF,EACA,CACE,gDACA,+CACF,EACA,CACE,yCACA,wCACF,EACA,CACE,oDACA,8CACF,EACA,CACE,gDACA,gDACF,EACA,CACE,uDACA,gDACF,EACA,CACE,kDACA,gDACF,EACA,CACE,iDACA,6CACF,EACA,CACE,wDACA,6CACF,EACA,CACE,iDACA,2CACF,EACA,CACE,6CACA,gDACF,EACA,CACE,mEACA,wDACF,EACA,CACE,gEACA,uDACF,EACA,CACE,mEACA,kDACF,EACA,CACE,mEACA,mDACF,EACA,CACE,iEACA,mDACF,EACA,CACE,2DACA,8CACF,EACA,CACE,6DACA,8CACF,EACA,CACE,0CACA,yCACF,EACA,CACE,6CACA,4CACF,EACA,CACE,6CACA,4CACF,EACA,CACE,qDACA,oDACF,EACA,CACE,iDACA,gDACF,EACA,CACE,+CACA,8CACF,EACA,CACE,mDACA,kDACF,EACA,CACE,4CACA,2CACF,EACA,CACE,yDACA,wDACF,EACA,CAAC,yBAA0B,iCAAiC,EAC5D,CAAC,qBAAsB,6BAA6B,EACpD,CAAC,iCAAkC,yCAAyC,EAC5E,CAAC,mBAAoB,2BAA2B,EAChD,CAAC,uBAAwB,+BAA+B,EACxD,CAAC,mBAAoB,2BAA2B,EAChD,CAAC,qBAAsB,6BAA6B,EACpD,CAAC,oCAAqC,2BAA2B,EACjE,CAAC,2CAA4C,0BAA0B,EACvE,CAAC,oCAAqC,2BAA2B,EACjE,CACE,kCACA,0CACF,EACA,CAAC,6BAA8B,4BAA4B,EAC3D,CAAC,+BAAgC,8BAA8B,EAC/D,CACE,mCACA,8CACF,EACA,CAAC,iCAAkC,gCAAgC,EACnE,CACE,4CACA,2CACF,EACA,CAAC,+BAAgC,uCAAuC,EACxE,CAAC,2BAA4B,0BAA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B,EAC3B,2BAA4B,EAC5B,gCAAiC,EACjC,iCAAkC,EAClC,qCAAsC,CACxC,EACA,eAAgB,CACd,uBAAwB,EACxB,0BAA2B,EAC3B,yBAA0B,EAC1B,gCAAiC,EACjC,+BAAgC,EAChC,0BAA2B,EAC3B,qCAAsC,CACxC,EACA,gBAAiB,CACf,2BAA4B,EAC5B,wBAAyB,EACzB,0BAA2B,EAC3B,8BAA+B,EAC/B,uCAAwC,CAC1C,EACA,yBAA0B,CACxB,uCAAwC,EACxC,8CAA+C,EAC/C,yDAA0D,CAC5D,CACF,EACA,SAAU,CACR,sBAAuB,CACrB,uBACA,sBACA,qBACA,uBACA,uBACA,wBACA,qBACA,uBACA,4BACA,2BACF,EACA,0BAA2B,CACzB,qCACA,gCACA,6CACA,oCACA,oCACA,qCACA,qCACA,mCACA,uCACA,wCACA,mCACA,8CACA,gDACA,iDACA,0CACA,mCACF,EACA,qBAAsB,CACpB,kBACA,aACA,iBACA,0BACA,iBACA,iBACA,kBACA,kBACA,gBACA,oBACA,qBACA,gBACA,2BACA,6BACA,8BACA,sBACF,EACA,yBAA0B,CACxB,MACA,MACA,SACA,UACA,OACA,aACF,EACA,iBAAkB,CAChB,MACA,MACA,OACA,cACA,gBACA,SACA,UACA,OACA,MACA,cACA,sBACF,CACF,EACA,QAAS,CACP,gCAAiC,CAC/B,SAAU,OACV,gBAAiB,SACjB,iBAAkB,MAClB,gBAAiB,MACjB,YAAa,MACb,YAAa,MACb,gBAAiB,OACjB,aAAc,MACd,gBAAiB,MACjB,0BAA2B,KAC7B,EACA,2BAA4B,CAC1B,YAAa,OACb,WAAY,MACZ,sBAAuB,OACvB,UAAW,OACX,QAAS,KACX,EACA,0BAA2B,CACzB,WAAY,SACZ,aAAc,SACd,wBAAyB,OACzB,mBAAoB,OACpB,kBAAmB,KACrB,EACA,8BAA+B,CAC7B,4BAA6B,MAC/B,EACA,0BAA2B,CACzB,OAAQ,MACR,YAAa,MACb,QAAS,MACT,WAAY,KACd,EACA,4BAA6B,CAC3B,cAAe,SACf,QAAS,MACT,WAAY,MACZ,wBAAyB,OACzB,mB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"}
|