@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
146 lines (141 loc) • 22.8 kB
JavaScript
'use strict';
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
const network_NetworkUtil = require('../NetworkUtil.cjs.cjs');
const network_Identifiers = require('../Identifiers.cjs.cjs');
const network_packet_DataPacket = require('./DataPacket.cjs.cjs');
class AvailableCommandsPacket extends network_packet_DataPacket.default {
static NetID = network_Identifiers.default.AvailableCommandsPacket;
ARG_FLAG_VALID = 1048576;
ARG_FLAG_INT = 1;
ARG_FLAG_FLOAT = 3;
ARG_TYPE_WILDCARD_INT = 5;
ARG_TYPE_STRING = 56;
ARG_TYPE_INT_POSITION = 64;
ARG_TYPE_POSITION = 65;
ARG_FLAG_ENUM = 2097152;
ARG_FLAG_POSTFIX = 16777216;
ARG_FLAG_SOFT_ENUM = 67108864;
commandData = [];
hardcodedEnums = [];
softEnums = [];
enumConstraints = [];
encodePayload() {
const enumValueIndexes = /* @__PURE__ */ new Map();
const postfixIndexes = /* @__PURE__ */ new Map();
const enums = [];
const enumIndexes = /* @__PURE__ */ new Map();
const softEnumIndexes = /* @__PURE__ */ new Map();
const appendEnum = (_enum) => {
const { name, soft, values } = _enum;
if (soft) {
if (!softEnumIndexes.has(name)) {
softEnumIndexes.set(name, softEnumIndexes.size).get(name);
}
return;
}
values.forEach((value) => {
if (!enumValueIndexes.has(value)) {
enumValueIndexes.set(value, enumValueIndexes.size);
}
});
if (!enumIndexes.has(name)) {
const index = enumIndexes.set(name, enumIndexes.size).get(name);
enums[index] = _enum;
}
};
this.hardcodedEnums.forEach((e) => appendEnum(e));
this.softEnums.forEach((e) => appendEnum(e));
this.commandData.forEach((commandData) => {
if (commandData.aliases) {
appendEnum(commandData.aliases);
}
commandData.overloads.forEach((overload) => {
overload.forEach((parameter) => {
if (parameter.enum) {
appendEnum(parameter.enum);
}
if (parameter.postfix) {
if (!postfixIndexes.has(parameter.postfix)) {
postfixIndexes.set(parameter.postfix, postfixIndexes.size);
}
}
});
});
});
this.writeUnsignedVarInt(enumValueIndexes.size);
enumValueIndexes.forEach((_index, enumValue) => {
network_NetworkUtil.NetworkUtil.writeString(this, enumValue);
});
this.writeUnsignedVarInt(0);
this.writeUnsignedVarInt(postfixIndexes.size);
postfixIndexes.forEach((_index, postfix) => {
network_NetworkUtil.NetworkUtil.writeString(this, postfix);
});
this.writeUnsignedVarInt(enums.length);
enums.forEach((_enum) => {
this.writeEnum(_enum, enumValueIndexes);
});
this.writeUnsignedVarInt(0);
this.writeUnsignedVarInt(this.commandData.length);
this.commandData.forEach((data) => {
this.writeCommandData(data, enumIndexes, postfixIndexes);
});
this.writeUnsignedVarInt(this.softEnums.length);
this.softEnums.forEach((_enum) => {
this.writeSoftEnum(_enum);
});
this.writeUnsignedVarInt(this.enumConstraints.length);
this.enumConstraints.forEach((constraint) => {
this.writeEnumConstraint(constraint, enumIndexes, enumValueIndexes);
});
}
writeEnum({ name, values }, enumValueMap) {
network_NetworkUtil.NetworkUtil.writeString(this, name);
this.writeUnsignedVarInt(values.length);
const listSize = enumValueMap.size;
values.forEach((value) => {
const index = enumValueMap.get(value) ?? -1;
if (index === -1) return;
this.writeEnumValueIndex(index, listSize);
});
}
writeEnumValueIndex(index, valueCount) {
if (valueCount < 256) {
this.writeByte(index);
} else if (valueCount < 65536) {
this.writeUnsignedShortLE(index);
} else {
this.writeUnsignedIntLE(index);
}
}
writeCommandData(data, enumIndexes, _postfixIndexes) {
network_NetworkUtil.NetworkUtil.writeString(this, data.commandName);
network_NetworkUtil.NetworkUtil.writeString(this, data.commandDescription);
this.writeShortLE(data.flags);
this.writeByte(data.permission);
if (data.aliases !== null) {
this.writeIntLE(enumIndexes.get(data.aliases.name) ?? -1);
} else {
this.writeIntLE(-1);
}
this.writeUnsignedVarInt(0);
this.writeUnsignedVarInt(0);
}
writeSoftEnum(_enum) {
network_NetworkUtil.NetworkUtil.writeString(this, _enum.name);
this.writeUnsignedVarInt(_enum.values.length);
_enum.values.forEach((value) => {
network_NetworkUtil.NetworkUtil.writeString(this, value);
});
}
writeEnumConstraint(constraint, enumIndexes, enumValueIndexes) {
this.writeIntLE(enumValueIndexes.get(constraint.getAffectedValue()) ?? 0);
this.writeIntLE(enumIndexes.get(constraint.getEnum().name) ?? 0);
this.writeUnsignedVarInt(constraint.getConstraints().length);
constraint.getConstraints().forEach((v) => {
this.writeByte(v);
});
}
}
exports.default = AvailableCommandsPacket;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZhaWxhYmxlQ29tbWFuZHNQYWNrZXQuY2pzLmNqcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25ldHdvcmsvcGFja2V0L0F2YWlsYWJsZUNvbW1hbmRzUGFja2V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5ldHdvcmtVdGlsIH0gZnJvbSAnLi4vLi4vbmV0d29yay9OZXR3b3JrVXRpbCc7XG5pbXBvcnQgSWRlbnRpZmllcnMgZnJvbSAnLi4vSWRlbnRpZmllcnMnO1xuaW1wb3J0IHR5cGUgQ29tbWFuZERhdGEgZnJvbSAnLi4vdHlwZS9Db21tYW5kRGF0YSc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRFbnVtIH0gZnJvbSAnLi4vdHlwZS9Db21tYW5kRW51bSc7XG5pbXBvcnQgdHlwZSBDb21tYW5kRW51bUNvbnN0cmFpbnQgZnJvbSAnLi4vdHlwZS9Db21tYW5kRW51bUNvbnN0cmFpbnQnO1xuaW1wb3J0IERhdGFQYWNrZXQgZnJvbSAnLi9EYXRhUGFja2V0JztcblxuLyoqXG4gKiBBdmFpbGFibGVDb21tYW5kc1BhY2tldCBpcyBzZW50IGJ5IHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudCB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IGF2YWlsYWJsZSBjb21tYW5kcy5cbiAqIEBUT0RPOiBBcmd1bWVudCB0eXBlcyBhcmUgbm90IGltcGxlbWVudGVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBdmFpbGFibGVDb21tYW5kc1BhY2tldCBleHRlbmRzIERhdGFQYWNrZXQge1xuICAgIHB1YmxpYyBzdGF0aWMgTmV0SUQgPSBJZGVudGlmaWVycy5BdmFpbGFibGVDb21tYW5kc1BhY2tldDtcblxuICAgIHB1YmxpYyBBUkdfRkxBR19WQUxJRCA9IDB4MTAwMDAwO1xuICAgIHB1YmxpYyBBUkdfRkxBR19JTlQgPSAxO1xuICAgIHB1YmxpYyBBUkdfRkxBR19GTE9BVCA9IDM7XG4gICAgcHVibGljIEFSR19UWVBFX1dJTERDQVJEX0lOVCA9IDU7XG4gICAgcHVibGljIEFSR19UWVBFX1NUUklORyA9IDU2O1xuICAgIHB1YmxpYyBBUkdfVFlQRV9JTlRfUE9TSVRJT04gPSA2NDtcbiAgICBwdWJsaWMgQVJHX1RZUEVfUE9TSVRJT04gPSA2NTtcbiAgICBwdWJsaWMgQVJHX0ZMQUdfRU5VTSA9IDB4MjAwMDAwO1xuICAgIHB1YmxpYyBBUkdfRkxBR19QT1NURklYID0gMHgxMDAwMDAwO1xuICAgIHB1YmxpYyBBUkdfRkxBR19TT0ZUX0VOVU0gPSAweDQwMDAwMDA7XG5cbiAgICBwdWJsaWMgY29tbWFuZERhdGE6IENvbW1hbmREYXRhW10gPSBbXTtcbiAgICBwdWJsaWMgaGFyZGNvZGVkRW51bXM6IENvbW1hbmRFbnVtW10gPSBbXTtcbiAgICBwdWJsaWMgc29mdEVudW1zOiBDb21tYW5kRW51bVtdID0gW107XG4gICAgcHVibGljIGVudW1Db25zdHJhaW50czogQ29tbWFuZEVudW1Db25zdHJhaW50W10gPSBbXTtcblxuICAgIHB1YmxpYyBlbmNvZGVQYXlsb2FkKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbnVtVmFsdWVJbmRleGVzOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgICAgICBjb25zdCBwb3N0Zml4SW5kZXhlczogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcbiAgICAgICAgY29uc3QgZW51bXM6IENvbW1hbmRFbnVtW10gPSBbXTtcbiAgICAgICAgY29uc3QgZW51bUluZGV4ZXM6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG4gICAgICAgIGNvbnN0IHNvZnRFbnVtczogQ29tbWFuZEVudW1bXSA9IFtdO1xuICAgICAgICBjb25zdCBzb2Z0RW51bUluZGV4ZXM6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG5cbiAgICAgICAgY29uc3QgYXBwZW5kRW51bSA9IChfZW51bTogQ29tbWFuZEVudW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZSwgc29mdCwgdmFsdWVzIH0gPSBfZW51bTtcblxuICAgICAgICAgICAgaWYgKHNvZnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNvZnRFbnVtSW5kZXhlcy5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBzb2Z0RW51bUluZGV4ZXMuc2V0KG5hbWUsIHNvZnRFbnVtSW5kZXhlcy5zaXplKS5nZXQobmFtZSkhO1xuICAgICAgICAgICAgICAgICAgICBzb2Z0RW51bXNbaW5kZXhdID0gX2VudW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlbnVtVmFsdWVJbmRleGVzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW51bVZhbHVlSW5kZXhlcy5zZXQodmFsdWUsIGVudW1WYWx1ZUluZGV4ZXMuc2l6ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWVudW1JbmRleGVzLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZW51bUluZGV4ZXMuc2V0KG5hbWUsIGVudW1JbmRleGVzLnNpemUpLmdldChuYW1lKSE7XG4gICAgICAgICAgICAgICAgZW51bXNbaW5kZXhdID0gX2VudW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYXJkY29kZWRFbnVtcy5mb3JFYWNoKChlKSA9PiBhcHBlbmRFbnVtKGUpKTtcbiAgICAgICAgdGhpcy5zb2Z0RW51bXMuZm9yRWFjaCgoZSkgPT4gYXBwZW5kRW51bShlKSk7XG5cbiAgICAgICAgdGhpcy5jb21tYW5kRGF0YS5mb3JFYWNoKChjb21tYW5kRGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmREYXRhLmFsaWFzZXMpIHtcbiAgICAgICAgICAgICAgICBhcHBlbmRFbnVtKGNvbW1hbmREYXRhLmFsaWFzZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb21tYW5kRGF0YS5vdmVybG9hZHMuZm9yRWFjaCgob3ZlcmxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3JFYWNoKChwYXJhbWV0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5lbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRFbnVtKHBhcmFtZXRlci5lbnVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIucG9zdGZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwb3N0Zml4SW5kZXhlcy5oYXMocGFyYW1ldGVyLnBvc3RmaXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGZpeEluZGV4ZXMuc2V0KHBhcmFtZXRlci5wb3N0Zml4LCBwb3N0Zml4SW5kZXhlcy5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFZhckludChlbnVtVmFsdWVJbmRleGVzLnNpemUpO1xuICAgICAgICBlbnVtVmFsdWVJbmRleGVzLmZvckVhY2goKF9pbmRleDogbnVtYmVyLCBlbnVtVmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgTmV0d29ya1V0aWwud3JpdGVTdHJpbmcodGhpcywgZW51bVZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkVmFySW50KDApOyAvLyBjaGFpbmVkU3ViQ29tbWFuZFZhbHVlTmFtZUluZGV4ZXNcblxuICAgICAgICB0aGlzLndyaXRlVW5zaWduZWRWYXJJbnQocG9zdGZpeEluZGV4ZXMuc2l6ZSk7XG4gICAgICAgIHBvc3RmaXhJbmRleGVzLmZvckVhY2goKF9pbmRleDogbnVtYmVyLCBwb3N0Zml4OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIE5ldHdvcmtVdGlsLndyaXRlU3RyaW5nKHRoaXMsIHBvc3RmaXgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLndyaXRlVW5zaWduZWRWYXJJbnQoZW51bXMubGVuZ3RoKTtcbiAgICAgICAgZW51bXMuZm9yRWFjaCgoX2VudW06IENvbW1hbmRFbnVtKSA9PiB7XG4gICAgICAgICAgICB0aGlzLndyaXRlRW51bShfZW51bSwgZW51bVZhbHVlSW5kZXhlcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFZhckludCgwKTsgLy8gYWxsQ2hhaW5lZFN1YkNvbW1hbmREYXRhXG5cbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkVmFySW50KHRoaXMuY29tbWFuZERhdGEubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5jb21tYW5kRGF0YS5mb3JFYWNoKChkYXRhOiBDb21tYW5kRGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy53cml0ZUNvbW1hbmREYXRhKGRhdGEsIGVudW1JbmRleGVzLCBwb3N0Zml4SW5kZXhlcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFZhckludCh0aGlzLnNvZnRFbnVtcy5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNvZnRFbnVtcy5mb3JFYWNoKChfZW51bTogQ29tbWFuZEVudW0pID0+IHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVTb2Z0RW51bShfZW51bSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFZhckludCh0aGlzLmVudW1Db25zdHJhaW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzLmVudW1Db25zdHJhaW50cy5mb3JFYWNoKChjb25zdHJhaW50OiBDb21tYW5kRW51bUNvbnN0cmFpbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVFbnVtQ29uc3RyYWludChjb25zdHJhaW50LCBlbnVtSW5kZXhlcywgZW51bVZhbHVlSW5kZXhlcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgd3JpdGVFbnVtKHsgbmFtZSwgdmFsdWVzIH06IENvbW1hbmRFbnVtLCBlbnVtVmFsdWVNYXA6IE1hcDxzdHJpbmcsIG51bWJlcj4pOiB2b2lkIHtcbiAgICAgICAgTmV0d29ya1V0aWwud3JpdGVTdHJpbmcodGhpcywgbmFtZSk7XG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFZhckludCh2YWx1ZXMubGVuZ3RoKTtcblxuICAgICAgICBjb25zdCBsaXN0U2l6ZSA9IGVudW1WYWx1ZU1hcC5zaXplO1xuICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBlbnVtVmFsdWVNYXAuZ2V0KHZhbHVlKSA/PyAtMTtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMud3JpdGVFbnVtVmFsdWVJbmRleChpbmRleCwgbGlzdFNpemUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHdyaXRlRW51bVZhbHVlSW5kZXgoaW5kZXg6IG51bWJlciwgdmFsdWVDb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZUNvdW50IDwgMjU2KSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlQnl0ZShpbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWVDb3VudCA8IDY1NTM2KSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlVW5zaWduZWRTaG9ydExFKGluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZEludExFKGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgd3JpdGVDb21tYW5kRGF0YShcbiAgICAgICAgZGF0YTogQ29tbWFuZERhdGEsXG4gICAgICAgIGVudW1JbmRleGVzOiBNYXA8c3RyaW5nLCBudW1iZXI+LFxuICAgICAgICBfcG9zdGZpeEluZGV4ZXM6IE1hcDxzdHJpbmcsIG51bWJlcj5cbiAgICApOiB2b2lkIHtcbiAgICAgICAgTmV0d29ya1V0aWwud3JpdGVTdHJpbmcodGhpcywgZGF0YS5jb21tYW5kTmFtZSk7XG4gICAgICAgIE5ldHdvcmtVdGlsLndyaXRlU3RyaW5nKHRoaXMsIGRhdGEuY29tbWFuZERlc2NyaXB0aW9uKTtcbiAgICAgICAgdGhpcy53cml0ZVNob3J0TEUoZGF0YS5mbGFncyk7XG4gICAgICAgIHRoaXMud3JpdGVCeXRlKGRhdGEucGVybWlzc2lvbik7XG5cbiAgICAgICAgaWYgKGRhdGEuYWxpYXNlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy53cml0ZUludExFKGVudW1JbmRleGVzLmdldChkYXRhLmFsaWFzZXMubmFtZSkgPz8gLTEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53cml0ZUludExFKC0xKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFZhckludCgwKTsgLy8gY2hhaW5lZFN1YkNvbW1hbmREYXRhXG5cbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkVmFySW50KDApO1xuICAgICAgICAvKnRoaXMud3JpdGVVbnNpZ25lZFZhckludChkYXRhLm92ZXJsb2Fkcy5sZW5ndGgpO1xuICAgICAgICBkYXRhLm92ZXJsb2Fkcy5mb3JFYWNoKChvdmVybG9hZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkVmFySW50KG92ZXJsb2FkLmxlbmd0aCk7XG4gICAgICAgICAgICBvdmVybG9hZC5mb3JFYWNoKChwYXJhbWV0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBOZXR3b3JrVXRpbC53cml0ZVN0cmluZyh0aGlzLCBwYXJhbWV0ZXIucGFyYW1OYW1lKTtcblxuICAgICAgICAgICAgICAgIGxldCB0eXBlID0gcGFyYW1ldGVyLnBhcmFtVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyLmVudW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5lbnVtLnNvZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuQVJHX0ZMQUdfU09GVF9FTlVNIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkFSR19GTEFHX1ZBTElEIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW51bUluZGV4ZXMuZ2V0KHBhcmFtZXRlci5lbnVtLm5hbWUpID8/IC0xKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0aGlzLkFSR19GTEFHX0VOVU0gfCB0aGlzLkFSR19GTEFHX1ZBTElEIHwgKGVudW1JbmRleGVzLmdldChwYXJhbWV0ZXIuZW51bS5uYW1lKSA/PyAtMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtZXRlci5wb3N0Zml4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHBvc3RmaXhJbmRleGVzLmdldChwYXJhbWV0ZXIucG9zdGZpeCkgPz8gLTE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IC0xKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0aGlzLkFSR19GTEFHX1BPU1RGSVggfCBrZXk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy53cml0ZUludExFKHR5cGUpO1xuICAgICAgICAgICAgICAgIHRoaXMud3JpdGVCb29sZWFuKHBhcmFtZXRlci5pc09wdGlvbmFsKTtcbiAgICAgICAgICAgICAgICB0aGlzLndyaXRlQnl0ZShwYXJhbWV0ZXIuZmxhZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pOyovXG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3cml0ZVNvZnRFbnVtKF9lbnVtOiBDb21tYW5kRW51bSk6IHZvaWQge1xuICAgICAgICBOZXR3b3JrVXRpbC53cml0ZVN0cmluZyh0aGlzLCBfZW51bS5uYW1lKTtcbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkVmFySW50KF9lbnVtLnZhbHVlcy5sZW5ndGgpO1xuICAgICAgICBfZW51bS52YWx1ZXMuZm9yRWFjaCgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgTmV0d29ya1V0aWwud3JpdGVTdHJpbmcodGhpcywgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHdyaXRlRW51bUNvbnN0cmFpbnQoXG4gICAgICAgIGNvbnN0cmFpbnQ6IENvbW1hbmRFbnVtQ29uc3RyYWludCxcbiAgICAgICAgZW51bUluZGV4ZXM6IE1hcDxzdHJpbmcsIG51bWJlcj4sXG4gICAgICAgIGVudW1WYWx1ZUluZGV4ZXM6IE1hcDxzdHJpbmcsIG51bWJlcj5cbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhpcy53cml0ZUludExFKGVudW1WYWx1ZUluZGV4ZXMuZ2V0KGNvbnN0cmFpbnQuZ2V0QWZmZWN0ZWRWYWx1ZSgpKSA/PyAwKTtcbiAgICAgICAgdGhpcy53cml0ZUludExFKGVudW1JbmRleGVzLmdldChjb25zdHJhaW50LmdldEVudW0oKS5uYW1lKSA/PyAwKTtcbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkVmFySW50KGNvbnN0cmFpbnQuZ2V0Q29uc3RyYWludHMoKS5sZW5ndGgpO1xuICAgICAgICBjb25zdHJhaW50LmdldENvbnN0cmFpbnRzKCkuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgdGhpcy53cml0ZUJ5dGUodik7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJEYXRhUGFja2V0IiwiSWRlbnRpZmllcnMiLCJOZXR3b3JrVXRpbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFXQSxNQUFxQixnQ0FBZ0NBLGlDQUFXLENBQUE7QUFBQSxFQUM1RCxPQUFjLFFBQVFDLDJCQUFZLENBQUEsdUJBQUE7QUFBQSxFQUUzQixjQUFpQixHQUFBLE9BQUE7QUFBQSxFQUNqQixZQUFlLEdBQUEsQ0FBQTtBQUFBLEVBQ2YsY0FBaUIsR0FBQSxDQUFBO0FBQUEsRUFDakIscUJBQXdCLEdBQUEsQ0FBQTtBQUFBLEVBQ3hCLGVBQWtCLEdBQUEsRUFBQTtBQUFBLEVBQ2xCLHFCQUF3QixHQUFBLEVBQUE7QUFBQSxFQUN4QixpQkFBb0IsR0FBQSxFQUFBO0FBQUEsRUFDcEIsYUFBZ0IsR0FBQSxPQUFBO0FBQUEsRUFDaEIsZ0JBQW1CLEdBQUEsUUFBQTtBQUFBLEVBQ25CLGtCQUFxQixHQUFBLFFBQUE7QUFBQSxFQUVyQixjQUE2QixFQUFDO0FBQUEsRUFDOUIsaUJBQWdDLEVBQUM7QUFBQSxFQUNqQyxZQUEyQixFQUFDO0FBQUEsRUFDNUIsa0JBQTJDLEVBQUM7QUFBQSxFQUU1QyxhQUFzQixHQUFBO0FBQ3pCLElBQU0sTUFBQSxnQkFBQSx1QkFBNEMsR0FBSSxFQUFBO0FBQ3RELElBQU0sTUFBQSxjQUFBLHVCQUEwQyxHQUFJLEVBQUE7QUFDcEQsSUFBQSxNQUFNLFFBQXVCLEVBQUM7QUFDOUIsSUFBTSxNQUFBLFdBQUEsdUJBQXVDLEdBQUksRUFBQTtBQUVqRCxJQUFNLE1BQUEsZUFBQSx1QkFBMkMsR0FBSSxFQUFBO0FBRXJELElBQU0sTUFBQSxVQUFBLEdBQWEsQ0FBQyxLQUF1QixLQUFBO0FBQ3ZDLE1BQUEsTUFBTSxFQUFFLElBQUEsRUFBTSxJQUFNLEVBQUEsTUFBQSxFQUFXLEdBQUEsS0FBQTtBQUUvQixNQUFBLElBQUksSUFBTSxFQUFBO0FBQ04sUUFB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