UNPKG

@jsprismarine/nbt

Version:
152 lines (145 loc) • 20.4 kB
'use strict'; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } }); const fs = require('node:fs'); const BinaryStream = require('@jsprismarine/jsbinaryutils'); const NBTReader = require('./NBTReader.cjs.cjs'); const NBTWriter = require('./NBTWriter.cjs.cjs'); const types_ByteVal = require('./types/ByteVal.cjs.cjs'); const types_DoubleVal = require('./types/DoubleVal.cjs.cjs'); const types_FloatVal = require('./types/FloatVal.cjs.cjs'); const types_LongVal = require('./types/LongVal.cjs.cjs'); const types_NumberVal = require('./types/NumberVal.cjs.cjs'); const types_ShortVal = require('./types/ShortVal.cjs.cjs'); const types_StringVal = require('./types/StringVal.cjs.cjs'); const _interopDefault = e => e && e.__esModule ? e : { default: e }; const fs__default = /*#__PURE__*/_interopDefault(fs); const BinaryStream__default = /*#__PURE__*/_interopDefault(BinaryStream); class NBTTagCompound { name; children = /* @__PURE__ */ new Map(); static readFromFile(path, byteOrder) { return NBTTagCompound.readFromStream(new BinaryStream__default.default(fs__default.default.readFileSync(path)), byteOrder); } static readFromStream(input, byteOrder, varints = false) { const reader = new NBTReader.default(input, byteOrder); reader.setUseVarint(varints); return reader.parse(); } constructor(name = null) { this.name = name; } setName(name) { this.name = name; } getName() { return this.name; } addValue(name, value) { if (value instanceof NBTTagCompound && name !== value.getName()) { throw new Error(`Failed to add NBTTagCompound with name ${value.getName()} given name ${name}`); } this.children.set(name, value); } addChild(tag) { this.children.set(tag.getName(), tag); } getList(name, insert) { if (this.children.has(name)) { return this.children.get(name); } if (insert) { const backingList = /* @__PURE__ */ new Set(); this.addValue(name, backingList); return backingList; } return null; } getCompound(name, insert) { if (this.children.has(name)) { return this.children.get(name); } if (insert) { const compound = new NBTTagCompound(); this.addValue(name, compound); return compound; } return null; } writeToStream(out, byteOrder, varints = false) { const writer = new NBTWriter.default(out, byteOrder); writer.setUseVarint(varints); writer.writeCompound(this); } getByte(name, defaultValue) { return this.children.has(name) ? this.children.get(name).getValue() : defaultValue; } getShort(name, defaultValue) { return this.children.has(name) ? this.children.get(name).getValue() : defaultValue; } getNumber(name, defaultValue) { return this.children.has(name) ? this.children.get(name).getValue() : defaultValue; } getLong(name, defaultValue) { return this.children.has(name) ? this.children.get(name).getValue() : defaultValue; } getFloat(name, defaultValue) { return this.children.has(name) ? this.children.get(name).getValue() : defaultValue; } getDouble(name, defaultValue) { return this.children.has(name) ? this.children.get(name).getValue() : defaultValue; } getString(name, defaultValue) { return this.children.has(name) ? this.children.get(name).getValue() : defaultValue; } remove(key) { return this.children.delete(key); } entries() { return this.children.entries(); } has(key) { return this.children.has(key); } size() { return this.children.size; } // Thanks stackoverflow! https://stackoverflow.com/questions/35948335/how-can-i-check-if-two-map-objects-are-equal equals(that) { if (this.children.size !== that.children.size) { return false; } for (const [key, val] of this.children) { const testVal = that.children.get(key); if (testVal === void 0 && !that.children.has(key)) { return false; } if (val instanceof NBTTagCompound && testVal instanceof NBTTagCompound && !val.equals(testVal)) { return false; } if (val instanceof types_ByteVal.default && testVal instanceof types_ByteVal.default && val.getValue() !== testVal.getValue()) { return false; } if (val instanceof types_DoubleVal.default && testVal instanceof types_DoubleVal.default && val.getValue() !== testVal.getValue()) { return false; } if (val instanceof types_FloatVal.default && testVal instanceof types_FloatVal.default && val.getValue() !== testVal.getValue()) { return false; } if (val instanceof types_LongVal.default && testVal instanceof types_LongVal.default && val.getValue() !== testVal.getValue()) { return false; } if (val instanceof types_NumberVal.default && testVal instanceof types_NumberVal.default && val.getValue() !== testVal.getValue()) { return false; } if (val instanceof types_ShortVal.default && testVal instanceof types_ShortVal.default && val.getValue() !== testVal.getValue()) { return false; } if (val instanceof types_StringVal.default && testVal instanceof types_StringVal.default && val.getValue() !== testVal.getValue()) { return false; } } return true; } } exports.default = NBTTagCompound; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTkJUVGFnQ29tcG91bmQuY2pzLmNqcyIsInNvdXJjZXMiOlsiLi4vc3JjL05CVFRhZ0NvbXBvdW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcblxuaW1wb3J0IEJpbmFyeVN0cmVhbSBmcm9tICdAanNwcmlzbWFyaW5lL2pzYmluYXJ5dXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBCeXRlT3JkZXIgfSBmcm9tICcuL0J5dGVPcmRlcic7XG5pbXBvcnQgTkJUUmVhZGVyIGZyb20gJy4vTkJUUmVhZGVyJztcbmltcG9ydCBOQlRXcml0ZXIgZnJvbSAnLi9OQlRXcml0ZXInO1xuaW1wb3J0IEJ5dGVWYWwgZnJvbSAnLi90eXBlcy9CeXRlVmFsJztcbmltcG9ydCBEb3VibGVWYWwgZnJvbSAnLi90eXBlcy9Eb3VibGVWYWwnO1xuaW1wb3J0IEZsb2F0VmFsIGZyb20gJy4vdHlwZXMvRmxvYXRWYWwnO1xuaW1wb3J0IExvbmdWYWwgZnJvbSAnLi90eXBlcy9Mb25nVmFsJztcbmltcG9ydCBOdW1iZXJWYWwgZnJvbSAnLi90eXBlcy9OdW1iZXJWYWwnO1xuaW1wb3J0IFNob3J0VmFsIGZyb20gJy4vdHlwZXMvU2hvcnRWYWwnO1xuaW1wb3J0IFN0cmluZ1ZhbCBmcm9tICcuL3R5cGVzL1N0cmluZ1ZhbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5CVFRhZ0NvbXBvdW5kIHtcbiAgICBwcml2YXRlIG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgcHVibGljIHJlYWRvbmx5IGNoaWxkcmVuOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xuXG4gICAgcHVibGljIHN0YXRpYyByZWFkRnJvbUZpbGUocGF0aDogc3RyaW5nLCBieXRlT3JkZXI6IEJ5dGVPcmRlcik6IE5CVFRhZ0NvbXBvdW5kIHtcbiAgICAgICAgcmV0dXJuIE5CVFRhZ0NvbXBvdW5kLnJlYWRGcm9tU3RyZWFtKG5ldyBCaW5hcnlTdHJlYW0oZnMucmVhZEZpbGVTeW5jKHBhdGgpKSwgYnl0ZU9yZGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRGcm9tU3RyZWFtKGlucHV0OiBCaW5hcnlTdHJlYW0sIGJ5dGVPcmRlcjogQnl0ZU9yZGVyLCB2YXJpbnRzID0gZmFsc2UpOiBOQlRUYWdDb21wb3VuZCB7XG4gICAgICAgIGNvbnN0IHJlYWRlcjogTkJUUmVhZGVyID0gbmV3IE5CVFJlYWRlcihpbnB1dCwgYnl0ZU9yZGVyKTtcbiAgICAgICAgcmVhZGVyLnNldFVzZVZhcmludCh2YXJpbnRzKTtcbiAgICAgICAgcmV0dXJuIHJlYWRlci5wYXJzZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXROYW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTkJUVGFnQ29tcG91bmQgJiYgbmFtZSAhPT0gdmFsdWUuZ2V0TmFtZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBhZGQgTkJUVGFnQ29tcG91bmQgd2l0aCBuYW1lICR7dmFsdWUuZ2V0TmFtZSgpfSBnaXZlbiBuYW1lICR7bmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc2V0KG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ2hpbGQodGFnOiBOQlRUYWdDb21wb3VuZCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoaWxkcmVuLnNldCh0YWcuZ2V0TmFtZSgpISwgdGFnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGlzdChuYW1lOiBzdHJpbmcsIGluc2VydDogYm9vbGVhbik6IFNldDxhbnk+IHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc2VydCkge1xuICAgICAgICAgICAgY29uc3QgYmFja2luZ0xpc3Q6IFNldDxhbnk+ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgdGhpcy5hZGRWYWx1ZShuYW1lLCBiYWNraW5nTGlzdCk7XG4gICAgICAgICAgICByZXR1cm4gYmFja2luZ0xpc3Q7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29tcG91bmQobmFtZTogc3RyaW5nLCBpbnNlcnQ6IGJvb2xlYW4pOiBOQlRUYWdDb21wb3VuZCB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmdldChuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnNlcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvdW5kOiBOQlRUYWdDb21wb3VuZCA9IG5ldyBOQlRUYWdDb21wb3VuZCgpO1xuICAgICAgICAgICAgdGhpcy5hZGRWYWx1ZShuYW1lLCBjb21wb3VuZCk7XG4gICAgICAgICAgICByZXR1cm4gY29tcG91bmQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVUb1N0cmVhbShvdXQ6IEJpbmFyeVN0cmVhbSwgYnl0ZU9yZGVyOiBCeXRlT3JkZXIsIHZhcmludHMgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB3cml0ZXI6IE5CVFdyaXRlciA9IG5ldyBOQlRXcml0ZXIob3V0LCBieXRlT3JkZXIpO1xuICAgICAgICB3cml0ZXIuc2V0VXNlVmFyaW50KHZhcmludHMpO1xuICAgICAgICB3cml0ZXIud3JpdGVDb21wb3VuZCh0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Qnl0ZShuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uaGFzKG5hbWUpID8gKHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpIGFzIEJ5dGVWYWwpLmdldFZhbHVlKCkgOiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNob3J0KG5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5oYXMobmFtZSkgPyAodGhpcy5jaGlsZHJlbi5nZXQobmFtZSkgYXMgU2hvcnRWYWwpLmdldFZhbHVlKCkgOiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE51bWJlcihuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uaGFzKG5hbWUpID8gKHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpIGFzIE51bWJlclZhbCkuZ2V0VmFsdWUoKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TG9uZyhuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogYmlnaW50KTogYmlnaW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uaGFzKG5hbWUpID8gKHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpIGFzIExvbmdWYWwpLmdldFZhbHVlKCkgOiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZsb2F0KG5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5oYXMobmFtZSkgPyAodGhpcy5jaGlsZHJlbi5nZXQobmFtZSkgYXMgRmxvYXRWYWwpLmdldFZhbHVlKCkgOiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERvdWJsZShuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uaGFzKG5hbWUpID8gKHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpIGFzIERvdWJsZVZhbCkuZ2V0VmFsdWUoKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U3RyaW5nKG5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5oYXMobmFtZSkgPyAodGhpcy5jaGlsZHJlbi5nZXQobmFtZSkgYXMgU3RyaW5nVmFsKS5nZXRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZGVsZXRlKGtleSk7XG4gICAgfVxuXG4gICAgcHVibGljIGVudHJpZXMoKTogSXRlcmFibGVJdGVyYXRvcjxbc3RyaW5nLCBhbnldPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmVudHJpZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhrZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaXplKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLnNpemU7XG4gICAgfVxuXG4gICAgLy8gVGhhbmtzIHN0YWNrb3ZlcmZsb3chIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1OTQ4MzM1L2hvdy1jYW4taS1jaGVjay1pZi10d28tbWFwLW9iamVjdHMtYXJlLWVxdWFsXG4gICAgcHVibGljIGVxdWFscyh0aGF0OiBOQlRUYWdDb21wb3VuZCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5zaXplICE9PSB0aGF0LmNoaWxkcmVuLnNpemUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0VmFsID0gdGhhdC5jaGlsZHJlbi5nZXQoa2V5KTtcblxuICAgICAgICAgICAgaWYgKHRlc3RWYWwgPT09IHVuZGVmaW5lZCAmJiAhdGhhdC5jaGlsZHJlbi5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIE5CVFRhZ0NvbXBvdW5kICYmIHRlc3RWYWwgaW5zdGFuY2VvZiBOQlRUYWdDb21wb3VuZCAmJiAhdmFsLmVxdWFscyh0ZXN0VmFsKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIEJ5dGVWYWwgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIEJ5dGVWYWwgJiYgdmFsLmdldFZhbHVlKCkgIT09IHRlc3RWYWwuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIERvdWJsZVZhbCAmJiB0ZXN0VmFsIGluc3RhbmNlb2YgRG91YmxlVmFsICYmIHZhbC5nZXRWYWx1ZSgpICE9PSB0ZXN0VmFsLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBGbG9hdFZhbCAmJiB0ZXN0VmFsIGluc3RhbmNlb2YgRmxvYXRWYWwgJiYgdmFsLmdldFZhbHVlKCkgIT09IHRlc3RWYWwuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIExvbmdWYWwgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIExvbmdWYWwgJiYgdmFsLmdldFZhbHVlKCkgIT09IHRlc3RWYWwuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIE51bWJlclZhbCAmJiB0ZXN0VmFsIGluc3RhbmNlb2YgTnVtYmVyVmFsICYmIHZhbC5nZXRWYWx1ZSgpICE9PSB0ZXN0VmFsLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBTaG9ydFZhbCAmJiB0ZXN0VmFsIGluc3RhbmNlb2YgU2hvcnRWYWwgJiYgdmFsLmdldFZhbHVlKCkgIT09IHRlc3RWYWwuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIFN0cmluZ1ZhbCAmJiB0ZXN0VmFsIGluc3RhbmNlb2YgU3RyaW5nVmFsICYmIHZhbC5nZXRWYWx1ZSgpICE9PSB0ZXN0VmFsLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4iXSwibmFtZXMiOlsiQmluYXJ5U3RyZWFtIiwiZnMiLCJOQlRSZWFkZXIiLCJOQlRXcml0ZXIiLCJCeXRlVmFsIiwiRG91YmxlVmFsIiwiRmxvYXRWYWwiLCJMb25nVmFsIiwiTnVtYmVyVmFsIiwiU2hvcnRWYWwiLCJTdHJpbmdWYWwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLE1BQXFCLGNBQWUsQ0FBQTtBQUFBLEVBQ3hCLElBQUE7QUFBQSxFQUNRLFFBQUEsdUJBQWlDLEdBQUksRUFBQTtBQUFBLEVBRXJELE9BQWMsWUFBYSxDQUFBLElBQUEsRUFBYyxTQUFzQyxFQUFBO0FBQzNFLElBQU8sT0FBQSxjQUFBLENBQWUsZUFBZSxJQUFJQSw2QkFBQSxDQUFhQyxvQkFBRyxZQUFhLENBQUEsSUFBSSxDQUFDLENBQUEsRUFBRyxTQUFTLENBQUE7QUFBQTtBQUMzRixFQUVBLE9BQWMsY0FBQSxDQUFlLEtBQXFCLEVBQUEsU0FBQSxFQUFzQixVQUFVLEtBQXVCLEVBQUE7QUFDckcsSUFBQSxNQUFNLE1BQW9CLEdBQUEsSUFBSUMsaUJBQVUsQ0FBQSxLQUFBLEVBQU8sU0FBUyxDQUFBO0FBQ3hELElBQUEsTUFBQSxDQUFPLGFBQWEsT0FBTyxDQUFBO0FBQzNCLElBQUEsT0FBTyxPQUFPLEtBQU0sRUFBQTtBQUFBO0FBQ3hCLEVBRU8sV0FBQSxDQUFZLE9BQXNCLElBQU0sRUFBQTtBQUMzQyxJQUFBLElBQUEsQ0FBSyxJQUFPLEdBQUEsSUFBQTtBQUFBO0FBQ2hCLEVBRU8sUUFBUSxJQUFvQixFQUFBO0FBQy9CLElBQUEsSUFBQSxDQUFLLElBQU8sR0FBQSxJQUFBO0FBQUE7QUFDaEIsRUFFTyxPQUF5QixHQUFBO0FBQzVCLElBQUEsT0FBTyxJQUFLLENBQUEsSUFBQTtBQUFBO0FBQ2hCLEVBRU8sUUFBQSxDQUFTLE1BQWMsS0FBa0IsRUFBQTtBQUM1QyxJQUFBLElBQUksS0FBaUIsWUFBQSxj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