@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
137 lines (134 loc) • 21.6 kB
JavaScript
import { Vector3 } from '@jsprismarine/math';
import { Item } from '../../item/Item.es.js';
import Identifiers from '../Identifiers.es.js';
import { NetworkUtil } from '../NetworkUtil.es.js';
import DataPacket from './DataPacket.es.js';
var UseItemAction = /* @__PURE__ */ ((UseItemAction2) => {
UseItemAction2[UseItemAction2["CLICK_BLOCK"] = 0] = "CLICK_BLOCK";
UseItemAction2[UseItemAction2["CLICK_AIR"] = 1] = "CLICK_AIR";
UseItemAction2[UseItemAction2["BREAK_BLOCK"] = 2] = "BREAK_BLOCK";
return UseItemAction2;
})(UseItemAction || {});
var TransactionType = /* @__PURE__ */ ((TransactionType2) => {
TransactionType2[TransactionType2["NORMAL"] = 0] = "NORMAL";
TransactionType2[TransactionType2["MISMATCH"] = 1] = "MISMATCH";
TransactionType2[TransactionType2["USE_ITEM"] = 2] = "USE_ITEM";
TransactionType2[TransactionType2["USE_ITEM_ON_ENTITY"] = 3] = "USE_ITEM_ON_ENTITY";
TransactionType2[TransactionType2["RELASE_ITEM"] = 4] = "RELASE_ITEM";
return TransactionType2;
})(TransactionType || {});
class LegacySlotChange {
constructor(containerId, slots) {
this.containerId = containerId;
this.slots = slots;
}
static fromNetwork(stream) {
const containerId = stream.readByte();
const slotCount = stream.readUnsignedVarInt();
const slots = Array.from(stream.read(slotCount));
return new LegacySlotChange(containerId, slots);
}
toNetwork(stream) {
stream.writeByte(this.containerId);
stream.writeUnsignedVarInt(this.slots.length);
stream.write(Buffer.from(this.slots));
}
}
var ActionSource = /* @__PURE__ */ ((ActionSource2) => {
ActionSource2[ActionSource2["INVALID"] = -1] = "INVALID";
ActionSource2[ActionSource2["CONTAINER"] = 0] = "CONTAINER";
ActionSource2[ActionSource2["GLOBAL"] = 1] = "GLOBAL";
ActionSource2[ActionSource2["WORLD"] = 2] = "WORLD";
ActionSource2[ActionSource2["CREATIVE"] = 3] = "CREATIVE";
ActionSource2[ActionSource2["UNTRACKED_INTERACTION_UI"] = 100] = "UNTRACKED_INTERACTION_UI";
ActionSource2[ActionSource2["NON_IMPLEMENTED_TODO"] = 99999] = "NON_IMPLEMENTED_TODO";
return ActionSource2;
})(ActionSource || {});
class InventoryAction {
constructor(sourceType, windowId, sourceFlags, targetSlot, oldItem, newItem) {
this.sourceType = sourceType;
this.windowId = windowId;
this.sourceFlags = sourceFlags;
this.targetSlot = targetSlot;
this.oldItem = oldItem;
this.newItem = newItem;
}
static fromNetwork(stream) {
const sourceType = stream.readUnsignedVarInt();
const windowId = sourceType === 0 /* CONTAINER */ || sourceType === 99999 /* NON_IMPLEMENTED_TODO */ ? stream.readVarInt() : null;
const sourceFlags = sourceType === 2 /* WORLD */ ? stream.readUnsignedVarInt() : null;
return new InventoryAction(
sourceType,
windowId,
sourceFlags,
stream.readUnsignedVarInt(),
Item.networkDeserialize(stream),
Item.networkDeserialize(stream)
);
}
toNetwork(stream) {
stream.writeUnsignedVarInt(this.sourceType);
[0 /* CONTAINER */, 99999 /* NON_IMPLEMENTED_TODO */].includes(this.sourceType) && stream.writeVarInt(this.windowId);
this.sourceType === 2 /* WORLD */ && stream.writeUnsignedVarInt(this.sourceFlags);
stream.writeUnsignedVarInt(this.targetSlot);
this.oldItem.networkSerialize(stream);
this.newItem.networkSerialize(stream);
}
}
class InventoryTransactionPacket extends DataPacket {
static NetID = Identifiers.InventoryTransactionPacket;
legacyRequestId;
legacySlotChanges;
transactionType;
inventoryActions;
transactionData;
decodePayload() {
this.legacyRequestId = this.readVarInt();
if (this.legacyRequestId !== 0) {
const slotChanges = this.readUnsignedVarInt();
this.legacySlotChanges = Array.from({ length: slotChanges }, () => LegacySlotChange.fromNetwork(this));
}
this.transactionType = this.readUnsignedVarInt();
const actionsCount = this.readUnsignedVarInt();
this.inventoryActions = Array.from({ length: actionsCount }, () => InventoryAction.fromNetwork(this));
switch (this.transactionType) {
case 0 /* NORMAL */:
case 1 /* MISMATCH */:
break;
case 2 /* USE_ITEM */:
this.transactionData = {
actionType: this.readUnsignedVarInt(),
blockPosition: NetworkUtil.readBlockPosition(this),
blockFace: this.readVarInt(),
hotbarSlot: this.readVarInt(),
itemInHand: Item.networkDeserialize(this),
playerPosition: new Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()),
clickPosition: new Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()),
blockRuntimeId: this.readUnsignedVarInt()
};
break;
case 3 /* USE_ITEM_ON_ENTITY */:
this.transactionData = {
entityRuntimeId: this.readUnsignedVarLong(),
actionType: this.readUnsignedVarInt(),
hotbarSlot: this.readVarInt(),
itemInHand: Item.networkDeserialize(this),
playerPosition: new Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()),
clickPosition: new Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE())
};
break;
case 4 /* RELASE_ITEM */:
this.transactionData = {
actionType: this.readUnsignedVarInt(),
hotbarSlot: this.readVarInt(),
itemInHand: Item.networkDeserialize(this),
headRotation: new Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE())
};
break;
default:
throw new TypeError(`Unknown transaction type ${this.transactionType}`);
}
}
}
export { ActionSource, InventoryAction, LegacySlotChange, TransactionType, UseItemAction, InventoryTransactionPacket as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52ZW50b3J5VHJhbnNhY3Rpb25QYWNrZXQuZXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9uZXR3b3JrL3BhY2tldC9JbnZlbnRvcnlUcmFuc2FjdGlvblBhY2tldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBCaW5hcnlTdHJlYW0gZnJvbSAnQGpzcHJpc21hcmluZS9qc2JpbmFyeXV0aWxzJztcbmltcG9ydCB7IFZlY3RvcjMgfSBmcm9tICdAanNwcmlzbWFyaW5lL21hdGgnO1xuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uLy4uL2l0ZW0vSXRlbSc7XG5pbXBvcnQgdHlwZSBCbG9ja1Bvc2l0aW9uIGZyb20gJy4uLy4uL3dvcmxkL0Jsb2NrUG9zaXRpb24nO1xuaW1wb3J0IElkZW50aWZpZXJzIGZyb20gJy4uL0lkZW50aWZpZXJzJztcbmltcG9ydCB7IE5ldHdvcmtVdGlsIH0gZnJvbSAnLi4vTmV0d29ya1V0aWwnO1xuaW1wb3J0IERhdGFQYWNrZXQgZnJvbSAnLi9EYXRhUGFja2V0JztcblxuZXhwb3J0IGVudW0gVXNlSXRlbUFjdGlvbiB7XG4gICAgQ0xJQ0tfQkxPQ0ssXG4gICAgQ0xJQ0tfQUlSLFxuICAgIEJSRUFLX0JMT0NLXG59XG5cbmV4cG9ydCBlbnVtIFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgTk9STUFMLFxuICAgIE1JU01BVENILFxuICAgIFVTRV9JVEVNLFxuICAgIFVTRV9JVEVNX09OX0VOVElUWSxcbiAgICBSRUxBU0VfSVRFTVxufVxuXG5leHBvcnQgY2xhc3MgTGVnYWN5U2xvdENoYW5nZSB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY29udGFpbmVySWQ6IG51bWJlcixcbiAgICAgICAgcHVibGljIHNsb3RzOiBudW1iZXJbXVxuICAgICkge31cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU5ldHdvcmsoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiBMZWdhY3lTbG90Q2hhbmdlIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVySWQgPSBzdHJlYW0ucmVhZEJ5dGUoKTtcbiAgICAgICAgY29uc3Qgc2xvdENvdW50ID0gc3RyZWFtLnJlYWRVbnNpZ25lZFZhckludCgpO1xuICAgICAgICBjb25zdCBzbG90cyA9IEFycmF5LmZyb20oc3RyZWFtLnJlYWQoc2xvdENvdW50KSk7XG4gICAgICAgIHJldHVybiBuZXcgTGVnYWN5U2xvdENoYW5nZShjb250YWluZXJJZCwgc2xvdHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b05ldHdvcmsoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiB2b2lkIHtcbiAgICAgICAgc3RyZWFtLndyaXRlQnl0ZSh0aGlzLmNvbnRhaW5lcklkKTtcbiAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRWYXJJbnQodGhpcy5zbG90cy5sZW5ndGgpO1xuICAgICAgICBzdHJlYW0ud3JpdGUoQnVmZmVyLmZyb20odGhpcy5zbG90cykpO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gQWN0aW9uU291cmNlIHtcbiAgICBJTlZBTElEID0gLTEsXG4gICAgQ09OVEFJTkVSLFxuICAgIEdMT0JBTCxcbiAgICBXT1JMRCxcbiAgICBDUkVBVElWRSxcbiAgICBVTlRSQUNLRURfSU5URVJBQ1RJT05fVUkgPSAxMDAsXG4gICAgTk9OX0lNUExFTUVOVEVEX1RPRE8gPSA5OTk5OVxufVxuXG5leHBvcnQgY2xhc3MgSW52ZW50b3J5QWN0aW9uIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBzb3VyY2VUeXBlOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyB3aW5kb3dJZDogbnVtYmVyIHwgbnVsbCxcbiAgICAgICAgcHVibGljIHNvdXJjZUZsYWdzOiBudW1iZXIgfCBudWxsLFxuICAgICAgICBwdWJsaWMgdGFyZ2V0U2xvdDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgb2xkSXRlbTogSXRlbSxcbiAgICAgICAgcHVibGljIG5ld0l0ZW06IEl0ZW1cbiAgICApIHt9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21OZXR3b3JrKHN0cmVhbTogQmluYXJ5U3RyZWFtKTogSW52ZW50b3J5QWN0aW9uIHtcbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHN0cmVhbS5yZWFkVW5zaWduZWRWYXJJbnQoKTtcbiAgICAgICAgY29uc3Qgd2luZG93SWQgPVxuICAgICAgICAgICAgc291cmNlVHlwZSA9PT0gQWN0aW9uU291cmNlLkNPTlRBSU5FUiB8fCBzb3VyY2VUeXBlID09PSBBY3Rpb25Tb3VyY2UuTk9OX0lNUExFTUVOVEVEX1RPRE9cbiAgICAgICAgICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNvbnN0IHNvdXJjZUZsYWdzID0gc291cmNlVHlwZSA9PT0gQWN0aW9uU291cmNlLldPUkxEID8gc3RyZWFtLnJlYWRVbnNpZ25lZFZhckludCgpIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnZlbnRvcnlBY3Rpb24oXG4gICAgICAgICAgICBzb3VyY2VUeXBlLFxuICAgICAgICAgICAgd2luZG93SWQsXG4gICAgICAgICAgICBzb3VyY2VGbGFncyxcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkVW5zaWduZWRWYXJJbnQoKSxcbiAgICAgICAgICAgIEl0ZW0ubmV0d29ya0Rlc2VyaWFsaXplKHN0cmVhbSksXG4gICAgICAgICAgICBJdGVtLm5ldHdvcmtEZXNlcmlhbGl6ZShzdHJlYW0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvTmV0d29yayhzdHJlYW06IEJpbmFyeVN0cmVhbSk6IHZvaWQge1xuICAgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZFZhckludCh0aGlzLnNvdXJjZVR5cGUpO1xuICAgICAgICBbQWN0aW9uU291cmNlLkNPTlRBSU5FUiwgQWN0aW9uU291cmNlLk5PTl9JTVBMRU1FTlRFRF9UT0RPXS5pbmNsdWRlcyh0aGlzLnNvdXJjZVR5cGUpICYmXG4gICAgICAgICAgICBzdHJlYW0ud3JpdGVWYXJJbnQodGhpcy53aW5kb3dJZCEpO1xuICAgICAgICB0aGlzLnNvdXJjZVR5cGUgPT09IEFjdGlvblNvdXJjZS5XT1JMRCAmJiBzdHJlYW0ud3JpdGVVbnNpZ25lZFZhckludCh0aGlzLnNvdXJjZUZsYWdzISk7XG4gICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVmFySW50KHRoaXMudGFyZ2V0U2xvdCk7XG4gICAgICAgIHRoaXMub2xkSXRlbS5uZXR3b3JrU2VyaWFsaXplKHN0cmVhbSk7XG4gICAgICAgIHRoaXMubmV3SXRlbS5uZXR3b3JrU2VyaWFsaXplKHN0cmVhbSk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uRGF0YSB7XG4gICAgYWN0aW9uVHlwZTogbnVtYmVyO1xuICAgIGhvdGJhclNsb3Q6IG51bWJlcjtcbiAgICBpdGVtSW5IYW5kOiBJdGVtO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUl0ZW1EYXRhIGV4dGVuZHMgVHJhbnNhY3Rpb25EYXRhIHtcbiAgICBibG9ja1Bvc2l0aW9uOiBCbG9ja1Bvc2l0aW9uO1xuICAgIGJsb2NrRmFjZTogbnVtYmVyO1xuICAgIHBsYXllclBvc2l0aW9uOiBWZWN0b3IzO1xuICAgIGNsaWNrUG9zaXRpb246IFZlY3RvcjM7XG4gICAgYmxvY2tSdW50aW1lSWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VJdGVtT25FbnRpdHlEYXRhIGV4dGVuZHMgVHJhbnNhY3Rpb25EYXRhIHtcbiAgICBlbnRpdHlSdW50aW1lSWQ6IGJpZ2ludDtcbiAgICBwbGF5ZXJQb3NpdGlvbjogVmVjdG9yMztcbiAgICBjbGlja1Bvc2l0aW9uOiBWZWN0b3IzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbGFzZUl0ZW1EYXRhIGV4dGVuZHMgVHJhbnNhY3Rpb25EYXRhIHtcbiAgICBoZWFkUm90YXRpb246IFZlY3RvcjM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEludmVudG9yeVRyYW5zYWN0aW9uUGFja2V0IGV4dGVuZHMgRGF0YVBhY2tldCB7XG4gICAgcHVibGljIHN0YXRpYyBOZXRJRCA9IElkZW50aWZpZXJzLkludmVudG9yeVRyYW5zYWN0aW9uUGFja2V0O1xuXG4gICAgcHVibGljIGxlZ2FjeVJlcXVlc3RJZCE6IG51bWJlcjtcbiAgICBwdWJsaWMgbGVnYWN5U2xvdENoYW5nZXMhOiBMZWdhY3lTbG90Q2hhbmdlW107XG5cbiAgICBwdWJsaWMgdHJhbnNhY3Rpb25UeXBlITogVHJhbnNhY3Rpb25UeXBlO1xuICAgIHB1YmxpYyBpbnZlbnRvcnlBY3Rpb25zITogSW52ZW50b3J5QWN0aW9uW107XG5cbiAgICBwdWJsaWMgdHJhbnNhY3Rpb25EYXRhITogVHJhbnNhY3Rpb25EYXRhO1xuXG4gICAgcHVibGljIGRlY29kZVBheWxvYWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGVnYWN5UmVxdWVzdElkID0gdGhpcy5yZWFkVmFySW50KCk7XG4gICAgICAgIGlmICh0aGlzLmxlZ2FjeVJlcXVlc3RJZCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3Qgc2xvdENoYW5nZXMgPSB0aGlzLnJlYWRVbnNpZ25lZFZhckludCgpO1xuICAgICAgICAgICAgdGhpcy5sZWdhY3lTbG90Q2hhbmdlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHNsb3RDaGFuZ2VzIH0sICgpID0+IExlZ2FjeVNsb3RDaGFuZ2UuZnJvbU5ldHdvcmsodGhpcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmFuc2FjdGlvblR5cGUgPSB0aGlzLnJlYWRVbnNpZ25lZFZhckludCgpO1xuXG4gICAgICAgIGNvbnN0IGFjdGlvbnNDb3VudCA9IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KCk7XG4gICAgICAgIHRoaXMuaW52ZW50b3J5QWN0aW9ucyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGFjdGlvbnNDb3VudCB9LCAoKSA9PiBJbnZlbnRvcnlBY3Rpb24uZnJvbU5ldHdvcmsodGhpcykpO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy50cmFuc2FjdGlvblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLk5PUk1BTDpcbiAgICAgICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLk1JU01BVENIOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuVVNFX0lURU06XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRhdGEgPSA8VXNlSXRlbURhdGE+e1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlOiB0aGlzLnJlYWRVbnNpZ25lZFZhckludCgpLFxuICAgICAgICAgICAgICAgICAgICBibG9ja1Bvc2l0aW9uOiBOZXR3b3JrVXRpbC5yZWFkQmxvY2tQb3NpdGlvbih0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tGYWNlOiB0aGlzLnJlYWRWYXJJbnQoKSxcbiAgICAgICAgICAgICAgICAgICAgaG90YmFyU2xvdDogdGhpcy5yZWFkVmFySW50KCksXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1JbkhhbmQ6IEl0ZW0ubmV0d29ya0Rlc2VyaWFsaXplKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICBwbGF5ZXJQb3NpdGlvbjogbmV3IFZlY3RvcjModGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSksXG4gICAgICAgICAgICAgICAgICAgIGNsaWNrUG9zaXRpb246IG5ldyBWZWN0b3IzKHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCkpLFxuICAgICAgICAgICAgICAgICAgICBibG9ja1J1bnRpbWVJZDogdGhpcy5yZWFkVW5zaWduZWRWYXJJbnQoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5VU0VfSVRFTV9PTl9FTlRJVFk6XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRhdGEgPSA8VXNlSXRlbU9uRW50aXR5RGF0YT57XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVJ1bnRpbWVJZDogdGhpcy5yZWFkVW5zaWduZWRWYXJMb25nKCksXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGU6IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KCksXG4gICAgICAgICAgICAgICAgICAgIGhvdGJhclNsb3Q6IHRoaXMucmVhZFZhckludCgpLFxuICAgICAgICAgICAgICAgICAgICBpdGVtSW5IYW5kOiBJdGVtLm5ldHdvcmtEZXNlcmlhbGl6ZSh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyUG9zaXRpb246IG5ldyBWZWN0b3IzKHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCkpLFxuICAgICAgICAgICAgICAgICAgICBjbGlja1Bvc2l0aW9uOiBuZXcgVmVjdG9yMyh0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5SRUxBU0VfSVRFTTpcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGF0YSA9IDxSZWxhc2VJdGVtRGF0YT57XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGU6IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KCksXG4gICAgICAgICAgICAgICAgICAgIGhvdGJhclNsb3Q6IHRoaXMucmVhZFZhckludCgpLFxuICAgICAgICAgICAgICAgICAgICBpdGVtSW5IYW5kOiBJdGVtLm5ldHdvcmtEZXNlcmlhbGl6ZSh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgaGVhZFJvdGF0aW9uOiBuZXcgVmVjdG9yMyh0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVua25vd24gdHJhbnNhY3Rpb24gdHlwZSAke3RoaXMudHJhbnNhY3Rpb25UeXBlfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbIlVzZUl0ZW1BY3Rpb24iLCJUcmFuc2FjdGlvblR5cGUiLCJBY3Rpb25Tb3VyY2UiXSwibWFwcGluZ3MiOiI7Ozs7OztBQVFZLElBQUEsYUFBQSxxQkFBQUEsY0FBTCxLQUFBO0FBQ0gsRUFBQUEsY0FBQSxDQUFBLGNBQUEsQ0FBQSxhQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxhQUFBO0FBQ0EsRUFBQUEsY0FBQSxDQUFBLGNBQUEsQ0FBQSxXQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxXQUFBO0FBQ0EsRUFBQUEsY0FBQSxDQUFBLGNBQUEsQ0FBQSxhQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxhQUFBO0FBSFEsRUFBQUEsT0FBQUEsY0FBQUE7QUFBQSxDQUFBLEVBQUEsYUFBQSxJQUFBLEVBQUE7QUFNQSxJQUFBLGVBQUEscUJBQUFDLGdCQUFMLEtBQUE7QUFDSCxFQUFBQSxnQkFBQSxDQUFBLGdCQUFBLENBQUEsUUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsUUFBQTtBQUNBLEVBQUFBLGdCQUFBLENBQUEsZ0JBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxVQUFBO0FBQ0EsRUFBQUEsZ0JBQUEsQ0FBQSxnQkFBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLFVBQUE7QUFDQSxFQUFBQSxnQkFBQSxD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