UNPKG

@jsprismarine/nbt

Version:
124 lines (123 loc) • 17.6 kB
"use strict"; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); const require_runtime = require("./_virtual/_rolldown/runtime.cjs.cjs"); const require_types_ByteVal = require("./types/ByteVal.cjs.cjs"); const require_types_DoubleVal = require("./types/DoubleVal.cjs.cjs"); const require_types_FloatVal = require("./types/FloatVal.cjs.cjs"); const require_types_LongVal = require("./types/LongVal.cjs.cjs"); const require_types_NumberVal = require("./types/NumberVal.cjs.cjs"); const require_types_ShortVal = require("./types/ShortVal.cjs.cjs"); const require_types_StringVal = require("./types/StringVal.cjs.cjs"); const require_NBTWriter = require("./NBTWriter.cjs.cjs"); const require_NBTReader = require("./NBTReader.cjs.cjs"); let node_fs = require("node:fs"); node_fs = require_runtime.__toESM(node_fs, 1); let _jsprismarine_jsbinaryutils = require("@jsprismarine/jsbinaryutils"); _jsprismarine_jsbinaryutils = require_runtime.__toESM(_jsprismarine_jsbinaryutils, 1); //#region src/NBTTagCompound.ts var NBTTagCompound = class NBTTagCompound { name; children = /* @__PURE__ */ new Map(); static readFromFile(path, byteOrder) { return NBTTagCompound.readFromStream(new _jsprismarine_jsbinaryutils.default(node_fs.default.readFileSync(path)), byteOrder); } static readFromStream(input, byteOrder, varints = false) { const reader = new require_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 require_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; } 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 require_types_ByteVal.default && testVal instanceof require_types_ByteVal.default && val.getValue() !== testVal.getValue()) return false; if (val instanceof require_types_DoubleVal.default && testVal instanceof require_types_DoubleVal.default && val.getValue() !== testVal.getValue()) return false; if (val instanceof require_types_FloatVal.default && testVal instanceof require_types_FloatVal.default && val.getValue() !== testVal.getValue()) return false; if (val instanceof require_types_LongVal.default && testVal instanceof require_types_LongVal.default && val.getValue() !== testVal.getValue()) return false; if (val instanceof require_types_NumberVal.default && testVal instanceof require_types_NumberVal.default && val.getValue() !== testVal.getValue()) return false; if (val instanceof require_types_ShortVal.default && testVal instanceof require_types_ShortVal.default && val.getValue() !== testVal.getValue()) return false; if (val instanceof require_types_StringVal.default && testVal instanceof require_types_StringVal.default && val.getValue() !== testVal.getValue()) return false; } return true; } }; //#endregion exports.default = NBTTagCompound; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTkJUVGFnQ29tcG91bmQuY2pzLmNqcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi9zcmMvTkJUVGFnQ29tcG91bmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnO1xuXG5pbXBvcnQgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgdHlwZSB7IEJ5dGVPcmRlciB9IGZyb20gJy4vQnl0ZU9yZGVyJztcbmltcG9ydCBOQlRSZWFkZXIgZnJvbSAnLi9OQlRSZWFkZXInO1xuaW1wb3J0IE5CVFdyaXRlciBmcm9tICcuL05CVFdyaXRlcic7XG5pbXBvcnQgQnl0ZVZhbCBmcm9tICcuL3R5cGVzL0J5dGVWYWwnO1xuaW1wb3J0IERvdWJsZVZhbCBmcm9tICcuL3R5cGVzL0RvdWJsZVZhbCc7XG5pbXBvcnQgRmxvYXRWYWwgZnJvbSAnLi90eXBlcy9GbG9hdFZhbCc7XG5pbXBvcnQgTG9uZ1ZhbCBmcm9tICcuL3R5cGVzL0xvbmdWYWwnO1xuaW1wb3J0IE51bWJlclZhbCBmcm9tICcuL3R5cGVzL051bWJlclZhbCc7XG5pbXBvcnQgU2hvcnRWYWwgZnJvbSAnLi90eXBlcy9TaG9ydFZhbCc7XG5pbXBvcnQgU3RyaW5nVmFsIGZyb20gJy4vdHlwZXMvU3RyaW5nVmFsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkJUVGFnQ29tcG91bmQge1xuICAgIHByaXZhdGUgbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2hpbGRyZW46IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRGcm9tRmlsZShwYXRoOiBzdHJpbmcsIGJ5dGVPcmRlcjogQnl0ZU9yZGVyKTogTkJUVGFnQ29tcG91bmQge1xuICAgICAgICByZXR1cm4gTkJUVGFnQ29tcG91bmQucmVhZEZyb21TdHJlYW0obmV3IEJpbmFyeVN0cmVhbShmcy5yZWFkRmlsZVN5bmMocGF0aCkpLCBieXRlT3JkZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZEZyb21TdHJlYW0oaW5wdXQ6IEJpbmFyeVN0cmVhbSwgYnl0ZU9yZGVyOiBCeXRlT3JkZXIsIHZhcmludHMgPSBmYWxzZSk6IE5CVFRhZ0NvbXBvdW5kIHtcbiAgICAgICAgY29uc3QgcmVhZGVyOiBOQlRSZWFkZXIgPSBuZXcgTkJUUmVhZGVyKGlucHV0LCBieXRlT3JkZXIpO1xuICAgICAgICByZWFkZXIuc2V0VXNlVmFyaW50KHZhcmludHMpO1xuICAgICAgICByZXR1cm4gcmVhZGVyLnBhcnNlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldE5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE5hbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBOQlRUYWdDb21wb3VuZCAmJiBuYW1lICE9PSB2YWx1ZS5nZXROYW1lKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGFkZCBOQlRUYWdDb21wb3VuZCB3aXRoIG5hbWUgJHt2YWx1ZS5nZXROYW1lKCl9IGdpdmVuIG5hbWUgJHtuYW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zZXQobmFtZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDaGlsZCh0YWc6IE5CVFRhZ0NvbXBvdW5kKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc2V0KHRhZy5nZXROYW1lKCkhLCB0YWcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRMaXN0KG5hbWU6IHN0cmluZywgaW5zZXJ0OiBib29sZWFuKTogU2V0PGFueT4gfCBudWxsIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4uaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5nZXQobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5zZXJ0KSB7XG4gICAgICAgICAgICBjb25zdCBiYWNraW5nTGlzdDogU2V0PGFueT4gPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICB0aGlzLmFkZFZhbHVlKG5hbWUsIGJhY2tpbmdMaXN0KTtcbiAgICAgICAgICAgIHJldHVybiBiYWNraW5nTGlzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb21wb3VuZChuYW1lOiBzdHJpbmcsIGluc2VydDogYm9vbGVhbik6IE5CVFRhZ0NvbXBvdW5kIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc2VydCkge1xuICAgICAgICAgICAgY29uc3QgY29tcG91bmQ6IE5CVFRhZ0NvbXBvdW5kID0gbmV3IE5CVFRhZ0NvbXBvdW5kKCk7XG4gICAgICAgICAgICB0aGlzLmFkZFZhbHVlKG5hbWUsIGNvbXBvdW5kKTtcbiAgICAgICAgICAgIHJldHVybiBjb21wb3VuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVRvU3RyZWFtKG91dDogQmluYXJ5U3RyZWFtLCBieXRlT3JkZXI6IEJ5dGVPcmRlciwgdmFyaW50cyA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHdyaXRlcjogTkJUV3JpdGVyID0gbmV3IE5CVFdyaXRlcihvdXQsIGJ5dGVPcmRlcik7XG4gICAgICAgIHdyaXRlci5zZXRVc2VWYXJpbnQodmFyaW50cyk7XG4gICAgICAgIHdyaXRlci53cml0ZUNvbXBvdW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCeXRlKG5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5oYXMobmFtZSkgPyAodGhpcy5jaGlsZHJlbi5nZXQobmFtZSkgYXMgQnl0ZVZhbCkuZ2V0VmFsdWUoKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2hvcnQobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBTaG9ydFZhbCkuZ2V0VmFsdWUoKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TnVtYmVyKG5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5oYXMobmFtZSkgPyAodGhpcy5jaGlsZHJlbi5nZXQobmFtZSkgYXMgTnVtYmVyVmFsKS5nZXRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRMb25nKG5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5oYXMobmFtZSkgPyAodGhpcy5jaGlsZHJlbi5nZXQobmFtZSkgYXMgTG9uZ1ZhbCkuZ2V0VmFsdWUoKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmxvYXQobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBGbG9hdFZhbCkuZ2V0VmFsdWUoKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RG91YmxlKG5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5oYXMobmFtZSkgPyAodGhpcy5jaGlsZHJlbi5nZXQobmFtZSkgYXMgRG91YmxlVmFsKS5nZXRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTdHJpbmcobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBTdHJpbmdWYWwpLmdldFZhbHVlKCkgOiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5kZWxldGUoa2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW50cmllcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFtzdHJpbmcsIGFueV0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZW50cmllcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uaGFzKGtleSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uc2l6ZTtcbiAgICB9XG5cbiAgICAvLyBUaGFua3Mgc3RhY2tvdmVyZmxvdyEgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU5NDgzMzUvaG93LWNhbi1pLWNoZWNrLWlmLXR3by1tYXAtb2JqZWN0cy1hcmUtZXF1YWxcbiAgICBwdWJsaWMgZXF1YWxzKHRoYXQ6IE5CVFRhZ0NvbXBvdW5kKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLnNpemUgIT09IHRoYXQuY2hpbGRyZW4uc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RWYWwgPSB0aGF0LmNoaWxkcmVuLmdldChrZXkpO1xuXG4gICAgICAgICAgICBpZiAodGVzdFZhbCA9PT0gdW5kZWZpbmVkICYmICF0aGF0LmNoaWxkcmVuLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgTkJUVGFnQ29tcG91bmQgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIE5CVFRhZ0NvbXBvdW5kICYmICF2YWwuZXF1YWxzKHRlc3RWYWwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgQnl0ZVZhbCAmJiB0ZXN0VmFsIGluc3RhbmNlb2YgQnl0ZVZhbCAmJiB2YWwuZ2V0VmFsdWUoKSAhPT0gdGVzdFZhbC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgRG91YmxlVmFsICYmIHRlc3RWYWwgaW5zdGFuY2VvZiBEb3VibGVWYWwgJiYgdmFsLmdldFZhbHVlKCkgIT09IHRlc3RWYWwuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIEZsb2F0VmFsICYmIHRlc3RWYWwgaW5zdGFuY2VvZiBGbG9hdFZhbCAmJiB2YWwuZ2V0VmFsdWUoKSAhPT0gdGVzdFZhbC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgTG9uZ1ZhbCAmJiB0ZXN0VmFsIGluc3RhbmNlb2YgTG9uZ1ZhbCAmJiB2YWwuZ2V0VmFsdWUoKSAhPT0gdGVzdFZhbC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgTnVtYmVyVmFsICYmIHRlc3RWYWwgaW5zdGFuY2VvZiBOdW1iZXJWYWwgJiYgdmFsLmdldFZhbHVlKCkgIT09IHRlc3RWYWwuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIFNob3J0VmFsICYmIHRlc3RWYWwgaW5zdGFuY2VvZiBTaG9ydFZhbCAmJiB2YWwuZ2V0VmFsdWUoKSAhPT0gdGVzdFZhbC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgU3RyaW5nVmFsICYmIHRlc3RWYWwgaW5zdGFuY2VvZiBTdHJpbmdWYWwgJiYgdmFsLmdldFZhbHVlKCkgIT09IHRlc3RWYWwuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQSxJQUFxQixpQkFBckIsTUFBcUIsZUFBZTtDQUNoQztDQUNBLDJCQUE2QyxJQUFJLElBQUk7Q0FFckQsT0FBYyxhQUFhLE1BQWMsV0FBc0M7RUFDM0UsT0FBTyxlQUFlLGVBQWUsSUFBSSw0QkFBQSxRQUFhLFFBQUEsUUFBRyxhQUFhLElBQUksQ0FBQyxHQUFHLFNBQVM7Q0FDM0Y7Q0FFQSxPQUFjLGVBQWUsT0FBcUIsV0FBc0IsVUFBVSxPQUF1QjtFQUNyRyxNQUFNLFNBQW9CLElBQUksa0JBQUEsUUFBVSxPQUFPLFNBQVM7RUFDeEQsT0FBTyxhQUFhLE9BQU87RUFDM0IsT0FBTyxPQUFPLE1BQU07Q0FDeEI7Q0FFQSxZQUFtQixPQUFzQixNQUFNO0VBQzNDLEtBQUssT0FBTztDQUNoQjtDQUVBLFFBQWUsTUFBb0I7RUFDL0IsS0FBSyxPQUFPO0NBQ2hCO0NBRUEsVUFBZ0M7RUFDNUIsT0FBTyxLQUFLO0NBQ2hCO0NBRUEsU0FBZ0IsTUFBYyxPQUFrQjtFQUM1QyxJQUFJLGlCQUFpQixrQkFBa0IsU0FBUyxNQUFNLFFBQVEsR0FDMUQsTUFBTSxJQUFJLE1BQU0sMENBQTBDLE1BQU0sUUFBUSxFQUFFLGNBQWMsTUFBTTtFQUdsRyxLQUFLLFNBQVMsSUFBSSxNQUFNLEtBQUs7Q0FDakM7Q0FFQSxTQUFnQixLQUEyQjtFQUN2QyxLQUFLLFNBQVMsSUFBSSxJQUFJLFFBQVEsR0FBSSxHQUFHO0NBQ3pDO0NBRUEsUUFBZSxNQUFjLFFBQWtDO0VBQzNELElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxHQUN0QixPQUFPLEtBQUssU0FBUyxJQUFJLElBQUk7RUFHakMsSUFBSSxRQUFRO0dBQ1IsTUFBTSw4QkFBd0IsSUFBSSxJQUFJO0dBQ3RDLEtBQUssU0FBUyxNQUFNLFdBQVc7R0FDL0IsT0FBTztFQUNYO0VBRUEsT0FBTztDQUNYO0NBRUEsWUFBbUIsTUFBYyxRQUF3QztFQUNyRSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksR0FDdEIsT0FBTyxLQUFLLFNBQVMsSUFBSSxJQUFJO0VBR2pDLElBQUksUUFBUTtHQUNSLE1BQU0sV0FBMkIsSUFBSSxlQUFlO0dBQ3BELEtBQUssU0FBUyxNQUFNLFFBQVE7R0FDNUIsT0FBTztFQUNYO0VBRUEsT0FBTztDQUNYO0NBRUEsY0FBcUIsS0FBbUIsV0FBc0IsVUFBVSxPQUFhO0VBQ2pGLE1BQU0sU0FBb0IsSUFBSSxrQkFBQSxRQUFVLEtBQUssU0FBUztFQUN0RCxPQUFPLGFBQWEsT0FBTztFQUMzQixPQUFPLGNBQWMsSUFBSTtDQUM3QjtDQUVBLFFBQWUsTUFBYyxjQUE4QjtFQUN2RCxPQUFPLEtBQUssU0FBUyxJQUFJLElBQUksSUFBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLEVBQWMsU0FBUyxJQUFJO0NBQ3ZGO0NBRUEsU0FBZ0IsTUFBYyxjQUE4QjtFQUN4RCxPQUFPLEtBQUssU0FBUyxJQUFJLElBQUksSUFBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLEVBQWUsU0FBUyxJQUFJO0NBQ3hGO0NBRUEsVUFBaUIsTUFBYyxjQUE4QjtFQUN6RCxPQUFPLEtBQUssU0FBUyxJQUFJLElBQUksSUFBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLEVBQWdCLFNBQVMsSUFBSTtDQUN6RjtDQUVBLFFBQWUsTUFBYyxjQUE4QjtFQUN2RCxPQUFPLEtBQUssU0FBUyxJQUFJLElBQUksSUFBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLEVBQWMsU0FBUyxJQUFJO0NBQ3ZGO0NBRUEsU0FBZ0IsTUFBYyxjQUE4QjtFQUN4RCxPQUFPLEtBQUssU0FBUyxJQUFJLElBQUksSUFBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLEVBQWUsU0FBUyxJQUFJO0NBQ3hGO0NBRUEsVUFBaUIsTUFBYyxjQUE4QjtFQUN6RCxPQUFPLEtBQUssU0FBUyxJQUFJLElBQUksSUFBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLEVBQWdCLFNBQVMsSUFBSTtDQUN6RjtDQUVBLFVBQWlCLE1BQWMsY0FBOEI7RUFDekQsT0FBTyxLQUFLLFNBQVMsSUFBSSxJQUFJLElBQUssS0FBSyxTQUFTLElBQUksSUFBSSxFQUFnQixTQUFTLElBQUk7Q0FDekY7Q0FFQSxPQUFjLEtBQXNCO0VBQ2hDLE9BQU8sS0FBSyxTQUFTLE9BQU8sR0FBRztDQUNuQztDQUVBLFVBQWtEO0VBQzlDLE9BQU8sS0FBSyxTQUFTLFFBQVE7Q0FDakM7Q0FFQSxJQUFXLEtBQXNCO0VBQzdCLE9BQU8sS0FBSyxTQUFTLElBQUksR0FBRztDQUNoQztDQUVBLE9BQXNCO0VBQ2xCLE9BQU8sS0FBSyxTQUFTO0NBQ3pCO0NBR0EsT0FBYyxNQUErQjtFQUN6QyxJQUFJLEtBQUssU0FBUyxTQUFTLEtBQUssU0FBUyxNQUNyQyxPQUFPO0VBR1gsS0FBSyxNQUFNLENBQUMsS0FBSyxRQUFRLEtBQUssVUFBVTtHQUNwQyxNQUFNLFVBQVUsS0FBSyxTQUFTLElBQUksR0FBRztHQUVyQyxJQUFJLFlBQVksS0FBQSxLQUFhLENBQUMsS0FBSyxTQUFTLElBQUksR0FBRyxHQUMvQyxPQUFPO0dBR1gsSUFBSSxlQUFlLGtCQUFrQixtQkFBbUIsa0JBQWtCLENBQUMsSUFBSSxPQUFPLE9BQU8sR0FDekYsT0FBTztHQUdYLElBQUksZUFBZSxzQkFBQSxXQUFXLG1CQUFtQixzQkFBQSxXQUFXLElBQUksU0FBUyxNQUFNLFFBQVEsU0FBUyxHQUM1RixPQUFPO0dBR1gsSUFBSSxlQUFlLHdCQUFBLFdBQWEsbUJBQW1CLHdCQUFBLFdBQWEsSUFBSSxTQUFTLE1BQU0sUUFBUSxTQUFTLEdBQ2hHLE9BQU87R0FHWCxJQUFJLGVBQWUsdUJBQUEsV0FBWSxtQkFBbUIsdUJBQUEsV0FBWSxJQUFJLFNBQVMsTUFBTSxRQUFRLFNBQVMsR0FDOUYsT0FBTztHQUdYLElBQUksZUFBZSxzQkFBQSxXQUFXLG1CQUFtQixzQkFBQSxXQUFXLElBQUksU0FBUyxNQUFNLFFBQVEsU0FBUyxHQUM1RixPQUFPO0dBR1gsSUFBSSxlQUFlLHdCQUFBLFdBQWEsbUJBQW1CLHdCQUFBLFdBQWEsSUFBSSxTQUFTLE1BQU0sUUFBUSxTQUFTLEdBQ2hHLE9BQU87R0FHWCxJQUFJLGVBQWUsdUJBQUEsV0FBWSxtQkFBbUIsdUJBQUEsV0FBWSxJQUFJLFNBQVMsTUFBTSxRQUFRLFNBQVMsR0FDOUYsT0FBTztHQUdYLElBQUksZUFBZSx3QkFBQSxXQUFhLG1CQUFtQix3QkFBQSxXQUFhLElBQUksU0FBUyxNQUFNLFFBQVEsU0FBUyxHQUNoRyxPQUFPO0VBRWY7RUFFQSxPQUFPO0NBQ1g7QUFDSiJ9